-
Notifications
You must be signed in to change notification settings - Fork 0
/
user.py
51 lines (41 loc) · 1.35 KB
/
user.py
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
import os
from collections import OrderedDict
from datetime import datetime
from pymongo import MongoClient
from dotenv import load_dotenv
load_dotenv()
client = MongoClient(
os.getenv("MONGO_DB_URL")
)
db = client.users
class UserMemo(OrderedDict):
def __init__(self, *args, **kwds):
self.size_limit = kwds.pop("size_limit", None)
OrderedDict.__init__(self, *args, **kwds)
self._check_size_limit()
def __setitem__(self, key, value):
OrderedDict.__setitem__(self, key, value)
self._check_size_limit()
def _check_size_limit(self):
if self.size_limit is not None:
while len(self) > self.size_limit:
self.popitem(last=False)
user_memo = UserMemo(size_limit=10)
def get_or_create_user(user, hash, browser, pswd):
stored_user = user_memo.get(user) or db.users.find_one({"user": user})
user_memo[user] = stored_user
if hash and stored_user:
if stored_user.get("hash") != hash:
return None
return user
elif stored_user:
return user
elif not hash:
return None
elif db.users.find_one({"hash": hash}):
return None
elif browser:
db.users.insert_one({"user": user, "hash": hash, "count": 0, "first_guess": pswd, "sign_up": datetime.now().strftime('%s')})
return user
else:
return None