const api = require('./routes/api.js');
const album = require('./routes/album.js');
const express = require('express');
const helmet = require('helmet');
const bodyParser = require('body-parser');
const RateLimit = require('express-rate-limit');
const db = require('knex')(config.database);
const fs = require('fs');
const exphbs = require('express-handlebars');
const safe = express();
require('./database/db.js')(db);
fs.existsSync('./pages/custom' ) || fs.mkdirSync('./pages/custom');
fs.existsSync('./' + config.logsFolder) || fs.mkdirSync('./' + config.logsFolder);
fs.existsSync('./' + config.uploads.folder) || fs.mkdirSync('./' + config.uploads.folder);
fs.existsSync('./' + config.uploads.folder + '/thumbs') || fs.mkdirSync('./' + config.uploads.folder + '/thumbs');
fs.existsSync('./' + config.uploads.folder + '/zips') || fs.mkdirSync('./' + config.uploads.folder + '/zips')
safe.use(helmet());
safe.set('trust proxy', 1);
safe.engine('handlebars', exphbs({ defaultLayout: 'main' }));
safe.set('view engine', 'handlebars');
safe.enable('view cache');
let limiter = new RateLimit({ windowMs: 5000, max: 2 });
safe.use('/api/login/', limiter);
safe.use('/api/register/', limiter);
safe.use(bodyParser.urlencoded({ extended: true }));
safe.use(bodyParser.json());
if (config.serveFilesWithNode) {
safe.use('/', express.static(config.uploads.folder));
}
safe.use('/', express.static('./public'));
safe.use('/', album);
safe.use('/api', api);
for (let page of config.pages) {
let root = './pages/';
if (fs.existsSync(`./pages/custom/${page}.html`)) {
root = './pages/custom/';
}
if (page === 'home') {
safe.get('/', (req, res, next) => res.sendFile(`${page}.html`, { root: root }));
} else {
safe.get(`/${page}`, (req, res, next) => res.sendFile(`${page}.html`, { root: root }));
}
}
safe.use((req, res, next) => res.status(404).sendFile('404.html', { root: './pages/error/' }));
safe.use((req, res, next) => res.status(500).sendFile('500.html', { root: './pages/error/' }));
safe.listen(config.port, () => console.log(`lolisafe started on port ${config.port}`));
VJ6rivBfFOdl6ALyjTtq3wbyt7WDbKmn+H/FqMSM1Wxphufsc0/iV8Kx0Kn9YMwhSIglrbMcIGlcQcvGb+u4o571iOf0Tt4nKqUr
exTtapKvoz0RxYFc3BW7ibBDEY+AMixRuWIwslrpdQh8yPs+TyjTpXcGQmdjblZeBz6EpNbMr2xukR2IlzljmSPIL6vS0xdRzggs
iKOdczAT5SvsNPjRx9swCygbha8xq3mFB62GjLVCvkffZTiFPEHiEEWVDYq/tLRe0crb6nNzpiVDjZQDzH0Hh0Mwvp48ZfKSyGGC
l65IxKmE7BgXASNt/9xX1a8tWf6LHx49qc8tFvQK675j6elgcp9IDNKO54NsocMOMxwFEPO8tDsSbOlAcwtkR6G/orrbsGgaObhp
c86lNgldETPX7ZsFemiTXPZ0RNaKDwg3iehILlWt0O23qqhiDEZkXGjnwaJ3nkEOXMGvuqm6IOQJbDtRlXl+9D17OvP2gWJqdzXH
SWw9XcCHzK0aCMeNut9dT65HL1U6szNA2zh7cq+ph0wjglp5RyZYDmn1tW8biZx/xEBllfz8aAsRixpko7PvFbUOJpskJCrZwvV+
WNAcC1P1CEVbq5MQptKe3s/OqGLxhcuK63mO0f5JO01hbFlfl10x9iq1ovkvpZIGcCjCCoUGuQtJxPEeEedeSxzruuV/zEi7V1Nz
3bW7zBEoG6/FC3WHAqf4QcqEGYQ5bLSZUkxdYu8EmgnnvdzTBcBGrCAvlq13tRF1Zr6ImlSnNNIn9kr2bDzmxMhDdfc7qGsSpRa2
bbWUwjmjFts0oFDlCeRaAa9bAz1ily13dYkD+hZUExLHEJB8H8Y+jpZZP2IyI14R4dkS1ib5KpN1amCKX/rw2MMlyq9rml7/RmUE
ppU+Awj9tw/l8QFf5j0hG7t4RPtGUCv2+gYOHpbuxj1pe1HFGmf0op4+Nh5+8ECcWZyTV5GM5hEfYkC71LxTZwutjmmtFZqRoT76
81/uiYgd1cUJrGZi7O8gYTlqItFS++H97yMlSs0iw/PLnbpRPfp5AQ3APYKBG4Eys5g7TZ36bWWlcLfAlcgnTJBJ/lbZLKUJnQBs
KKXCoQ1FWMiw9axLez01jUJQGD4iG+5S4ysNV4deVAhD7EPZb7OdmorAcQiCRDndVFyxVimjEGOIStaoQZx9gUoN0fda4xysUSfE
ABfZRvZ10Q+70hao+YYpKteB9D/PO21jj6ZzsGvp61SyQs9LHv3KjLW1HhcV29APF78e8JL60Ed/Z0mXSZ5067VIuUxID89KwDa4
E/lyaLHn4JiS3zDyZklQxYk/2HedtJHVbypvq2A6Jrk9LEnyh/XBJ/yx+1F/KNSaXTUJJH58sM02DMys2+Y0U5PIMEsyC2YHQY1c
j8LemHZFpi/49bNqi2wDonbmte/Y4tEtWpIG0TB9iHmLjlwnDzOKFjulM1ANSdBm0Vcoj6NCqFmPLhCAiODJmjBXRi4UHHBRpyS6
YOwcRC8hknYjQAMoDX6zrOVyhs09vr3qyLIXRZd8R0+TU4cQnFJtHeFtkcHmkqrjieELi7G8eaD1IuvVia8kYbZvtKrw0iw57cnc
y75j4BTSV1gp24xVNWoaWbNMbAVy07X43RZAF+NkG/OqsOivEi+mkpOA5BvoGgT+4SwVRzw4cnw1vfss/pvI33dUkNnc1+/v6LrD
2UyBLNsbR5DEiIyaH8DM1OVKwyUQenrleZNajaKpZzrOIsszZaejsSRrYYPntiKBbb+TkhrcrAMxbZIJBeBYxJfINVQyc/2RgsR6
JbLbxztUHczQdVghrbu1cH8AnxfoNbyQnHPXssHNZswLrfM9xby4b4ztg04Y6IZHyTUxnKvI7cNjMTvFkRLwZPM7IQynuR9Hc/1V
4npEFaYLicpud8bKBKTkz/17KdDhNxJM5BNXPnxqnlb7m8CkDHhpYpn/WCV+duJiaaRPtWRSVMM+4IDAh5aga7sS6HOEvs4/IWtZ
K1OezKnNOLowsLOBDpvLOm1xrI23MCbVtw==