From 3dbbad062c5543fa06d5f3559bfada1da70c5d86 Mon Sep 17 00:00:00 2001 From: Svea Date: Thu, 29 Feb 2024 19:13:06 +0100 Subject: [PATCH 1/5] update of UserData so that password and role are also saved --- comprl/scripts/dummy_user.py | 8 ++++---- comprl/scripts/new_user.py | 2 +- comprl/server/data/interfaces.py | 13 +++++++++++++ comprl/server/data/sql_backend.py | 20 +++++++++++++++----- tests/reset_database_test.py | 24 ++++++++++++++++++++---- 5 files changed, 53 insertions(+), 14 deletions(-) diff --git a/comprl/scripts/dummy_user.py b/comprl/scripts/dummy_user.py index 4916539a..a6ca803d 100644 --- a/comprl/scripts/dummy_user.py +++ b/comprl/scripts/dummy_user.py @@ -18,10 +18,10 @@ def insert_users(): """inserts four dummy user to the user database""" - user_data.add(user_name="test1", user_token="token1") - user_data.add(user_name="test2", user_token="token2") - user_data.add(user_name="test3", user_token="token3") - user_data.add(user_name="test4", user_token="token4") + user_data.add(user_name="test1", user_password="password1", user_token="token1") + user_data.add(user_name="test2", user_password="password2", user_token="token2") + user_data.add(user_name="test3", user_password="password3", user_token="token3") + user_data.add(user_name="test4", user_password="password4", user_token="token4") logging.info("Four dummy users have been added.") diff --git a/comprl/scripts/new_user.py b/comprl/scripts/new_user.py index b236585b..b0ec3bd9 100644 --- a/comprl/scripts/new_user.py +++ b/comprl/scripts/new_user.py @@ -24,7 +24,7 @@ def insert_user(name: str): name (str): name of the new user """ token = str(uuid.uuid4()) - user_data.add(user_name=name, user_token=token) + user_data.add(user_name=name, user_password=str(uuid.uuid4()), user_token=token) if __name__ == "__main__": diff --git a/comprl/server/data/interfaces.py b/comprl/server/data/interfaces.py index a236f72d..8c58ca5c 100644 --- a/comprl/server/data/interfaces.py +++ b/comprl/server/data/interfaces.py @@ -73,3 +73,16 @@ def __init__( self.disconnected_id = None if end_state == GameEndState.DISCONNECTED: self.disconnected_id = user1_id if is_user1_disconnected else user2_id + + +class UserRole(IntEnum): + """ + Represents the possible user roles. + + Attributes: + USER: Normal user without administrative rights. + ADMIN = User with administrative rights. + """ + + USER = 0 + ADMIN = 1 diff --git a/comprl/server/data/sql_backend.py b/comprl/server/data/sql_backend.py index 92a2f2e7..40518dc3 100644 --- a/comprl/server/data/sql_backend.py +++ b/comprl/server/data/sql_backend.py @@ -5,7 +5,7 @@ import dataclasses import sqlite3 -from comprl.server.data.interfaces import GameResult +from comprl.server.data.interfaces import GameResult, UserRole from comprl.shared.types import GameID @@ -120,7 +120,9 @@ def __init__(self, connection: SQLiteConnectionInfo) -> None: f""" CREATE TABLE IF NOT EXISTS {connection.table} ( user_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL, + username TEXT NOT NULL UNIQUE, + password TEXT NOT NULL, + role UserRole, token TEXT NOT NULL, mu FLOAT NOT NULL, sigma FLOAT NOT NULL @@ -128,14 +130,22 @@ def __init__(self, connection: SQLiteConnectionInfo) -> None: ) def add( - self, user_name: str, user_token: str, user_mu=25.000, user_sigma=8.333 + self, + user_name: str, + user_password: str, + user_token: str, + user_role=UserRole.USER, + user_mu=25.000, + user_sigma=8.333, ) -> int: """ Adds a new user to the database. Args: user_name (str): The name of the user. + user_password (str): The password of the user. user_token (str): The token of the user. + user_role (UserRole, optional): The role of the user. Defaults to UserRole.USER. user_mu (float, optional): The mu value of the user. Defaults to 25. user_sigma (float, optional): The sigma value of the user. Defaults to 8.33. @@ -143,8 +153,8 @@ def add( int: The ID of the newly added user. """ self.cursor.execute( - f"""INSERT INTO {self.table}(name, token, mu, sigma) VALUES (?,?,?,?)""", - (user_name, user_token, user_mu, user_sigma), + f"""INSERT INTO {self.table}(username, password, role, token, mu, sigma) VALUES (?,?,?,?,?,?)""", + (user_name, user_password, user_role, user_token, user_mu, user_sigma), ) self.cursor.execute( f"""SELECT user_id FROM {self.table} WHERE token=?""", diff --git a/tests/reset_database_test.py b/tests/reset_database_test.py index db248b7e..d02f735c 100644 --- a/tests/reset_database_test.py +++ b/tests/reset_database_test.py @@ -12,10 +12,26 @@ def reset_tests(): user_data = UserData(ConfigProvider.get("user_data")) - userID1 = user_data.add(user_name="user_1", user_token=str(uuid.uuid4())) - userID2 = user_data.add(user_name="user_2", user_token=str(uuid.uuid4())) - userID3 = user_data.add(user_name="user_3", user_token=str(uuid.uuid4())) - userID4 = user_data.add(user_name="user_4", user_token=str(uuid.uuid4())) + userID1 = user_data.add( + user_name="user_1", + user_password=str(uuid.uuid4()), + user_token=str(uuid.uuid4()), + ) + userID2 = user_data.add( + user_name="user_2", + user_password=str(uuid.uuid4()), + user_token=str(uuid.uuid4()), + ) + userID3 = user_data.add( + user_name="user_3", + user_password=str(uuid.uuid4()), + user_token=str(uuid.uuid4()), + ) + userID4 = user_data.add( + user_name="user_4", + user_password=str(uuid.uuid4()), + user_token=str(uuid.uuid4()), + ) user_data.set_matchmaking_parameters(user_id=userID1, mu=24.000, sigma=9.333) user_data.set_matchmaking_parameters(user_id=userID2, mu=23.000, sigma=9.000) From e8212ed2bdf18de926aa801e9171f050809dd1c0 Mon Sep 17 00:00:00 2001 From: Svea Date: Sat, 2 Mar 2024 16:03:56 +0100 Subject: [PATCH 2/5] changed UserRole to a StrEnum --- comprl/server/data/interfaces.py | 8 ++++---- comprl/server/data/sql_backend.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/comprl/server/data/interfaces.py b/comprl/server/data/interfaces.py index 8c58ca5c..fa8ba35e 100644 --- a/comprl/server/data/interfaces.py +++ b/comprl/server/data/interfaces.py @@ -3,7 +3,7 @@ """ from datetime import datetime -from enum import IntEnum +from enum import IntEnum, StrEnum from comprl.shared.types import GameID @@ -75,7 +75,7 @@ def __init__( self.disconnected_id = user1_id if is_user1_disconnected else user2_id -class UserRole(IntEnum): +class UserRole(StrEnum): """ Represents the possible user roles. @@ -84,5 +84,5 @@ class UserRole(IntEnum): ADMIN = User with administrative rights. """ - USER = 0 - ADMIN = 1 + USER = "user" + ADMIN = "admin" diff --git a/comprl/server/data/sql_backend.py b/comprl/server/data/sql_backend.py index 40518dc3..e47d6d97 100644 --- a/comprl/server/data/sql_backend.py +++ b/comprl/server/data/sql_backend.py @@ -122,7 +122,7 @@ def __init__(self, connection: SQLiteConnectionInfo) -> None: user_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL UNIQUE, password TEXT NOT NULL, - role UserRole, + role TEXT NOT NULL DEFAULT 'user', token TEXT NOT NULL, mu FLOAT NOT NULL, sigma FLOAT NOT NULL From 59c42b19fcc67d80e14cd8748082ae45b987cc67 Mon Sep 17 00:00:00 2001 From: Svea Date: Sat, 2 Mar 2024 16:56:45 +0100 Subject: [PATCH 3/5] workaround StrEnum --- comprl/server/data/interfaces.py | 4 ++-- comprl/server/data/sql_backend.py | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/comprl/server/data/interfaces.py b/comprl/server/data/interfaces.py index fa8ba35e..de77653f 100644 --- a/comprl/server/data/interfaces.py +++ b/comprl/server/data/interfaces.py @@ -3,7 +3,7 @@ """ from datetime import datetime -from enum import IntEnum, StrEnum +from enum import IntEnum, Enum from comprl.shared.types import GameID @@ -75,7 +75,7 @@ def __init__( self.disconnected_id = user1_id if is_user1_disconnected else user2_id -class UserRole(StrEnum): +class UserRole(Enum): """ Represents the possible user roles. diff --git a/comprl/server/data/sql_backend.py b/comprl/server/data/sql_backend.py index e47d6d97..a1e47f0c 100644 --- a/comprl/server/data/sql_backend.py +++ b/comprl/server/data/sql_backend.py @@ -145,15 +145,20 @@ def add( user_name (str): The name of the user. user_password (str): The password of the user. user_token (str): The token of the user. - user_role (UserRole, optional): The role of the user. Defaults to UserRole.USER. + user_role (UserRole, optional): The role of the user. + Defaults to UserRole.USER. user_mu (float, optional): The mu value of the user. Defaults to 25. user_sigma (float, optional): The sigma value of the user. Defaults to 8.33. Returns: int: The ID of the newly added user. """ + + user_role = user_role.value + self.cursor.execute( - f"""INSERT INTO {self.table}(username, password, role, token, mu, sigma) VALUES (?,?,?,?,?,?)""", + f"""INSERT INTO {self.table}(username, password, role, token, mu, sigma) + VALUES (?,?,?,?,?,?)""", (user_name, user_password, user_role, user_token, user_mu, user_sigma), ) self.cursor.execute( From 89dfc6972cb059d902a557c933c7159a4e004591 Mon Sep 17 00:00:00 2001 From: Svea Date: Sun, 3 Mar 2024 14:13:43 +0100 Subject: [PATCH 4/5] new_user update: set password and role --- comprl/scripts/new_user.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/comprl/scripts/new_user.py b/comprl/scripts/new_user.py index b0ec3bd9..8cd4a7b6 100644 --- a/comprl/scripts/new_user.py +++ b/comprl/scripts/new_user.py @@ -2,9 +2,11 @@ from comprl.server.data import UserData from comprl.server.data import ConnectionInfo +from comprl.server.data.interfaces import UserRole import logging import argparse import uuid +import getpass try: import tomllib # type: ignore[import-not-found] @@ -24,7 +26,15 @@ def insert_user(name: str): name (str): name of the new user """ token = str(uuid.uuid4()) - user_data.add(user_name=name, user_password=str(uuid.uuid4()), user_token=token) + password = getpass.getpass("Please enter a password for the user: ") + role = input("Do you want the new user to be an admin? (Y/N): ") + if role.lower() == "y": + role = UserRole.ADMIN + else: + role = UserRole.USER + user_data.add( + user_name=name, user_password=password, user_token=token, user_role=role + ) if __name__ == "__main__": From 524dee3160dfdb52d3326235eb695ed95595db78 Mon Sep 17 00:00:00 2001 From: Svea Date: Sun, 3 Mar 2024 14:19:51 +0100 Subject: [PATCH 5/5] changing a variable --- comprl/scripts/new_user.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/comprl/scripts/new_user.py b/comprl/scripts/new_user.py index 8cd4a7b6..57c378db 100644 --- a/comprl/scripts/new_user.py +++ b/comprl/scripts/new_user.py @@ -27,8 +27,8 @@ def insert_user(name: str): """ token = str(uuid.uuid4()) password = getpass.getpass("Please enter a password for the user: ") - role = input("Do you want the new user to be an admin? (Y/N): ") - if role.lower() == "y": + isAdmin = input("Do you want the new user to be an admin? (Y/N): ") + if isAdmin.lower() == "y": role = UserRole.ADMIN else: role = UserRole.USER