X-Git-Url: https://jfr.im/git/irc/unrealircd/unrealircd-webpanel.git/blobdiff_plain/54b9603ced28334eec94ec45aca67e7bdd0d2078..79e2577da34044027989cd8b16f976e5ba768e70:/common.php diff --git a/common.php b/common.php index 620d7a0..b666395 100644 --- a/common.php +++ b/common.php @@ -34,9 +34,20 @@ function page_requires_no_config() return FALSE; } +function page_requires_no_login() +{ + if (str_ends_with($_SERVER['SCRIPT_FILENAME'],"login/index.php") || + page_requires_no_config()) + { + return TRUE; + } + return FALSE; +} + function read_config_file() { GLOBAL $config; + GLOBAL $config_transition_unreal_server; $config = Array(); if (!file_exists(UPATH."/config/config.php") && file_exists(UPATH."/config.php")) @@ -44,6 +55,11 @@ function read_config_file() require_once UPATH . "/config.php"; require_once UPATH . "/config/compat.php"; } + if ((@include(UPATH . "/config/config.php")) !== 1) + return false; + if (isset($config['unrealircd'])) + $config_transition_unreal_server = true; + return true; } function read_config_db() @@ -60,9 +76,7 @@ function read_config_db() function config_is_file_item($name) { - // TODO: move 'unrealircd' and 'plugins' probably ;) - if (($name == "unrealircd") || - ($name == "plugins") || + if (($name == "plugins") || ($name == "mysql") || ($name == "base_url")) { @@ -122,7 +136,7 @@ function write_config($setting = null) /* Specific request? Easy, write only this setting to the DB (never used for file) */ if ($setting !== null) { - return DbSettings::set($k, $v); + return DbSettings::set($setting, $config[$setting]); } /* Otherwise write the whole config. @@ -150,7 +164,70 @@ function write_config($setting = null) return true; } +function get_version() +{ + $fd = @fopen(UPATH."/.git/FETCH_HEAD", "r"); + if ($fd === false) + return "unknown"; + $line = fgets($fd, 512); + fclose($fd); + $commit = substr($line, 0, 8); + return $commit; /* short git commit id */ +} + +function upgrade_check() +{ + GLOBAL $config_transition_unreal_server; + GLOBAL $config; + + /* Moving of a config.php item to DB: */ + if ($config_transition_unreal_server) + write_config(); + + $version = get_version(); + if (!isset($config['webpanel_version'])) + $config['webpanel_version'] = ''; + if ($version != $config['webpanel_version']) + { + $versioninfo = [ + "old_version" => $config['webpanel_version'], + "new_version" => $version + ]; + Hook::run(HOOKTYPE_UPGRADE, $versioninfo); + /* And set the new version now that the upgrade is "done" */ + $config['webpanel_version'] = $version; + write_config("webpanel_version"); + } +} + +function panel_start_session($user = false) +{ + if (!isset($_SESSION)) + { + session_set_cookie_params(86400); // can't set this to session_timeout due to catch-22 + session_start(); + } + + if ($user === false) + { + $user = unreal_get_current_user(); + if ($user === false) + return false; + } + + $timeout = 3600; + if (isset($user->user_meta['session_timeout'])) + $timeout = (INT)$user->user_meta['session_timeout']; + + if (!isset($_SESSION['session_timeout'])) + $_SESSION['session_timeout'] = $timeout; + + $_SESSION['last-activity'] = time(); + return true; +} + /* Now read the config, and redirect to install screen if we don't have it */ +$config_transition_unreal_server = false; if (!read_config_file()) { if (page_requires_no_config()) @@ -161,9 +238,6 @@ if (!read_config_file()) { header("Location: settings/install.php"); die(); - } else - { - require_once UPATH . "/config/config.php"; } } @@ -184,12 +258,19 @@ require_once UPATH . "/Classes/class-rpc.php"; require_once UPATH . "/Classes/class-paneluser.php"; require_once UPATH . "/plugins.php"; -/* Now that plugins are loaded, read config from DB */ -read_config_db(); +/* Do various checks and reading, except during setup step 1. */ +if (!page_requires_no_config()) +{ + /* Now that plugins are loaded, read config from DB */ + read_config_db(); + + /* Check if anything needs upgrading (eg on panel version change) */ + upgrade_check(); -/* And a check... */ -if (!page_requires_no_config() && !get_config("base_url")) - die("The base_url was not found in your config. Setup went wrong?"); + /* And a check... */ + if (!get_config("base_url")) + die("The base_url was not found in your config. Setup went wrong?"); +} $pages = [ "Overview" => "", @@ -212,8 +293,17 @@ $pages = [ "News" => "news.php", ]; -if (is_auth_provided()) +if (!panel_start_session()) { + if (!page_requires_no_login()) + { + if (!is_auth_provided()) + die("No authentication plugin loaded. You must load either sql_auth, file_auth, or a similar auth plugin!"); + $current_page = $_SERVER['REQUEST_URI']; + header("Location: ".get_config("base_url")."login/?redirect=".urlencode($current_page)); + die; + } +} else { $pages["Settings"]["Accounts"] = "settings"; $user = unreal_get_current_user(); @@ -223,6 +313,7 @@ if (is_auth_provided()) $pages["Logout"] = "login/?logout=true"; } } + Hook::run(HOOKTYPE_NAVBAR, $pages); /* Example to add new menu item: