115 lines
3.7 KiB
JavaScript
115 lines
3.7 KiB
JavaScript
"use strict";
|
|
|
|
const express = require('express');
|
|
const path = require('path');
|
|
const favicon = require('serve-favicon');
|
|
const bodyParser = require('body-parser');
|
|
const requestLogger = require('morgan');
|
|
const debug = require('debug')('cc:server');
|
|
const cors = require('cors')
|
|
const mongoose = require('mongoose');
|
|
|
|
// own modules
|
|
const config = require('./config/config');
|
|
const urls = require('./config/api-url');
|
|
const restAPIchecks = require('./middleware/request-checks.js');
|
|
const errorResponseWare = require('./middleware/error-response');
|
|
const apiAuthenticationMiddleware = require('./middleware/auth-middleware');
|
|
const checkHl = require('./middleware/permission-check').checkHl;
|
|
const checkAdmin = require('./middleware/permission-check').checkAdmin;
|
|
const signatureCronJob = require('./cron-job/update-signatures');
|
|
|
|
// router modules
|
|
const authenticateRouter = require('./routes/authenticate');
|
|
const overviewRouter = require('./routes/overview');
|
|
const userRouter = require('./routes/users');
|
|
const squadRouter = require('./routes/squads');
|
|
const rankRouter = require('./routes/ranks');
|
|
const decorationRouter = require('./routes/decorations');
|
|
const awardingRouter = require('./routes/awardings');
|
|
const signatureRouter = require('./routes/signatures');
|
|
const commandRouter = require('./routes/command');
|
|
|
|
// Configuration ***********************************
|
|
// mongoose promise setup
|
|
mongoose.Promise = global.Promise;
|
|
|
|
// app creation
|
|
const app = express();
|
|
|
|
// Middlewares *************************************************
|
|
|
|
// setup CORS-middleware
|
|
const corsOptions = {
|
|
methods: ['GET'],
|
|
optionsSuccessStatus: 200
|
|
};
|
|
app.use(cors(corsOptions));
|
|
|
|
app.use(favicon(path.join(__dirname + '/..', 'public', 'favicon.ico')));
|
|
app.use(express.static(path.join(__dirname + '/..', 'public')));
|
|
app.use(bodyParser.json());
|
|
|
|
// API request checks for API-version and JSON etc.
|
|
app.use(restAPIchecks);
|
|
|
|
// Routes ******************************************************
|
|
app.use(urls.signatures, signatureRouter);
|
|
|
|
// initialize logging at this point to exclude /signature requests
|
|
if (process.env.NODE_ENV === config.dev.env) {
|
|
// development logging
|
|
app.use(requestLogger('dev'));
|
|
} else if (process.env.NODE_ENV !== config.test.env) {
|
|
// production logging, apache style
|
|
app.use(requestLogger(':date[iso] :remote-addr :method :url :status :response-time ms'));
|
|
}
|
|
|
|
app.use(urls.auth, authenticateRouter);
|
|
app.use(urls.overview, overviewRouter);
|
|
app.use(urls.users, userRouter);
|
|
app.use(urls.squads, squadRouter);
|
|
app.use(urls.ranks, rankRouter);
|
|
app.use(urls.decorations, decorationRouter);
|
|
app.use(urls.awards, apiAuthenticationMiddleware, checkHl, awardingRouter);
|
|
app.use(urls.command, apiAuthenticationMiddleware, checkAdmin, commandRouter);
|
|
|
|
// send index.html on all different paths
|
|
app.use(function (req, res) {
|
|
res.sendFile("public/index.html", {root: __dirname + '/..'});
|
|
});
|
|
|
|
|
|
// (from express-generator boilerplate standard code)
|
|
// Errorhandling and requests without proper URLs ************************
|
|
// catch 404 and forward to error handler
|
|
app.use((req, res, next) => {
|
|
debug('Catching unmatched request to answer with 404');
|
|
let err = new Error('Not Found');
|
|
err.status = 404;
|
|
next(err);
|
|
});
|
|
|
|
// register error handlers
|
|
errorResponseWare(app);
|
|
|
|
// Start the server
|
|
if (process.env.NODE_ENV !== config.test.env) {
|
|
mongoose.connect(config.database.uri + config.database.db);
|
|
app.listen(config.port, (err) => {
|
|
if (err !== undefined) {
|
|
debug('Error on startup, ', err);
|
|
}
|
|
else {
|
|
debug('Listening on port ' + config.port);
|
|
signatureCronJob.start();
|
|
}
|
|
});
|
|
} else {
|
|
mongoose.connect(config.database.uri + config.test.db);
|
|
app.listen(config.test.port);
|
|
console.log('Listening on port ' + config.test.port);
|
|
}
|
|
|
|
module.exports = app;
|