57 lines
1.8 KiB
JavaScript
Raw Normal View History

2019-11-13 11:03:30 -04:00
const Events = require("events");
2019-11-15 14:28:41 -04:00
const Validators = require("./validators");
2019-11-13 11:03:30 -04:00
const express = require("express");
const cors = require("cors");
const helmet = require("helmet");
2019-11-15 10:45:53 -04:00
const rateLimit = require("./rate-limit");
2019-11-13 11:03:30 -04:00
const config = require("../config");
const Database = require("../database");
const Mailer = require("../mail/sendgrid");
const DappConfig = require("../config/dapps");
2019-11-15 10:42:59 -04:00
const Controller = require("./controller");
2019-11-18 09:57:03 -04:00
const BadRequest = require("./bad-request");
2019-11-14 16:01:31 -04:00
const events = new Events();
const dappConfig = new DappConfig();
2019-11-13 11:03:30 -04:00
const mailer = new Mailer(config);
const db = new Database(events, config);
db.init();
events.on("db:connected", () => {
const app = express();
app.use(rateLimit());
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(helmet.expectCt({ enforce: true, maxAge: 60 }));
app.use(helmet());
2019-11-18 09:57:03 -04:00
app.set("trust proxy", 1);
2019-11-13 11:03:30 -04:00
2019-11-15 14:28:41 -04:00
app.post("/:dappId/subscribe", Validators.subscribe, Controller.subscribe(dappConfig, mailer));
app.post("/:dappId/unsubscribe", Validators.unsubscribe, Controller.unsubscribe(dappConfig));
app.get("/confirm/:token", Validators.confirm, Controller.confirm());
app.get("/:dappId/user/:address", Validators.userExists, Controller.userExists());
app.get("/", (req, res) => res.status(200).json({ ok: true }));
2019-11-13 11:03:30 -04:00
2019-11-18 09:57:03 -04:00
app.use(function(err, req, res, next) {
if (!err.statusCode) err.statusCode = 500;
const response = { error: err.message };
if (err instanceof BadRequest && err.details) {
response.details = err.details;
2019-11-18 10:05:18 -04:00
} else {
console.error(err);
response.error = "Service unavailable";
2019-11-18 09:57:03 -04:00
}
res.status(err.statusCode).json(response);
});
2019-11-15 10:42:59 -04:00
app.listen(config.PORT, () => console.log(`App listening on port ${config.PORT}!`));
2019-11-13 11:03:30 -04:00
});
// MVP
// ====
// TODO: register DAPP and content
// TODO: handle errors sending email