-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
executable file
·225 lines (179 loc) · 6.16 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
//var app = require('express')();
var bodyParser = require('body-parser');
var express = require('express');
var multipart = require('connect-multiparty');
const Twitter = require('twitter');
const redis = require('redis');
const helmet = require('helmet');
const xssFilter = require('x-xss-protection')
const csrf = require('csurf');
//variables de entorno
require('dotenv').config();
//emails
const nodemailer = require('nodemailer');
//Importamos nuestros controllers
var index = require('./controllers/index');
var baseDatos = require('./controllers/baseDatos');
var mascotForm = require('./controllers/addMascot');
var mascotasForm = require('./controllers/MascotasController');
var userForm = require('./controllers/UserController');
var loginForm = require('./controllers/LoginController');
var registerForm = require('./controllers/RegisterController');
var session = require('client-sessions');
var realtime = require('./config/realtime/realTime');
var streaming = require('./controllers/streaming');
var confirmarForm = require('./controllers/confirmEmail');
const bootFacebook = require('./controllers/bootFacebook');
var view = '/views';
const app = new express();
const http = require('http').Server(app),
sessionIo = require("express-session")({
secret: "addoptap",
resave: true,
saveUninitialized: true
}),
sharedsession = require("express-socket.io-session");
var router = express.Router();
realtime(http,sessionIo,sharedsession);
//var io = require("socket.io")(http);
app.enable('trust proxy');
app.use(function(req, res, next) {
if (req.session && req.session.user) {
User.findOne({ email: req.session.user.email }, function(err, user) {
if (user) {
req.user = user;
delete req.user.password; // delete the password from the session
req.session.user = user; //refresh the session value
res.locals.user = user;
}
// finishing processing the middleware and run the route
next();
});
} else {
next();
}
});
// Login MiddleWare
function requireLogin (req, res, next) {
if (!req.session.user) {
res.redirect('/login');
} else {
next();
}
};
//Seguridad
app.use(helmet());
app.disable('x-powered-by');
app.use(helmet.xssFilter())
//https
const fs = require('fs');
const httpR = require('http');
const https = require('https');
const privateKey = fs.readFileSync('privateKey.key', 'utf8');
const certificate = fs.readFileSync('certificate.crt', 'utf8');
const credentials = {key: privateKey, cert: certificate};
const httpServer = httpR.createServer(app);
const httpsServer = https.createServer(credentials, app);
// Convierte una petición recibida (POST-GET...) a objeto JSON
app.use(bodyParser.json()); // to support JSON bodies
app.use(bodyParser.urlencoded({ extended: true })); // to support URL-encoded bodies
app.use(multipart()); //Express 4
app.use(express.static('public'));
//Nuestro sistema de templates - EJS
app.set('view engine', 'ejs')
app.set('views', 'views');
//Rutas
app.use(session({
cookieName: 'session',
secret: 'eg[isfd-8yF9-7w2315df{}+Ijsli;;to8',
duration: 30 * 60 * 10000000,
activeDuration: 5 * 60 * 10000000,
httpOnly: true,
secure: true,
ephemeral: true
}));
app.use('/', index);
app.use('/mascotas', mascotasForm);
app.use('/perfil', userForm);
app.use('/baseDatos',baseDatos);
app.use('/streaming', streaming);
app.use('webhook', bootFacebook)
app.use('/registrate', registerForm);
app.use('/confirmar', confirmarForm);
app.use('/nuevamascota', requireLogin, mascotForm);
app.use('/login', loginForm);
app.get('/logout', function(req, res) {
req.session.reset();
res.redirect('/');
});
const rClient = redis.createClient();
//Twitter client - [email protected]
const client = new Twitter({
consumer_key: 'QPVhuH5TqE7s5QJ3DdVqEKCAy',
consumer_secret: 'mJc2EBaPR2U8mRWJOpNUUQ6BBd4xEp9clTHd0lDjiqQ49xPfx1',
access_token_key: '548766227-3XkCg04G6F3Zqy1HnlmD0wRUFqtBbT5hdvTShhNH',
access_token_secret: 'NiSYFiW5NHKhbAMphtKEZY1ZnowKvCLYksxpulwE2pogP'
});
//Escucha del stream - track:palabras claves
const stream = client.stream('statuses/filter', {track:'#plaiaundiApp'});
stream.on('data', (tweet) => {
/* Hacamos retwitt */
client.post('statuses/retweet', {id:tweet.id_str}, (err, response) => {
if (response) {
console.log('Retweeteado');
}
// if there was an error while tweeting
if (err) {
console.log('Error al retwittear');
}
});
/* Damos una respuesta al twitt */
//Contruimos nuestro objeto de respuesta
let statusObj = {status: `Hola @${tweet.user.screen_name}, puedes buscar un dueño para la mascota en nuestra web :)`};
//llamamos a la funcion post para crear una respuesta
client.post('statuses/update', statusObj, (error, tweetReply, response) => {
//Si llega algun error los printeamos
if(error){
console.log(error);
}else{
//Motsramos en consola nuestra respuesta
console.log(tweetReply.text);
}
});
/* Marcamos como favorito el twitt */
client.post('favorites/create', {id:tweet.id_str}, (error, response) => {
if(error){
console.log(error)
}else{
nuevoTwitt = {
id: response.id_str,
text: response.text,
user: response.user.screen_name
}
// console.log(`Twit ID ${response.id_str} Liked! - ${response.text}`);
let url = `https://twitter.com/${response.user.screen_name}/status/${response.id_str}`;
rClient.publish('nuevoTwitt',JSON.stringify(nuevoTwitt));
}
});
});
stream.on('error', (error) => {
console.log(`Ha ocurrido un error ${error}`)
});
app.use(function(req, res, next){
res.status(404);
// respond with html page
if (req.accepts('html')) {
res.render('404', { url: req.url, usuario : req.session.user });
return;
}
});
var port = process.env.PORT || 88;
http.listen(port, function(){
console.log('listening on *:' + port);
});
const httpsPort = process.env.PORTHTTPS || 3010;
httpsServer.listen(httpsPort, () => {
console.log(httpsPort+' -> https:');
});
// Exportar la variable 'app' que contiene express para poder usarla-requerirla en otros ficheros
module.exports = app;