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');
|
a470afda
Geoffrey PREUD'HOMME
Simplification de...
|
5
|
var DossModl = require('../models/DossModl');
|
12162cc1
Geoffrey PREUD'HOMME
Liste de conversa...
|
6
|
var ConvsServ = require('../services/ConvsServ');
|
a470afda
Geoffrey PREUD'HOMME
Simplification de...
|
7
|
var ConvModl = require('../models/ConvModl');
|
f22cd7f3
Geoffrey PREUD'HOMME
Système de messag...
|
8
|
var MessServ = require('../services/MessServ');
|
a470afda
Geoffrey PREUD'HOMME
Simplification de...
|
9
|
var MessModl = require('../models/MessModl'); // TODO Unfier ce bazar / supprimer Serv
|
07298877
Geoffrey PREUD'HOMME
Session: secret g...
|
10
|
var fs = require('fs');
|
fb8f1174
Geoffrey PREUD'HOMME
Utilisation de mo...
|
11
|
var mongoose = require('mongoose');
|
0bda071e
Geoffrey PREUD'HOMME
Reroutage
|
12
|
var express = require('express');
|
07298877
Geoffrey PREUD'HOMME
Session: secret g...
|
13
14
|
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
|
0bda071e
Geoffrey PREUD'HOMME
Reroutage
|
15
|
|
2201e360
Geoffrey PREUD'HOMME
Le login se fait ...
|
16
|
var api = express();
|
0bda071e
Geoffrey PREUD'HOMME
Reroutage
|
17
|
|
fb8f1174
Geoffrey PREUD'HOMME
Utilisation de mo...
|
18
19
20
|
// Connection à la BDD
mongoose.connect(require('../../config/db').url);
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
21
22
23
24
25
26
27
28
|
// 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 ...
|
29
|
} else {
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
30
|
cb(data);
|
89bc7c99
Geoffrey PREUD'HOMME
Améliorations div...
|
31
|
}
|
79edca45
Geoffrey PREUD'HOMME
Nouvelle façon de...
|
32
33
34
|
};
};
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
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
|
giveBackNull = function (res, status) {
// TODO Statut par défaut / optionnel
// status = 200;
return ensureOkay(res, 404, function (data) {
res.status(status);
if (status != 204 && status != 205) {
res.json(data);
} else {
res.end();
}
});
};
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) {
res.status(status);
if (status != 204 && status != 205) {
res.json(data);
} else {
res.end();
}
});
};
// 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 ...
|
82
|
reqVerified = function (verify) { // Assert mais pour les droits (d'où le 403)
|
79edca45
Geoffrey PREUD'HOMME
Nouvelle façon de...
|
83
|
return function (req, res, next) {
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
84
85
86
87
88
89
|
reqAuth(req, res, function () {
verify(req, res, function (err, data) {
cb = ensureExists(res, 403, function () {
next(); // Si on passe quoi que ce soit à next(), erreur 500
});
cb(err, data);
|
f22cd7f3
Geoffrey PREUD'HOMME
Système de messag...
|
90
91
92
93
94
|
});
});
};
};
|
a470afda
Geoffrey PREUD'HOMME
Simplification de...
|
95
|
reqOwn = function (objName) {
|
f22cd7f3
Geoffrey PREUD'HOMME
Système de messag...
|
96
|
return reqVerified(function (req, res, cb) {
|
a470afda
Geoffrey PREUD'HOMME
Simplification de...
|
97
98
99
100
|
cb(null, req.session.data.bureau || req[objName].login == req.session.data.login);
});
};
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
101
102
103
|
reqMembre = reqVerified(function (req, res, cb) {
cb(null, req.session.data.membre);
});
|
a470afda
Geoffrey PREUD'HOMME
Simplification de...
|
104
|
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
105
106
107
|
reqBureau = reqVerified(function (req, res, cb) {
cb(null, req.session.data.bureau);
});
|
f22cd7f3
Geoffrey PREUD'HOMME
Système de messag...
|
108
109
110
|
assert = function (test) {
return function (req, res, next) {
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
111
112
113
|
test(req, res, ensureExists(res, 400, function () {
next();
}));
|
79edca45
Geoffrey PREUD'HOMME
Nouvelle façon de...
|
114
115
116
|
};
};
|
89bc7c99
Geoffrey PREUD'HOMME
Améliorations div...
|
117
118
119
120
121
122
123
124
125
126
127
128
|
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...
|
129
|
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
130
|
|
10852373
Geoffrey PREUD'HOMME
Session contrôleu...
|
131
|
// Sessions
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
132
133
134
135
136
137
|
sessionData = function (session, cb) {
PolyUserServ.get(session.login, function (err, nom) {
// Nom
session.nom = nom.nom;
session.section = nom.section;
|
a470afda
Geoffrey PREUD'HOMME
Simplification de...
|
138
139
140
141
142
143
|
MembresServ.estMembre(session.login, function (membre) { // TODO Asyc
session.membre = membre;
MembresServ.estBureau(session.login, function (bureau) {
session.bureau = bureau;
cb(session);
});
|
2f593328
Geoffrey PREUD'HOMME
Linting
|
144
|
});
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
145
146
147
148
|
});
};
api.use(session({
|
fb8f1174
Geoffrey PREUD'HOMME
Utilisation de mo...
|
149
150
151
|
store: new MongoStore({
mongooseConnection: mongoose.connection
}),
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
152
153
|
name: 'membreCool',
resave: false,
|
6ac9921a
Geoffrey PREUD'HOMME
Message cookies
|
154
|
saveUninitialized: false,
|
07298877
Geoffrey PREUD'HOMME
Session: secret g...
|
155
156
157
|
secret: fs.readFileSync('config/session_secret', {
encoding: 'UTF8'
})
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
158
159
160
161
|
}));
api.get('/session', function (req, res) { // Informations sur la session
res.send(req.session.data);
|
10852373
Geoffrey PREUD'HOMME
Session contrôleu...
|
162
163
|
});
|
89bc7c99
Geoffrey PREUD'HOMME
Améliorations div...
|
164
165
166
|
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...
|
167
168
169
170
171
172
173
|
PolyUserServ.verify(req.body.login, req.body.pass, ensureOkay(res, 500, function (verified) {
if (verified) {
sessionData({
login: req.body.login
}, function (session) {
req.session.data = session;
req.session.save(function (err) {
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
174
|
if (err) {
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
175
|
res.status(500).json(err);
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
176
|
} else {
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
177
|
res.status(201).json(session);
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
178
179
|
}
});
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
180
181
182
183
184
|
});
} else {
req.session.destroy(ensureOkay(res, 500, function () {
res.status(401).end();
}));
|
89bc7c99
Geoffrey PREUD'HOMME
Améliorations div...
|
185
|
}
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
186
|
}));
|
2201e360
Geoffrey PREUD'HOMME
Le login se fait ...
|
187
|
});
|
10852373
Geoffrey PREUD'HOMME
Session contrôleu...
|
188
189
|
api.delete('/session', function (req, res) { // Se déconnecter
|
c726d602
Geoffrey PREUD'HOMME
Utilisation d'un ...
|
190
|
req.session.destroy();
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
191
|
res.status(205).end();
|
2201e360
Geoffrey PREUD'HOMME
Le login se fait ...
|
192
|
});
|
10852373
Geoffrey PREUD'HOMME
Session contrôleu...
|
193
|
|
10852373
Geoffrey PREUD'HOMME
Session contrôleu...
|
194
|
|
0bda071e
Geoffrey PREUD'HOMME
Reroutage
|
195
|
// Membres
|
a7189c82
Geoffrey PREUD'HOMME
Membres comme con...
|
196
|
api.get('/membres', function (req, res) { // Liste des membres
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
197
|
MembresServ.list(giveBack(res, 200));
|
0bda071e
Geoffrey PREUD'HOMME
Reroutage
|
198
199
|
});
|
82d5512d
Geoffrey PREUD'HOMME
Vérification logi...
|
200
|
api.post('/membres', assert(function (req, res, cb) {
|
4a593a85
Geoffrey PREUD'HOMME
Les pages d'erreu...
|
201
|
cb(null, typeof req.body.login == 'string' && req.body.login !== '');
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
202
203
|
}), reqBureau, function (req, res) { // Ajout d'un membre
MembresServ.add(req.body, giveBack(res, 201));
|
0bda071e
Geoffrey PREUD'HOMME
Reroutage
|
204
205
|
});
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
206
207
|
api.delete('/membres/:membre_id', reqBureau, function (req, res) { // Supression d'un membre
MembresServ.remove(req.params.membre_id, giveBack(res, 205));
|
2201e360
Geoffrey PREUD'HOMME
Le login se fait ...
|
208
|
});
|
0bda071e
Geoffrey PREUD'HOMME
Reroutage
|
209
|
|
61d4f326
Geoffrey PREUD'HOMME
Gestion des dossiers
|
210
|
// Dossiers
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
211
|
api.get('/dosss/:doss_id', reqAuth, function (req, res) { // Un doss
|
61d4f326
Geoffrey PREUD'HOMME
Gestion des dossiers
|
212
213
|
// TODO Assertion 404 existe, transformer req.body.id avec la vraie id (ou redirect)
// TODO Requêtes séparées ?
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
214
215
216
217
218
219
220
221
222
223
|
// TODO Async
DosssServ.get(req.params.doss_id, ensureExists(res, 404, function (doss) {
DosssServ.children(doss._id, ensureOkay(res, 500, function (dosss) {
ConvsServ.children(doss._id, ensureOkay(res, 500, function (convs) {
doss.dosss = dosss;
doss.convs = convs;
res.json(doss);
}));
}));
}));
|
61d4f326
Geoffrey PREUD'HOMME
Gestion des dossiers
|
224
|
});
|
12162cc1
Geoffrey PREUD'HOMME
Liste de conversa...
|
225
|
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
226
|
api.post('/dosss', reqMembre, function (req, res) { // Ajout d'un doss
|
61d4f326
Geoffrey PREUD'HOMME
Gestion des dossiers
|
227
228
229
|
// TODO Assertion 404 existe, transformer req.body.id avec la vraie id (ou redirect)
DosssServ.getId(req.body.parent, function (parent) { // TODO Async
req.body.parent = parent;
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
230
|
DosssServ.add(req.body, giveBackNull(res, 201));
|
61d4f326
Geoffrey PREUD'HOMME
Gestion des dossiers
|
231
232
233
|
});
});
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
234
235
|
api.delete('/dosss/:doss_id', reqBureau, function (req, res) { // Supression d'un doss
DosssServ.remove(req.params.doss_id, giveBackNull(res, 205));
|
12162cc1
Geoffrey PREUD'HOMME
Liste de conversa...
|
236
237
|
});
|
61d4f326
Geoffrey PREUD'HOMME
Gestion des dossiers
|
238
|
// Conversations
|
a470afda
Geoffrey PREUD'HOMME
Simplification de...
|
239
|
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
240
241
242
243
244
245
246
247
248
249
|
getSubject = function (modl) {
// TODO Gérer les dossiers
return function (req, res, next) {
modl.findById(req.params._id, ensureExists(res, 404, function (data) {
req.subject = data;
next();
}));
};
};
|
a470afda
Geoffrey PREUD'HOMME
Simplification de...
|
250
|
getConv = function (req, res, next) {
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
251
252
253
254
|
ConvModl.findById(req.params.conv_id, ensureExists(res, 404, function (data) {
req.conv = conv;
next();
}));
|
a470afda
Geoffrey PREUD'HOMME
Simplification de...
|
255
256
|
};
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
257
258
|
api.get('/convs/:_id', reqAuth, getSubject(ConvModl), function (req, res) { // Une conv
res.json(req.subject);
|
9378de0d
Geoffrey PREUD'HOMME
Affichage d'une c...
|
259
260
|
});
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
261
262
|
// Ajout d'un conv
api.post('/convs', reqMembre, function (req, res) {
|
61d4f326
Geoffrey PREUD'HOMME
Gestion des dossiers
|
263
264
265
|
// TODO Assertion 404 existe, transformer req.body.id avec la vraie id (ou redirect)
DosssServ.getId(req.body.parent, function (parent) { // TODO Async
req.body.parent = parent;
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
266
|
ConvsServ.add(req.body, giveBack(res, 201));
|
12162cc1
Geoffrey PREUD'HOMME
Liste de conversa...
|
267
268
269
|
});
});
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
270
271
272
|
// Supression d'un conv
api.delete('/convs/:_id', reqBureau, getSubject(ConvModl), function (req, res) {
req.subject.remove(giveBack(res, 205));
|
79edca45
Geoffrey PREUD'HOMME
Nouvelle façon de...
|
273
274
275
|
});
// Messages
|
79edca45
Geoffrey PREUD'HOMME
Nouvelle façon de...
|
276
|
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
277
278
279
|
api.get('/messs/:conv_id', reqAuth, function (req, res) { // Liste des messs
MessServ.list(req.params.conv_id, giveBackNull(res, 200));
});
|
79edca45
Geoffrey PREUD'HOMME
Nouvelle façon de...
|
280
|
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
281
|
api.post('/messs', reqMembre, function (req, res) { // Ajout d'un mess
|
f22cd7f3
Geoffrey PREUD'HOMME
Système de messag...
|
282
|
data = req.body;
|
74d33075
Geoffrey PREUD'HOMME
Sauvegarde du nom...
|
283
|
data.login = req.session.data.login;
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
284
|
MessServ.add(data, giveBack(res, 201));
|
79edca45
Geoffrey PREUD'HOMME
Nouvelle façon de...
|
285
286
|
});
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
287
288
289
|
// Édition d'un mess
api.put('/messs/:_id', reqMembre, getSubject(MessModl), reqOwn('mess'), function (req, res) {
req.subject.content = req.body.content;
|
a470afda
Geoffrey PREUD'HOMME
Simplification de...
|
290
|
// TODO Edit date
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
291
|
req.subject.save(giveBack(res, 201));
|
ba3a9e89
Geoffrey PREUD'HOMME
Ajout de l'éditio...
|
292
293
|
});
|
d51337d0
Geoffrey PREUD'HOMME
Améliorations div...
|
294
295
296
|
// Supression d'un mess
api.delete('/messs/:_id', reqMembre, getSubject(MessModl), reqOwn('mess'), function (req, res) {
req.subject.remove(giveBack(res, 205));
|
12162cc1
Geoffrey PREUD'HOMME
Liste de conversa...
|
297
298
|
});
|
d0a827b6
Geoffrey PREUD'HOMME
404, 405, 406, 41...
|
299
300
301
302
303
304
305
|
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...
|
306
|
|
2201e360
Geoffrey PREUD'HOMME
Le login se fait ...
|
307
|
module.exports = api;
|