Public API for a society manager application

index.js 4.4KB

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