Public API for a society manager application

user-controller.js 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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. module.exports = {
  6. get_password: function (user, complete) {
  7. var user_key = "user:" + user;
  8. redis.hget(user_key, "password", function (err, password) {
  9. if (password) {
  10. complete(password);
  11. } else {
  12. complete("");
  13. }
  14. });
  15. },
  16. get_public_user_info: function (user, complete) {
  17. var user_key = "user:" + user;
  18. redis.hgetall(user_key, function(err, result) {
  19. if (result.password) {
  20. var public = {};
  21. public.username = user;
  22. public.societies = JSON.parse(result.societies) || [];
  23. public.friends = JSON.parse(result.friends) || [];
  24. public.accepted_events = JSON.parse(result.accepted_events) || [];
  25. complete({
  26. "user": public,
  27. "error": 0
  28. });
  29. } else {
  30. complete({
  31. "user": {},
  32. "error": 1
  33. });
  34. }
  35. });
  36. },
  37. get_user_from_auth: function (auth, complete) {
  38. var auth_key = "auth-key:" + auth;
  39. redis.get(auth_key, function (err, username) {
  40. if (username) {
  41. complete(username);
  42. } else {
  43. complete("");
  44. }
  45. });
  46. },
  47. user_exists: function (user, complete) {
  48. var user_key = "user:" + user;
  49. redis.hgetall(user_key, function (err, result) {
  50. complete(!!result.password);
  51. });
  52. },
  53. authenticate: function (user, pass, complete) {
  54. permissions_controller.user_can_auth(user, pass, function (success) {
  55. var user_key = "user:" + user;
  56. if (success) {
  57. redis.hget(user_key, "auth-key", function (auth) {
  58. var new_auth_key = auth_gen.generate(user);
  59. if (auth) {
  60. redis.del("auth-key:" + auth);
  61. }
  62. redis.set("auth-key:" + auth, new_auth_key);
  63. redis.hset(user_key, "auth-key", new_auth_key);
  64. complete({
  65. "logged_in": 1,
  66. "auth-key": new_auth_key,
  67. "error": 0
  68. });
  69. });
  70. } else {
  71. complete({
  72. "logged_in": 0,
  73. "error": 1
  74. });
  75. }
  76. });
  77. },
  78. register: function (user, pass, complete) {
  79. var user_key = "user:" + user;
  80. var auth_key = "";
  81. var new_user = {};
  82. this.user_exists(user, function (exists) {
  83. if (exists) {
  84. complete({
  85. "registered": 0,
  86. "error": 1
  87. });
  88. } else {
  89. bcrypt.hash(pass, null, null, function (err, hash) {
  90. new_user["password"] = hash;
  91. new_user["auth-key"] = auth_gen.generate(user);
  92. auth_key = "auth-key:" + new_user["auth-key"];
  93. redis.hset(user_key, "password", new_user["password"]);
  94. redis.hset(user_key, "auth-key", new_user["auth-key"]);
  95. redis.hset(user_key, "societies", JSON.stringify([]));
  96. redis.hset(user_key, "friends", JSON.stringify([]));
  97. redis.hset(user_key, "pending_events", JSON.stringify([]));
  98. redis.hset(user_key, "accepted_events", JSON.stringify([]));
  99. redis.hset(user_key, "declined_events", JSON.stringify([]));
  100. redis.set(auth_key, user);
  101. complete({
  102. "registered": 1,
  103. "auth-key": new_user["auth-key"],
  104. "error": 0
  105. })
  106. });
  107. }
  108. })
  109. }
  110. }