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