use publicIP on Auth and Billing
This commit is contained in:
parent
84ea133e57
commit
72d5d41c18
1 changed files with 82 additions and 63 deletions
145
src/app.js
145
src/app.js
|
|
@ -1,35 +1,35 @@
|
||||||
// Load environment variables
|
// Load environment variables
|
||||||
const env = require('./utils/env');
|
const env = require("./utils/env");
|
||||||
|
|
||||||
// Import modules
|
// Import modules
|
||||||
const express = require('express');
|
const express = require("express");
|
||||||
const helmet = require('helmet');
|
const helmet = require("helmet");
|
||||||
const cors = require('cors');
|
const cors = require("cors");
|
||||||
const compression = require('compression');
|
const compression = require("compression");
|
||||||
const rateLimit = require('express-rate-limit');
|
const rateLimit = require("express-rate-limit");
|
||||||
const expressWinston = require('express-winston');
|
const expressWinston = require("express-winston");
|
||||||
const moment = require('moment-timezone');
|
const moment = require("moment-timezone");
|
||||||
const { logger } = require('./utils/logger');
|
const { logger } = require("./utils/logger");
|
||||||
const path = require('path');
|
const path = require("path");
|
||||||
|
|
||||||
// Import routes
|
// Import routes
|
||||||
const authRouter = require('./routes/auth');
|
const authRouter = require("./routes/auth");
|
||||||
const billingRouter = require('./routes/billing');
|
const billingRouter = require("./routes/billing");
|
||||||
const gatewayRouter = require('./routes/gateway');
|
const gatewayRouter = require("./routes/gateway");
|
||||||
const loginRouter = require('./routes/launcher/login');
|
const loginRouter = require("./routes/launcher/login");
|
||||||
const registerRouter = require('./routes/launcher/register');
|
const registerRouter = require("./routes/launcher/register");
|
||||||
const codeVerificationRouter = require('./routes/launcher/codeVerification');
|
const codeVerificationRouter = require("./routes/launcher/codeVerification");
|
||||||
const passwordResetEmailRouter = require('./routes/launcher/passwordResetEmail');
|
const passwordResetEmailRouter = require("./routes/launcher/passwordResetEmail");
|
||||||
const passwordChangeRouter = require('./routes/launcher/changePassword');
|
const passwordChangeRouter = require("./routes/launcher/changePassword");
|
||||||
const verificationEmailRouter = require('./routes/launcher/verificationEmail');
|
const verificationEmailRouter = require("./routes/launcher/verificationEmail");
|
||||||
const launcherUpdaterRouter = require('./routes/launcher/launcherUpdater');
|
const launcherUpdaterRouter = require("./routes/launcher/launcherUpdater");
|
||||||
const onlineCountRouter = require('./routes/onlineCount');
|
const onlineCountRouter = require("./routes/onlineCount");
|
||||||
|
|
||||||
// Set up rate limiter
|
// Set up rate limiter
|
||||||
const limiter = rateLimit({
|
const limiter = rateLimit({
|
||||||
windowMs: 60 * 1000, // 1 minute
|
windowMs: 60 * 1000, // 1 minute
|
||||||
max: 60, // limit each IP to 60 requests per minute
|
max: 60, // limit each IP to 60 requests per minute
|
||||||
message: 'Too many requests from this IP, please try again later'
|
message: "Too many requests from this IP, please try again later",
|
||||||
});
|
});
|
||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
|
|
@ -42,103 +42,122 @@ const middleware = [
|
||||||
express.urlencoded({ extended: false }),
|
express.urlencoded({ extended: false }),
|
||||||
];
|
];
|
||||||
|
|
||||||
if (process.env.ENABLE_HELMET === 'true') {
|
if (process.env.ENABLE_HELMET === "true") {
|
||||||
middleware.unshift(helmet());
|
middleware.unshift(helmet());
|
||||||
}
|
}
|
||||||
|
|
||||||
app.use(...middleware);
|
app.use(...middleware);
|
||||||
|
|
||||||
|
const port = process.env.PORT || 3000;
|
||||||
|
const publicIP = process.env.PUBLIC_IP || "0.0.0.0";
|
||||||
const authPort = process.env.AUTH_PORT || 8070;
|
const authPort = process.env.AUTH_PORT || 8070;
|
||||||
const billingPort = process.env.BILLING_PORT || 8080;
|
const billingPort = process.env.BILLING_PORT || 8080;
|
||||||
|
|
||||||
// Set up routes
|
// Set up routes
|
||||||
app.use('/serverApi/auth', limiter, authRouter).listen(authPort, '127.0.0.1');
|
app.use("/serverApi/auth", limiter, authRouter).listen(authPort, publicIP);
|
||||||
app.use('/serverApi/billing', limiter , billingRouter).listen(billingPort, '127.0.0.1');
|
app
|
||||||
app.use('/serverApi/gateway', limiter , gatewayRouter);
|
.use("/serverApi/billing", limiter, billingRouter)
|
||||||
app.use('/accountApi/register', limiter , registerRouter);
|
.listen(billingPort, publicIP);
|
||||||
app.use('/accountApi/login', limiter , loginRouter);
|
app.use("/serverApi/gateway", limiter, gatewayRouter);
|
||||||
app.use('/accountApi/codeVerification', limiter , codeVerificationRouter);
|
app.use("/accountApi/register", limiter, registerRouter);
|
||||||
app.use('/accountApi/sendPasswordResetEmail', limiter , passwordResetEmailRouter);
|
app.use("/accountApi/login", limiter, loginRouter);
|
||||||
app.use('/accountApi/changePassword', limiter , passwordChangeRouter);
|
app.use("/accountApi/codeVerification", limiter, codeVerificationRouter);
|
||||||
app.use('/accountApi/sendVerificationEmail', limiter , verificationEmailRouter);
|
app.use(
|
||||||
app.use('/launcherApi/launcherUpdater', launcherUpdaterRouter);
|
"/accountApi/sendPasswordResetEmail",
|
||||||
app.use('/serverApi/onlineCount', limiter , onlineCountRouter);
|
limiter,
|
||||||
|
passwordResetEmailRouter,
|
||||||
|
);
|
||||||
|
app.use("/accountApi/changePassword", limiter, passwordChangeRouter);
|
||||||
|
app.use("/accountApi/sendVerificationEmail", limiter, verificationEmailRouter);
|
||||||
|
app.use("/launcherApi/launcherUpdater", launcherUpdaterRouter);
|
||||||
|
app.use("/serverApi/onlineCount", limiter, onlineCountRouter);
|
||||||
|
|
||||||
// Serve static files from public folder
|
// Serve static files from public folder
|
||||||
app.use(express.static('../public'));
|
app.use(express.static("../public"));
|
||||||
|
|
||||||
// Serve static files for the launcher
|
// Serve static files for the launcher
|
||||||
app.get('/launcher/news', (req, res) => {
|
app.get("/launcher/news", (req, res) => {
|
||||||
res.sendFile(path.join(__dirname, '../public/launcher/news/news-panel.html'));
|
res.sendFile(path.join(__dirname, "../public/launcher/news/news-panel.html"));
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get('/launcher/agreement', (req, res) => {
|
app.get("/launcher/agreement", (req, res) => {
|
||||||
res.sendFile(path.join(__dirname, '../public/launcher/news/agreement.html'));
|
res.sendFile(path.join(__dirname, "../public/launcher/news/agreement.html"));
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get('/favicon.ico', (req, res) => {
|
app.get("/favicon.ico", (req, res) => {
|
||||||
res.sendFile(path.join(__dirname, '../public/launcher/news/favicon.ico'));
|
res.sendFile(path.join(__dirname, "../public/launcher/news/favicon.ico"));
|
||||||
});
|
});
|
||||||
|
|
||||||
app.use('/launcher/news/images', express.static(path.join(__dirname, '../public/launcher/news/images')));
|
app.use(
|
||||||
app.use('/launcher/news', express.static(path.join(__dirname, '../public/launcher/news')));
|
"/launcher/news/images",
|
||||||
app.use('/launcher/patch', express.static(path.join(__dirname, '../public/launcher/patch')));
|
express.static(path.join(__dirname, "../public/launcher/news/images")),
|
||||||
app.use('/launcher/client', express.static(path.join(__dirname, '../public/launcher/client')));
|
);
|
||||||
|
app.use(
|
||||||
|
"/launcher/news",
|
||||||
|
express.static(path.join(__dirname, "../public/launcher/news")),
|
||||||
|
);
|
||||||
|
app.use(
|
||||||
|
"/launcher/patch",
|
||||||
|
express.static(path.join(__dirname, "../public/launcher/patch")),
|
||||||
|
);
|
||||||
|
app.use(
|
||||||
|
"/launcher/client",
|
||||||
|
express.static(path.join(__dirname, "../public/launcher/client")),
|
||||||
|
);
|
||||||
|
|
||||||
// Set up error handling middleware
|
// Set up error handling middleware
|
||||||
app.use((err, req, res, next) => {
|
app.use((err, req, res, next) => {
|
||||||
if (env.LOG_LEVEL && env.LOG_LEVEL === 'error') {
|
if (env.LOG_LEVEL && env.LOG_LEVEL === "error") {
|
||||||
logger.error(err.stack);
|
logger.error(err.stack);
|
||||||
} else {
|
} else {
|
||||||
logger.info(err.stack);
|
logger.info(err.stack);
|
||||||
}
|
}
|
||||||
res.status(500).send('A error ocurred. Try again later.');
|
res.status(500).send("A error ocurred. Try again later.");
|
||||||
});
|
});
|
||||||
|
|
||||||
// Node.js version
|
// Node.js version
|
||||||
const nodeVersion = process.version;
|
const nodeVersion = process.version;
|
||||||
|
|
||||||
// timezone
|
// timezone
|
||||||
const timezone = process.env.TZ || new Date().toLocaleString('en-US', { timeZoneName: 'short' });
|
const timezone =
|
||||||
|
process.env.TZ ||
|
||||||
|
new Date().toLocaleString("en-US", { timeZoneName: "short" });
|
||||||
const offsetInMinutes = moment.tz(timezone).utcOffset();
|
const offsetInMinutes = moment.tz(timezone).utcOffset();
|
||||||
const offsetHours = Math.floor(Math.abs(offsetInMinutes) / 60);
|
const offsetHours = Math.floor(Math.abs(offsetInMinutes) / 60);
|
||||||
const offsetMinutes = Math.abs(offsetInMinutes) % 60;
|
const offsetMinutes = Math.abs(offsetInMinutes) % 60;
|
||||||
const offsetSign = offsetInMinutes >= 0 ? '+' : '-';
|
const offsetSign = offsetInMinutes >= 0 ? "+" : "-";
|
||||||
const offsetString = `${offsetSign}${offsetHours.toString().padStart(2, '0')}:${offsetMinutes.toString().padStart(2, '0')}`;
|
const offsetString = `${offsetSign}${offsetHours.toString().padStart(2, "0")}:${offsetMinutes.toString().padStart(2, "0")}`;
|
||||||
|
|
||||||
const memoryUsage = process.memoryUsage();
|
const memoryUsage = process.memoryUsage();
|
||||||
|
|
||||||
// Function to format bytes as human-readable string
|
// Function to format bytes as human-readable string
|
||||||
function formatBytes(bytes) {
|
function formatBytes(bytes) {
|
||||||
const units = ['B', 'KB', 'MB', 'GB', 'TB'];
|
const units = ["B", "KB", "MB", "GB", "TB"];
|
||||||
if (bytes === 0) {
|
if (bytes === 0) {
|
||||||
return '0 B';
|
return "0 B";
|
||||||
}
|
}
|
||||||
const i = Math.floor(Math.log2(bytes) / 10);
|
const i = Math.floor(Math.log2(bytes) / 10);
|
||||||
return `${(bytes / Math.pow(1024, i)).toFixed(2)} ${units[i]}`;
|
return `${(bytes / Math.pow(1024, i)).toFixed(2)} ${units[i]}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start server
|
// Start server
|
||||||
const port = process.env.PORT || 3000;
|
|
||||||
const publicIP = process.env.PUBLIC_IP || '0.0.0.0';
|
|
||||||
|
|
||||||
console.log('--------------------------------------------------');
|
console.log("--------------------------------------------------");
|
||||||
console.log(`Rusty Hearts API Version: 1.2`)
|
console.log(`Rusty Hearts API Version: 1.2`);
|
||||||
console.log(`Node.js Version: ${nodeVersion}`);
|
console.log(`Node.js Version: ${nodeVersion}`);
|
||||||
console.log(`Timezone: ${timezone} (${offsetString})`);
|
console.log(`Timezone: ${timezone} (${offsetString})`);
|
||||||
console.log('Memory Usage:');
|
console.log("Memory Usage:");
|
||||||
console.log(` RSS: ${formatBytes(memoryUsage.rss)}`);
|
console.log(` RSS: ${formatBytes(memoryUsage.rss)}`);
|
||||||
console.log(` Heap Total: ${formatBytes(memoryUsage.heapTotal)}`);
|
console.log(` Heap Total: ${formatBytes(memoryUsage.heapTotal)}`);
|
||||||
console.log(` Heap Used: ${formatBytes(memoryUsage.heapUsed)}`);
|
console.log(` Heap Used: ${formatBytes(memoryUsage.heapUsed)}`);
|
||||||
console.log(` External: ${formatBytes(memoryUsage.external)}`);
|
console.log(` External: ${formatBytes(memoryUsage.external)}`);
|
||||||
console.log(` Array Buffers: ${formatBytes(memoryUsage.arrayBuffers)}`);
|
console.log(` Array Buffers: ${formatBytes(memoryUsage.arrayBuffers)}`);
|
||||||
console.log('--------------------------------------------------');
|
console.log("--------------------------------------------------");
|
||||||
|
|
||||||
// Function to log memory usage
|
// Function to log memory usage
|
||||||
function logMemoryUsage() {
|
function logMemoryUsage() {
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
const formattedDateTime = moment(now).format('YYYY-MM-DD HH:mm:ss');
|
const formattedDateTime = moment(now).format("YYYY-MM-DD HH:mm:ss");
|
||||||
|
|
||||||
const memoryUsage = process.memoryUsage();
|
const memoryUsage = process.memoryUsage();
|
||||||
|
|
||||||
|
|
@ -148,7 +167,7 @@ function logMemoryUsage() {
|
||||||
console.log(` Heap Used : ${formatBytes(memoryUsage.heapUsed)}`);
|
console.log(` Heap Used : ${formatBytes(memoryUsage.heapUsed)}`);
|
||||||
console.log(` External : ${formatBytes(memoryUsage.external)}`);
|
console.log(` External : ${formatBytes(memoryUsage.external)}`);
|
||||||
console.log(` Array Buffers: ${formatBytes(memoryUsage.arrayBuffers)}`);
|
console.log(` Array Buffers: ${formatBytes(memoryUsage.arrayBuffers)}`);
|
||||||
console.log('--------------------------------------------------');
|
console.log("--------------------------------------------------");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Log memory usage every 30 minutes (1800000 milliseconds)
|
// Log memory usage every 30 minutes (1800000 milliseconds)
|
||||||
|
|
@ -158,6 +177,6 @@ setInterval(logMemoryUsage, memoryLogInterval);
|
||||||
|
|
||||||
app.listen(port, publicIP, () => {
|
app.listen(port, publicIP, () => {
|
||||||
logger.info(`API listening on ${publicIP}:${port}`);
|
logger.info(`API listening on ${publicIP}:${port}`);
|
||||||
logger.info(`Auth API listening on 127.0.0.1:${authPort}`);
|
logger.info(`Auth API listening on ${publicIP}:${authPort}`);
|
||||||
logger.info(`Billing API listening on 127.0.0.1:${billingPort}`);
|
logger.info(`Billing API listening on ${publicIP}:${billingPort}`);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue