init
This commit is contained in:
134
server.js
Normal file
134
server.js
Normal file
@@ -0,0 +1,134 @@
|
||||
const fs = require('fs');
|
||||
const http = require('http');
|
||||
const https = require('https');
|
||||
const express = require('express');
|
||||
const config = require('./config.js');
|
||||
const Limiter = require('./tools/limiter.tool');
|
||||
const mongoose = require("mongoose");
|
||||
|
||||
const app = express();
|
||||
|
||||
// CONNECTION TO DATABASE
|
||||
var user = ""; //User is optional if auth not enabled
|
||||
if(config.mongo_user && config.mongo_pass)
|
||||
user = config.mongo_user + ":" + config.mongo_pass + "@";
|
||||
|
||||
var connect = "mongodb://" + user + config.mongo_host + ":" + config.mongo_port + "/" + config.mongo_db + "?authSource=admin";
|
||||
mongoose.set('strictQuery', false);
|
||||
mongoose.connection.on("connected", () => {
|
||||
console.log("Connected to MongoDB!");
|
||||
});
|
||||
mongoose.connection.on('error', function(err) {
|
||||
console.error('Connection to MongoDB failed!');
|
||||
});
|
||||
mongoose.connect(connect);
|
||||
|
||||
//Limiter to prevent attacks
|
||||
Limiter.limit(app);
|
||||
|
||||
//Headers
|
||||
app.use(function (req, res, next) {
|
||||
res.header('Access-Control-Allow-Origin', '*');
|
||||
res.header('Access-Control-Allow-Credentials', 'true');
|
||||
res.header('Access-Control-Allow-Methods', 'GET,HEAD,PUT,PATCH,POST,DELETE');
|
||||
res.header('Access-Control-Expose-Headers', 'Content-Length');
|
||||
res.header('Access-Control-Allow-Headers', 'Accept, Authorization, Content-Type, X-Requested-With, Range');
|
||||
if (req.method === 'OPTIONS') {
|
||||
return res.send(200);
|
||||
} else {
|
||||
return next();
|
||||
}
|
||||
});
|
||||
|
||||
//Parse JSON body
|
||||
app.use(express.json({ limit: "100kb" }));
|
||||
|
||||
//Log request
|
||||
app.use((req, res, next) => {
|
||||
var today = new Date();
|
||||
var date = today.getFullYear() +'-'+(today.getMonth()+1)+'-'+today.getDate();
|
||||
var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
|
||||
var date_tag = "[" + date + " " + time + "]";
|
||||
console.log(date_tag + " " + req.method + " " + req.originalUrl);
|
||||
next();
|
||||
})
|
||||
|
||||
//Route root DIR
|
||||
app.get('/', function(req, res){
|
||||
res.status(200).send(config.api_title + " " + config.version);
|
||||
});
|
||||
|
||||
//Public folder
|
||||
app.use('/', express.static('public'))
|
||||
|
||||
//Routing
|
||||
const AuthorizationRouter = require('./authorization/auth.routes');
|
||||
AuthorizationRouter.route(app);
|
||||
|
||||
const UsersRouter = require('./users/users.routes');
|
||||
UsersRouter.route(app);
|
||||
|
||||
const CardsRouter = require('./cards/cards.routes');
|
||||
CardsRouter.route(app);
|
||||
|
||||
const PacksRouter = require('./packs/packs.routes');
|
||||
PacksRouter.route(app);
|
||||
|
||||
const DecksRouter = require('./decks/decks.routes');
|
||||
DecksRouter.route(app);
|
||||
|
||||
const VariantRouter = require('./variants/variants.routes');
|
||||
VariantRouter.route(app);
|
||||
|
||||
const MatchesRouter = require('./matches/matches.routes');
|
||||
MatchesRouter.route(app);
|
||||
|
||||
const RewardsRouter = require('./rewards/rewards.routes');
|
||||
RewardsRouter.route(app);
|
||||
|
||||
const MarketRouter = require('./market/market.routes');
|
||||
MarketRouter.route(app);
|
||||
|
||||
const ActivityRouter = require("./activity/activity.routes");
|
||||
ActivityRouter.route(app);
|
||||
|
||||
//Read SSL cert
|
||||
var ReadSSL = function()
|
||||
{
|
||||
var privateKey = fs.readFileSync(config.https_key, 'utf8');
|
||||
var certificate = fs.readFileSync(config.https_cert, 'utf8');
|
||||
var cert_authority = fs.readFileSync(config.https_ca, 'utf8');
|
||||
var credentials = {key: privateKey, cert: certificate, ca: cert_authority};
|
||||
return credentials;
|
||||
};
|
||||
|
||||
//HTTP
|
||||
if(config.allow_http){
|
||||
var httpServer = http.createServer(app);
|
||||
httpServer.listen(config.port, function () {
|
||||
console.log('http listening port %s', config.port);
|
||||
});
|
||||
}
|
||||
|
||||
//HTTPS
|
||||
if(config.allow_https && fs.existsSync(config.https_key)) {
|
||||
var httpsServer = https.createServer(ReadSSL(), app);
|
||||
httpsServer.listen(config.port_https, function () {
|
||||
console.log('https listening port %s', config.port_https);
|
||||
});
|
||||
|
||||
//HTTPS auto-reload ssl
|
||||
var timeout;
|
||||
fs.watch(config.https_cert, () => {
|
||||
clearTimeout(timeout);
|
||||
timeout = setTimeout(() => {
|
||||
httpsServer.setSecureContext(ReadSSL());
|
||||
}, 1000);
|
||||
});
|
||||
}
|
||||
|
||||
//Start jobs
|
||||
const Jobs = require("./jobs/jobs");
|
||||
Jobs.InitJobs();
|
||||
|
||||
module.exports = app
|
||||
Reference in New Issue
Block a user