This repository was archived by the owner on Jul 14, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathindex.js
More file actions
89 lines (72 loc) · 2.55 KB
/
index.js
File metadata and controls
89 lines (72 loc) · 2.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
const express = require('express');
const session = require('express-session');
const fs = require('fs');
const passport = require('passport');
const ejs = require('ejs');
const path = require('path');
const axios = require('axios');
const ipaddr = require('ipaddr.js');
const requestIp = require('request-ip');
require('dotenv').config();
const app = express();
const expressWs = require('express-ws')(app);
const { db } = require('./function/db');
// Add admin users
if (!process.env.ADMIN_USERS) {
console.warn('No admin users defined. Skipping admin user creation.');
} else {
let admins = process.env.ADMIN_USERS.split(',');
for (let i = 0; i < admins.length; i++) {
db.set(`admin-${admins[i]}`, true);
}
}
// Set up ejs as the view engine
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, '/resources'));
// Set up session middleware
app.use(session({
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: true
}));
// Initialize passport
app.use(passport.initialize());
app.use(passport.session());
// IP middleware
app.use(requestIp.mw());
// VPN detection middleware
app.use(async (req, res, next) => {
if (process.env.PROXYCHECK_KEY || !process.env.PROXYCHECK_KEY == "0000000000000000000000000000") {
try {
const ipAddress = req.clientIp;
if (!ipaddr.isValid(ipAddress)) {
console.error(`Invalid IP Address: ${ipAddress}`);
return res.status(400).json('Invalid IP address format.');
}
const userIp = ipaddr.process(ipAddress).toString();
const proxycheck_key = process.env.PROXYCHECK_KEY;
const proxyResponse = await axios.get(`http://proxycheck.io/v2/${userIp}?key=${proxycheck_key}`);
const proxyData = proxyResponse.data;
if (proxyData[userIp] && proxyData[userIp].proxy === 'yes') {
return res.status(403).json('It seems we have detected a proxy/VPN enabled on your end, please turn it off to continue.');
}
next();
} catch (error) {
console.error('Error in VPN detection middleware:', error);
return res.status(500).json('Internal Server Error');
}
}
});
// Require the routes
let allRoutes = fs.readdirSync('./app');
for (let i = 0; i < allRoutes.length; i++) {
let route = require(`./app/${allRoutes[i]}`);
expressWs.applyTo(route);
app.use('/', route);
}
// Serve static files (after VPN detection)
app.use(express.static(path.join(__dirname, 'public')));
// Start the server
app.listen(process.env.APP_PORT || 3000, () => {
console.log(`PalPod has been started on ${process.env.APP_URL} !`);
});