-
-
Notifications
You must be signed in to change notification settings - Fork 24
/
Copy pathindex.js
167 lines (142 loc) · 4.66 KB
/
index.js
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
process.on('uncaughtException', console.error)
require('dotenv').config();
const express = require('express');
const app = express();
const cors = require('cors');
const chalk = require('chalk');
const PORT = parseInt(process.env.PORT || 2035);
const fs = require('fs');
const path = require('path');
const { execSync } = require('child_process');
const axios = require('axios');
const favicon = require('serve-favicon');
const nodemailer = require("nodemailer");
const visitors = new Set();
let totalRequests = 0;
let totalVisitors = 0;
var allowedOrigins = ['https://api.cafirexos.com', 'http://localhost:2027'];
app.set('trust proxy', 1)
// Inicicializar el servidor de correo
if (process.env.new_user_verification === "true") {
const transporter = nodemailer.createTransport({
host: process.env.smtp_host,
port: Number(process.env.smtp_port),
secure: process.env.smtp_is_secure === 'true',
auth: {
user: process.env.smtp_user,
pass: process.env.smtp_password
},
});
global.mTransporter = transporter;
}
// Funciones
const home = require('./routes/home');
const docs = require('./routes/docs');
const apirouter5 = require('./routes/human-apis');
const getUptime = () => {
const uptimeInSeconds = Math.floor(process.uptime());
const hours = Math.floor(uptimeInSeconds / 3600);
const minutes = Math.floor((uptimeInSeconds % 3600) / 60);
const seconds = uptimeInSeconds % 60;
return `${hours}h ${minutes}m ${seconds}s`;
};
// Subpaginas y usos
app.use((req, res, next) => {
req.startTime = Date.now();
totalRequests++;
const userIp = req.ip;
if (!visitors.has(userIp)) {
visitors.add(userIp);
totalVisitors++;
}
next();
});
app.use('/', home);
app.use('/docs', docs);
app.use('/api', require('./routes'))
// si es /human/algo usa las rutas dinamicas de ./routes/human
app.use('/human', require('./routes/human'))
//si es /human entra aqui directamente
app.use('/human', apirouter5);
app.use('/tmp', express.static('tmp'));
app.use(express.static('public'));
app.use(express.static('data'));
app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')))
app.get('/status', (req, res) => {
const uptime = getUptime();
const averageResponseTime = Date.now() - req.startTime;
totalRequests--;
const response = {
uptime: uptime,
latencia: `${averageResponseTime} ms`,
totalRequests: totalRequests,
totalVisitors: totalVisitors,
creator: 'BrunoSobrino',
phoneNumber: '+52 1 999 612 5657'
};
const formattedResponse = JSON.stringify(response, null, 2);
res.setHeader('Content-Type', 'application/json');
res.end(formattedResponse);
});
app.disable("x-powered-by");
app.use(function(req, res, next) {
res.status(404);
const filePath = path.join(__dirname, 'public', '404.html');
res.sendFile(filePath);
});
global.lolkeysapi = 'GataDiosV2';
// Funciones automáticas
const clearTmpFiles = () => {
const tmpDir = './tmp';
fs.readdir(tmpDir, (err, files) => {
if (err) return console.error('Error al leer directorio temporal:', err);
const filesToDelete = files.filter((file) => file !== 'file');
if (filesToDelete.length > 0) {
filesToDelete.forEach((file) => {
const filePath = path.join(tmpDir, file);
fs.unlink(filePath, (unlinkErr) => {
if (unlinkErr) {
console.error('Error al eliminar el archivo:', unlinkErr);
}
});
});
} else {
return;
}
});
};
setInterval(clearTmpFiles, 60000);
let previousCommitSHA = '';
let isError = false;
async function checkRepoUpdates() {
if (isError) return;
try {
const response = await axios.get(`https://api.github.com/repos/BrunoSobrino/api/commits?per_page=1`);
const { sha } = response.data[0];
if (sha !== previousCommitSHA) {
const stdout = execSync('git pull > /dev/null 2>&1');
previousCommitSHA = sha;
}
} catch {
isError = true;
return;
}
}
setInterval(checkRepoUpdates, 300000); //300000
// Log incial
app.listen(PORT, function() {
const line = chalk.yellow('==========================================');
const serverUrl = 'http://localhost:' + PORT;
const serverMessage = chalk.green.bold('| Server activo: ') + chalk.blue.bold(serverUrl);
const creatorMessage = chalk.magenta.bold('| Creador: BrunoSobrino');
const numberMessage = chalk.magenta.bold('| Numero: +52 1 999 612 5657');
const apiMessage = chalk.red.bold('| "Free Api Rest"');
console.log(chalk.yellow(line));
console.log(apiMessage);
console.log(chalk.yellow(line));
console.log(serverMessage);
console.log(chalk.yellow(line));
console.log(creatorMessage);
console.log(numberMessage);
console.log(chalk.yellow(line));
});