diff --git a/resources/init.php b/resources/init.php index 80d5aea98..01c390ed0 100644 --- a/resources/init.php +++ b/resources/init.php @@ -11,7 +11,6 @@ use UnityWebPortal\lib\UnityUser; use UnityWebPortal\lib\UnityWebhook; use UnityWebPortal\lib\UnityGithub; -use UnityWebPortal\lib\UnityHTTPD; use UnityWebPortal\lib\UserFlag; if (CONFIG["site"]["enable_exception_handler"]) { @@ -55,26 +54,20 @@ } if (isset($_SERVER["REMOTE_USER"])) { - // Check if SSO is enabled on this page + _setcookie("navbar_show_logged_in_user_pages", "true"); $SSO = UnitySSO::getSSO(); - $_SESSION["SSO"] = $SSO; - - $OPERATOR = new UnityUser($SSO["user"], $LDAP, $SQL, $MAILER, $WEBHOOK); - $_SESSION["is_admin"] = $OPERATOR->getFlag(UserFlag::ADMIN); - $_SESSION["OPERATOR"] = $SSO["user"]; $_SESSION["OPERATOR_IP"] = $_SERVER["REMOTE_ADDR"]; - - if (isset($_SESSION["viewUser"]) && $_SESSION["is_admin"]) { + if ( + isset($_SESSION["viewUser"]) && + $LDAP->userFlagGroups["admin"]->memberUIDExists($SSO["user"]) + ) { $USER = new UnityUser($_SESSION["viewUser"], $LDAP, $SQL, $MAILER, $WEBHOOK); } else { - $USER = $OPERATOR; + $USER = new UnityUser($SSO["user"], $LDAP, $SQL, $MAILER, $WEBHOOK); } - - $_SESSION["user_exists"] = $USER->exists(); - $_SESSION["is_pi"] = $USER->isPI(); - - $SQL->addLog("user_login", $OPERATOR->uid); - + _setcookie("navbar_show_admin_pages", $USER->getFlag(UserFlag::ADMIN) ? "true" : "false"); + _setcookie("navbar_show_pi_pages", $USER->isPI() ? "true" : "false"); + $SQL->addLog("user_login", $SSO["user"]); $USER->updateIsQualified(); // in case manual changes have been made to PI groups } diff --git a/resources/lib/utils.php b/resources/lib/utils.php index b6b96d293..f232baf28 100644 --- a/resources/lib/utils.php +++ b/resources/lib/utils.php @@ -283,3 +283,17 @@ function _curl_exec(CurlHandle $handle): string } return $output; } + +function _setcookie( + string $name, + string $value, + int $ttl_seconds = 600, + string $path = "/", + string $domain = "", + bool $secure = false, + bool $httponly = false, +): void { + setcookie($name, $value, time() + $ttl_seconds, $path, $domain, $secure, $httponly); + // $_COOKIE won't see this change until the next page load, update it now + $_COOKIE[$name] = $value; +} diff --git a/resources/templates/header.php b/resources/templates/header.php index 1426d15c8..209e6a9f4 100644 --- a/resources/templates/header.php +++ b/resources/templates/header.php @@ -5,10 +5,7 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") { // another page should have already validated and we can't validate the same token twice // UnityHTTPD::validatePostCSRFToken(); - if ( - ($_SESSION["is_admin"] ?? false) == true - && ($_POST["form_type"] ?? null) == "clearView" - ) { + if (($_POST["form_type"] ?? null) == "clearView") { unset($_SESSION["viewUser"]); UnityHTTPD::redirect(getURL("admin/user-mgmt.php")); } @@ -21,13 +18,8 @@ UnityHTTPD::redirect(); } -if (isset($SSO)) { - if ( - !$_SESSION["user_exists"] - && !str_ends_with($_SERVER['PHP_SELF'], "/panel/new_account.php") - ) { - UnityHTTPD::redirect(getURL("panel/new_account.php")); - } +if (isset($USER) && !$USER->exists() && !str_ends_with($_SERVER['PHP_SELF'], "/new_account.php")) { + UnityHTTPD::redirect(getURL("panel/new_account.php")); } ?> @@ -100,30 +92,23 @@ CONFIG["menuitems"]["labels"][$i] . "\n"; } - if (isset($_SESSION["user_exists"]) && $_SESSION["user_exists"]) { + if (($_COOKIE["navbar_show_logged_in_user_pages"] ?? "false") === "true") { echo "