false]); const PRIVILEGE_PLAYER = "player"; const PRIVILEGE_CREATOR = "creator"; const PRIVILEGE_QUIZMASTER = "admin"; // TODO: refactor! function add_user(string $nickname, string $password, string $realname, array $groupids = [], string $privilege = PRIVILEGE_PLAYER): bool { global $userdb; if (count(get_user($nickname)) != 0) { // user exists return false; } $user_data = [ "nickname" => $nickname, "password" => password_hash($password, PASSWORD_DEFAULT), "realname" => $realname, "groups" => $groupids, "privilege" => $privilege ]; foreach ($groupids as $groupid) { change_group_user_assignments($groupid, $nickname, null); } $userdb->insert($user_data); return true; // user registration successful } function delete_user(string $nickname) { global $userdb; if ($nickname == QUIZMASTER_NICKNAME) { return; } $user_data = get_user($nickname); if (count($user_data) !== 0) { foreach ($user_data["groups"] as $groupid) { change_group_user_assignments($groupid, null, $nickname); } $userdb->deleteBy(["nickname", "=", $nickname]); } } function get_user(string $nickname): array { global $userdb; $user_data_array = $userdb->findBy(["nickname", "=", $nickname]); return count($user_data_array) != 0 ? $user_data_array[0] : []; } function update_user(array $user_data) { global $userdb; return $userdb->update($user_data); } function change_password(string $nickname, string $old, string $new): bool { $user_data = get_user($nickname); if (count($user_data) != 0) { if (password_verify($old, $user_data["password"])) { $user_data["password"] = password_hash($new, PASSWORD_DEFAULT); update_user($user_data); return true; } } return false; } function change_user_group_assignments(string $nickname, $groupname_add, $groupname_remove) { $user_data = get_user($nickname); if (count($user_data) != 0) { alter_array_contents($user_data["groups"], $groupname_add, $groupname_remove); update_user($user_data); // update user } } function change_privilege_level(string $nickname, string $privilege) { $user_data = get_user($nickname); if (count($user_data) != 0) { $user_data["privilege"] = $privilege; update_user($user_data); } } function check_user_credentials(string $nickname, string $password): bool { $user_data = get_user($nickname); if (count($user_data) != 0) { return password_verify($password, $user_data["password"]); } else { return false; } } function get_all_users(): array { global $userdb; return $userdb->findAll(); } function get_all_nicknames() : array { $nicknames = []; $user_data_array = get_all_users(); foreach ($user_data_array as $user_data) { $nicknames[] = $user_data["nickname"]; } return $nicknames; }