Blame view

app/routes/ApiRtes.js 5.68 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
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
      return function (req, res, next) {
          SessionsServ.use(req.cookies.session, function (err) {
              if (err) {
                  res.status(500).send(err);
              } else {
                  if (SessionsServ.cur) {
                      req.session = SessionsServ.cur;
                      next();
                  } else {
                      res.status(401).end();
                  }
              }
          });
      };
  };
  
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
28
  reqVerified = function (verify) {
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
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
          reqAuth()(req, res, function () {
              verify(req, res, function (err, verified) {
                  if (err) {
                      res.status(500).send(err);
                  } else {
                      if (verified) {
                          next();
                      } else {
                          res.status(403);
                      }
                  }
              });
          });
      };
  };
  
  reqPerm = function (perm) {
      return reqVerified(function (req, res, cb) {
          cb(null, req.session[perm]);
      });
  };
  
  assert = function (test) {
      return function (req, res, next) {
          reqAuth()(req, res, function () {
              test(req, res, function (err, verified) {
                  if (err) {
                      res.status(500).send(err);
                  } else {
                      if (verified) {
                          next();
                      } else {
                          res.status(400);
                      }
                  }
              });
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
66
67
68
69
          });
      };
  };
  
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
70
  
10852373   Geoffrey PREUD'HOMME   Session contrôleu...
71
72
  // Sessions
  api.get('/session', function (req, res) { // Informations sur la session
2f593328   Geoffrey PREUD'HOMME   Linting
73
      if (req.cookies && req.cookies.session) {
7a1fe62d   Geoffrey PREUD'HOMME   Consistence des noms
74
          SessionsServ.use(req.cookies.session, function (err) {
2f593328   Geoffrey PREUD'HOMME   Linting
75
76
77
              if (err) {
                  res.send(err);
              } else {
7a1fe62d   Geoffrey PREUD'HOMME   Consistence des noms
78
                  res.send(SessionsServ.cur);
2f593328   Geoffrey PREUD'HOMME   Linting
79
80
81
82
83
84
              }
          });
          // TODO si pas bon : res.clearCookie('session')
      } else {
          res.send('missing');
      }
10852373   Geoffrey PREUD'HOMME   Session contrôleu...
85
86
87
  });
  
  api.post('/session', function (req, res) { // Se connecter
7a1fe62d   Geoffrey PREUD'HOMME   Consistence des noms
88
89
      DecryptServ.decrypt(req.body[0], function (data) {
          SessionsServ.open(JSON.parse(data), function (err) {
2f593328   Geoffrey PREUD'HOMME   Linting
90
91
92
              if (err) {
                  res.send(err);
              } else {
7a1fe62d   Geoffrey PREUD'HOMME   Consistence des noms
93
94
                  res.cookie('session', SessionsServ.cur._id);
                  res.send(SessionsServ.cur);
2f593328   Geoffrey PREUD'HOMME   Linting
95
96
              }
          });
2201e360   Geoffrey PREUD'HOMME   Le login se fait ...
97
      });
2201e360   Geoffrey PREUD'HOMME   Le login se fait ...
98
  });
10852373   Geoffrey PREUD'HOMME   Session contrôleu...
99
100
  
  api.delete('/session', function (req, res) { // Se déconnecter
2f593328   Geoffrey PREUD'HOMME   Linting
101
      if (req.cookies.session) {
7a1fe62d   Geoffrey PREUD'HOMME   Consistence des noms
102
          SessionsServ.delete(req.cookies.session, function () {
2f593328   Geoffrey PREUD'HOMME   Linting
103
104
105
106
107
108
              res.clearCookie('session');
              res.end();
          });
      } else {
          res.send('missing');
      }
2201e360   Geoffrey PREUD'HOMME   Le login se fait ...
109
  });
10852373   Geoffrey PREUD'HOMME   Session contrôleu...
110
  
10852373   Geoffrey PREUD'HOMME   Session contrôleu...
111
  
0bda071e   Geoffrey PREUD'HOMME   Reroutage
112
  // Membres
a7189c82   Geoffrey PREUD'HOMME   Membres comme con...
113
  api.get('/membres', function (req, res) { // Liste des membres
7a1fe62d   Geoffrey PREUD'HOMME   Consistence des noms
114
      MembresServ.list(function (err, membres) {
2f593328   Geoffrey PREUD'HOMME   Linting
115
116
          if (err)
              res.send(err);
25f72955   Geoffrey PREUD'HOMME   Liste des membres...
117
118
          else
              res.json(membres);
2f593328   Geoffrey PREUD'HOMME   Linting
119
      });
0bda071e   Geoffrey PREUD'HOMME   Reroutage
120
121
  });
  
82d5512d   Geoffrey PREUD'HOMME   Vérification logi...
122
123
124
  api.post('/membres', assert(function (req, res, cb) {
      cb(typeof req.body.login == 'string' && req.body.login !== '');
  }), reqPerm('canAddMembre'), function (req, res) { // Ajout d'un membre
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
125
126
127
128
129
      MembresServ.add(req.body, function (err, membre) {
          if (err)
              res.send(err);
          else
              res.json(membre);
2201e360   Geoffrey PREUD'HOMME   Le login se fait ...
130
      });
0bda071e   Geoffrey PREUD'HOMME   Reroutage
131
132
  });
  
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
133
  api.delete('/membres/:membre_id', reqPerm('canDelMembre'), function (req, res) { // Supression d'un membre
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
134
135
136
137
138
      MembresServ.remove(req.params.membre_id, function (err, membre) {
          if (err)
              res.send(err);
          else
              res.json(null);
2201e360   Geoffrey PREUD'HOMME   Le login se fait ...
139
      });
2201e360   Geoffrey PREUD'HOMME   Le login se fait ...
140
  });
0bda071e   Geoffrey PREUD'HOMME   Reroutage
141
  
12162cc1   Geoffrey PREUD'HOMME   Liste de conversa...
142
143
144
145
146
147
148
149
150
151
152
  
  // Conversations
  api.get('/convs', function (req, res) { // Liste des convs
      ConvsServ.list(function (err, convs) {
          if (err)
              res.send(err);
          else
              res.json(convs);
      });
  });
  
9378de0d   Geoffrey PREUD'HOMME   Affichage d'une c...
153
154
155
156
157
158
159
160
161
  api.get('/convs/:conv_id', function (req, res) { // Une conv
      ConvsServ.get(req.params.conv_id, function (err, conv) {
          if (err)
              res.send(err);
          else
              res.json(conv);
      });
  });
  
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
162
  api.post('/convs', reqPerm('canAddConv'), function (req, res) { // Ajout d'un conv
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
163
164
165
166
167
      ConvsServ.add(req.body, function (err, conv) {
          if (err)
              res.send(err);
          else
              res.json(conv);
12162cc1   Geoffrey PREUD'HOMME   Liste de conversa...
168
169
170
      });
  });
  
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
171
  api.delete('/convs/:conv_id', reqPerm('canDelConv'), function (req, res) { // Supression d'un conv
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
172
173
174
175
176
177
178
179
180
      ConvsServ.remove(req.params.conv_id, function (err, conv) {
          if (err)
              res.send(err);
          else
              res.json(null);
      });
  });
  
  // Messages
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
181
182
  api.get('/messs/:conv_id', function (req, res) { // Liste des messs
      MessServ.list(req.params.conv_id, function (err, messs) {
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
          if (err)
              res.send(err);
          else
              res.json(messs);
      });
  });
  
  api.get('/messs/:mess_id', function (req, res) { // Une mess
      MessServ.get(req.params.mess_id, function (err, mess) {
          if (err)
              res.send(err);
          else
              res.json(mess);
      });
  });
  
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
199
200
201
202
  api.post('/messs', reqAuth(), function (req, res) { // Ajout d'un mess
      data = req.body;
      data.login = req.session.login;
      MessServ.add(data, function (err, mess) {
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
203
204
205
206
207
208
209
          if (err)
              res.send(err);
          else
              res.json(mess);
      });
  });
  
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
210
  api.delete('/messs/:mess_id', reqAuth(), function (req, res) { // Supression d'un mess
79edca45   Geoffrey PREUD'HOMME   Nouvelle façon de...
211
212
213
214
215
      MessServ.remove(req.params.mess_id, function (err, mess) {
          if (err)
              res.send(err);
          else
              res.json(null);
12162cc1   Geoffrey PREUD'HOMME   Liste de conversa...
216
217
218
      });
  });
  
f22cd7f3   Geoffrey PREUD'HOMME   Système de messag...
219
220
221
  // TODO 404
  // TODO 418
  
2201e360   Geoffrey PREUD'HOMME   Le login se fait ...
222
  module.exports = api;