Public API for a society manager application

user-controller.js 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  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_all_public_infos: function (complete) {
  38. var self = this;
  39. var stream = redis.scanStream({
  40. match: "user:*"
  41. });
  42. var usernames = [];
  43. stream.on('data', function (keys) {
  44. keys.map(function (key) {
  45. usernames.push(key.split(":")[1]);
  46. });
  47. });
  48. stream.on('end', function () {
  49. var user_objects = [];
  50. if (usernames.length === 0) {
  51. complete({
  52. "users": []
  53. })
  54. } else {
  55. for (var ii = 0; ii < usernames.length; ii++) {
  56. self.get_public_user_info(usernames[ii], function (response) {
  57. user_objects.push(response.user);
  58. if (user_objects.length === usernames.length) {
  59. user_objects.sort(function(a, b) {
  60. var textA = a.username.toLowerCase();
  61. var textB = b.username.toLowerCase();
  62. return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;
  63. });
  64. complete({
  65. "users": user_objects
  66. })
  67. }
  68. });
  69. }
  70. }
  71. });
  72. },
  73. get_user_from_auth: function (auth, complete) {
  74. var auth_key = "auth-key:" + auth;
  75. redis.get(auth_key, function (err, username) {
  76. if (username) {
  77. complete(username);
  78. } else {
  79. complete("");
  80. }
  81. });
  82. },
  83. user_exists: function (user, complete) {
  84. var user_key = "user:" + user;
  85. redis.hgetall(user_key, function (err, result) {
  86. complete(!!result.password);
  87. });
  88. },
  89. authenticate: function (user, pass, complete) {
  90. permissions_controller.user_can_auth(user, pass, function (success) {
  91. var user_key = "user:" + user;
  92. if (success) {
  93. redis.hget(user_key, "auth-key", function (auth) {
  94. var new_auth_key = auth_gen.generate(user);
  95. if (auth) {
  96. redis.del("auth-key:" + auth);
  97. }
  98. redis.set("auth-key:" + auth, new_auth_key);
  99. redis.hset(user_key, "auth-key", new_auth_key);
  100. complete({
  101. "logged_in": 1,
  102. "auth-key": new_auth_key,
  103. "error": 0
  104. });
  105. });
  106. } else {
  107. complete({
  108. "logged_in": 0,
  109. "error": 1
  110. });
  111. }
  112. });
  113. },
  114. register: function (user, pass, complete) {
  115. var user_key = "user:" + user;
  116. var auth_key = "";
  117. var new_user = {};
  118. this.user_exists(user, function (exists) {
  119. if (exists) {
  120. complete({
  121. "registered": 0,
  122. "error": 1
  123. });
  124. } else {
  125. bcrypt.hash(pass, null, null, function (err, hash) {
  126. new_user["password"] = hash;
  127. new_user["auth-key"] = auth_gen.generate(user);
  128. auth_key = "auth-key:" + new_user["auth-key"];
  129. redis.hset(user_key, "password", new_user["password"]);
  130. redis.hset(user_key, "auth-key", new_user["auth-key"]);
  131. redis.hset(user_key, "societies", JSON.stringify([]));
  132. redis.hset(user_key, "friends", JSON.stringify([]));
  133. redis.hset(user_key, "pending_events", JSON.stringify([]));
  134. redis.hset(user_key, "accepted_events", JSON.stringify([]));
  135. redis.hset(user_key, "declined_events", JSON.stringify([]));
  136. redis.set(auth_key, user);
  137. complete({
  138. "registered": 1,
  139. "auth-key": new_user["auth-key"],
  140. "error": 0
  141. })
  142. });
  143. }
  144. })
  145. }
  146. }