server.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import restify from "restify";
  2. import loadDb from "./db.js";
  3. import corsMiddleware from "cors";
  4. import errors from "../../common/errors";
  5. const db = loadDb("ti.db");
  6. const server = restify.createServer({
  7. name: "spoll",
  8. version: "1.0.0"
  9. });
  10. server.use(restify.plugins.acceptParser(server.acceptable));
  11. server.use(restify.plugins.queryParser());
  12. server.use(restify.plugins.bodyParser());
  13. const cors = corsMiddleware({
  14. credentials: true,
  15. preflightMaxAge: 5,
  16. origin: function(origin, callback) {
  17. callback(null, origin);
  18. }
  19. });
  20. server.pre(cors);
  21. server.put("/register/:name", function(req, res, next) {
  22. const existingRecord = db.get(`/users/${req.params.name}`);
  23. if (existingRecord) {
  24. res.send({ error: errors.register.exists });
  25. } else {
  26. db.update(`/users/${req.params.name}`, {
  27. password: req.body.password,
  28. factions: []
  29. });
  30. const dbEntry = db.get(`/users/${req.params.name}`);
  31. res.send(dbEntry);
  32. return next();
  33. }
  34. });
  35. server.put("/vote/:name", function(req, res, next) {
  36. const user = db.get(`/users/${req.params.name}`);
  37. if (user && req.body.password === user.password) {
  38. db.set(`/votes/${req.params.name}`, { factions: req.body.factions });
  39. const dbEntry = db.get(`/votes/${req.params.name}`);
  40. res.send(dbEntry);
  41. } else {
  42. res.send({ error: errors.vote.baduser });
  43. }
  44. return next();
  45. });
  46. server.get("/vote/:name", function(req, res, next) {
  47. const dbEntry = db.get(`/votes/${req.params.name}`);
  48. if (dbEntry) {
  49. res.send(dbEntry);
  50. } else {
  51. res.send({ error: errors.vote.novotes });
  52. }
  53. return next();
  54. });
  55. server.post("/user/:name", function(req, res, next) {
  56. if (req.params.name) {
  57. const userEntry = db.get(`/users/${req.params.name}`);
  58. if (userEntry) {
  59. if (req.body && userEntry.password === req.body.password) {
  60. const voteEntry = db.get(`/votes/${req.params.name}`) || [];
  61. res.send({ factions: voteEntry });
  62. } else {
  63. res.send({ error: errors.user.badpassword });
  64. }
  65. } else {
  66. res.send({ error: errors.user.notfound });
  67. }
  68. } else {
  69. res.send({ error: errors.user.nouser });
  70. }
  71. return next();
  72. });
  73. server.get("/votes", function(req, res, next) {
  74. const revealDate = 1616803200 * 1000;
  75. if (Date.now() >= revealDate) {
  76. const dbEntry = db.get(`/votes`);
  77. if (dbEntry) {
  78. res.send(dbEntry);
  79. } else {
  80. res.send({ error: errors.votes.novotes });
  81. }
  82. } else {
  83. res.send({ error: errors.votes.toosoon });
  84. }
  85. return next();
  86. });
  87. server.listen(8082, function() {
  88. console.log("%s listening at %s", server.name, server.url);
  89. });