This commit is contained in:
yaoyanwei
2025-08-04 16:25:38 +08:00
parent 8d542ea201
commit 4b2bb35c20
46 changed files with 5128 additions and 0 deletions

134
server.js Normal file
View 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