ultimate_tictactoe_server/user_manager.py

76 lines
2.9 KiB
Python
Raw Normal View History

2019-03-14 00:01:02 +01:00
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):
2019-03-27 17:23:04 +01:00
query = "SELECT name, last_seen FROM users where name=%s"
return DatabaseConnection.global_single_query(query, (user_name))
2019-03-14 00:01:02 +01:00
def delete_user(self, user_name):
2019-03-27 17:23:04 +01:00
query = "DELETE FROM users where name=%s"
DatabaseConnection.global_single_execution(query, (user_name))
2019-03-14 00:01:02 +01:00
2019-03-24 16:44:20 +01:00
# remove from friends:
2019-03-27 17:23:04 +01:00
query = "DELETE FROM friends WHERE user=%s"
DatabaseConnection.global_single_execution(query, (user_name))
2019-03-24 16:44:20 +01:00
2019-03-27 17:23:04 +01:00
query = "DELETE FROM friends WHERE friend=%s"
DatabaseConnection.global_single_execution(query, (user_name))
2019-03-24 16:44:20 +01:00
2019-03-14 00:01:02 +01:00
def verify_user(self, user_name, pw):
2019-03-27 17:23:04 +01:00
query = "SELECT * FROM users where name=%s"
users = DatabaseConnection.global_single_query(query, (user_name))
2019-03-14 00:01:02 +01:00
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()
2019-03-27 17:23:04 +01:00
query = "INSERT INTO users (name, pw_hash, pw_salt, last_seen) VALUES ( %s, %s, %s, %s)"
DatabaseConnection.global_single_execution(query, (user_name, pw_hash, pw_salt, datetime.datetime.now()))
2019-03-14 00:01:02 +01:00
def touch_user(self, user_name):
matches = self.get_user(user_name)
assert len(matches) == 1
2019-03-27 17:23:04 +01:00
query = "UPDATE users SET last_seen=%s WHERE name=%s"
DatabaseConnection.global_single_execution(query, (datetime.datetime.now(), user_name))
2019-03-24 16:44:20 +01:00
def add_friend_to_user(self, user_name, friend_name):
if len(self.get_user(friend_name)) > 0:
2019-03-27 17:23:04 +01:00
query = "INSERT INTO friends (user, friend) VALUES ( %s, %s)"
DatabaseConnection.global_single_execution(query, (user_name, friend_name))
2019-03-24 16:44:20 +01:00
return True
return False
def get_friends_for_user(self, user_name):
2019-03-27 17:23:04 +01:00
query = "SELECT friend FROM friends WHERE user=%s"
tmp = DatabaseConnection.global_single_query(query, (user_name))
2019-03-24 16:44:20 +01:00
friends = set()
for entry in tmp:
friends.add(entry['friend'])
return friends
def remove_friend_from_user(self, user_name, friend_name):
2019-03-27 17:23:04 +01:00
query = "DELETE FROM friends WHERE user=%s AND friend=%s"
DatabaseConnection.global_single_execution(query, (user_name, friend_name))
2019-03-14 00:01:02 +01:00
def get_all_users(self):
query = "SELECT name, last_seen FROM users"
return DatabaseConnection.global_single_query(query)