File size: 2,696 Bytes
03a92a9
 
 
 
 
d9d9e44
03a92a9
 
d9d9e44
 
03a92a9
d9d9e44
03a92a9
d9d9e44
03a92a9
 
d9d9e44
 
 
03a92a9
 
 
 
d9d9e44
 
 
 
 
39000f4
 
 
03a92a9
d9d9e44
39000f4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d9d9e44
39000f4
 
03a92a9
d9d9e44
39000f4
 
 
 
 
 
 
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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 existingUserKey = await collectionKey.findOne({ key: apiKey });
        if (!existingUserKey) {
            return res.status(401).json({ message: "API key not found" });
        }

        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.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 };