"use strict"; const express = require("express"); const expressPromiseRouter = require("express-promise-router"); const bodyParser = require("body-parser"); const cors = require("cors"); const url = require("url"); const debugMiddleware = require("./debug-middleware"); const accessTokenMiddleware = require("./middlewares/access-token"); const errorHandlerMiddleware = require("./middlewares/error-handler"); const createUIATracker = require("./uia-tracker"); const clientApiRouter = require("./routers/client-api"); const knex = require("knex")(require("../knexfile")); const configuration = require("../config.json"); function fullyQualify(prefix, value) { if (value.includes(":")) { return value; } else { return `${prefix}${value}:${configuration.hostname}`; } } let state = { configuration, knex, fullyQualifyUser: fullyQualify.bind(null, "@"), fullyQualifyRoom: fullyQualify.bind(null, "!"), fullyQualifyRoomAlias: fullyQualify.bind(null, "#"), fullyQualifyEvent: fullyQualify.bind(null, "$"), fullyQualifyGroup: fullyQualify.bind(null, "+"), }; state.db = { devices: require("./db/devices")(state), accounts: require("./db/accounts")(state) }; state.uiaTracker = createUIATracker({ stages: { "m.login.dummy": require("./authenticators/dummy")(state) } }); let baseUrl = url.format({ protocol: (configuration.tls) ? "https" : "http", host: configuration.hostname }); let app = express(); let router = expressPromiseRouter(); router.use(bodyParser.json()); router.use(accessTokenMiddleware); router.use(debugMiddleware()); router.use(cors({ methods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"], allowedHeaders: ["Origin", "X-Requested-With", "Content-Type", "Accept", "Authorization"], optionsSuccessStatus: 200 })); router.use("/_matrix/client", clientApiRouter(state)); router.get("/", (req, res) => { res.send("Hello world!"); }); router.get("/.well-known/matrix/client", (req, res) => { let response = { "m.homeserver": { base_url: baseUrl } }; if (configuration.identity_server != null) { response["m.identity_server"] = { base_url: configuration.identity_server }; } res.json(response); }); app.use(router); app.use(errorHandlerMiddleware); app.listen(3000, () => { console.log("listening on 3000"); });