Matt Coles лет назад: 9
Родитель
Сommit
5bbece66cf
4 измененных файлов с 89 добавлено и 0 удалено
  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
         * [/society/view/:society\_name/events](#societyviewsociety_nameevents)
24
         * [/society/view/:society\_name/events](#societyviewsociety_nameevents)
25
         * [/society/join/](#societyjoin)
25
         * [/society/join/](#societyjoin)
26
         * [/society/leave/](#societyleave)
26
         * [/society/leave/](#societyleave)
27
+        * [/society/promote/](#societypromote)
27
     * __Events__
28
     * __Events__
28
         * [/events/create/](#eventscreate)
29
         * [/events/create/](#eventscreate)
29
         * [/events/view/:eventid](#eventsvieweventid)
30
         * [/events/view/:eventid](#eventsvieweventid)
310
 The error codes are as follows, `1` indicates that the user isn't a member
311
 The error codes are as follows, `1` indicates that the user isn't a member
311
 of that society and `2` indicates a malformed request.
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
 ### /events/create/
335
 ### /events/create/
314
 To create a new event, a `POST` request should be sent with the following data:
336
 To create a new event, a `POST` request should be sent with the following data:
315
 ```javascript
337
 ```javascript

+ 41 - 0
presenters/society-controller.js

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

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