const express = require('express'); const session = require('express-session'); const passport = require('passport'); const bodyParser = require('body-parser'); const { logger, logRequestInfo, ErrorLogger } = require('./config/logs'); const path = require("path"); require('dotenv').config(); const { version } = require('./package.json'); const axios = require('axios'); const app = express(); const flash = require('connect-flash'); const fs = require('fs'); const SystemReport = require('./models/reportManager.js'); let setup = {}; try { setup = JSON.parse(fs.readFileSync('setup.json', 'utf8')); } catch (err) { console.error('Error reading setup.json:', err); } if (setup.discord !== undefined) { require('./models/Passport-Discord.js'); } if (setup.ldap !== undefined) { require('./models/Passport-ActiveDirectory.js'); } app.use(express.static(path.join(__dirname, 'public'))); app.get(['/user.json', '/file_info.json', '/setup.json'], (req, res) => { res.status(403).json({ error: 'Access Denied' }); }); app.use(express.urlencoded({ extended: true })); app.use(session({ secret: '63a69c252dfe0bb20650b6365b48dc99ad6c7eac19faed62670e73a071c54236e2faf04ee009919592def437b98d3c726c40a56ef1d8759878c1703a93244aa3', resave: false, saveUninitialized: true, cookie: { secure: false } }));app.use(passport.initialize()); app.use(passport.session()); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); app.use(flash()); const indexRoute = require('./routes/index.js'); const AuthRoute = require('./routes/auth.js'); const DpanelRoute = require('./routes/dpanel.js'); const AttachmentsRoute = require('./routes/attachments.js'); app.set('view engine', 'ejs'); app.set('views', __dirname + '/views'); app.use('/', indexRoute); app.use('/auth', AuthRoute); app.use('/dpanel', DpanelRoute); app.use('/attachments', AttachmentsRoute); app.use('/public', express.static(path.join(__dirname, 'public'))); app.use(logRequestInfo); const cron = require('node-cron'); cron.schedule('00 03 * * *', async () => { try { const report = await SystemReport.generate(); if (report !== null) { logger.info('System error report generated successfully'); } } catch (err) { ErrorLogger.error('Error generating report :', err); } }); cron.schedule('0 * * * *', async () => { try { const fileInfoData = await fs.promises.readFile(path.join(__dirname, 'file_info.json'), 'utf8'); const fileInfo = JSON.parse(fileInfoData); const now = new Date(); for (let index = fileInfo.length - 1; index >= 0; index--) { const file = fileInfo[index]; const expiry = new Date(file.expiryDate); if ((file.expiryDate && expiry <= now) || !(await fileExists(file.path))) { fileInfo.splice(index, 1); } } await fs.promises.writeFile(path.join(__dirname, 'file_info.json'), JSON.stringify(fileInfo, null, 2), 'utf8'); logger.info('Successfully checked file expirations and updated file_info.json'); } catch (err) { ErrorLogger.error(`Failed to check file expirations: ${err}`); } }); async function fileExists(filePath) { try { await fs.promises.access(filePath); return true; } catch { return false; } } const PORT = process.env.PORT || 5053; app.listen(PORT, () => { console.clear(); if (logger) { logger.info(`🚀 Your server is available and running on port ${PORT}`); logger.info(`⚜️ Application developed by Dinawo, part of the SwiftLogic Labs group`); logger.info(`♨️ Version: ${version}`); console.log(''); const filesData = fs.readFileSync('files.json', 'utf8'); const files = JSON.parse(filesData); const numberOfFiles = Object.values(files).flat().length; logger.info(`🔰 Number of files activated during server startup: ${numberOfFiles}`); } else { console.error('🔴 Logger is not initialized'); } });