Commit 79edca45826435667b18f8691782591c3b4c01cd
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 |