Commit 79edca45826435667b18f8691782591c3b4c01cd

Authored by Geoffrey PREUD'HOMME
1 parent b1eba469

Nouvelle façon de vérifier les permissions

Showing 1 changed file with 91 additions and 46 deletions   Show diff stats
app/routes/ApiRtes.js
@@ -6,6 +6,36 @@ var express = require('express'); @@ -6,6 +6,36 @@ var express = require('express');
6 6
7 var api = express(); 7 var api = express();
8 8
  9 +// Authentication
  10 +requireAuth = function () {
  11 + return function (req, res, next) {
  12 + SessionsServ.use(req.cookies.session, function (err) {
  13 + if (err) {
  14 + res.status(500).send(err);
  15 + } else {
  16 + if (SessionsServ.cur) {
  17 + req.session = SessionsServ.cur;
  18 + next();
  19 + } else {
  20 + res.status(401).end();
  21 + }
  22 + }
  23 + });
  24 + };
  25 +};
  26 +
  27 +requirePerm = function (perm) {
  28 + return function (req, res, next) {
  29 + requireAuth()(req, res, function () {
  30 + if (req.session[perm]) {
  31 + next();
  32 + } else {
  33 + res.status(403).end();
  34 + }
  35 + });
  36 + };
  37 +};
  38 +
9 // Sessions 39 // Sessions
10 api.get('/session', function (req, res) { // Informations sur la session 40 api.get('/session', function (req, res) { // Informations sur la session
11 if (req.cookies && req.cookies.session) { 41 if (req.cookies && req.cookies.session) {
@@ -46,20 +76,6 @@ api.delete('/session', function (req, res) { // Se déconnecter @@ -46,20 +76,6 @@ api.delete('/session', function (req, res) { // Se déconnecter
46 } 76 }
47 }); 77 });
48 78
49 -ifPermission = function (req, res, perm, cb) {  
50 - SessionsServ.use(req.cookies.session, function (err) {  
51 - if (err) {  
52 - res.status(403).end();  
53 - } else {  
54 - if (SessionsServ.cur[perm]) {  
55 - cb();  
56 - } else {  
57 - res.status(403).end();  
58 - }  
59 - }  
60 - });  
61 -};  
62 -  
63 79
64 // Membres 80 // Membres
65 api.get('/membres', function (req, res) { // Liste des membres 81 api.get('/membres', function (req, res) { // Liste des membres
@@ -71,25 +87,21 @@ api.get('/membres', function (req, res) { // Liste des membres @@ -71,25 +87,21 @@ api.get('/membres', function (req, res) { // Liste des membres
71 }); 87 });
72 }); 88 });
73 89
74 -api.post('/membres', function (req, res) { // Ajout d'un membre  
75 - ifPermission(req, res, 'canAddMembre', function () {  
76 - MembresServ.add(req.body, function (err, membre) {  
77 - if (err)  
78 - res.send(err);  
79 - else  
80 - res.json(membre);  
81 - }); 90 +api.post('/membres', requirePerm('canAddMembre'), function (req, res) { // Ajout d'un membre
  91 + MembresServ.add(req.body, function (err, membre) {
  92 + if (err)
  93 + res.send(err);
  94 + else
  95 + res.json(membre);
82 }); 96 });
83 }); 97 });
84 98
85 -api.delete('/membres/:membre_id', function (req, res) { // Supression d'un membre  
86 - ifPermission(req, res, 'canDelMembre', function () {  
87 - MembresServ.remove(req.params.membre_id, function (err, membre) {  
88 - if (err)  
89 - res.send(err);  
90 - else  
91 - res.json(null);  
92 - }); 99 +api.delete('/membres/:membre_id', requirePerm('canDelMembre'), function (req, res) { // Supression d'un membre
  100 + MembresServ.remove(req.params.membre_id, function (err, membre) {
  101 + if (err)
  102 + res.send(err);
  103 + else
  104 + res.json(null);
93 }); 105 });
94 }); 106 });
95 107
@@ -113,25 +125,58 @@ api.get('/convs/:conv_id', function (req, res) { // Une conv @@ -113,25 +125,58 @@ api.get('/convs/:conv_id', function (req, res) { // Une conv
113 }); 125 });
114 }); 126 });
115 127
116 -api.post('/convs', function (req, res) { // Ajout d'un conv  
117 - ifPermission(req, res, 'canAddConv', function () {  
118 - ConvsServ.add(req.body, function (err, conv) {  
119 - if (err)  
120 - res.send(err);  
121 - else  
122 - res.json(conv);  
123 - }); 128 +api.post('/convs', requirePerm('canAddConv'), function (req, res) { // Ajout d'un conv
  129 + ConvsServ.add(req.body, function (err, conv) {
  130 + if (err)
  131 + res.send(err);
  132 + else
  133 + res.json(conv);
124 }); 134 });
125 }); 135 });
126 136
127 -api.delete('/convs/:conv_id', function (req, res) { // Supression d'un conv  
128 - ifPermission(req, res, 'canDelConv', function () {  
129 - ConvsServ.remove(req.params.conv_id, function (err, conv) {  
130 - if (err)  
131 - res.send(err);  
132 - else  
133 - res.json(null);  
134 - }); 137 +api.delete('/convs/:conv_id', requirePerm('canDelConv'), function (req, res) { // Supression d'un conv
  138 + ConvsServ.remove(req.params.conv_id, function (err, conv) {
  139 + if (err)
  140 + res.send(err);
  141 + else
  142 + res.json(null);
  143 + });
  144 +});
  145 +
  146 +// Messages
  147 +api.get('/messs', function (req, res) { // Liste des messs
  148 + MessServ.list(function (err, messs) {
  149 + if (err)
  150 + res.send(err);
  151 + else
  152 + res.json(messs);
  153 + });
  154 +});
  155 +
  156 +api.get('/messs/:mess_id', function (req, res) { // Une mess
  157 + MessServ.get(req.params.mess_id, function (err, mess) {
  158 + if (err)
  159 + res.send(err);
  160 + else
  161 + res.json(mess);
  162 + });
  163 +});
  164 +
  165 +api.post('/messs', requireAuth(), function (req, res) { // Ajout d'un mess
  166 + MessServ.add(req.body, function (err, mess) {
  167 + if (err)
  168 + res.send(err);
  169 + else
  170 + res.json(mess);
  171 + });
  172 +});
  173 +
  174 +api.delete('/messs/:mess_id', requireAuth(), function (req, res) { // Supression d'un mess
  175 + MessServ.remove(req.params.mess_id, function (err, mess) {
  176 + if (err)
  177 + res.send(err);
  178 + else
  179 + res.json(null);
135 }); 180 });
136 }); 181 });
137 182