-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrotas.js
184 lines (162 loc) · 5.7 KB
/
rotas.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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
const express = require("express");
const router = express.Router();
const fs = require("fs");
const path = require("path");
const multer = require("multer");
const { fetchGet, fetchPost } = require("npm-package-nodejs-utils-lda");
const {
getRandomInt,
getRandomBin,
getRandomHex,
generateToken,
ordenarUsuario,
pesqUsuario,
validadeApiKey,
unauthorized,
forbidden,
formatDate,
conversorSimEnao,
} = require("npm-package-nodejs-utils-lda");
const storagePages = multer.diskStorage({
destination: (req, file, cb) => {
// Especifique o diretório onde os arquivos serão salvos
const destinationPath = path.join(__dirname, "src", "uploads");
fs.mkdirSync(destinationPath, { recursive: true }); // Cria a pasta 'src/pages' se não existir
cb(null, destinationPath);
},
filename: (req, file, cb) => {
// Use um nome de arquivo único baseado no nome original do arquivo
const uniqueFilename = file.originalname;
cb(null, uniqueFilename);
},
});
// obter o banco de dados de arquivos hosteados automaticamente
router.get("/host=data", (req, res) => {
console.log("SISTEMA <OBTER> <ARQUIVO>: " + req.url);
const database = fs.readFileSync("data/host.json", "utf8");
const host = JSON.parse(database);
res.json(host);
});
// rota para add arquivo a hospedagem automatica
const upload = multer({
storage: storagePages,
limits: {
fileSize: 1024 * 1024 * 256, // Limite de 256 megabytes (ajuste conforme necessário)
},
});
// rota para add hospedagem
router.post("/host", upload.single("file"), (req, res) => {
console.log("SISTEMA <ENVIAR>: " + req.url);
console.log("SISTEMA <PAYLOAD>: " + JSON.stringify(req.body, null, 2));
// Rota blackhole para lidar com muitas requisições
router.use("/blackhole", (req, res) => {
res.status(429);
res.send("Too Many Requests // Muitas Solicitações!");
});
const database = fs.readFileSync("data/host.json", "utf8");
const dataHost = JSON.parse(database);
const payload = req.body;
payload.file = req.file.originalname;
const dominio = payload.path;
const file = payload.file;
const authPath = pesqPath(dominio);
if (authPath !== -1) {
try {
// Verifique se o arquivo foi carregado com sucesso
if (!file) {
throw new Error("Nenhum arquivo foi enviado.");
}
// Se você chegou até aqui, o arquivo foi carregado com sucesso
dataHost.push(payload);
fs.writeFileSync("data/host.json", JSON.stringify(dataHost), "utf8");
res.status(201);
res.send(
"Hospedagem de arquivo cadastrada com sucesso! <a href='" +
dominio +
"'>Acesse aqui</a>"
);
console.log("Hospedagem de arquivo cadastrada com sucesso! " + dominio);
reiniciarServidor();
} catch (error) {
console.error("Erro ao fazer upload do arquivo:", error);
res.status(500);
res.send("Ocorreu um erro ao associar o link: " + error.message);
console.log("Ocorreu um erro ao associar o link: " + error.message);
}
} else {
res.status(400);
res.send("Já existe um Path (caminho) cadastrado.");
console.log("Já existe um Path (caminho) cadastrado.");
}
});
function pesqUserRepetido(nome, user, email) {
const database = fs.readFileSync("data/users.json", "utf8");
const data = JSON.parse(database);
for (let i = 0; i < data.length; i++) {
var currentDB = data[i];
const currentNome = currentDB.nomeCad;
const currentUser = currentDB.userCad;
const currentEmail = currentDB.emailCad;
// Verifica se o nome,usuário e email não estão duplicados
const authNome = currentNome == nome;
const authUser = currentUser == user;
const authEmail = currentEmail == email;
console.log("-----SISTEMA----");
console.log("TAMANHO: " + data.length);
console.log("POSIÇÃO: " + i);
console.log("Pesquisando...");
console.log("User: " + user + " == " + currentUser);
console.log("nome: " + nome + " == " + currentNome);
console.log("email: " + email + " == " + currentEmail);
// Verifica se o nome,usuário e email são verdadeiros
if (authNome || authUser || authEmail) {
return -1; // Retorna -1 se foram encontrados usuarios repetidos no vetor
}
}
console.log(currentDB);
return currentDB;
}
function pesqPath(path) {
const database = fs.readFileSync("data/host.json", "utf8");
const data = JSON.parse(database);
for (let i = 0; i < data.length; i++) {
var currentDB = data[i];
const currentPath = currentDB.path;
console.log("-----SISTEMA----");
console.log("TAMANHO: " + data.length);
console.log("POSIÇÃO: " + i);
console.log("Pesquisando...");
console.log("User: " + path + " == " + currentPath);
// Verifica se o path não estão duplicados e se são verdadeiros
if (currentPath == path) {
return -1; // Retorna -1 se foram encontrados usuarios repetidos no vetor
}
}
console.log(currentDB);
return currentDB;
}
// auto page reloader
function autoPages() {
const hostJson = fs.readFileSync("data/host.json", "utf8");
const hosts = JSON.parse(hostJson);
console.log("SISTEMA <AUTO PAGE> CARREGADO! ");
for (let i = 0; i < hosts.length; i++) {
const host = hosts[i];
const dominio = host.path;
const file = host.file;
const link = path.join(__dirname, "src", "uploads", file);
console.log("SISTEMA <HOST> <PATH>: " + dominio);
console.log("SISTEMA <HOST> <FILE>: " + link);
router.get(dominio, (req, res) => {
console.log("SISTEMA <OBTER> <SITE>: " + req.url);
res.sendFile(link);
});
}
}
autoPages();
// Middleware para lidar com rotas não encontradas (404)
router.use((req, res, next) => {
res.status(404);
res.sendFile(notFoundFilePath);
});
module.exports = router;