-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathusers.py
More file actions
95 lines (77 loc) · 2.64 KB
/
Copy pathusers.py
File metadata and controls
95 lines (77 loc) · 2.64 KB
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
from logging import raiseExceptions
import secrets
from flask import session
from werkzeug.security import check_password_hash, generate_password_hash
from db import db
def register(username, password):
hash_value = generate_password_hash(password)
test = []
for i in get_users():
test.append(i[1])
if username in test:
return False
try:
sql = """INSERT INTO users (username,password, role)
VALUES (:username,:password, 0) RETURNING id"""
db.session.execute(
sql, {"username": username, "password": hash_value}).fetchone()
db.session.commit()
except:
return False
return login(username, password)
def login(username, password):
sql = "SELECT id, password, role FROM users WHERE username=:username"
result = db.session.execute(sql, {"username": username})
user = result.fetchone()
if not user:
return False
else:
if check_password_hash(user.password, password):
session["user_id"] = user.id
session["user_role"] = user.role
session["username"] = username
session["csrf_token"] = secrets.token_hex(16)
return True
else:
return False
def logout():
del session["user_id"]
del session["user_role"]
del session["username"]
del session["csrf_token"]
def get_users():
sql = "SELECT id, username FROM users ORDER BY username"
result = db.session.execute(sql)
return result.fetchall()
def get_secret_users(id):
sql = """SELECT U.username FROM users U LEFT JOIN secret S ON U.id = S.user_id
WHERE S.topic_id=:id ORDER BY U.username"""
result = db.session.execute(sql, {"id": id})
return list(result.fetchall())
def access(id):
sql = "SELECT user_id FROM secret WHERE topic_id=:id"
result = db.session.execute(sql, {"id": id})
users = list(result.fetchall())
if session.get("user_role", 0) == 1:
return True
for user in users:
if session.get("user_id", 0) == user[0]:
return True
return False
def add_secret(id, choises):
users = list(get_users())
for i in range(0, len(users)):
users[i] = users[i][1]
print(users)
try:
for line in choises.split("\n"):
line = line.replace("\r", "")
if line not in users:
return False
sql = """INSERT INTO secret (topic_id, user_id)
VALUES (:id, (SELECT id FROM users WHERE username=:line))"""
db.session.execute(sql, {"id": id, "line": line})
db.session.commit()
except:
return False
return True