Blame view

app/routes/ApiRtes.js 9.43 KB
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');
fb8f1174   Geoffrey PREUD'HOMME   Utilisation de mo...
8
  var mongoose = require('mongoose');
0bda071e   Geoffrey PREUD'HOMME   Reroutage
9
  var express = require('express');
07298877   Geoffrey PREUD'HOMME   Session: secret g...
10
11
  var session = require('express-session');
  var MongoStore = require('connect-mongo')(session);
0bda071e   Geoffrey PREUD'HOMME   Reroutage
12
  
2201e360   Geoffrey PREUD'HOMME   Le login se fait ...
13
  var api = express();
0bda071e   Geoffrey PREUD'HOMME   Reroutage
14
  
fb8f1174   Geoffrey PREUD'HOMME   Utilisation de mo...
15
16
17
  // Connection à la BDD
  mongoose.connect(require('../../config/db').url);
  
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
18
  // Authentication
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
19
  reqAuth = function () {
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
20
      return function (req, res, next) {
c726d602   Geoffrey PREUD'HOMME   Utilisation d'un ...
21
22
23
          if (req.session.data && req.session.data.login) {
              next();
          } else {
89bc7c99   Geoffrey PREUD'HOMME   Améliorations div...
24
25
              res.status(401).end();
          }
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
26
27
28
      };
  };
  
c726d602   Geoffrey PREUD'HOMME   Utilisation d'un ...
29
  reqVerified = function (verify) { // Assert mais pour les droits (d'où le 403)
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
30
      return function (req, res, next) {
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
31
32
33
34
35
36
37
38
          reqAuth()(req, res, function () {
              verify(req, res, function (err, verified) {
                  if (err) {
                      res.status(500).send(err);
                  } else {
                      if (verified) {
                          next();
                      } else {
4a593a85   Geoffrey PREUD'HOMME   Les pages d'erreu...
39
                          res.status(403).end();
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
40
41
42
43
44
45
46
47
48
                      }
                  }
              });
          });
      };
  };
  
  reqPerm = function (perm) {
      return reqVerified(function (req, res, cb) {
c726d602   Geoffrey PREUD'HOMME   Utilisation d'un ...
49
          cb(null, req.session.data[perm]);
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
50
51
52
53
54
      });
  };
  
  assert = function (test) {
      return function (req, res, next) {
89bc7c99   Geoffrey PREUD'HOMME   Améliorations div...
55
56
57
58
59
60
          test(req, res, function (err, verified) {
              if (err) {
                  res.status(500).send(err);
              } else {
                  if (verified) {
                      next();
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
61
                  } else {
89bc7c99   Geoffrey PREUD'HOMME   Améliorations div...
62
                      res.status(400).end();
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
63
                  }
89bc7c99   Geoffrey PREUD'HOMME   Améliorations div...
64
              }
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
65
66
67
68
          });
      };
  };
  
89bc7c99   Geoffrey PREUD'HOMME   Améliorations div...
69
70
71
72
73
74
75
76
77
78
79
80
  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...
81
  
10852373   Geoffrey PREUD'HOMME   Session contrôleu...
82
  // Sessions
c726d602   Geoffrey PREUD'HOMME   Utilisation d'un ...
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
  
  sessionData = function (session, cb) {
      PolyUserServ.get(session.login, function (err, nom) {
          // Nom
          session.nom = nom.nom;
          session.section = nom.section;
          MembresServ.estBureau(session.login, function (bureau) {
              session.bureau = bureau;
              // Permissions
              session.canAddMembre = session.bureau;
              session.canDelMembre = session.bureau;
              session.canAddConv = true;
              session.canDelConv = session.bureau;
              session.canAddMess = true;
              session.canDelMess = session.bureau;
61d4f326   Geoffrey PREUD'HOMME   Gestion des dossiers
98
99
              session.canAddDoss = session.bureau;
              session.canDelDoss = session.bureau;
c726d602   Geoffrey PREUD'HOMME   Utilisation d'un ...
100
              cb(session);
2f593328   Geoffrey PREUD'HOMME   Linting
101
          });
c726d602   Geoffrey PREUD'HOMME   Utilisation d'un ...
102
103
104
105
      });
  };
  
  api.use(session({
fb8f1174   Geoffrey PREUD'HOMME   Utilisation de mo...
106
107
108
      store: new MongoStore({
          mongooseConnection: mongoose.connection
      }),
c726d602   Geoffrey PREUD'HOMME   Utilisation d'un ...
109
110
111
      name: 'membreCool',
      resave: false,
      saveUninitialized: true,
07298877   Geoffrey PREUD'HOMME   Session: secret g...
112
113
114
      secret: fs.readFileSync('config/session_secret', {
          encoding: 'UTF8'
      })
c726d602   Geoffrey PREUD'HOMME   Utilisation d'un ...
115
116
117
118
  }));
  
  api.get('/session', function (req, res) { // Informations sur la session
      res.send(req.session.data);
10852373   Geoffrey PREUD'HOMME   Session contrôleu...
119
120
  });
  
89bc7c99   Geoffrey PREUD'HOMME   Améliorations div...
121
122
123
  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
c726d602   Geoffrey PREUD'HOMME   Utilisation d'un ...
124
      PolyUserServ.verify(req.body.login, req.body.pass, function (err, verified) {
89bc7c99   Geoffrey PREUD'HOMME   Améliorations div...
125
126
127
          if (err) {
              res.status(500).send(err);
          } else {
c726d602   Geoffrey PREUD'HOMME   Utilisation d'un ...
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
              if (verified) {
                  sessionData({
                      login: req.body.login
                  }, function (session) {
                      req.session.data = session;
                      req.session.save(function (err) {
                          if (err) {
                              res.status(500).end("Sauvegarde session");
                          } else {
                              res.status(201).send(session);
                          }
                      });
                  });
              } else {
                  req.session.destroy(function (err) {
                      if (err) {
                          res.status(500).end("Suppression de la session");
                      } else {
                          res.status(401).end();
                      }
                  });
              }
89bc7c99   Geoffrey PREUD'HOMME   Améliorations div...
150
          }
2201e360   Geoffrey PREUD'HOMME   Le login se fait ...
151
      });
2201e360   Geoffrey PREUD'HOMME   Le login se fait ...
152
  });
10852373   Geoffrey PREUD'HOMME   Session contrôleu...
153
154
  
  api.delete('/session', function (req, res) { // Se déconnecter
c726d602   Geoffrey PREUD'HOMME   Utilisation d'un ...
155
156
      req.session.destroy();
      res.status(200).end();
2201e360   Geoffrey PREUD'HOMME   Le login se fait ...
157
  });
10852373   Geoffrey PREUD'HOMME   Session contrôleu...
158
  
10852373   Geoffrey PREUD'HOMME   Session contrôleu...
159
  
0bda071e   Geoffrey PREUD'HOMME   Reroutage
160
  // Membres
a7189c82   Geoffrey PREUD'HOMME   Membres comme con...
161
  api.get('/membres', function (req, res) { // Liste des membres
7a1fe62d   Geoffrey PREUD'HOMME   Consistence des noms
162
      MembresServ.list(function (err, membres) {
2f593328   Geoffrey PREUD'HOMME   Linting
163
          if (err)
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
164
              res.status(500).send(err);
25f72955   Geoffrey PREUD'HOMME   Liste des membres...
165
166
          else
              res.json(membres);
2f593328   Geoffrey PREUD'HOMME   Linting
167
      });
0bda071e   Geoffrey PREUD'HOMME   Reroutage
168
169
  });
  
82d5512d   Geoffrey PREUD'HOMME   Vérification logi...
170
  api.post('/membres', assert(function (req, res, cb) {
4a593a85   Geoffrey PREUD'HOMME   Les pages d'erreu...
171
      cb(null, typeof req.body.login == 'string' && req.body.login !== '');
82d5512d   Geoffrey PREUD'HOMME   Vérification logi...
172
  }), reqPerm('canAddMembre'), function (req, res) { // Ajout d'un membre
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
173
174
      MembresServ.add(req.body, function (err, membre) {
          if (err)
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
175
              res.status(500).send(err);
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
176
177
          else
              res.json(membre);
2201e360   Geoffrey PREUD'HOMME   Le login se fait ...
178
      });
0bda071e   Geoffrey PREUD'HOMME   Reroutage
179
180
  });
  
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
181
  api.delete('/membres/:membre_id', reqPerm('canDelMembre'), function (req, res) { // Supression d'un membre
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
182
183
      MembresServ.remove(req.params.membre_id, function (err, membre) {
          if (err)
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
184
              res.status(500).send(err);
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
185
186
          else
              res.json(null);
2201e360   Geoffrey PREUD'HOMME   Le login se fait ...
187
      });
2201e360   Geoffrey PREUD'HOMME   Le login se fait ...
188
  });
0bda071e   Geoffrey PREUD'HOMME   Reroutage
189
  
61d4f326   Geoffrey PREUD'HOMME   Gestion des dossiers
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
  // Dossiers
  api.get('/dosss/:doss_id', function (req, res) { // Un doss
      // TODO Assertion 404 existe, transformer req.body.id avec la vraie id (ou redirect)
      // TODO Requêtes séparées ?
      DosssServ.get(req.params.doss_id, function (err, doss) { // TODO Async
          if (err) {
              res.status(500).send(err);
          } else if (!doss) {
              res.status(404);
          } else {
              DosssServ.children(doss._id, function (err, dosss) {
                  if (err) {
                      res.status(500).send(err);
                  } else {
                      doss.dosss = dosss;
                      ConvsServ.children(doss._id, function (err, convs) {
                          if (err) {
                              res.status(500).send(err);
                          } else {
                              doss.convs = convs;
                              res.json(doss);
                          }
                      });
                  }
              });
          }
      });
  });
12162cc1   Geoffrey PREUD'HOMME   Liste de conversa...
218
  
61d4f326   Geoffrey PREUD'HOMME   Gestion des dossiers
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
  api.post('/dosss', reqPerm('canAddDoss'), function (req, res) { // Ajout d'un doss
      // 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;
          DosssServ.add(req.body, function (err, doss) {
              if (err)
                  res.status(500).send(err);
              else
                  res.json(doss);
          });
      });
  });
  
  api.delete('/dosss/:doss_id', reqPerm('canDelDoss'), function (req, res) { // Supression d'un doss
      DosssServ.remove(req.params.doss_id, function (err, doss) {
12162cc1   Geoffrey PREUD'HOMME   Liste de conversa...
234
          if (err)
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
235
              res.status(500).send(err);
12162cc1   Geoffrey PREUD'HOMME   Liste de conversa...
236
          else
61d4f326   Geoffrey PREUD'HOMME   Gestion des dossiers
237
              res.json(null);
12162cc1   Geoffrey PREUD'HOMME   Liste de conversa...
238
239
240
      });
  });
  
61d4f326   Geoffrey PREUD'HOMME   Gestion des dossiers
241
  // Conversations
9378de0d   Geoffrey PREUD'HOMME   Affichage d'une c...
242
243
244
  api.get('/convs/:conv_id', function (req, res) { // Une conv
      ConvsServ.get(req.params.conv_id, function (err, conv) {
          if (err)
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
245
              res.status(500).send(err);
9378de0d   Geoffrey PREUD'HOMME   Affichage d'une c...
246
247
248
249
250
          else
              res.json(conv);
      });
  });
  
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
251
  api.post('/convs', reqPerm('canAddConv'), function (req, res) { // Ajout d'un conv
61d4f326   Geoffrey PREUD'HOMME   Gestion des dossiers
252
253
254
255
256
257
258
259
260
      // 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;
          ConvsServ.add(req.body, function (err, conv) {
              if (err)
                  res.status(500).send(err);
              else
                  res.json(conv);
          });
12162cc1   Geoffrey PREUD'HOMME   Liste de conversa...
261
262
263
      });
  });
  
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
264
  api.delete('/convs/:conv_id', reqPerm('canDelConv'), function (req, res) { // Supression d'un conv
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
265
266
      ConvsServ.remove(req.params.conv_id, function (err, conv) {
          if (err)
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
267
              res.status(500).send(err);
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
268
269
270
271
272
273
          else
              res.json(null);
      });
  });
  
  // Messages
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
274
  api.get('/messs/:conv_id', reqAuth(), function (req, res) { // Liste des messs
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
275
      MessServ.list(req.params.conv_id, function (err, messs) {
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
276
          if (err)
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
277
              res.status(500).send(err);
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
278
279
280
281
282
          else
              res.json(messs);
      });
  });
  
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
283
  api.get('/messs/:mess_id', reqAuth(), function (req, res) { // Une mess
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
284
285
      MessServ.get(req.params.mess_id, function (err, mess) {
          if (err)
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
286
              res.status(500).send(err);
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
287
288
289
290
291
          else
              res.json(mess);
      });
  });
  
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
292
  api.post('/messs', reqPerm('canAddMess'), function (req, res) { // Ajout d'un mess
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
293
      data = req.body;
74d33075   Geoffrey PREUD'HOMME   Sauvegarde du nom...
294
      data.login = req.session.data.login;
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
295
      MessServ.add(data, function (err, mess) {
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
296
          if (err)
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
297
              res.status(500).send(err);
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
298
299
300
301
302
          else
              res.json(mess);
      });
  });
  
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
303
  api.delete('/messs/:mess_id', reqPerm('canDelMess'), function (req, res) { // Supression d'un mess
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
304
305
      MessServ.remove(req.params.mess_id, function (err, mess) {
          if (err)
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
306
              res.status(500).send(err);
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
307
308
          else
              res.json(null);
12162cc1   Geoffrey PREUD'HOMME   Liste de conversa...
309
310
311
      });
  });
  
d0a827b6   Geoffrey PREUD'HOMME   404, 405, 406, 41...
312
313
314
315
316
317
318
  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...
319
  
2201e360   Geoffrey PREUD'HOMME   Le login se fait ...
320
  module.exports = api;