|
import express from 'express'; |
|
import { Database } from '../database/database.js'; |
|
import { predictCreationDate } from '../lib/create-date.js'; |
|
import { authenticateApiKey, apiLimiter } from '../middleware/midware.js'; |
|
const AntibanRoutes = express.Router(); |
|
|
|
const protectedUsers = [6477856957, 1191668125, 1448273246, 1054295664, 6444305696]; |
|
|
|
AntibanRoutes.get("/api/v1/user/creation-date", authenticateApiKey, apiLimiter, (req, res) => { |
|
const userId = Number(req.query.user_id); |
|
if (!userId || isNaN(userId)) { |
|
return res.status(400).json({ error: "Invalid or missing user_id" }); |
|
} |
|
|
|
const result = predictCreationDate(userId); |
|
res.json({ user_id: userId, estimated_creation: result }); |
|
}); |
|
|
|
AntibanRoutes.post("/api/v1/user/ban-user", authenticateApiKey, apiLimiter, async (req, res) => { |
|
const dbClient = new Database("AkenoXJs"); |
|
const collection = dbClient.collection("ban_users"); |
|
const collectionKey = dbClient.collection("api_keys"); |
|
|
|
try { |
|
const apiKey = req.headers["x-api-key"]; |
|
const userIdString = req.query.user_id; |
|
const reasonString = req.query.reason; |
|
const userIdNumber = Number(userIdString); |
|
|
|
if (!apiKey) { |
|
return res.status(400).json({ error: "Missing API key in headers" }); |
|
} |
|
if (isNaN(userIdNumber)) { |
|
return res.status(400).json({ error: "Invalid or missing user_id" }); |
|
} |
|
|
|
const existingUserKey = await collectionKey.findOne({ key: apiKey }); |
|
if (!existingUserKey) { |
|
return res.status(401).json({ message: "API key not found" }); |
|
} |
|
|
|
if (existingUserKey.owner === userIdNumber) { |
|
return res.status(200).json({ |
|
message: `User ${userIdNumber} cannot be banned because they created the API key`, |
|
is_ban: false |
|
}); |
|
} |
|
if (protectedUsers.includes(userIdNumber)) { |
|
return res.status(403).json({ |
|
message: `User ${userIdNumber} is a protected admin and cannot be banned`, |
|
is_ban: false |
|
}); |
|
} |
|
|
|
const existingBan = await collection.findOne({ user_ban: userIdNumber }); |
|
if (existingBan) { |
|
return res.status(200).json({ message: `User ${userIdNumber} is already banned`, is_ban: true }); |
|
} |
|
|
|
await collection.updateOne( |
|
{ key: existingUserKey.key }, |
|
{ $addToSet: { user_ban: userIdNumber }, $set: { updatedAt: new Date(), owner: existingUserKey.owner } }, |
|
{ upsert: true } |
|
); |
|
|
|
res.json({ message: `User ${userIdNumber} successfully banned`, is_ban: true }); |
|
|
|
} catch (error) { |
|
res.status(500).json({ error: `Internal server error: ${error.message}` }); |
|
} |
|
}); |
|
|
|
AntibanRoutes.post("/api/v1/user/anti-broadcast", authenticateApiKey, async (req, res) => { |
|
const dbClient = new Database("AkenoXJs"); |
|
const collection = dbClient.collection("users_broadcast"); |
|
const collectionKey = dbClient.collection("api_keys"); |
|
|
|
try { |
|
const apiKey = req.headers["x-api-key"]; |
|
const userIdString = req.query.user_id; |
|
const WorldString = req.query.text; |
|
const userIdNumber = Number(userIdString); |
|
|
|
if (!apiKey) { |
|
return res.status(400).json({ error: "Missing API key in headers" }); |
|
} |
|
if (!WorldString) { |
|
return res.status(400).json({ error: "Missing params: text" }); |
|
} |
|
if (isNaN(userIdNumber)) { |
|
return res.status(400).json({ error: "Invalid or missing user_id" }); |
|
} |
|
|
|
const existingUserKey = await collectionKey.findOne({ key: apiKey }); |
|
|
|
if (!existingUserKey) { |
|
return res.status(401).json({ message: "API key not found" }); |
|
} |
|
|
|
if (existingUserKey.owner === userIdNumber) { |
|
return res.status(200).json({ |
|
message: `User ${userIdNumber} cannot be broadcast because they created the API key`, |
|
is_broadcast: false |
|
}); |
|
} |
|
|
|
const existingBroadcast = await collection.findOne({ user_id: userIdNumber }); |
|
if (existingBroadcast) { |
|
return res.status(200).json({ message: `User ${userIdNumber} is already broadcasting`, is_broadcast: true }); |
|
} |
|
|
|
if (WorldString.length > 3096) { |
|
return res.status(400).json({ message: `User ${userIdNumber} is sending a spam broadcast`, is_broadcast: true }); |
|
} |
|
|
|
await collection.updateOne( |
|
{ user_id: userIdNumber }, |
|
{ |
|
$set: { |
|
text: WorldString, |
|
updatedAt: new Date(), |
|
owner: existingUserKey.owner, |
|
is_broadcast: true |
|
} |
|
}, |
|
{ upsert: true } |
|
); |
|
|
|
res.json({ message: `User ${userIdNumber} successfully broadcast`, is_broadcast: true }); |
|
|
|
} catch (error) { |
|
res.status(500).json({ error: `Internal server error: ${error.message}` }); |
|
} |
|
}); |
|
|
|
AntibanRoutes.get("/api/v1/user/check-broadcast", authenticateApiKey, async (req, res) => { |
|
const dbClient = new Database("AkenoXJs"); |
|
const collection = dbClient.collection("users_broadcast"); |
|
|
|
try { |
|
const userIdString = req.query.user_id; |
|
const userIdNumber = Number(userIdString); |
|
|
|
if (isNaN(userIdNumber)) { |
|
return res.status(400).json({ error: "Invalid or missing user_id" }); |
|
} |
|
|
|
const GikesUser = await collection.findOne({ user_id: userIdNumber }); |
|
|
|
if (GikesUser) { |
|
return res.status(200).json({ message: `User ${userIdNumber} is broadcast`, is_broadcast: true }); |
|
} else { |
|
return res.status(200).json({ message: `User ${userIdNumber} is not broadcast`, is_broadcast: false }); |
|
} |
|
|
|
} catch (error) { |
|
res.status(500).json({ error: `Internal server error: ${error.message}` }); |
|
} |
|
}); |
|
|
|
AntibanRoutes.get("/api/v1/user/check-ban", authenticateApiKey, async (req, res) => { |
|
const dbClient = new Database("AkenoXJs"); |
|
const collection = dbClient.collection("ban_users"); |
|
|
|
try { |
|
const userIdString = req.query.user_id; |
|
const userIdNumber = Number(userIdString); |
|
|
|
if (isNaN(userIdNumber)) { |
|
return res.status(400).json({ error: "Invalid or missing user_id" }); |
|
} |
|
|
|
const bannedUser = await collection.findOne({ user_ban: userIdNumber }); |
|
|
|
if (bannedUser) { |
|
return res.status(200).json({ message: `User ${userIdNumber} is banned`, is_ban: true }); |
|
} else { |
|
return res.status(200).json({ message: `User ${userIdNumber} is not banned`, is_ban: false }); |
|
} |
|
|
|
} catch (error) { |
|
res.status(500).json({ error: `Internal server error: ${error.message}` }); |
|
} |
|
}); |
|
|
|
export { AntibanRoutes }; |