Blame view

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