-
Notifications
You must be signed in to change notification settings - Fork 0
/
DBmanage.py
113 lines (72 loc) · 2.33 KB
/
DBmanage.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
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import bcrypt
import pymysql
from error import *
def get_connection():
conn = pymysql.connect(host='127.0.0.1', db='auth', user='root', password='password', charset='utf8')
return conn
def get_all_user():
conn = get_connection()
cursor = conn.cursor(pymysql.cursors.DictCursor)
sql = 'select * from user where registered<1'
cursor.execute(sql)
result = cursor.fetchall()
conn.commit()
cursor.close()
conn.close()
return result
def find_user(index=None, email=None, name=None):
conn = get_connection()
cursor = conn.cursor(pymysql.cursors.DictCursor)
result = None
if index is not None:
sql = "select * from user where index={}".format(index)
cursor.execute(sql)
result = cursor.fetchone()
elif email is not None:
sql = "select * from user where email='{}'".format(email)
cursor.execute(sql)
result = cursor.fetchone()
elif name is not None:
sql = "select * from user where name='{}'".format(name)
cursor.execute(sql)
result = cursor.fetchall()
if result is None:
cursor.close()
conn.close()
raise no_user
conn.commit()
cursor.close()
conn.close()
return result
def register(email, pw, name):
try:
find_user(email=email)
raise duplicate_user
except Exception as e:
if type(e) is no_user:
pass
elif type(e) is duplicate_user:
raise duplicate_user
else:
raise disable
conn = get_connection()
cursor = conn.cursor(pymysql.cursors.DictCursor)
hashed_pw = bcrypt.hashpw(pw.encode('utf-8'), bcrypt.gensalt()).hex()
sql = "insert into user(email, hashed_pw, name) values('{email}', x'{hashed_pw}', '{name}')" \
.format(email=email, hashed_pw=hashed_pw, name=name)
cursor.execute(sql)
sql = "select * from user where email='{}'".format(email)
cursor.execute(sql)
result = cursor.fetchone()
if result is None:
cursor.close()
conn.close()
raise disable
conn.commit()
cursor.close()
conn.close()
def login(email=None, pw=None):
usr = find_user(email=email)
if not bcrypt.checkpw(password=pw.encode('utf-8'), hashed_password=usr['hashed_pw'].encode('utf-8')):
raise no_user
return usr