summary refs log tree commit diff
path: root/db.py
blob: 88dc79b31f5ce915f89186c584331d6fc833404e (plain)
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
import json
import os
from passlib.hash import scrypt
from pymongo.mongo_client import MongoClient
from pymongo.server_api import ServerApi
from dotenv import load_dotenv
import time

load_dotenv()

uri = os.getenv("MONGODB_URL")

# Create a new client and connect to the server
client = MongoClient(uri, server_api=ServerApi('1'))

# Send a ping to confirm a successful connection
try:
    client.admin.command('ping')
    print("Connected to MongoDB!")
except Exception as e:
    print(e)
    exit()

database = client[os.getenv("DATABASE_NAME")]
postsd = database[os.getenv("POST_COLLECTION")]
usersd = database[os.getenv("USER_COLLECTION")]
inboxd = database[os.getenv("INBOX_COLLECTION")]

class acc:
    def get(username):
        user = usersd.find_one({"username": username})
        if not user:
            return "notExists"
        else:
            return user

    def add(data, username=None):
        user = usersd.find_one({"username": username})
        if user:
            return "exists"
        try:
            usersd.insert_one(data)
        except Exception as e:
            return "fail"
        return True
    
    def edit(data, username):
        filter = { 'username': username }
        endr = { '$set': data }
        try:
            usersd.update_one(filter, endr)
        except Exception as e:
            print(e)
            return False
        return True

    def remove(username):
        user = usersd.find_one({"username": username})
        if not user:
            return "notExists"
        try:
            usersd.delete_one({"username": username})
        except:
            return "fail"
        return True

    def verify(token):
        user = usersd.find_one({"secure.token": token})
        if not user:
            return "notExists"
        if user["banned_until"] > round(time.time()):
            return {"banned": True, "username": user["username"]}
        else:
            return {"banned": False, "username": user["username"]}

    def verify_pswd(username, password):
        user = usersd.find_one({"username": username})
        if not user:
            return "notExists"
        if user["banned_until"] > round(time.time()):
            return "banned"
        elif not scrypt.verify(password, user["secure"]["password"]):
            return "unauthorized"
        else:
            return {"token": user["secure"]["token"]}

    def get_ban(username):
        user = usersd.find_one({"username": username})
        if not user:
            return "notExists"
        return {"banned_until": user["banned_until"], "ban_reason": user["secure"]["ban_reason"]}

    def get_perms(username):
        user = usersd.find_one({"username": username})
        if not user:
            return "notExists"
        return user["permissions"]