opt-cc/api/server.js

134 lines
4.4 KiB
JavaScript
Raw Permalink Normal View History

2017-05-10 11:04:06 +02:00
"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');
2017-05-16 12:55:53 +02:00
const cors = require('cors')
2017-05-10 11:04:06 +02:00
const mongoose = require('mongoose');
// own modules
const config = require('./config/config');
const urls = require('./config/api-url');
2017-05-10 11:04:06 +02:00
const restAPIchecks = require('./middleware/request-checks.js');
const errorResponseWare = require('./middleware/error-response');
const apiAuthenticationMiddleware = require('./middleware/auth-middleware');
2017-06-08 13:14:53 +02:00
const checkAdmin = require('./middleware/permission-check').checkAdmin;
2017-07-23 11:07:47 +02:00
const signatureCronJob = require('./cron-job/cron').cronJobSignature;
const backupCronJob = require('./cron-job/cron').cronJobBackup;
2017-07-15 12:03:38 +02:00
2017-05-10 11:04:06 +02:00
// router modules
const authenticateRouter = require('./routes/authenticate');
2017-06-08 19:46:36 +02:00
const accountRouter = require('./routes/account');
2017-05-10 11:04:06 +02:00
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');
2017-06-09 18:30:35 +02:00
const requestRouter = require('./routes/request');
2017-05-10 11:04:06 +02:00
const signatureRouter = require('./routes/signatures');
const commandRouter = require('./routes/command');
2017-08-12 16:28:18 +02:00
const campaignRouter = require('./routes/campaigns');
2017-07-08 22:50:01 +02:00
const warRouter = require('./routes/wars');
2017-05-10 11:04:06 +02:00
// Configuration ***********************************
// mongoose promise setup
mongoose.Promise = global.Promise;
// app creation
const app = express();
// Middlewares *************************************************
2017-05-16 12:55:53 +02:00
// 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')));
2017-07-09 11:49:21 +02:00
app.use(bodyParser.json({limit: '10mb'}));
app.use(bodyParser.urlencoded({limit: '10mb', extended: true}));
2017-05-10 11:04:06 +02:00
// API request checks for API-version and JSON etc.
app.use(restAPIchecks);
// Routes ******************************************************
app.use(urls.signatures, signatureRouter);
2017-05-10 11:04:06 +02:00
2017-06-08 13:14:53 +02:00
// initialize logging at this point to exclude /signature requests
2017-05-23 13:26:26 +02:00
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
2017-07-16 14:16:24 +02:00
app.use(requestLogger(':date[clf] :method :url :response-time ms :status'));
}
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.request, requestRouter);
2017-06-09 18:30:35 +02:00
app.use(urls.awards, awardingRouter);
app.use(urls.wars, warRouter);
2017-08-12 23:13:39 +02:00
app.use(urls.campaigns,campaignRouter);
2017-06-08 13:14:53 +02:00
app.use(urls.command, apiAuthenticationMiddleware, checkAdmin, commandRouter);
2017-06-08 19:46:36 +02:00
app.use(urls.account, apiAuthenticationMiddleware, checkAdmin, accountRouter);
2017-05-10 11:04:06 +02:00
// send index.html on all different paths
app.use(function (req, res) {
res.sendFile("public/index.html", {root: __dirname + '/..'});
2017-05-10 11:04:06 +02:00
});
// (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) {
const mongoosePromise = mongoose.connect(config.database.uri + config.database.db, {
useMongoClient: true
2017-05-10 11:04:06 +02:00
});
mongoosePromise.then((db) => {
app.listen(config.port, (err) => {
if (err !== undefined) {
debug('Error on startup, ', err);
}
else {
debug('Listening on port ' + config.port);
signatureCronJob.start();
backupCronJob.start();
}
});
})
2017-05-10 11:04:06 +02:00
} else {
const mongoosePromise = mongoose.connect(config.database.uri + config.test.db, {
useMongoClient: true
});
mongoosePromise.then((db) => {
app.listen(config.test.port);
console.log('Listening on port ' + config.test.port);
})
2017-05-10 11:04:06 +02:00
}
module.exports = app;