X-Git-Url: https://jfr.im/git/irc/unrealircd/unrealircd-webpanel.git/blobdiff_plain/b056895f0a313ec69824daa23e0981afb49c8305..6ae326cb8d203015fa158b04e5b3b584f86c3654:/inc/common.php diff --git a/inc/common.php b/inc/common.php index bd812e9..96721e6 100644 --- a/inc/common.php +++ b/inc/common.php @@ -1,11 +1,48 @@ ". - "If you already installed PHP8 but are still seeing this error, then it means ". - "apache/nginx/.. is loading an older PHP version. Eg. on Debian/Ubuntu you need ". - "apt-get install libapache2-mod-php8.2 (or a similar version) and ". - "apt-get remove libapache2-mod-php7.4 (or a similar version). ". - "You may also need to choose again the PHP module to load in apache via a2enmod php8.2"); +if (ini_get('output_buffering') == true) { + ini_set('output_buffering', 'off'); +} +if (ini_get('zlib.output_compression') == true) { + ini_set('zlib.output_compression', 'off'); +} + +function check_requirements() +{ + if (version_compare(PHP_VERSION, '8.0.0', '<')) + { + die("This webserver is using PHP version ".PHP_VERSION." but we require at least PHP 8.0.0.
". + "If you already installed PHP8 but are still seeing this error, then it means ". + "apache/nginx/.. is loading an older PHP version. Eg. on Debian/Ubuntu you need ". + "apt-get install libapache2-mod-php8.2 (or a similar version) and ". + "apt-get remove libapache2-mod-php7.4 (or a similar version). ". + "You may also need to choose again the PHP module to load in apache via a2enmod php8.2"); + } + + $loaded_extensions = get_loaded_extensions(); + $required_extensions = ["mbstring", "sodium"]; + $missing_extensions = []; + foreach ($required_extensions as $mod) + if (!in_array($mod, $loaded_extensions)) + $missing_extensions[] = $mod; + + if (count($missing_extensions) > 0) + { + $text = "The following PHP module(s) need to be loaded:
\n\n"; + $text .= "You need to install/enable these PHP packages and restart the webserver.
". + "If you are on Debian/Ubuntu then run $cmd ". + "and restart your webserver (eg: systemctl restart apache2 for apache)."; + die($text); + } +} + +check_requirements(); /* very early !! */ define('UPATH', dirname(__DIR__)); @@ -24,10 +61,46 @@ function get_config($setting) return $item; } +function get_current_page_helper($name, $p, &$title) +{ + if (isset($p["script"])) + { + if (($p["script"] != '') && str_ends_with($_SERVER['SCRIPT_FILENAME'],$p["script"])) + { + // MATCH + if (isset($p["title"])) + $title = $p["title"]; + else + $title = $name; + return $p; + } + return null; + } + foreach ($p as $k=>$v) + { + $ret = get_current_page_helper($k, $v, $title); + if ($ret !== null) + return $ret; + } + return null; +} + +/** Get current page and title */ +function get_current_page(&$title) +{ + GLOBAL $pages; + foreach ($pages as $k=>$v) + { + $ret = get_current_page_helper($k, $v, $title); + if ($ret !== null) + return $ret; + } +} + function page_requires_no_config() { if (str_ends_with($_SERVER['SCRIPT_FILENAME'],"install.php") || - str_ends_with($_SERVER['SCRIPT_FILENAME'],"installation.php")) + str_ends_with($_SERVER['SCRIPT_FILENAME'],"installation.php")) { return TRUE; } @@ -37,7 +110,7 @@ function page_requires_no_config() function page_requires_no_login() { if (str_ends_with($_SERVER['SCRIPT_FILENAME'],"login/index.php") || - page_requires_no_config()) + page_requires_no_config()) { return TRUE; } @@ -95,9 +168,9 @@ function read_config_db() function config_is_file_item($name) { if (($name == "plugins") || - ($name == "mysql") || - ($name == "base_url") || - ($name == "secrets")) + ($name == "mysql") || + ($name == "base_url") || + ($name == "secrets")) { return true; } @@ -125,10 +198,10 @@ function write_config_file() if ($str === null) die("Error while running write_config_file() -- weird!"); if (!fwrite($fd, ""); } @@ -161,7 +234,7 @@ function write_config($setting = null) /* Otherwise write the whole config. * TODO: avoid writing settings file if unneeded, - * as it is more noisy than db settings. + * as it is more noisy than db settings. */ $db_settings = []; @@ -211,9 +284,12 @@ function generate_secrets() function get_active_rpc_server() { + $servers = get_config("unrealircd"); + if (empty($servers)) + return; // TODO: make user able to override this - either in user or in session - foreach (get_config("unrealircd") as $displayname=>$e) + foreach ($servers as $displayname=>$e) { if (isset($e["default"]) && $e["default"]) return $displayname; @@ -298,8 +374,8 @@ function upgrade_check() } /* - encrypting rpc_password */ if (isset($config['unrealircd']) && - isset($config['unrealircd']['rpc_password']) && - !str_starts_with($config['unrealircd']['rpc_password'], "secret:")) + isset($config['unrealircd']['rpc_password']) && + !str_starts_with($config['unrealircd']['rpc_password'], "secret:")) { $ret = secret_encrypt($config['unrealircd']['rpc_password']); if ($ret !== false) @@ -390,7 +466,7 @@ require_once UPATH . "/Classes/class-log.php"; require_once UPATH . "/Classes/class-message.php"; require_once UPATH . "/Classes/class-rpc.php"; require_once UPATH . "/Classes/class-paneluser.php"; -require_once UPATH . "/plugins.php"; +require_once UPATH . "/Classes/class-plugins.php"; /* Do various checks and reading, except during setup step 1. */ if (!page_requires_no_config()) @@ -407,27 +483,27 @@ if (!page_requires_no_config()) } $pages = [ - "Overview" => "", - "Users" => "users", - "Channels" => "channels", - "Servers" => "servers", + "Overview" => ["script"=>""], + "Users" => ["script"=>"users/index.php"], + "Channels" => ["script"=>"channels/index.php"], + "Servers" => ["script"=>"servers/index.php"], "Server Bans" => [ - "Server Bans" => "server-bans", - "Name Bans" => "server-bans/name-bans.php", - "Ban Exceptions" => "server-bans/ban-exceptions.php" + "Server Bans" => ["script" => "server-bans/index.php"], + "Name Bans" => ["script" => "server-bans/name-bans.php"], + "Ban Exceptions" => ["script" => "server-bans/ban-exceptions.php"], ], - "Spamfilter" => "spamfilter.php", + "Spamfilter" => ["script" => "server-bans/spamfilter.php"], + "Logs" => ["script" => "logs/index.php"], "Tools" => [ - "IP WHOIS" => "tools/ip-whois.php", + "IP WHOIS" => ["script" => "tools/ip-whois.php","no_irc_server_required"=>true], ], "Settings" => [ - "Plugins" => "settings/plugins.php", - "RPC Servers" => "settings/rpc-servers.php", + "General Settings" => ["script" => "settings/general.php"], + "RPC Servers" => ["script" => "settings/rpc-servers.php","no_irc_server_required"=>true], ], - - "News" => "news.php", ]; + if (!panel_start_session()) { if (!page_requires_no_login()) @@ -439,14 +515,29 @@ if (!panel_start_session()) die; } } else { - $pages["Settings"]["Accounts"] = "settings"; + $pages["Settings"]["Accounts"] = [ + "script" => "settings/index.php", + "no_irc_server_required"=>true + ]; if (current_user_can(PERMISSION_MANAGE_USERS)) - $pages["Settings"]["Role Editor"] = "settings/user-role-edit.php"; + { + $pages["Settings"]["Role Editor"] = [ + "script"=>"settings/user-role-edit.php", + "no_irc_server_required"=>true + ]; + } + if (current_user_can(PERMISSION_MANAGE_PLUGINS)) + { + $pages["Settings"]["Plugins"] = ["script" => "settings/plugins.php"]; + } $user = unreal_get_current_user(); if ($user) { /* Add logout page, if logged in */ - $pages["Logout"] = "login/?logout=true"; + $pages["Logout"] = [ + "script"=>"login/?logout=true", + "no_irc_server_required"=>true + ]; } } @@ -469,4 +560,24 @@ Hook::run(HOOKTYPE_NAVBAR, $pages); * $pages[$page_name] = $page_link; * } * } -*/ \ No newline at end of file +*/ + +$current_page = get_current_page($current_page_name); + + +global $rightClickMenu; +$rightClickMenu = [ + [ + "text" => "Copy", + "onclick" => "copy_to_clipboard(window.getSelection().toString())", + "icon" => "fa-clipboard" + ], + [ + "text" => "Paste", + "onclick" => "paste_from_clipboard()", + "icon" => "fa-paint-brush", + ], +]; + +// register our menu +Hook::run(HOOKTYPE_RIGHTCLICK_MENU, $rightClickMenu);