todo/todo/src/index.js

63 lines
1.6 KiB
JavaScript

const http = require('http');
const https = require('https');
const cors = require('cors');
const express = require('express');
const cookieParser = require('cookie-parser');
const Config = require('./config.js');
const UserInterface = require('./user.js');
let credentials = {};
if (Config.config.https) {
if (
fs.existsSync(Config.config.cert) &&
fs.existsSync(Config.config.cert_key)
) {
credentials.key = fs.readFileSync(Config.config.cert_key);
credentials.cert = fs.readFileSync(Config.config.cert);
}
}
let app = express();
app.use(cors());
app.use(cookieParser());
// force https
app.use((req, res, next) => {
if (Config.config.https) {
if (req.headers['x-forwarded-proto'] !== 'https') {
return res.redirect(`https://${req.headers.host}${req.url}`);
}
}
return next();
});
if (!Config.config.secret) {
console.error('No password secret found. please set `secret` in config.json');
process.exit();
} else if (Config.config.https && Config.config.secret == 'TEST_SECRET') {
console.error('please do not use the testing secret in production.');
process.exit();
}
app.use('/api/user', UserInterface.router);
// serve static files last
app.use(express.static('./static'));
// DISABLED: no longer needs to serve static files
// due to frontend being employed in elm
if (Config.config.https) {
var server = https.createServer(credentials, app);
server.listen(Config.config.port || 8080);
} else {
var server = http.createServer(app);
server.listen(Config.config.port || 8080);
}
console.log(
`listening on port ${Config.config.port || 8080}` +
` with https ${Config.config.https ? 'enabled' : 'disabled'}`
);