File size: 1,871 Bytes
03a92a9 d9d9e44 03a92a9 d9d9e44 03a92a9 d9d9e44 03a92a9 d9d9e44 03a92a9 d9d9e44 03a92a9 d9d9e44 03a92a9 d9d9e44 03a92a9 d9d9e44 03a92a9 d9d9e44 03a92a9 d9d9e44 03a92a9 d9d9e44 03a92a9 d9d9e44 03a92a9 d9d9e44 03a92a9 |
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 |
import express from 'express';
import { Database } from '../database/database.js';
import { authenticateApiKey, apiLimiter } from '../middleware/midware.js';
const AntibanRoutes = express.Router();
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 existingUser = await collection.findOne({ user_ban: userIdNumber });
const existingUserKey = await collectionKey.findOne({ key: apiKey });
if (!existingUserKey) {
return res.status(401).json({ message: "API key not found" });
}
if (existingUser) {
return res.status(200).json({ message: `User is already banned: ${existingUser.user_ban}`, is_ban: true });
}
const userDocument = {
key: existingUserKey.key,
user_ban: userIdNumber,
createdAt: new Date(),
};
if (reasonString) {
userDocument.reason = reasonString;
}
await collection.insertOne(userDocument);
res.json({ message: `User successfully banned: ${userIdNumber}`, is_ban: true });
} catch (error) {
res.status(500).json({ error: `Internal server error: ${error.message}` });
}
});
export { AntibanRoutes }; |