dragonroll/backend/server.js

130 lines
3.4 KiB
JavaScript
Raw Permalink Normal View History

2024-08-01 21:26:01 +00:00
const express = require('express');
2024-08-04 22:30:33 +00:00
const http = require('http')
const socketIo = require('socket.io');
2024-08-01 21:26:01 +00:00
const app = express();
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const fs = require('fs');
const path = require('path');
const morgan = require('morgan');
const cors = require('cors');
const passport = require('passport');
2024-08-04 22:30:33 +00:00
const server = http.createServer(app);
2024-09-14 00:10:05 +00:00
const config = JSON.parse(fs.readFileSync("config.json"));
2024-10-09 13:43:58 +00:00
const database = require('./services/database');
2024-08-04 22:30:33 +00:00
const pluginManager = require('./services/plugins')
2024-09-14 00:10:05 +00:00
// SET CONSTANTS
2024-10-09 13:43:58 +00:00
let PORT = 8081;
if(process.env.NODE_ENV == 'test')
PORT = 8082;
2024-08-01 21:26:01 +00:00
global.appRoot = path.resolve(__dirname);
2024-09-14 00:10:05 +00:00
let mongo_final_ip = "";
2024-08-01 21:26:01 +00:00
console.log("Production? " + !process.env.DEBUG);
if(process.env.DEBUG){
mongo_final_ip = "mongodb://" + config.mongo_ip_debug + "/dragonroll";
} else {
mongo_final_ip = "mongodb://" + config.mongo_ip + "/dragonroll";
}
2024-09-14 00:10:05 +00:00
console.log("Db ip: " + mongo_final_ip)
2024-08-01 21:26:01 +00:00
2024-09-14 00:10:05 +00:00
// CONFIGURE SOCKET IO
const socket = require('./io/socket')
const io = socketIo(server, {
cors: {
origin: '*',
}
});
2024-09-14 00:10:05 +00:00
socket.setIo(io);
// CONNECT TO MONGODB
2024-10-09 13:43:58 +00:00
if(process.env.NODE_ENV != 'test')
database.connectDB();
2024-08-01 21:26:01 +00:00
2024-09-14 00:10:05 +00:00
// PASSPORT
2024-08-01 21:26:01 +00:00
app.use(morgan('tiny'));
app.use(passport.initialize());
2024-10-09 13:43:58 +00:00
require('./services/passport')(passport);
2024-08-01 21:26:01 +00:00
2024-09-14 00:10:05 +00:00
// PUBLIC
2024-08-01 21:26:01 +00:00
app.use("/public", express.static(__dirname + '/public'));
2024-09-14 00:10:05 +00:00
app.use('/public', express.static('uploads'));
2024-08-01 21:26:01 +00:00
2024-09-14 00:10:05 +00:00
// JSON LIMIT EXPRESS
2024-08-01 21:26:01 +00:00
app.use(express.json({limit: '50mb'}));
app.use(express.urlencoded({
extended : false,
limit: '50mb'
}));
2024-09-14 00:10:05 +00:00
// CORS
2024-08-01 21:26:01 +00:00
app.use(cookieParser());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cors());
2024-09-14 00:10:05 +00:00
// ROUTES (NO AUTH)
2024-08-01 21:26:01 +00:00
app.use('/user', require('./routes/user'));
2024-09-14 00:10:05 +00:00
// AUTH
checkAuth = passport.authenticate('jwt', {session: false});
app.use(checkAuth);
2024-08-04 22:30:33 +00:00
2024-09-14 00:10:05 +00:00
// ROUTES WITH AUTH
app.use('/campaign', require('./routes/campaign'));
2024-10-21 18:05:21 +00:00
app.use('/maps', require('./routes/map'));
app.use('/datagen', require('./routes/datagen'))
2024-09-27 23:41:47 +00:00
app.use('/admin', require('./routes/admin'))
2024-09-14 00:10:05 +00:00
// GET localhost:8081/concept/list
2024-08-04 22:30:33 +00:00
2024-09-14 00:10:05 +00:00
// SETUP IO
require('./io/campaign')(socket.getIo());
2024-08-04 22:30:33 +00:00
// INIT PLUGINS
const pluginData = pluginManager.init();
app.use('/plugins', pluginData.router);
2024-10-14 13:50:47 +00:00
// DEBUG ROUTER
function print (path, layer) {
if (layer.route) {
layer.route.stack.forEach(print.bind(null, path.concat(split(layer.route.path))))
} else if (layer.name === 'router' && layer.handle.stack) {
layer.handle.stack.forEach(print.bind(null, path.concat(split(layer.regexp))))
} else if (layer.method) {
console.log('\x1b[33m%s\x1b[0m',
`${layer.method.toUpperCase()} /${
path.concat(split(layer.regexp)).filter(Boolean).join('/')}`)
2024-10-14 13:50:47 +00:00
}
}
function split (thing) {
if (typeof thing === 'string') {
return thing.split('/')
} else if (thing.fast_slash) {
return ''
} else {
var match = thing.toString()
.replace('\\/?', '')
.replace('(?=\\/|$)', '$')
.match(/^\/\^((?:\\[.*+?^${}()|[\]\\\/]|[^.*+?^${}()|[\]\\\/])*)\$\//)
return match
? match[1].replace(/\\(.)/g, '$1').split('/')
: '<complex:' + thing.toString() + '>'
}
}
app._router.stack.forEach(print.bind(null, []))
// END DEBUG
2024-09-14 00:10:05 +00:00
// LISTEN
2024-08-04 22:30:33 +00:00
server.listen(PORT, () => {
2024-08-01 21:26:01 +00:00
console.log("Dragonroll backend started");
});
2024-10-09 13:43:58 +00:00
module.exports = { app, server }