7a1fe62d
Geoffrey PREUD'HOMME
Consistence des noms
|
1
|
var MembresServ = require('../services/MembresServ');
|
7664a626
Geoffrey PREUD'HOMME
Support de la nui...
|
2
|
var NinfoServ = require('../services/NinfoServ');
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
3
|
var PolyUserServ = require('../services/PolyUserServ');
|
7a1fe62d
Geoffrey PREUD'HOMME
Consistence des noms
|
4
|
var DecryptServ = require('../services/DecryptServ');
|
61d4f326
Geoffrey PREUD'HOMME
Gestion des dossiers
|
5
|
var DosssServ = require('../services/DosssServ');
|
12162cc1
Geoffrey PREUD'HOMME
Liste de conversa...
|
6
|
var ConvsServ = require('../services/ConvsServ');
|
f22cd7f3
Geoffrey PREUD'HOMME
Système de messag...
|
7
|
var MessServ = require('../services/MessServ');
|
07298877
Geoffrey PREUD'HOMME
Session: secret g...
|
8
|
var fs = require('fs');
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
9
|
var async = require('async');
|
fb8f1174
Geoffrey PREUD'HOMME
Utilisation de mo...
|
10
|
var mongoose = require('mongoose');
|
0bda071e
Geoffrey PREUD'HOMME
Reroutage
|
11
|
var express = require('express');
|
07298877
Geoffrey PREUD'HOMME
Session: secret g...
|
12
13
|
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
|
0bda071e
Geoffrey PREUD'HOMME
Reroutage
|
14
|
|
2201e360
Geoffrey PREUD'HOMME
Le login se fait ...
|
15
|
var api = express();
|
0bda071e
Geoffrey PREUD'HOMME
Reroutage
|
16
|
|
fb8f1174
Geoffrey PREUD'HOMME
Utilisation de mo...
|
17
18
19
|
// Connection à la BDD
mongoose.connect(require('../../config/db').url);
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
20
21
22
23
24
25
26
27
|
// Fonctions diverses
ensureOkay = function (res, status, cb) {
// TODO Statut par défaut / optionnel
// status = 500;
return function (err, data) {
// TODO Différencier data non-présent / faux
if (err) {
res.status(status).json(err);
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
28
|
} else {
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
29
|
cb(data);
|
89bc7c99
Geoffrey PREUD'HOMME
Améliorations div...
|
30
|
}
|
79edca45
Geoffrey PREUD'HOMME
Nouvelle façon de...
|
31
32
33
|
};
};
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
34
|
giveNull = function (res, status) {
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
35
36
37
|
// TODO Statut par défaut / optionnel
// status = 200;
return ensureOkay(res, 404, function (data) {
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
38
|
res.status(status).end();
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
});
};
ensureExists = function (res, status, cb) {
// TODO Statut par défaut / optionnel
// status = 404;
return ensureOkay(res, 500, function (data) {
if (data) {
cb(data);
} else {
res.status(status).end();
}
});
};
giveBack = function (res, status) {
// TODO Statut par défaut / optionnel
// status = 200;
return ensureExists(res, 404, function (data) {
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
58
59
|
res.status(status).json(data);
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
60
61
62
63
|
});
};
// Authentication
|
7664a626
Geoffrey PREUD'HOMME
Support de la nui...
|
64
65
66
67
68
|
addLogin = function (req, res, next) {
req.body.login = req.session.data.login;
next();
};
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
69
70
71
72
73
74
75
76
|
reqAuth = function (req, res, next) {
if (req.session.data && req.session.data.login) {
next();
} else {
res.status(401).end();
}
};
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
77
|
reqVerified = function (verify) { // Assert mais pour les droits (d'où le 403)
|
79edca45
Geoffrey PREUD'HOMME
Nouvelle façon de...
|
78
|
return function (req, res, next) {
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
79
|
reqAuth(req, res, function () {
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
80
81
82
|
verify(req, res, ensureExists(res, 403, function () {
next(); // Si on passe quoi que ce soit à next(), erreur 500
}));
|
f22cd7f3
Geoffrey PREUD'HOMME
Système de messag...
|
83
84
85
86
|
});
};
};
|
a470afda
Geoffrey PREUD'HOMME
Simplification de...
|
87
|
reqOwn = function (objName) {
|
f22cd7f3
Geoffrey PREUD'HOMME
Système de messag...
|
88
|
return reqVerified(function (req, res, cb) {
|
a470afda
Geoffrey PREUD'HOMME
Simplification de...
|
89
90
91
92
|
cb(null, req.session.data.bureau || req[objName].login == req.session.data.login);
});
};
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
93
94
95
|
reqMembre = reqVerified(function (req, res, cb) {
cb(null, req.session.data.membre);
});
|
a470afda
Geoffrey PREUD'HOMME
Simplification de...
|
96
|
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
97
98
99
|
reqBureau = reqVerified(function (req, res, cb) {
cb(null, req.session.data.bureau);
});
|
f22cd7f3
Geoffrey PREUD'HOMME
Système de messag...
|
100
101
102
|
assert = function (test) {
return function (req, res, next) {
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
103
104
105
|
test(req, res, ensureExists(res, 400, function () {
next();
}));
|
79edca45
Geoffrey PREUD'HOMME
Nouvelle façon de...
|
106
107
108
|
};
};
|
89bc7c99
Geoffrey PREUD'HOMME
Améliorations div...
|
109
110
111
112
113
114
115
116
117
118
119
120
|
decrypt = function () {
return function (req, res, next) {
assert(function (req, res, cb) {
cb(null, req.body && typeof req.body[0] == 'string' && req.body[0] !== '');
})(req, res, function () {
DecryptServ.decrypt(req.body[0], function (data) {
req.body = JSON.parse(data);
next();
});
});
};
};
|
f22cd7f3
Geoffrey PREUD'HOMME
Système de messag...
|
121
|
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
122
|
|
10852373
Geoffrey PREUD'HOMME
Session contrôleu...
|
123
|
// Sessions
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
124
|
sessionData = function (session, cb) {
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
async.parallel([
function (cba) {
PolyUserServ.get(session.login, cba);
},
function (cba) {
MembresServ.estMembre(session.login, cba);
},
function (cba) {
MembresServ.estBureau(session.login, cba);
}
], function (err, res) {
if (err) {
cb(err);
} else {
session.nom = res[0].nom;
session.section = res[0].section;
session.membre = res[1];
session.bureau = res[2];
|
7664a626
Geoffrey PREUD'HOMME
Support de la nui...
|
143
|
// TODO session.personnel
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
144
145
|
cb(null, session);
}
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
146
147
148
149
|
});
};
api.use(session({
|
fb8f1174
Geoffrey PREUD'HOMME
Utilisation de mo...
|
150
151
152
|
store: new MongoStore({
mongooseConnection: mongoose.connection
}),
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
153
154
|
name: 'membreCool',
resave: false,
|
6ac9921a
Geoffrey PREUD'HOMME
Message cookies
|
155
|
saveUninitialized: false,
|
07298877
Geoffrey PREUD'HOMME
Session: secret g...
|
156
157
158
|
secret: fs.readFileSync('config/session_secret', {
encoding: 'UTF8'
})
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
159
160
161
162
|
}));
api.get('/session', function (req, res) { // Informations sur la session
res.send(req.session.data);
|
10852373
Geoffrey PREUD'HOMME
Session contrôleu...
|
163
164
|
});
|
89bc7c99
Geoffrey PREUD'HOMME
Améliorations div...
|
165
166
167
|
api.post('/session', decrypt(), assert(function (req, res, cb) {
cb(null, req.body && typeof req.body.login == 'string' && req.body.login !== '' && typeof req.body.pass == 'string' && req.body.pass !== '');
}), function (req, res) { // Se connecter
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
168
169
170
171
|
PolyUserServ.verify(req.body.login, req.body.pass, ensureOkay(res, 500, function (verified) {
if (verified) {
sessionData({
login: req.body.login
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
172
|
}, ensureOkay(res, 500, function (session) {
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
173
|
req.session.data = session;
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
174
175
176
177
|
req.session.save(ensureOkay(res, 500, function () {
res.status(201).json(session);
}));
}));
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
178
179
180
181
|
} else {
req.session.destroy(ensureOkay(res, 500, function () {
res.status(401).end();
}));
|
89bc7c99
Geoffrey PREUD'HOMME
Améliorations div...
|
182
|
}
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
183
|
}));
|
2201e360
Geoffrey PREUD'HOMME
Le login se fait ...
|
184
|
});
|
10852373
Geoffrey PREUD'HOMME
Session contrôleu...
|
185
186
|
api.delete('/session', function (req, res) { // Se déconnecter
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
187
|
req.session.destroy();
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
188
|
res.status(205).end();
|
2201e360
Geoffrey PREUD'HOMME
Le login se fait ...
|
189
|
});
|
10852373
Geoffrey PREUD'HOMME
Session contrôleu...
|
190
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
191
192
193
194
195
196
197
198
|
getSubject = function (serv) { // Fonction générique pour récupérer un objet spécifié dans l'URL
return function (req, res, next) {
serv.get(req.params._id, ensureExists(res, 404, function (data) {
req.subject = data;
next();
}));
};
};
|
10852373
Geoffrey PREUD'HOMME
Session contrôleu...
|
199
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
200
201
202
203
204
|
assertSubject = function (serv) {
return assert(function (req, res, cb) {
serv.assert(req.body, cb);
});
};
|
0bda071e
Geoffrey PREUD'HOMME
Reroutage
|
205
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
206
207
|
addSubject = function (serv) {
return function (req, res) {
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
208
|
serv.add(req.body, ensureExists(res, 404, function (membre) {
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
209
|
serv.simpleData(membre, giveBack(res, 201));
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
210
|
}));
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
|
};
};
delSubject = function (serv) {
return function (req, res) {
serv.remove(req.subject, giveNull(res, 205));
};
};
// Membres
// Liste des membres
api.get('/membres', function (req, res) {
MembresServ.list(ensureExists(res, 404, function (membres) {
async.map(membres, MembresServ.simpleData, function (err, data) {
giveBack(res, 200)(err, data);
});
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
228
|
}));
|
61d4f326
Geoffrey PREUD'HOMME
Gestion des dossiers
|
229
|
});
|
12162cc1
Geoffrey PREUD'HOMME
Liste de conversa...
|
230
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
231
232
|
// Ajout d'un membre
api.post('/membres', reqBureau, assertSubject(MembresServ), function (req, res) {
|
61d4f326
Geoffrey PREUD'HOMME
Gestion des dossiers
|
233
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
234
235
236
237
|
MembresServ.add(req.body, ensureExists(res, 404, function (membre) {
MembresServ.simpleData(membre, giveBack(res, 201));
}));
|
12162cc1
Geoffrey PREUD'HOMME
Liste de conversa...
|
238
239
|
});
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
240
241
|
// Supression d'un membre
api.delete('/membres/:_id', reqBureau, getSubject(MembresServ), delSubject(MembresServ));
|
a470afda
Geoffrey PREUD'HOMME
Simplification de...
|
242
|
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
243
|
|
7664a626
Geoffrey PREUD'HOMME
Support de la nui...
|
244
245
246
247
248
|
// Nuit de l'Info
// Obtenir les préférences
api.get('/profile/ninfo', reqAuth, addLogin, function(req, res) {
NinfoServ.getLogin(req.body.login, function(err, ninfo) {
|
7664a626
Geoffrey PREUD'HOMME
Support de la nui...
|
249
250
251
252
253
254
255
|
NinfoServ.simpleData(ninfo, giveBack(res, 200));
});
});
// Mettre à jour les préférences
api.put('/profile/ninfo', reqAuth, addLogin, assertSubject(NinfoServ), addSubject(NinfoServ));
|
446e0b33
Geoffrey PREUD'HOMME
Affichage des par...
|
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
|
// Lister les participants
api.get('/ninfo', reqAuth, function(req, res) {
NinfoServ.list(function (err, participants) {
async.reduce(NinfoServ.equipes, {}, function(memo, nomEquipe, cb) {
async.filter(participants, function concerne(participant, cbf) {
console.log(270);
cbf(participant.equipe == nomEquipe);
}, function addInfos(membres) {
console.log(272, membres);
async.map(membres, function (membre, cba) {
console.log(274, membre);
async.parallel([function(cbp) {
PolyUserServ.grabInfos(membre.login, cbp);
}, function(cbp) {
NinfoServ.simpleData(membre, cbp);
}], function(err, results) {
var membreFinal = results[0];
membreFinal.equipe = results[1].equipe;
membreFinal.comment = results[1].comment;
console.log(276, membreFinal);
cba(null, membreFinal);
});
}, function (err, membres) {
memo[nomEquipe] = membres;
console.log(278, memo);
cb(null, memo);
});
});
}, function gb(err, data) {
res.status(200).json(data);
});
});
});
|
7664a626
Geoffrey PREUD'HOMME
Support de la nui...
|
289
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
290
291
292
293
294
|
// Dossiers
parentId = function (req, res, next) {
DosssServ.get(req.body.parent, ensureExists(res, 404, function (parent) {
req.body.parent = parent._id;
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
295
296
|
next();
}));
|
a470afda
Geoffrey PREUD'HOMME
Simplification de...
|
297
298
|
};
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
299
300
301
|
// Un doss
api.get('/dosss/:_id', reqAuth, getSubject(DosssServ), function (req, res) {
DosssServ.detailedData(req.subject, giveBack(res, 200));
|
9378de0d
Geoffrey PREUD'HOMME
Affichage d'une c...
|
302
303
|
});
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
304
305
|
// Ajout d'un doss
api.post('/dosss', reqMembre, parentId, assertSubject(DosssServ), addSubject(DosssServ));
|
12162cc1
Geoffrey PREUD'HOMME
Liste de conversa...
|
306
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
307
308
309
310
311
312
313
314
|
// Supression d'un doss
api.delete('/dosss/:_id', reqBureau, getSubject(DosssServ), delSubject(DosssServ));
// Conversations
// Infos sur une conversation
api.get('/convs/:_id', reqAuth, getSubject(ConvsServ), function (req, res) {
ConvsServ.detailedData(req.subject, giveBack(res, 200));
|
79edca45
Geoffrey PREUD'HOMME
Nouvelle façon de...
|
315
316
|
});
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
317
318
319
320
321
322
|
// Ajout d'une conversation
api.post('/convs', reqMembre, parentId, assertSubject(ConvsServ), addSubject(ConvsServ));
// Supression d'une conversation
api.delete('/convs/:_id', reqBureau, getSubject(ConvsServ), delSubject(ConvsServ));
|
79edca45
Geoffrey PREUD'HOMME
Nouvelle façon de...
|
323
|
// Messages
|
79edca45
Geoffrey PREUD'HOMME
Nouvelle façon de...
|
324
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
325
326
327
328
329
330
|
// Liste des messs
// api.get('/messs/:conv_id', reqAuth, function (req, res) {
// MessServ.list(req.params.conv_id, ensureExists(res, 404, function (messs) {
// async.map(messs, MessServ.simpleData, giveBack(res, 200));
// }));
// });
|
79edca45
Geoffrey PREUD'HOMME
Nouvelle façon de...
|
331
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
332
333
|
// Ajout d'un mess
api.post('/messs', reqMembre, addLogin, assertSubject(MessServ), addSubject(MessServ));
|
79edca45
Geoffrey PREUD'HOMME
Nouvelle façon de...
|
334
|
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
335
|
// Édition d'un mess
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
336
337
338
339
340
341
342
|
api.put('/messs/:_id', reqMembre, addLogin, assertSubject(MessServ), getSubject(MessServ), reqOwn('mess'),
function (req, res) {
MessServ.edit(req.subject, req.body, ensureExists(res, 404, function (mess) {
MessServ.simpleData(mess, giveBack(res, 201));
}));
});
|
ba3a9e89
Geoffrey PREUD'HOMME
Ajout de l'éditio...
|
343
|
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
344
|
// Supression d'un mess
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
345
|
api.delete('/messs/:_id', reqMembre, getSubject(MessServ), reqOwn('mess'), delSubject(MessServ));
|
12162cc1
Geoffrey PREUD'HOMME
Liste de conversa...
|
346
|
|
d0a827b6
Geoffrey PREUD'HOMME
404, 405, 406, 41...
|
347
348
349
350
351
352
353
|
api.all('/coffee', function (req, res) {
res.status(418).end();
});
api.all('*', function (req, res) {
res.status(405).end();
});
|
f22cd7f3
Geoffrey PREUD'HOMME
Système de messag...
|
354
|
|
2201e360
Geoffrey PREUD'HOMME
Le login se fait ...
|
355
|
module.exports = api;
|