Ver código fonte

Move register logic to controllers and update README.md to reflect new APIs

Matt Coles 9 anos atrás
pai
commit
3f83445f01
4 arquivos alterados com 58 adições e 31 exclusões
  1. 4 4
      README.md
  2. 39 0
      controllers/user-controller.js
  3. 1 0
      routes/user/login.js
  4. 14 27
      routes/user/register.js

+ 4 - 4
README.md

@@ -63,7 +63,8 @@ The server will then respond with a JSON object that looks something like this:
63 63
     "error": 0 // Error code, if an error occured. 0 indicates no error.
64 64
 }
65 65
 ```
66
-The value of the error code will be `1` if the username already exists.
66
+The value of the error code will be `1` if the username already exists, and `2`
67
+if the request was malformed.
67 68
 
68 69
 ### /user/auth/
69 70
 In order to log into an account, or essentially request a new authentication
@@ -84,9 +85,8 @@ existing authentication key for that account. Note that you do not need to use
84 85
     "error": 0 // Error code, if an error occured. 0 indicates no error.
85 86
 }
86 87
 ```
87
-The error codes are as follows, `1` indicates the username could not be found,
88
-`2` indicates that the password is invalid and `3` indicates that the login
89
-request was malformed.
88
+The error codes are as follows, `1` indicates the username or password was
89
+invalid and `2` indicates that the login request was malformed.
90 90
 
91 91
 ### /society/create/
92 92
 To create a new society, a `POST` request should be sent with the following

+ 39 - 0
controllers/user-controller.js

@@ -28,6 +28,14 @@ module.exports = {
28 28
     });
29 29
   },
30 30
 
31
+  user_exists: function (user, complete) {
32
+    var user_key = "user:" + user;
33
+
34
+    redis.hgetall(user_key, function (err, result) {
35
+      complete(!!result.password);
36
+    });
37
+  },
38
+
31 39
   authenticate: function (user, pass, complete) {
32 40
     permissions_controller.user_can_auth(user, pass, function (success) {
33 41
       var user_key = "user:" + user;
@@ -54,5 +62,36 @@ module.exports = {
54 62
         });
55 63
       }
56 64
     });
65
+  },
66
+
67
+  register: function (user, pass, complete) {
68
+    var user_key = "user:" + user;
69
+    var auth_key = "";
70
+    var new_user = {};
71
+
72
+    this.user_exists(user, function (exists) {
73
+      if (exists) {
74
+        complete({
75
+          "registered": 0,
76
+          "error": 1
77
+        });
78
+      } else {
79
+        bcrypt.hash(pass, null, null, function (err, hash) {
80
+          new_user["password"] = hash;
81
+          new_user["auth-key"] = auth_gen.generate(user);
82
+          auth_key = "auth-key:" + new_user["auth-key"];
83
+
84
+          redis.hset(user_key, "password", new_user["password"]);
85
+          redis.hset(user_key, "auth-key", new_user["auth-key"]);
86
+          redis.set(auth_key, user);
87
+          complete({
88
+            "registered": 1,
89
+            "auth-key": new_user["auth-key"],
90
+            "error": 0
91
+          })
92
+        });
93
+      }
94
+    })
95
+
57 96
   }
58 97
 }

+ 1 - 0
routes/user/login.js

@@ -11,6 +11,7 @@ var perform = function(req, res) {
11 11
   var password = req.body.password || req.query.password;
12 12
 
13 13
   if (username && password) {
14
+    username = username.toLowerCase();
14 15
     user_controller.authenticate(username, password, function (result) {
15 16
       res.send(result);
16 17
     });

+ 14 - 27
routes/user/register.js

@@ -1,6 +1,4 @@
1
-var Redis = require("ioredis");
2
-var redis = new Redis();
3
-var authgen = require("./../../utils/auth-keys.js");
1
+var user_controller = require("./../../controllers/user-controller.js");
4 2
 
5 3
 module.exports = {
6 4
   perform: function(a,b) {
@@ -9,29 +7,18 @@ module.exports = {
9 7
 }
10 8
 
11 9
 var perform = function (req, res) {
12
-  var tmp_username = req.body.user || req.query.user;
13
-  var tmp_password = req.body.password || req.query.password;
14
-  tmp_username     = tmp_username.toLowerCase();
15
-  var uquery       = 'user:' + tmp_username;
16
-  var aquery       = "";
17
-  var user_object  = {};
10
+  var username = req.body.user || req.query.user;
11
+  var password = req.body.password || req.query.password;
18 12
 
19
-  redis.hgetall(uquery).then(function (result) {
20
-    if (result.password && result !== undefined && result !== null) {
21
-      res.send({"registered": 0,
22
-               "error": 1});
23
-    } else {
24
-      bcrypt.hash(tmp_password, null, null, function (err, hash) {
25
-        user_object["password"] = hash;
26
-        user_object["auth-key"] = authgen.generate(tmp_username);
27
-        aquery = "auth-key:" + user_object["auth-key"];
28
-        redis.hset(uquery, "password", user_object.password);
29
-        redis.hset(uquery, "auth-key", user_object["auth-key"]);
30
-        redis.set(aquery, tmp_username);
31
-        res.send({"registered": 1,
32
-                 "auth-key": user_object["auth-key"],
33
-                 "error": 0});
34
-      });
35
-    }
36
-  });
13
+  if (username && password) {
14
+    username = username.toLowerCase();
15
+    user_controller.register(username, password, function (result) {
16
+      res.send(result);
17
+    })
18
+  } else {
19
+    res.send({
20
+      "registered": 0,
21
+      "error": 2
22
+    })
23
+  }
37 24
 };