Bladeren bron

Add promotion route

Matt Coles 9 jaren geleden
bovenliggende
commit
5bbece66cf
4 gewijzigde bestanden met toevoegingen van 89 en 0 verwijderingen
  1. 22 0
      README.md
  2. 41 0
      presenters/society-controller.js
  3. 24 0
      routes/society/promote-user.js
  4. 2 0
      utils/route-manager.js

+ 22 - 0
README.md

@@ -24,6 +24,7 @@ Server for Integrated Project, powered by Express.js and Redis, listens only on
24 24
         * [/society/view/:society\_name/events](#societyviewsociety_nameevents)
25 25
         * [/society/join/](#societyjoin)
26 26
         * [/society/leave/](#societyleave)
27
+        * [/society/promote/](#societypromote)
27 28
     * __Events__
28 29
         * [/events/create/](#eventscreate)
29 30
         * [/events/view/:eventid](#eventsvieweventid)
@@ -310,6 +311,27 @@ The response is then formed as follows:
310 311
 The error codes are as follows, `1` indicates that the user isn't a member
311 312
 of that society and `2` indicates a malformed request.
312 313
 
314
+### /society/promote/
315
+To promote a user within a society, a `POST` request should be sent with the
316
+following data:
317
+```javascript
318
+{
319
+    "user": "Test1",
320
+    "society": "TestSociety",
321
+    "auth": "$2a$10$qjkvbcPZ4YC7/a/I0ZpTaeJp6auXjGrG9pgAdI3PP61u4CftQPSL2"
322
+}
323
+```
324
+The response will then be formed as follows:
325
+```javascript
326
+{
327
+    "success": 1,
328
+    "error": 0
329
+}
330
+```
331
+The error codes are as follows, `1` indicates that the auth key is invalid, `2`
332
+indicates that the user does not belong to the society, `3` indicates that the
333
+user is already an admin and `4` indicates a malformed request.
334
+
313 335
 ### /events/create/
314 336
 To create a new event, a `POST` request should be sent with the following data:
315 337
 ```javascript

+ 41 - 0
presenters/society-controller.js

@@ -232,5 +232,46 @@ module.exports = {
232 232
         });
233 233
       }
234 234
     });
235
+  },
236
+
237
+  promote_user: function (promotee, soc_name, auth, complete) {
238
+    var self = this;
239
+    permissions_controller.user_can_manage_society(auth, soc_name, function (isadmin) {
240
+      if (isadmin) {
241
+        self.get_user_list(soc_name, function (userlist) {
242
+          if (userlist.indexOf(promotee) !== -1) {
243
+            redis.hget("society:" + soc_name.toLowerCase(), "admins", function (err, result) {
244
+              if (result) {
245
+                result = JSON.parse(result);
246
+                if (result.indexOf(promotee) > -1) {
247
+                  complete({
248
+                    "success": 0,
249
+                    "error": 3
250
+                  });
251
+                } else {
252
+                redis.hset("society:" + soc_name.toLowerCase(), "admins", JSON.stringify(result.concat(promotee)));
253
+                complete({
254
+                  "success": 1,
255
+                  "error": 0
256
+                });
257
+              }
258
+              }else {
259
+                console.error("Error could not find admin list in society.");
260
+              }
261
+            });
262
+          } else {
263
+            complete({
264
+              "success": 0,
265
+              "error": 2
266
+            })
267
+          }
268
+        });
269
+      } else {
270
+        complete({
271
+          "success": 0,
272
+          "error": 1
273
+        })
274
+      }
275
+    });
235 276
   }
236 277
 }

+ 24 - 0
routes/society/promote-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 promotee = 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 (promotee && soc_name && auth) {
15
+    society_controller.promote_user(promotee, 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

@@ -8,6 +8,7 @@ var soc_create = require("../routes/society/create-society.js");
8 8
 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
+var soc_promote = require("../routes/society/promote-user.js");
11 12
 var soc_events = require("../routes/events/view-all-society-events.js");
12 13
 var event_create = require("../routes/events/create-society-event.js");
13 14
 var event_view = require("../routes/events/view-society-events.js");
@@ -28,6 +29,7 @@ router.all('/society/view/(:societyid)?', soc_view.perform);
28 29
 router.all('/society/view/:societyid/events/', soc_events.perform);
29 30
 router.all('/society/join/', soc_join.perform);
30 31
 router.all('/society/leave/', soc_leave.perform);
32
+router.all('/society/promote/', soc_promote.perform);
31 33
 
32 34
 router.all('/events/create/', event_create.perform);
33 35
 router.all('/events/view/:eventid', event_view.perform);