Files
Exchange/server/index.ts
2025-11-07 22:24:40 +01:00

186 lines
5.5 KiB
TypeScript
Executable File

import * as express from 'express';
const app = express();
import * as session from 'express-session';
import * as MongoStore from 'connect-mongo';
const MongoStoreSession = MongoStore(session)
import * as bodyParser from 'body-parser';
import * as cookieParser from 'cookie-parser';
import * as helmet from 'helmet';
import * as mongoose from 'mongoose';
import * as useragent from 'express-useragent';
import * as dotenv from 'dotenv';
const config = dotenv.config();
import {continuesStatsOfOrders} from './scripts/priceStats'
import { curreniesAdder} from './scripts/currenciesadder'
import * as localPriceScript from './scripts/localPriceScript'
import {addDollarPrice } from './scripts/dollarToRial'
import errorHandler from './middlewares/errorHandler'
import { logger, LoggerStream } from './api/logger';
import * as csurf from 'csurf';
import * as cors from 'cors';
import * as spawn from 'child_process'
import * as cron from 'node-cron'
mongoose.Promise = global.Promise;
mongoose.connect(process.env.MONGO_DATABASE, { useNewUrlParser: true, useUnifiedTopology: true })
.catch((err) => {
logger.error(err)
})
const mongooseDB = mongoose.connection
mongoose.set('useCreateIndex', true)
mongoose.set('useFindAndModify', false)
// const path = require('path')
// app.use(express.static(path.join(__dirname, 'static')))
import * as morgan from 'morgan'
app.use(morgan(':remote-addr ":method :url HTTP/:http-version" :status :res[content-length] :response-time ":referrer" ":user-agent" ', { stream: new LoggerStream() }))//, { "stream": loggerStream() })
app.use(bodyParser.json())
// app.use(bodyParser.raw({ type: 'application/octet-stream' }))
app.use(bodyParser.urlencoded({ extended: false }))
app.use(cookieParser());
app.use(cors({ credentials: true, origin: ['http://localhost:3000', 'http://localhost'] }))
app.use(useragent.express())
app.use(helmet())
app.set('trust proxy', true)
var sess = {
secret: process.env.SESSION_SECRET,
resave: false,
proxy: true,
saveUninitialized: true,
rolling: true,
SameSite: true,
name: 'sessionId',
cookie: {
// secure: true,
httpOnly: true,
// domain:,
path: '/',
maxAge: 6000000
},
store: new MongoStoreSession({ mongooseConnection: mongooseDB })
}
if (app.get('env') === 'production') {
app.set('trust proxy', 1) // trust first proxy
//sess.cookie.secure = true // serve secure cookies
}
import * as http from 'http'
const server = http.createServer(app)
import { startIo, getonlineLoginUsers } from './api/socket'
var sio = startIo(server)
const onlineLoginUsers = getonlineLoginUsers()
//import { rateLimiterMiddleware } from './middlewares/preventBruteForce'
// import * as sharedsession from 'express-socket.io-session'
var sharedsession = require("express-socket.io-session");
var sessionMiddleware = session(sess)
app.use(sessionMiddleware)
onlineLoginUsers.use(sharedsession(sessionMiddleware, { autoSave: true }))
// onlineLoginUsers.use(function(socket, next){
// sessionMiddleware(socket.client.request, socket.client.request.res, next);
// });
import { serviceRoutes } from './routes/service'
import { userRoutes } from './routes/user'
import { authRoutes } from './routes/auth'
import { adminRoutes } from './routes/admin'
import { walletRoutes } from './routes/wallet'
import { ticketRoutes } from './routes/tickets';
app.use('/service', serviceRoutes)
app.use('/user', userRoutes)
app.use('/auth', authRoutes)
app.use('/admin', adminRoutes)
app.use('/tickets', ticketRoutes)
app.use('/wallet', walletRoutes)
//localHourlySetPrice()
//dailyStatsOfOrders()
let dbBackupTask = cron.schedule('59 23 * * *', () => {
let backupProcessTrudesk = spawn.spawn('mongodump', [
'--db=trudesk',
'--archive=./trudeskDB',
'--gzip'
]);
let backupProcessExchange = spawn.spawn('mongodump', [
'--db=exchange',
'--archive=./exchangeDB',
'--gzip'
]);
backupProcessTrudesk.on('exit', (code, signal) => {
if(code)
console.log('Backup process exited with code ', code);
else if (signal)
console.error('Backup process was killed with singal ', signal);
else
console.log('Successfully backedup the database')
});
backupProcessExchange.on('exit', (code, signal) => {
if(code)
console.log('Backup process exited with code ', code);
else if (signal)
console.error('Backup process was killed with singal ', signal);
else
console.log('Successfully backedup the database')
});
},null);
const restoreProcess = spawn.spawn('mongorestore',[ 'trudesk/trudesk']);
restoreProcess.on('exit', (code, signal) => {
if(code)
console.log('Backup process exited with code ', code);
else if (signal)
console.error('Backup process was killed with singal ', signal);
else
console.log('Successfully backedup the database')
});
curreniesAdder()
continuesStatsOfOrders()
addDollarPrice()
// continuesStatsOfOrders()
// setInterval(continuesStatsOfOrders, 1000*60*1);
// app.use(rateLimiterMiddleware)
app.use(csurf())
app.use(errorHandler)
/**
* Start Express server.
*/
localPriceScript.localHourlySetPrice()
localPriceScript.localDailySetPrice()
localPriceScript.localWeeklySetPrice()
localPriceScript.localMonthlySetPrice()
localPriceScript.localYearlySetPrice()
const port = 3001
const myServer = server.listen(port, () => {
console.log(
" App is running at http://localhost:%d in %s mode",
port,
app.get("env")
);
console.log(" Press CTRL-C to stop\n");
});
export default myServer;