Bläddra i källkod

Update login to move logic to controllers

Matt Coles 9 år sedan
förälder
incheckning
ea87771cdb

+ 0 - 0
controllers/event-controller.js


+ 58 - 0
controllers/permissions-controller.js

@@ -0,0 +1,58 @@
1
+var society_controller = require("./society-controller.js");
2
+var bcrypt = require("bcrypt-nodejs");
3
+
4
+module.exports = {
5
+  user_can_auth: function (user, pass, complete) {
6
+    var user_controller = require("./user-controller.js");
7
+    user_controller.get_password(user, function (result) {
8
+      bcrypt.compare(pass, result, function (err, matched) {
9
+        complete(matched === true);
10
+      });
11
+    })
12
+  },
13
+
14
+  user_can_view_society: function (auth, complete) {
15
+    complete(true);
16
+  },
17
+
18
+  user_can_view_soc_events: function (auth, society, complete) {
19
+    var user_controller = require("./user-controller.js");
20
+    user_controller.get_user_from_auth(auth, function (username) {
21
+      if (!username) {
22
+        complete(false);
23
+        return;
24
+      }
25
+      society_controller.get_user_list(society, function (userlist) {
26
+        if (!userlist[0]) {
27
+          complete(false);
28
+          return;
29
+        }
30
+        complete((userlist.indexOf(username) !== -1));
31
+      });
32
+    });
33
+  },
34
+
35
+  user_can_manage_soc_events: function (auth, society, complete) {
36
+    var user_controller = require("./user-controller.js");
37
+    user_controller.get_user_from_auth(auth, function(username) {
38
+      if (!username) {
39
+        complete(false);
40
+        return;
41
+      }
42
+      society_controller.get_admin_list(society, function (adminlist) {
43
+        if (!adminlist[0]) {
44
+          complete(false);
45
+          return;
46
+        }
47
+        complete((adminlist.indexOf(username) !== -1));
48
+      });
49
+    });
50
+  },
51
+
52
+  user_can_manage_society: function (auth, society, complete) {
53
+    var user_controller = require("./user-controller.js");
54
+    user_can_manage_soc_events(auth, society, function (permission) {
55
+      complete(permission);
56
+    });
57
+  }
58
+}

+ 0 - 0
controllers/society-controller.js


+ 58 - 0
controllers/user-controller.js

@@ -0,0 +1,58 @@
1
+var Redis = require("ioredis");
2
+var redis = new Redis();
3
+var auth_gen = require("./../utils/auth-keys.js");
4
+var permissions_controller = require("./permissions-controller.js");
5
+
6
+module.exports = {
7
+  get_password: function (user, complete) {
8
+    var user_key = "user:" + user;
9
+
10
+    redis.hget(user_key, "password", function (err, password) {
11
+      if (password) {
12
+        complete(password);
13
+      } else {
14
+        complete("");
15
+      }
16
+    });
17
+  },
18
+
19
+  get_user_from_auth: function (auth, complete) {
20
+    var auth_key = "auth-key:" + auth;
21
+
22
+    redis.get(auth_key, function (err, username) {
23
+      if (username) {
24
+        complete(username);
25
+      } else {
26
+        complete("");
27
+      }
28
+    });
29
+  },
30
+
31
+  authenticate: function (user, pass, complete) {
32
+    permissions_controller.user_can_auth(user, pass, function (success) {
33
+      var user_key = "user:" + user;
34
+
35
+      if (success) {
36
+        redis.hget(user_key, "auth-key", function (auth) {
37
+          var new_auth_key = auth_gen.generate(user);
38
+          if (auth) {
39
+            redis.del("auth-key:" + auth);
40
+          }
41
+          redis.set("auth-key:" + auth, new_auth_key);
42
+          redis.hset(user_key, "auth-key", new_auth_key);
43
+
44
+          complete({
45
+            "logged_in": 1,
46
+            "auth-key": new_auth_key,
47
+            "error": 0
48
+          });
49
+        });
50
+      } else {
51
+        complete({
52
+          "logged_in": 0,
53
+          "error": 1
54
+        });
55
+      }
56
+    });
57
+  }
58
+}

+ 10 - 37
routes/user/login.js

@@ -1,7 +1,4 @@
1
-var Redis = require("ioredis");
2
-var redis = new Redis();
3
-var bcrypt = require('bcrypt-nodejs');
4
-var authgen = require("./../../utils/auth-keys.js");
1
+var user_controller = require("./../../controllers/user-controller.js");
5 2
 
6 3
 module.exports = {
7 4
   perform: function(a,b) {
@@ -12,38 +9,14 @@ module.exports = {
12 9
 var perform = function(req, res) {
13 10
   var username = req.body.user || req.query.user;
14 11
   var password = req.body.password || req.query.password;
15
-  var uquery   = 'user:' + username;
16 12
 
17
-  redis.hgetall(uquery).then(function (result) {
18
-    if (result.password && result !== undefined && result !== null) {
19
-      var user_object = result;
20
-      if (username && password) {
21
-        username = username.toLowerCase();
22
-        bcrypt.compare(password, user_object.password, function (err, matched) {
23
-          if (matched) {
24
-            var new_auth_key = authgen.generate(username);
25
-            var aquery = "auth-key:" + new_auth_key;
26
-            redis.set(aquery, username);
27
-            redis.hset(uquery, "auth-key", new_auth_key);
28
-            if (user_object["auth-key"]) {
29
-              redis.del("auth-key:" + user_object["auth-key"]);
30
-            }
31
-            res.send({"logged_in": 1,
32
-                     "auth-key": new_auth_key,
33
-                     "error": 0})
34
-          } else {
35
-            res.send({"logged_in": 0,
36
-                     "error": 2});
37
-          }
38
-        });
39
-      } else {
40
-        res.send({"logged_in": 0,
41
-                 "error": 3});
42
-      }
43
-    } else {
44
-      res.send({"logged_in": 0,
45
-               "error": 1});
46
-               return;
47
-    }
48
-  });
13
+  if (username && password) {
14
+    user_controller.authenticate(username, password, function (result) {
15
+      res.send(result);
16
+    });
17
+  } else {
18
+    res.send({"logged_in": 0,
19
+              "error": 2});
20
+  }
21
+
49 22
 };