Public API for a society manager application

index.js 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. var express = require('express');
  2. var app = express();
  3. var bcrypt = require('bcrypt-nodejs');
  4. var Redis = require('ioredis');
  5. var redis = new Redis();
  6. var bodyParser = require('body-parser');
  7. app.use(bodyParser.json()); // for parsing application/json
  8. app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
  9. app.get('/hello/(:name)?', function (req, res) {
  10. var name = req.params.name || "World";
  11. res.send('Hello ' + name + "!");
  12. });
  13. app.all('/register', function(req, res) {
  14. var tmp_username = req.body.user || req.query.user;
  15. var tmp_password = req.body.password || req.query.password;
  16. var uquery = 'user:' + tmp_username;
  17. var user_object = {};
  18. redis.get(uquery).then(function (result) {
  19. if (result !== "" && result !== undefined && result !== null) {
  20. res.send({"registered": 0,
  21. "error": 1});
  22. } else {
  23. bcrypt.hash(tmp_password, null, null, function (err, hash) {
  24. user_object["password"] = hash;
  25. user_object["auth-key"] = bcrypt.hashSync(Date.now().toString() + tmp_username);
  26. redis.set(uquery, JSON.stringify(user_object));
  27. res.send({"registered": 1,
  28. "auth-key": user_object["auth-key"],
  29. "error": 0});
  30. });
  31. }
  32. });
  33. });
  34. app.all('/login', function(req, res) {
  35. var username = req.body.user || req.query.user;
  36. var password = req.body.password || req.query.password;
  37. var auth_key = req.body.auth_key || req.query.auth_key;
  38. var uquery = 'user:' + username;
  39. redis.get(uquery).then(function (result) {
  40. if (result !== "" && result !== undefined && result !== null) {
  41. var user_object = JSON.parse(result);
  42. if (auth_key !== "" && auth_key !== undefined && auth_key !== null) {
  43. if (auth_key === user_object["auth-key"]) {
  44. var timestamp_user = Date.now().toString() + username;
  45. user_object["auth-key"] = bcrypt.hashSync(timestamp_user);
  46. redis.set(uquery, JSON.stringify(user_object));
  47. res.send({"logged_in": 1,
  48. "auth-key": user_object["auth-key"],
  49. "error": 0});
  50. } else {
  51. res.send({"logged_in": 0,
  52. "error": 3});
  53. }
  54. } else {
  55. bcrypt.compare(password, user_object["password"], function (err, matched) {
  56. if (matched === true) {
  57. if (undefined === user_object["auth-key"]) {
  58. var timestamp_user = Date.now().toString() + username;
  59. user_object["auth-key"] = bcrypt.hashSync(timestamp_user);
  60. redis.set(uquery, JSON.stringify(user_object));
  61. res.send({"logged_in": 1,
  62. "auth-key": user_object["auth-key"],
  63. "error": 0});
  64. } else {
  65. res.send({"logged_in": 1,
  66. "auth-key": user_object["auth-key"],
  67. "error": 0});
  68. }
  69. return;
  70. } else {
  71. res.send({"logged_in": 0,
  72. "error": 2});
  73. return;
  74. }
  75. });
  76. }
  77. } else {
  78. res.send({"logged_in": 0,
  79. "error": 1});
  80. return;
  81. }
  82. });
  83. });
  84. app.listen(3000, function () {
  85. console.log('Example app listening on port 3000!');
  86. });
  87. process.on('SIGINT', function() {
  88. console.log( "\nRecieved Ctrl-C, shutting down." );
  89. process.exit(0);
  90. })