Blame view

app/routes/ApiRtes.js 6.56 KB
7a1fe62d   Geoffrey PREUD'HOMME   Consistence des noms
1
2
3
  var MembresServ = require('../services/MembresServ');
  var SessionsServ = require('../services/SessionsServ');
  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');
0bda071e   Geoffrey PREUD'HOMME   Reroutage
6
7
  var express = require('express');
  
2201e360   Geoffrey PREUD'HOMME   Le login se fait ...
8
  var api = express();
0bda071e   Geoffrey PREUD'HOMME   Reroutage
9
  
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
10
  // Authentication
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
11
  reqAuth = function () {
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
12
      return function (req, res, next) {
89bc7c99   Geoffrey PREUD'HOMME   Améliorations div...
13
14
15
          if (!req.cookies) {
              res.status(401).end();
          }
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
16
          SessionsServ.use(req.cookies.session, function (err, session) {
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
17
18
19
              if (err) {
                  res.status(500).send(err);
              } else {
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
20
21
                  if (session) {
                      req.session = session;
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
22
23
24
25
26
27
28
29
30
                      next();
                  } else {
                      res.status(401).end();
                  }
              }
          });
      };
  };
  
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
31
  reqVerified = function (verify) {
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
32
      return function (req, res, next) {
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
33
34
35
36
37
38
39
40
          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...
41
                          res.status(403).end();
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
                      }
                  }
              });
          });
      };
  };
  
  reqPerm = function (perm) {
      return reqVerified(function (req, res, cb) {
          cb(null, req.session[perm]);
      });
  };
  
  assert = function (test) {
      return function (req, res, next) {
89bc7c99   Geoffrey PREUD'HOMME   Améliorations div...
57
58
59
60
61
62
          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...
63
                  } else {
89bc7c99   Geoffrey PREUD'HOMME   Améliorations div...
64
                      res.status(400).end();
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
65
                  }
89bc7c99   Geoffrey PREUD'HOMME   Améliorations div...
66
              }
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
67
68
69
70
          });
      };
  };
  
89bc7c99   Geoffrey PREUD'HOMME   Améliorations div...
71
72
73
74
75
76
77
78
79
80
81
82
  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...
83
  
10852373   Geoffrey PREUD'HOMME   Session contrôleu...
84
85
  // Sessions
  api.get('/session', function (req, res) { // Informations sur la session
2f593328   Geoffrey PREUD'HOMME   Linting
86
      if (req.cookies && req.cookies.session) {
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
87
          SessionsServ.use(req.cookies.session, function (err, session) {
2f593328   Geoffrey PREUD'HOMME   Linting
88
              if (err) {
7cf406d0   Geoffrey PREUD'HOMME   Modifications de ...
89
90
91
                  res.clearCookie('session');
                  // TODO Pas vraiment un 500
                  // TODO Gérer ça mieux coté client
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
92
                  res.status(500).send(err);
2f593328   Geoffrey PREUD'HOMME   Linting
93
              } else {
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
94
                  res.send(session);
2f593328   Geoffrey PREUD'HOMME   Linting
95
96
              }
          });
2f593328   Geoffrey PREUD'HOMME   Linting
97
      } else {
7cf406d0   Geoffrey PREUD'HOMME   Modifications de ...
98
          res.clearCookie('session');
2f593328   Geoffrey PREUD'HOMME   Linting
99
100
          res.send('missing');
      }
10852373   Geoffrey PREUD'HOMME   Session contrôleu...
101
102
  });
  
89bc7c99   Geoffrey PREUD'HOMME   Améliorations div...
103
104
105
106
107
108
109
110
111
112
  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
      SessionsServ.open(req.body, function (err, session) {
          if (err) {
              res.status(500).send(err);
          } else {
              res.cookie('session', session._id);
              res.send(session);
          }
2201e360   Geoffrey PREUD'HOMME   Le login se fait ...
113
      });
2201e360   Geoffrey PREUD'HOMME   Le login se fait ...
114
  });
10852373   Geoffrey PREUD'HOMME   Session contrôleu...
115
116
  
  api.delete('/session', function (req, res) { // Se déconnecter
2f593328   Geoffrey PREUD'HOMME   Linting
117
      if (req.cookies.session) {
7a1fe62d   Geoffrey PREUD'HOMME   Consistence des noms
118
          SessionsServ.delete(req.cookies.session, function () {
2f593328   Geoffrey PREUD'HOMME   Linting
119
120
121
122
123
124
              res.clearCookie('session');
              res.end();
          });
      } else {
          res.send('missing');
      }
2201e360   Geoffrey PREUD'HOMME   Le login se fait ...
125
  });
10852373   Geoffrey PREUD'HOMME   Session contrôleu...
126
  
10852373   Geoffrey PREUD'HOMME   Session contrôleu...
127
  
0bda071e   Geoffrey PREUD'HOMME   Reroutage
128
  // Membres
a7189c82   Geoffrey PREUD'HOMME   Membres comme con...
129
  api.get('/membres', function (req, res) { // Liste des membres
7a1fe62d   Geoffrey PREUD'HOMME   Consistence des noms
130
      MembresServ.list(function (err, membres) {
2f593328   Geoffrey PREUD'HOMME   Linting
131
          if (err)
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
132
              res.status(500).send(err);
25f72955   Geoffrey PREUD'HOMME   Liste des membres...
133
134
          else
              res.json(membres);
2f593328   Geoffrey PREUD'HOMME   Linting
135
      });
0bda071e   Geoffrey PREUD'HOMME   Reroutage
136
137
  });
  
82d5512d   Geoffrey PREUD'HOMME   Vérification logi...
138
  api.post('/membres', assert(function (req, res, cb) {
4a593a85   Geoffrey PREUD'HOMME   Les pages d'erreu...
139
      cb(null, typeof req.body.login == 'string' && req.body.login !== '');
82d5512d   Geoffrey PREUD'HOMME   Vérification logi...
140
  }), reqPerm('canAddMembre'), function (req, res) { // Ajout d'un membre
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
141
142
      MembresServ.add(req.body, function (err, membre) {
          if (err)
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
143
              res.status(500).send(err);
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
144
145
          else
              res.json(membre);
2201e360   Geoffrey PREUD'HOMME   Le login se fait ...
146
      });
0bda071e   Geoffrey PREUD'HOMME   Reroutage
147
148
  });
  
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
149
  api.delete('/membres/:membre_id', reqPerm('canDelMembre'), function (req, res) { // Supression d'un membre
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
150
151
      MembresServ.remove(req.params.membre_id, function (err, membre) {
          if (err)
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
152
              res.status(500).send(err);
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
153
154
          else
              res.json(null);
2201e360   Geoffrey PREUD'HOMME   Le login se fait ...
155
      });
2201e360   Geoffrey PREUD'HOMME   Le login se fait ...
156
  });
0bda071e   Geoffrey PREUD'HOMME   Reroutage
157
  
12162cc1   Geoffrey PREUD'HOMME   Liste de conversa...
158
159
160
161
162
  
  // Conversations
  api.get('/convs', function (req, res) { // Liste des convs
      ConvsServ.list(function (err, convs) {
          if (err)
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
163
              res.status(500).send(err);
12162cc1   Geoffrey PREUD'HOMME   Liste de conversa...
164
165
166
167
168
          else
              res.json(convs);
      });
  });
  
9378de0d   Geoffrey PREUD'HOMME   Affichage d'une c...
169
170
171
  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...
172
              res.status(500).send(err);
9378de0d   Geoffrey PREUD'HOMME   Affichage d'une c...
173
174
175
176
177
          else
              res.json(conv);
      });
  });
  
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
178
  api.post('/convs', reqPerm('canAddConv'), function (req, res) { // Ajout d'un conv
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
179
180
      ConvsServ.add(req.body, function (err, conv) {
          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(conv);
12162cc1   Geoffrey PREUD'HOMME   Liste de conversa...
184
185
186
      });
  });
  
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
187
  api.delete('/convs/:conv_id', reqPerm('canDelConv'), function (req, res) { // Supression d'un conv
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
188
189
      ConvsServ.remove(req.params.conv_id, function (err, conv) {
          if (err)
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
190
              res.status(500).send(err);
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
191
192
193
194
195
196
          else
              res.json(null);
      });
  });
  
  // Messages
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
197
  api.get('/messs/:conv_id', reqAuth(), function (req, res) { // Liste des messs
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
198
      MessServ.list(req.params.conv_id, function (err, messs) {
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
199
          if (err)
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
200
              res.status(500).send(err);
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
201
202
203
204
205
          else
              res.json(messs);
      });
  });
  
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
206
  api.get('/messs/:mess_id', reqAuth(), function (req, res) { // Une mess
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
207
208
      MessServ.get(req.params.mess_id, function (err, mess) {
          if (err)
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
209
              res.status(500).send(err);
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
210
211
212
213
214
          else
              res.json(mess);
      });
  });
  
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
215
  api.post('/messs', reqPerm('canAddMess'), function (req, res) { // Ajout d'un mess
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
216
217
218
      data = req.body;
      data.login = req.session.login;
      MessServ.add(data, function (err, mess) {
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
219
          if (err)
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
220
              res.status(500).send(err);
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
221
222
223
224
225
          else
              res.json(mess);
      });
  });
  
097f26f7   Geoffrey PREUD'HOMME   Améliorations cot...
226
  api.delete('/messs/:mess_id', reqPerm('canDelMess'), function (req, res) { // Supression d'un mess
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
227
228
      MessServ.remove(req.params.mess_id, function (err, mess) {
          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
          else
              res.json(null);
12162cc1   Geoffrey PREUD'HOMME   Liste de conversa...
232
233
234
      });
  });
  
d0a827b6   Geoffrey PREUD'HOMME   404, 405, 406, 41...
235
236
237
238
239
240
241
  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...
242
  
2201e360   Geoffrey PREUD'HOMME   Le login se fait ...
243
  module.exports = api;