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.
83 lines
2.0 KiB
JavaScript
83 lines
2.0 KiB
JavaScript
5 years ago
|
"use strict";
|
||
|
|
||
|
const express = require("express");
|
||
|
const expressPromiseRouter = require("express-promise-router");
|
||
5 years ago
|
const bodyParser = require("body-parser");
|
||
|
const cors = require("cors");
|
||
|
const url = require("url");
|
||
|
|
||
5 years ago
|
const debugMiddleware = require("./debug-middleware");
|
||
|
const accessTokenMiddleware = require("./middlewares/access-token");
|
||
5 years ago
|
|
||
5 years ago
|
const clientApiRouter = require("./routers/client-api");
|
||
5 years ago
|
|
||
5 years ago
|
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)
|
||
|
};
|
||
5 years ago
|
|
||
|
let baseUrl = url.format({
|
||
|
protocol: (configuration.tls) ? "https" : "http",
|
||
|
host: configuration.hostname
|
||
|
});
|
||
|
|
||
5 years ago
|
let app = express();
|
||
|
let router = expressPromiseRouter();
|
||
|
|
||
5 years ago
|
router.use(bodyParser.json());
|
||
|
router.use(accessTokenMiddleware);
|
||
|
|
||
|
router.use(debugMiddleware());
|
||
|
|
||
|
router.options("*", cors({
|
||
|
methods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
|
||
|
allowedHeaders: ["Origin", "X-Requested-With", "Content-Type", "Accept", "Authorization"],
|
||
|
optionsSuccessStatus: 200
|
||
|
}));
|
||
|
|
||
|
router.use("/_matrix/client", clientApiRouter(state));
|
||
|
|
||
5 years ago
|
router.get("/", (req, res) => {
|
||
5 years ago
|
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);
|
||
5 years ago
|
});
|
||
|
|
||
|
app.use(router);
|
||
|
app.listen(3000, () => {
|
||
|
console.log("listening on 3000");
|
||
|
});
|