SpreadQuiz/usermgr.php
Epagris e6aadf0a5c - ReqHandler added
- interface reworked
2024-09-16 21:24:47 +02:00

119 lines
3.1 KiB
PHP

<?php
require_once "globals.php";
require_once "common_func.php";
require_once "controller.php";
$userdb = new \SleekDB\Store(USERDB, DATADIR, ["timeout" => false]);
const PRIVILEGE_NONE = "none";
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;
}