Przeglądaj źródła

Add route for kicking users from societies

Matt Coles 9 lat temu
rodzic
commit
2b05c80e38
4 zmienionych plików z 88 dodań i 8 usunięć
  1. 22 0
      README.md
  2. 40 8
      presenters/society-controller.js
  3. 24 0
      routes/society/kick-user.js
  4. 2 0
      utils/route-manager.js

+ 22 - 0
README.md

@@ -25,6 +25,7 @@ Server for Integrated Project, powered by Express.js and Redis, listens for HTTP
25 25
         * [/society/join/](#societyjoin)
26 26
         * [/society/leave/](#societyleave)
27 27
         * [/society/promote/](#societypromote)
28
+        * [/society/kick/](#societykick)
28 29
     * __Events__
29 30
         * [/events/create/](#eventscreate)
30 31
         * [/events/view/:eventid](#eventsvieweventid)
@@ -347,6 +348,27 @@ The error codes are as follows, `1` indicates that the auth key is invalid, `2`
347 348
 indicates that the user does not belong to the society, `3` indicates that the
348 349
 user is already an admin and `4` indicates a malformed request.
349 350
 
351
+### /society/kick/
352
+To kick a user from a society, a `POST` request should be sent with the
353
+following data:
354
+```javascript
355
+{
356
+    "user": "Test3",
357
+    "society": "TestSociety",
358
+    "auth": "$2a$10$qjkvbcPZ4YC7/a/I0ZpTaeJp6auXjGrG9pgAdI3PP61u4CftQPSL2"
359
+}
360
+```
361
+The response will then be formed as follows:
362
+```javascript
363
+{
364
+    "success": 1,
365
+    "error": 0
366
+}
367
+```
368
+The error codes are as follows, `1` indicates that the auth key is invalid, `2`
369
+indicates that the user does not belong to the society, `3` indicates that the
370
+user is an admin therefore cannot be kicked and `4` indicates a malformed request.
371
+
350 372
 ### /events/create/
351 373
 To create a new event, a `POST` request should be sent with the following data:
352 374
 ```javascript

+ 40 - 8
presenters/society-controller.js

@@ -59,9 +59,9 @@ module.exports = {
59 59
                     redis.hget("user:" + admin_name, "societies", function (err, result) {
60 60
                       if (result) {
61 61
                         result = JSON.parse(result);
62
-                        redis.hset("user:" + admin_name, "societies", JSON.stringify(result.concat(society_name)));
62
+                        redis.hset("user:" + admin_name, "societies", JSON.stringify(result.concat(society_name.toLowerCase())));
63 63
                       } else {
64
-                        redis.hset("user:" + admin_name, "societies", JSON.stringify([society_name]));
64
+                        redis.hset("user:" + admin_name, "societies", JSON.stringify([society_name.toLowerCase()]));
65 65
                       }
66 66
                     });
67 67
                   });
@@ -178,6 +178,38 @@ module.exports = {
178 178
     });
179 179
   },
180 180
 
181
+  kick_user: function (user, soc_name, auth, complete) {
182
+    var self = this;
183
+    permissions_controller.user_can_manage_society(auth, soc_name, function (isadmin) {
184
+      if (isadmin) {
185
+        user_controller.get_raw_user(user.toLowerCase(), function (result) {
186
+          if (result["auth-key"]) {
187
+            permissions_controller.user_can_manage_society(result["auth-key"], soc_name, function (admin) {
188
+              if (admin) {
189
+                complete({
190
+                  "success": 0,
191
+                  "error": 3
192
+                });
193
+              } else {
194
+                self.leave_society(soc_name, result["auth-key"], complete);
195
+              }
196
+            });
197
+          } else {
198
+            complete({
199
+              "success": 0,
200
+              "error": 2
201
+            });
202
+          }
203
+        });
204
+      } else {
205
+        complete({
206
+          "success": 0,
207
+          "error": 1
208
+        });
209
+      }
210
+    });
211
+  },
212
+
181 213
   leave_society: function (soc_name, auth, complete) {
182 214
     permissions_controller.user_is_in_society(auth, soc_name, function(user_in_soc) {
183 215
       if (user_in_soc) {
@@ -254,12 +286,12 @@ module.exports = {
254 286
                     "error": 3
255 287
                   });
256 288
                 } else {
257
-                redis.hset("society:" + soc_name.toLowerCase(), "admins", JSON.stringify(result.concat(promotee)));
258
-                complete({
259
-                  "success": 1,
260
-                  "error": 0
261
-                });
262
-              }
289
+                  redis.hset("society:" + soc_name.toLowerCase(), "admins", JSON.stringify(result.concat(promotee)));
290
+                  complete({
291
+                    "success": 1,
292
+                    "error": 0
293
+                  });
294
+                }
263 295
               }else {
264 296
                 console.error("Error could not find admin list in society.");
265 297
               }

+ 24 - 0
routes/society/kick-user.js

@@ -0,0 +1,24 @@
1
+var society_controller = require("./../../presenters/society-controller.js");
2
+
3
+module.exports = {
4
+  perform: function (a,b) {
5
+    perform(a,b);
6
+  }
7
+}
8
+
9
+var perform = function (req, res) {
10
+  var kicked = req.body.user || req.query.user;
11
+  var soc_name = req.body.society || req.query.society;
12
+  var auth = req.body.auth || req.query.auth;
13
+
14
+  if (kicked && soc_name && auth) {
15
+    society_controller.kick_user(kicked, soc_name, auth, function (response) {
16
+      res.send(response);
17
+    });
18
+  } else {
19
+    res.send({
20
+      "success": 0,
21
+      "error": 4
22
+    })
23
+  }
24
+};

+ 2 - 0
utils/route-manager.js

@@ -9,6 +9,7 @@ var soc_view = require("../routes/society/view-society.js");
9 9
 var soc_join = require("../routes/society/join-society.js");
10 10
 var soc_leave = require("../routes/society/leave-society.js");
11 11
 var soc_promote = require("../routes/society/promote-user.js");
12
+var soc_kick = require("../routes/society/kick-user.js");
12 13
 var soc_events = require("../routes/events/view-all-society-events.js");
13 14
 var event_create = require("../routes/events/create-society-event.js");
14 15
 var event_view = require("../routes/events/view-society-events.js");
@@ -35,6 +36,7 @@ router.all('/society/view/:societyid/events/', soc_events.perform);
35 36
 router.all('/society/join/', soc_join.perform);
36 37
 router.all('/society/leave/', soc_leave.perform);
37 38
 router.all('/society/promote/', soc_promote.perform);
39
+router.all('/society/kick/', soc_kick.perform);
38 40
 
39 41
 router.all('/events/create/', event_create.perform);
40 42
 router.all('/events/view/:eventid', event_view.perform);