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
|
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 {
|
d0649a9e
Geoffrey PREUD'HOMME
Gestion des non é...
|
139
|
for (var attrname in res[0]) { session[attrname] = res[0][attrname]; }
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
140
141
|
session.membre = res[1];
session.bureau = res[2];
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
142
143
|
cb(null, session);
}
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
144
145
146
147
|
});
};
api.use(session({
|
fb8f1174
Geoffrey PREUD'HOMME
Utilisation de mo...
|
148
149
150
|
store: new MongoStore({
mongooseConnection: mongoose.connection
}),
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
151
152
|
name: 'membreCool',
resave: false,
|
6ac9921a
Geoffrey PREUD'HOMME
Message cookies
|
153
|
saveUninitialized: false,
|
07298877
Geoffrey PREUD'HOMME
Session: secret g...
|
154
155
156
|
secret: fs.readFileSync('config/session_secret', {
encoding: 'UTF8'
})
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
157
158
159
160
|
}));
api.get('/session', function (req, res) { // Informations sur la session
res.send(req.session.data);
|
10852373
Geoffrey PREUD'HOMME
Session contrôleu...
|
161
162
|
});
|
89bc7c99
Geoffrey PREUD'HOMME
Améliorations div...
|
163
164
165
|
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...
|
166
167
168
169
|
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...
|
170
|
}, ensureOkay(res, 500, function (session) {
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
171
|
req.session.data = session;
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
172
173
174
175
|
req.session.save(ensureOkay(res, 500, function () {
res.status(201).json(session);
}));
}));
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
176
177
178
179
|
} else {
req.session.destroy(ensureOkay(res, 500, function () {
res.status(401).end();
}));
|
89bc7c99
Geoffrey PREUD'HOMME
Améliorations div...
|
180
|
}
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
181
|
}));
|
2201e360
Geoffrey PREUD'HOMME
Le login se fait ...
|
182
|
});
|
10852373
Geoffrey PREUD'HOMME
Session contrôleu...
|
183
184
|
api.delete('/session', function (req, res) { // Se déconnecter
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
185
|
req.session.destroy();
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
186
|
res.status(205).end();
|
2201e360
Geoffrey PREUD'HOMME
Le login se fait ...
|
187
|
});
|
10852373
Geoffrey PREUD'HOMME
Session contrôleu...
|
188
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
189
190
191
192
193
194
195
196
|
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...
|
197
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
198
199
200
201
202
|
assertSubject = function (serv) {
return assert(function (req, res, cb) {
serv.assert(req.body, cb);
});
};
|
0bda071e
Geoffrey PREUD'HOMME
Reroutage
|
203
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
204
205
|
addSubject = function (serv) {
return function (req, res) {
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
206
|
serv.add(req.body, ensureExists(res, 404, function (membre) {
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
207
|
serv.simpleData(membre, giveBack(res, 201));
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
208
|
}));
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
|
};
};
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...
|
226
|
}));
|
61d4f326
Geoffrey PREUD'HOMME
Gestion des dossiers
|
227
|
});
|
12162cc1
Geoffrey PREUD'HOMME
Liste de conversa...
|
228
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
229
230
|
// Ajout d'un membre
api.post('/membres', reqBureau, assertSubject(MembresServ), function (req, res) {
|
61d4f326
Geoffrey PREUD'HOMME
Gestion des dossiers
|
231
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
232
233
234
235
|
MembresServ.add(req.body, ensureExists(res, 404, function (membre) {
MembresServ.simpleData(membre, giveBack(res, 201));
}));
|
12162cc1
Geoffrey PREUD'HOMME
Liste de conversa...
|
236
237
|
});
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
238
239
|
// Supression d'un membre
api.delete('/membres/:_id', reqBureau, getSubject(MembresServ), delSubject(MembresServ));
|
a470afda
Geoffrey PREUD'HOMME
Simplification de...
|
240
|
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
241
|
|
7664a626
Geoffrey PREUD'HOMME
Support de la nui...
|
242
243
244
245
246
|
// 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...
|
247
248
249
250
251
252
253
|
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...
|
254
255
256
257
258
|
// 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) {
|
446e0b33
Geoffrey PREUD'HOMME
Affichage des par...
|
259
260
|
cbf(participant.equipe == nomEquipe);
}, function addInfos(membres) {
|
446e0b33
Geoffrey PREUD'HOMME
Affichage des par...
|
261
|
async.map(membres, function (membre, cba) {
|
446e0b33
Geoffrey PREUD'HOMME
Affichage des par...
|
262
|
async.parallel([function(cbp) {
|
d0649a9e
Geoffrey PREUD'HOMME
Gestion des non é...
|
263
|
PolyUserServ.get(membre.login, cbp);
|
446e0b33
Geoffrey PREUD'HOMME
Affichage des par...
|
264
265
266
267
268
269
|
}, function(cbp) {
NinfoServ.simpleData(membre, cbp);
}], function(err, results) {
var membreFinal = results[0];
membreFinal.equipe = results[1].equipe;
membreFinal.comment = results[1].comment;
|
446e0b33
Geoffrey PREUD'HOMME
Affichage des par...
|
270
271
272
273
|
cba(null, membreFinal);
});
}, function (err, membres) {
memo[nomEquipe] = membres;
|
446e0b33
Geoffrey PREUD'HOMME
Affichage des par...
|
274
275
276
277
278
279
280
281
|
cb(null, memo);
});
});
}, function gb(err, data) {
res.status(200).json(data);
});
});
});
|
7664a626
Geoffrey PREUD'HOMME
Support de la nui...
|
282
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
283
284
285
286
287
|
// 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...
|
288
289
|
next();
}));
|
a470afda
Geoffrey PREUD'HOMME
Simplification de...
|
290
291
|
};
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
292
293
294
|
// 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...
|
295
296
|
});
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
297
298
|
// Ajout d'un doss
api.post('/dosss', reqMembre, parentId, assertSubject(DosssServ), addSubject(DosssServ));
|
12162cc1
Geoffrey PREUD'HOMME
Liste de conversa...
|
299
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
300
301
302
303
304
305
306
307
|
// 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...
|
308
309
|
});
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
310
311
312
313
314
315
|
// 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...
|
316
|
// Messages
|
79edca45
Geoffrey PREUD'HOMME
Nouvelle façon de...
|
317
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
318
319
320
321
322
323
|
// 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...
|
324
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
325
326
|
// Ajout d'un mess
api.post('/messs', reqMembre, addLogin, assertSubject(MessServ), addSubject(MessServ));
|
79edca45
Geoffrey PREUD'HOMME
Nouvelle façon de...
|
327
|
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
328
|
// Édition d'un mess
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
329
330
331
332
333
334
335
|
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...
|
336
|
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
337
|
// Supression d'un mess
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
338
|
api.delete('/messs/:_id', reqMembre, getSubject(MessServ), reqOwn('mess'), delSubject(MessServ));
|
12162cc1
Geoffrey PREUD'HOMME
Liste de conversa...
|
339
|
|
d0a827b6
Geoffrey PREUD'HOMME
404, 405, 406, 41...
|
340
341
342
343
344
345
346
|
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...
|
347
|
|
2201e360
Geoffrey PREUD'HOMME
Le login se fait ...
|
348
|
module.exports = api;
|