import restify from "restify"; import loadDb from "./db.js"; import corsMiddleware from "cors"; import {errors} from "common"; const db = loadDb("/data/ti.db"); const server = restify.createServer({ name: "spoll", version: "1.0.0" }); server.use(restify.plugins.acceptParser(server.acceptable)); server.use(restify.plugins.queryParser()); server.use(restify.plugins.bodyParser()); const cors = corsMiddleware({ credentials: true, preflightMaxAge: 5, origin: function(origin, callback) { callback(null, origin); } }); server.pre(cors); server.put("/register/:name", function(req, res, next) { const existingRecord = db.get(`/users/${req.params.name}`); if (existingRecord) { res.send({ error: errors.register.exists }); } else { db.update(`/users/${req.params.name}`, { password: req.body.password, factions: [] }); const dbEntry = db.get(`/users/${req.params.name}`); res.send(dbEntry); return next(); } }); server.put("/vote/:name", function(req, res, next) { const user = db.get(`/users/${req.params.name}`); if (user && req.body.password === user.password) { db.set(`/votes/${req.params.name}`, { factions: req.body.factions }); const dbEntry = db.get(`/votes/${req.params.name}`); res.send(dbEntry); } else { res.send({ error: errors.vote.baduser }); } return next(); }); server.get("/vote/:name", function(req, res, next) { const dbEntry = db.get(`/votes/${req.params.name}`); if (dbEntry) { res.send(dbEntry); } else { res.send({ error: errors.vote.novotes }); } return next(); }); server.post("/user/:name", function(req, res, next) { if (req.params.name) { const userEntry = db.get(`/users/${req.params.name}`); if (userEntry) { if (req.body && userEntry.password === req.body.password) { const voteEntry = db.get(`/votes/${req.params.name}`) || []; res.send({ ...voteEntry }); } else { res.send({ error: errors.user.badpassword }); } } else { res.send({ error: errors.user.notfound }); } } else { res.send({ error: errors.user.nouser }); } return next(); }); server.get("/votes", function(req, res, next) { const revealDate = 1616803200 * 1000; if (Date.now() >= revealDate) { const dbEntry = db.get(`/votes`); if (dbEntry) { res.send(dbEntry); } else { res.send({ error: errors.votes.novotes }); } } else { res.send({ error: errors.votes.toosoon }); } return next(); }); server.listen(8082, function() { console.log("%s listening at %s", server.name, server.url); });