czydojade/front/server/server.ts
2020-11-22 19:59:03 +01:00

88 lines
2.4 KiB
TypeScript

import express from 'express';
import path from "path";
import fs from "fs";
import request from "request";
const server = express();
const port = parseInt(process.env.APP_PORT) || 3000;
const host = process.env.APP_HOST || '0.0.0.0';
const api = process.env.APP_API || "https://cojedzie.pl/api";
const gtm_tracking = process.env.APP_GTM || '';
const version = "2020.11-dev";
const manifest = JSON.parse(
fs.readFileSync(path.join(__dirname, "../resources/manifest.json")).toString("utf-8")
);
const provider_manifests = {}
function generateProviderManifest(provider: any) {
return {
...manifest,
start_url: `/${provider.id}`,
name: `${manifest.name} - ${provider.name}`,
short_name: `${manifest.short_name} - ${provider.shortName}`,
};
}
server.set("views", path.join(__dirname, "../resources/views/"));
server.set("view engine", "ejs");
server.use(express.static(path.join(__dirname, "../build/public/")))
server.get("/:provider?/manifest.json", (req, res) => {
const provider = req.params.provider;
if (typeof provider === "undefined") {
res.send(manifest);
return;
}
if (typeof provider_manifests[provider] !== "undefined") {
res.send(provider_manifests[provider]);
return;
}
console.log(`No manifest entry for ${provider}, calling ${api}/providers/${provider}`);
request.get(`${api}/v1/providers/${provider}`, (err, _, body) => {
try {
const info = JSON.parse(body);
provider_manifests[provider] = generateProviderManifest(info);
console.info(`Generated manifest for ${provider}`, provider_manifests[provider]);
res.send(provider_manifests[provider]);
} catch(error) {
console.error(`Problem with generating manifest for ${provider}: ${error.message}`);
res.send(manifest);
}
})
})
server.get("/:provider?/*", (req, res) => {
const manifest_path = req.params.provider
? `/${req.params.provider}/manifest.json`
: "/manifest.json";
const year = (new Date()).getFullYear();
res.render("index", {
manifest_path,
gtm_tracking,
version,
year,
})
})
server.listen(port, host, () => {
console.info(`Server started at ${host}:${port}`);
});
process.on('SIGINT', function() {
console.info("Terminating server...");
process.exit();
});