]> jfr.im git - irc/unrealircd/unrealircd-webpanel.git/blobdiff - inc/common.php
Move spamfilter.php to server-bans/
[irc/unrealircd/unrealircd-webpanel.git] / inc / common.php
index bd812e9eb467992cf5a37735bddfd9e85a353273..b168a7cc93fc8574de56274e628c9320276a8c14 100644 (file)
@@ -1,11 +1,48 @@
 <?php
-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.<br>".
-           "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 ".
-           "<code>apt-get install libapache2-mod-php8.2</code> (or a similar version) and ".
-           "<code>apt-get remove libapache2-mod-php7.4</code> (or a similar version). ".
-           "You may also need to choose again the PHP module to load in apache via <code>a2enmod php8.2</code>");
+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.<br>".
+                       "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 ".
+                       "<code>apt-get install libapache2-mod-php8.2</code> (or a similar version) and ".
+                       "<code>apt-get remove libapache2-mod-php7.4</code> (or a similar version). ".
+                       "You may also need to choose again the PHP module to load in apache via <code>a2enmod php8.2</code>");
+       }
+
+       $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 = "<html>The following PHP module(s) need to be loaded:<br>\n<ul>\n";
+               $cmd = 'apt-get install';
+               foreach($missing_extensions as $mod)
+               {
+                       $text .= "<li>$mod</li>\n";
+                       $cmd .= " php-$mod";
+               }
+               $text .= "</ul>\n";
+               $text .= "You need to install/enable these PHP packages and restart the webserver.<br>".
+                                "If you are on Debian/Ubuntu then run <code>$cmd</code> ".
+                                "and restart your webserver (eg: <code>systemctl restart apache2</code> 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, "<?php\n".
-                   "/* This config file is written automatically by the UnrealIRCd webpanel.\n".
-                   " * You are not really supposed to edit it manually.\n".
-                   " */\n".
-                   '$config = '.$str.";\n"))
+                       "/* This config file is written automatically by the UnrealIRCd webpanel.\n".
+                       " * You are not really supposed to edit it manually.\n".
+                       " */\n".
+                       '$config = '.$str.";\n"))
        {
                die("Error writing to config file $tmpfile (on fwrite).<br>");
        }
@@ -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)
@@ -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);