You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
2.2 KiB
JavaScript

"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");
});