7a1fe62d
Geoffrey PREUD'HOMME
Consistence des noms
|
1
|
var MembresServ = require('../services/MembresServ');
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
2
|
var PolyUserServ = require('../services/PolyUserServ');
|
7a1fe62d
Geoffrey PREUD'HOMME
Consistence des noms
|
3
|
var DecryptServ = require('../services/DecryptServ');
|
61d4f326
Geoffrey PREUD'HOMME
Gestion des dossiers
|
4
|
var DosssServ = require('../services/DosssServ');
|
12162cc1
Geoffrey PREUD'HOMME
Liste de conversa...
|
5
|
var ConvsServ = require('../services/ConvsServ');
|
f22cd7f3
Geoffrey PREUD'HOMME
Système de messag...
|
6
|
var MessServ = require('../services/MessServ');
|
07298877
Geoffrey PREUD'HOMME
Session: secret g...
|
7
|
var fs = require('fs');
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
8
|
var async = require('async');
|
fb8f1174
Geoffrey PREUD'HOMME
Utilisation de mo...
|
9
|
var mongoose = require('mongoose');
|
0bda071e
Geoffrey PREUD'HOMME
Reroutage
|
10
|
var express = require('express');
|
07298877
Geoffrey PREUD'HOMME
Session: secret g...
|
11
12
|
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
|
0bda071e
Geoffrey PREUD'HOMME
Reroutage
|
13
|
|
2201e360
Geoffrey PREUD'HOMME
Le login se fait ...
|
14
|
var api = express();
|
0bda071e
Geoffrey PREUD'HOMME
Reroutage
|
15
|
|
fb8f1174
Geoffrey PREUD'HOMME
Utilisation de mo...
|
16
17
18
|
// Connection à la BDD
mongoose.connect(require('../../config/db').url);
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
19
20
21
22
23
24
25
26
|
// 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 ...
|
27
|
} else {
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
28
|
cb(data);
|
89bc7c99
Geoffrey PREUD'HOMME
Améliorations div...
|
29
|
}
|
79edca45
Geoffrey PREUD'HOMME
Nouvelle façon de...
|
30
31
32
|
};
};
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
33
|
giveNull = function (res, status) {
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
34
35
36
|
// TODO Statut par défaut / optionnel
// status = 200;
return ensureOkay(res, 404, function (data) {
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
37
|
res.status(status).end();
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
});
};
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...
|
57
58
|
res.status(status).json(data);
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
59
60
61
62
63
64
65
66
67
68
69
70
|
});
};
// Authentication
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 ...
|
71
|
reqVerified = function (verify) { // Assert mais pour les droits (d'où le 403)
|
79edca45
Geoffrey PREUD'HOMME
Nouvelle façon de...
|
72
|
return function (req, res, next) {
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
73
|
reqAuth(req, res, function () {
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
74
75
76
|
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...
|
77
78
79
80
|
});
};
};
|
a470afda
Geoffrey PREUD'HOMME
Simplification de...
|
81
|
reqOwn = function (objName) {
|
f22cd7f3
Geoffrey PREUD'HOMME
Système de messag...
|
82
|
return reqVerified(function (req, res, cb) {
|
a470afda
Geoffrey PREUD'HOMME
Simplification de...
|
83
84
85
86
|
cb(null, req.session.data.bureau || req[objName].login == req.session.data.login);
});
};
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
87
88
89
|
reqMembre = reqVerified(function (req, res, cb) {
cb(null, req.session.data.membre);
});
|
a470afda
Geoffrey PREUD'HOMME
Simplification de...
|
90
|
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
91
92
93
|
reqBureau = reqVerified(function (req, res, cb) {
cb(null, req.session.data.bureau);
});
|
f22cd7f3
Geoffrey PREUD'HOMME
Système de messag...
|
94
95
96
|
assert = function (test) {
return function (req, res, next) {
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
97
98
99
|
test(req, res, ensureExists(res, 400, function () {
next();
}));
|
79edca45
Geoffrey PREUD'HOMME
Nouvelle façon de...
|
100
101
102
|
};
};
|
89bc7c99
Geoffrey PREUD'HOMME
Améliorations div...
|
103
104
105
106
107
108
109
110
111
112
113
114
|
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...
|
115
|
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
116
|
|
10852373
Geoffrey PREUD'HOMME
Session contrôleu...
|
117
|
// Sessions
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
118
|
sessionData = function (session, cb) {
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
119
120
121
122
123
124
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 {
session.nom = res[0].nom;
session.section = res[0].section;
session.membre = res[1];
session.bureau = res[2];
cb(null, session);
}
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
139
140
141
142
|
});
};
api.use(session({
|
fb8f1174
Geoffrey PREUD'HOMME
Utilisation de mo...
|
143
144
145
|
store: new MongoStore({
mongooseConnection: mongoose.connection
}),
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
146
147
|
name: 'membreCool',
resave: false,
|
6ac9921a
Geoffrey PREUD'HOMME
Message cookies
|
148
|
saveUninitialized: false,
|
07298877
Geoffrey PREUD'HOMME
Session: secret g...
|
149
150
151
|
secret: fs.readFileSync('config/session_secret', {
encoding: 'UTF8'
})
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
152
153
154
155
|
}));
api.get('/session', function (req, res) { // Informations sur la session
res.send(req.session.data);
|
10852373
Geoffrey PREUD'HOMME
Session contrôleu...
|
156
157
|
});
|
89bc7c99
Geoffrey PREUD'HOMME
Améliorations div...
|
158
159
160
|
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...
|
161
162
163
164
|
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...
|
165
|
}, ensureOkay(res, 500, function (session) {
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
166
|
req.session.data = session;
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
167
168
169
170
|
req.session.save(ensureOkay(res, 500, function () {
res.status(201).json(session);
}));
}));
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
171
172
173
174
|
} else {
req.session.destroy(ensureOkay(res, 500, function () {
res.status(401).end();
}));
|
89bc7c99
Geoffrey PREUD'HOMME
Améliorations div...
|
175
|
}
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
176
|
}));
|
2201e360
Geoffrey PREUD'HOMME
Le login se fait ...
|
177
|
});
|
10852373
Geoffrey PREUD'HOMME
Session contrôleu...
|
178
179
|
api.delete('/session', function (req, res) { // Se déconnecter
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
180
|
req.session.destroy();
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
181
|
res.status(205).end();
|
2201e360
Geoffrey PREUD'HOMME
Le login se fait ...
|
182
|
});
|
10852373
Geoffrey PREUD'HOMME
Session contrôleu...
|
183
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
184
185
186
187
188
189
190
191
|
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...
|
192
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
193
194
195
196
197
|
assertSubject = function (serv) {
return assert(function (req, res, cb) {
serv.assert(req.body, cb);
});
};
|
0bda071e
Geoffrey PREUD'HOMME
Reroutage
|
198
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
199
200
|
addSubject = function (serv) {
return function (req, res) {
|
0bda071e
Geoffrey PREUD'HOMME
Reroutage
|
201
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
202
|
serv.add(req.body, ensureExists(res, 404, function (membre) {
|
0bda071e
Geoffrey PREUD'HOMME
Reroutage
|
203
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
204
|
serv.simpleData(membre, giveBack(res, 201));
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
205
|
}));
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
|
};
};
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...
|
223
|
}));
|
61d4f326
Geoffrey PREUD'HOMME
Gestion des dossiers
|
224
|
});
|
12162cc1
Geoffrey PREUD'HOMME
Liste de conversa...
|
225
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
226
227
|
// Ajout d'un membre
api.post('/membres', reqBureau, assertSubject(MembresServ), function (req, res) {
|
61d4f326
Geoffrey PREUD'HOMME
Gestion des dossiers
|
228
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
229
230
231
232
|
MembresServ.add(req.body, ensureExists(res, 404, function (membre) {
MembresServ.simpleData(membre, giveBack(res, 201));
}));
|
12162cc1
Geoffrey PREUD'HOMME
Liste de conversa...
|
233
234
|
});
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
235
236
|
// Supression d'un membre
api.delete('/membres/:_id', reqBureau, getSubject(MembresServ), delSubject(MembresServ));
|
a470afda
Geoffrey PREUD'HOMME
Simplification de...
|
237
|
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
238
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
239
240
241
242
243
|
// 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...
|
244
245
|
next();
}));
|
a470afda
Geoffrey PREUD'HOMME
Simplification de...
|
246
247
|
};
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
248
249
250
|
// 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...
|
251
252
|
});
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
253
254
|
// Ajout d'un doss
api.post('/dosss', reqMembre, parentId, assertSubject(DosssServ), addSubject(DosssServ));
|
12162cc1
Geoffrey PREUD'HOMME
Liste de conversa...
|
255
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
256
257
258
259
260
261
262
263
|
// 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...
|
264
265
|
});
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
266
267
268
269
270
271
272
273
274
275
276
|
// 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));
addLogin = function (req, res, next) {
req.body.login = req.session.data.login;
next();
};
|
79edca45
Geoffrey PREUD'HOMME
Nouvelle façon de...
|
277
|
// Messages
|
79edca45
Geoffrey PREUD'HOMME
Nouvelle façon de...
|
278
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
279
280
281
282
283
284
|
// 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...
|
285
|
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
286
287
|
// Ajout d'un mess
api.post('/messs', reqMembre, addLogin, assertSubject(MessServ), addSubject(MessServ));
|
79edca45
Geoffrey PREUD'HOMME
Nouvelle façon de...
|
288
|
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
289
|
// Édition d'un mess
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
290
291
292
293
294
295
296
|
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...
|
297
|
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
298
|
// Supression d'un mess
|
278868c0
Geoffrey PREUD'HOMME
Refactorisation d...
|
299
|
api.delete('/messs/:_id', reqMembre, getSubject(MessServ), reqOwn('mess'), delSubject(MessServ));
|
12162cc1
Geoffrey PREUD'HOMME
Liste de conversa...
|
300
|
|
d0a827b6
Geoffrey PREUD'HOMME
404, 405, 406, 41...
|
301
302
303
304
305
306
307
|
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...
|
308
|
|
2201e360
Geoffrey PREUD'HOMME
Le login se fait ...
|
309
|
module.exports = api;
|