ultimate_tictactoe_server/user_manager.py
2019-03-21 12:06:22 +01:00

50 lines
1.8 KiB
Python

from database_connection import DatabaseConnection, SQLInjectionError
from user import User
import datetime
import hashlib
import uuid
class UserManager(object):
def __init__(self):
pass
def get_user(self, user_name):
query = f"SELECT name, last_seen FROM users where name='{user_name}'"
return DatabaseConnection.global_single_query(query)
def delete_user(self, user_name):
query = f"DELETE FROM users where name='{user_name}'"
DatabaseConnection.global_single_execution(query)
def verify_user(self, user_name, pw):
query = f"SELECT * FROM users where name='{user_name}'"
users = DatabaseConnection.global_single_query(query)
if len(self.get_user(user_name)) == 0:
return False
user = users[0]
pw_salt = user['pw_salt']
stored_pw_hash = user['pw_hash']
pw_hash = hashlib.sha512(pw.encode() + pw_salt.encode()).hexdigest()
return stored_pw_hash == pw_hash
def create_user(self, user_name, pw):
assert len(self.get_user(user_name)) == 0
pw_salt = uuid.uuid4().hex
pw_hash = hashlib.sha512(pw.encode() + pw_salt.encode()).hexdigest()
query = f"INSERT INTO users (name, pw_hash, pw_salt, last_seen) VALUES ( '{user_name}', '{pw_hash}', '{pw_salt}', '{datetime.datetime.now()}')"
DatabaseConnection.global_single_execution(query)
def touch_user(self, user_name):
matches = self.get_user(user_name)
assert len(matches) == 1
query = f"UPDATE users SET last_seen='{datetime.datetime.now()}' WHERE name='{user_name}'"
DatabaseConnection.global_single_execution(query)
def get_all_users(self):
query = "SELECT name, last_seen FROM users"
return DatabaseConnection.global_single_query(query)