186 lines
5.5 KiB
TypeScript
Executable File
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; |