getValues([ ['site.name:s', 'Misuzu'], 'site.desc:s', 'site.url:s', 'sockChat.chatPath.normal:s', 'eeprom.path:s', 'eeprom.app:s', ['auth.secret:s', 'meow'], ['csrf.secret:s', 'soup'], ]); Template::init($msz, $twigCache ?? null, MSZ_DEBUG); Template::set('globals', [ 'site_name' => $globals['site.name'], 'site_description' => $globals['site.desc'], 'site_url' => $globals['site.url'], 'site_chat' => $globals['sockChat.chatPath.normal'], 'eeprom' => [ 'path' => $globals['eeprom.path'], 'app' => $globals['eeprom.app'], ], ]); $mszAssetsInfo = json_decode(file_get_contents(MSZ_ASSETS . '/current.json')); if(!empty($mszAssetsInfo)) Template::set('assets', $mszAssetsInfo); unset($mszAssetsInfo); Template::addPath(MSZ_TEMPLATES); AuthToken::setSecretKey($globals['auth.secret']); if(isset($_COOKIE['msz_uid']) && isset($_COOKIE['msz_sid'])) { $authToken = new AuthToken; $authToken->setUserId(filter_input(INPUT_COOKIE, 'msz_uid', FILTER_SANITIZE_NUMBER_INT) ?? 0); $authToken->setSessionToken(filter_input(INPUT_COOKIE, 'msz_sid') ?? ''); if($authToken->isValid()) $authToken->applyCookie(strtotime('1 year')); AuthToken::nukeCookieLegacy(); } if(!isset($authToken)) $authToken = AuthToken::unpack(filter_input(INPUT_COOKIE, 'msz_auth') ?? ''); if($authToken->isValid()) { $sessions = $msz->getSessions(); $authToken->setCurrent(); try { $sessionInfo = $sessions->getSession(sessionToken: $authToken->getSessionToken()); if($sessionInfo->hasExpired()) { $sessions->deleteSessions(sessionInfos: $sessionInfo); } elseif($sessionInfo->getUserId() === (string)$authToken->getUserId()) { $userInfo = User::byId((int)$sessionInfo->getUserId()); if(!$userInfo->isDeleted()) { $userInfo->setCurrent(); $userInfo->bumpActivity($_SERVER['REMOTE_ADDR']); $sessions->updateSession(sessionInfo: $sessionInfo, remoteAddr: $_SERVER['REMOTE_ADDR']); if($sessionInfo->shouldBumpExpires()) $authToken->applyCookie($sessionInfo->getExpiresTime()); // only allow impersonation when super user if($authToken->hasImpersonatedUserId() && $userInfo->isSuper()) { $userInfoReal = $userInfo; try { $userInfo = User::byId($authToken->getImpersonatedUserId()); } catch(RuntimeException $ex) { $userInfo = $userInfoReal; $authToken->removeImpersonatedUserId(); $authToken->applyCookie(); } $userInfo->setCurrent(); } } } } catch(RuntimeException $ex) { User::unsetCurrent(); } if(!User::hasCurrent()) AuthToken::nukeCookie(); } CSRF::init( $globals['csrf.secret'], (User::hasCurrent() ? $authToken->getSessionToken() : $_SERVER['REMOTE_ADDR']) ); if(!empty($userInfo)) { Template::set('current_user', $userInfo); Template::set('current_user_ban_info', $msz->tryGetActiveBan()); } if(!empty($userInfoReal)) Template::set('current_user_real', $userInfoReal); $inManageMode = str_starts_with($_SERVER['REQUEST_URI'], '/manage'); $hasManageAccess = User::hasCurrent() && !$msz->hasActiveBan() && perms_check_user(MSZ_PERMS_GENERAL, User::getCurrent()->getId(), MSZ_PERM_GENERAL_CAN_MANAGE); Template::set('has_manage_access', $hasManageAccess); if($inManageMode) { if(!$hasManageAccess) { echo render_error(403); exit; } Template::set('manage_menu', manage_get_menu(User::getCurrent()->getId())); } $mszRequestPath = $request->getPath(); $mszLegacyPathPrefix = MSZ_PUBLIC . '-legacy/'; $mszLegacyPath = realpath($mszLegacyPathPrefix . $mszRequestPath); if(!empty($mszLegacyPath) && str_starts_with($mszLegacyPath, $mszLegacyPathPrefix)) { if(is_dir($mszLegacyPath)) $mszLegacyPath .= '/index.php'; if(is_file($mszLegacyPath)) { require_once $mszLegacyPath; return; } } $msz->setUpHttp(str_contains($mszRequestPath, '.php')); $msz->dispatchHttp($request);