-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
192 lines (158 loc) · 6.31 KB
/
index.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
var fs = require("fs"); //librería para manejar el sistema de archivos
var express = require("express"); //middleware para implementar aplicaciones web
var app = express(); //creamos la instancia de express
var http = require("http").Server(app); //creamos el servidor http
var { Server } = require("socket.io"); //importamos el objeto server para ServidorWS (punto de entrada para socket.io)
var io = new Server(http); // entrada del objeto server
var bodyParser = require("body-parser"); //parsear las peticiones de tipo POST
var passport = require("passport");
var LocalStrategy = require("passport-local").Strategy;
var cookieSession = require("cookie-session");
require("./servidor/passport-setup.js");
var modelo = require("./servidor/modelo.js");
var ssrv = require("./servidor/servidorWS.js"); //importamos el objeto de webSocket
const { response } = require("express");
var juego = new modelo.Juego(false);
var servidorWS = new ssrv.ServidorWS();
app.set('port', process.env.PORT || 5000); //directiva de express que define una variable interna (port) donde va a escuchar nuestra aplicación
//el segundo parámetro es el valor: o bien coge la variable de entorno o bien coge 5000
//necesario para el despliegue en heroku
app.use(express.static(__dirname + "/")); //variable de entorno __dirname: nombre de toda la solución. en esta máquina: C:\lucia\proyectos\git\uno
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());
app.use(cookieSession({
name : 'juegodeluno',
keys: ['key1', 'key2']
}));
passport.use(new LocalStrategy({usernameField:"email", passwordField:"clave"},
function(email, clave, done){
juego.loginUsuario(email, clave, function(err, user){
if(err){
return done(err)
}
else{
return done(null, user);
}
})
}
));
app.use(passport.initialize());
app.use(passport.session());
const haIniciado = function(request, response, next){
if(request.user){
next();
}
else{
response.redirect('/');
}
}
app.get("/", function(request, response){ //cuando haya peticiones de tipo GET
var contenido = fs.readFileSync(__dirname + "/cliente/index.html"); //lee el fichero index.html de cliente
response.setHeader("Content-type", "text/html");
response.send(contenido); //envía el contenido leído del fichero index.html
});
//Rutas a definir para validar a usuarios con OAuth20
// /auth/google -> redireccionamos al usuario a Google para que se valide
// /auth/instagram -> redireccionamos al usuario a Instagram ...
// .......
app.get("/auth/google", passport.authenticate('google', {scope:['profile', 'email']}));
// /google/callback -> aquí llega la respuesta de Google
// /good -> en caso de usuario de Google válido
// /fail -> en caso de usuario no válido
app.get("/good", function(request, response){
var nick = request.user.emails[0].value;
juego.agregarJugador(nick);
response.cookie('nick', nick);
response.redirect("/");
});
app.get("/fallo", function(req, res){
res.send({nick:"nook"});
});
app.get("/google/callback", passport.authenticate('google', {failureRedirect:'/fallo'}), function(req, res){
res.redirect("/good");
})
//agregar usuario
app.get("/agregarJugador/:nick", function(request, response){
var nick = request.params.nick; //leer el nick de la petición
var res = juego.agregarJugador(nick);
response.send(res); //hay que enviar siempre una respuesta
});
app.post('/registrarUsuario', function(request, response){
var email = request.body.email;
var clave = request.body.clave;
juego.registrarUsuario(email, clave, function(data){
response.send(data);
})
});
/*app.post('/loginUsuario',function(request,response){
var email=request.body.email;
var clave=request.body.clave;
juego.loginUsuario(email,clave,function(data){
response.send(data);
});
});*/
app.post("/loginUsuario", passport.authenticate("local",
{failureRedirect:"/fallo", successRedirect:"/ok"}
));
app.get("/ok", function(request, response){
response.send({nick:request.user.nick});
});
//crear partida
app.get("/crearPartida/:nick/:numJug", haIniciado, function(request, response){
var nick = request.params.nick; //leer el nick de la petición
var numJug = request.params.numJug;
var ju1 = juego.usuarios[nick];
var res={codigo:-1};
if(ju1){
var partida = ju1.crearPartida(numJug);
console.log("Nueva partida de " +nick + "codigo: " +ju1.codigoPartida);
res.codigo = ju1.codigoPartida;
}
response.send(res); //hay que enviar siempre una respuesta
});
//unir a partida
app.get("/unirAPartida/:codigo/:nick", function(request, response){
var nick = request.params.nick; //leer el nick de la petición
var codigo = request.params.codigo;
var res = juego.unirAPartida(codigo, nick);
response.send(res); //hay que enviar siempre una respuesta
});
//obtener lista de partidas
app.get("/obtenerListaPartidas", haIniciado, function(request, response){
var res = juego.obtenerTodasPartidas(); //en res se guarda la lista de las partidas que devuelve el método de Juego
response.send(res); //hay que enviar siempre una respuesta
});
app.get("/obtenerPartidasDisponibles", haIniciado, function(request, response){
if(juego){
var res = juego.obtenerPartidasDisponibles();
response.send(res);
}
});
app.get("/obtenerTodosResultados", function(request, response){
if(juego){
juego.obtenerTodosResultados(function(lista){
response.send(lista);
})
}
});
app.get("/obtenerResultados/:nick", function(request, response){
var nick = request.params.nick;
if(juego){
juego.obtenerTodosResultados({ganador:nick}, function(lista){
response.send(lista);
})
}
});
app.get("/cerrarSesion/:nick", function(request, response){
var nick = request.params.nick;
var ju1 = juego.usuarios[nick];
if(ju1){
ju1.cerrarSesion();
response.send({"res": "ok"});
}
});
http.listen(app.get('port'), function(){ //lanzamos el servidor
console.log("La app NodeJS se está ejecutando en el puerto ", app.get('port'));
});
//lanzar el servidorWS
servidorWS.lanzarServidorWS(io, juego);