]> jfr.im git - irc/unrealircd/unrealircd-webpanel.git/blobdiff - inc/common.php
Add simple way to deal with IRC server configuration required.
[irc/unrealircd/unrealircd-webpanel.git] / inc / common.php
index fa3f7c7da5720657a52129dbb69fb67c7ec7afca..44967879fb73393a81827b36b3cc831ae90160ec 100644 (file)
@@ -7,7 +7,7 @@ if (version_compare(PHP_VERSION, '8.0.0', '<'))
            "<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>");
 
-define('UPATH', dirname(dirname(__FILE__)));
+define('UPATH', dirname(__DIR__));
 
 function get_config($setting)
 {
@@ -24,6 +24,34 @@ function get_config($setting)
        return $item;
 }
 
+function get_current_page_helper($name, $p)
+{
+       if (isset($p["script"]))
+       {
+               if (($p["script"] != '') && str_ends_with($_SERVER['SCRIPT_FILENAME'],$p["script"]))
+                       return $p;
+               return null;
+       }
+       foreach ($p as $k=>$v)
+       {
+               $ret = get_current_page_helper($k, $v);
+               if ($ret !== null)
+                       return $ret;
+       }
+       return null;
+}
+
+function get_current_page()
+{
+       GLOBAL $pages;
+       foreach ($pages as $k=>$v)
+       {
+               $ret = get_current_page_helper($k, $v);
+               if ($ret !== null)
+                       return $ret;
+       }
+}
+
 function page_requires_no_config()
 {
        if (str_ends_with($_SERVER['SCRIPT_FILENAME'],"install.php") ||
@@ -59,6 +87,24 @@ function read_config_file()
                return false;
        if (isset($config['unrealircd']))
                $config_transition_unreal_server = true;
+       /* Upgrade needed? */
+       $plugins_modified = false;
+       foreach ($config["plugins"] as $k=>$v)
+       {
+               if ($v == "sql_auth")
+               {
+                       $config["plugins"][$k] = "sql_db";
+                       $plugins_modified = true;
+               } else
+               if ($v == "file_auth")
+               {
+                       $config["plugins"][$k] = "file_db";
+                       $plugins_modified = true;
+               }
+       }
+       if ($plugins_modified)
+               write_config_file();
+
        return true;
 }
 
@@ -191,6 +237,53 @@ function generate_secrets()
                $config['secrets']['key'] = rtrim(base64_encode(sodium_crypto_aead_xchacha20poly1305_ietf_keygen()),'=');
 }
 
+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 ($servers as $displayname=>$e)
+       {
+               if (isset($e["default"]) && $e["default"])
+                       return $displayname;
+       }
+       return null;
+}
+
+/* Set a new default RPC server */
+function set_default_rpc_server($name)
+{
+       GLOBAL $config;
+
+       /* Mark all other servers as non-default */
+       foreach ($config["unrealircd"] as $n=>$e)
+               if ($n != $name)
+                       $config["unrealircd"][$n]["default"] = false;
+       $config["unrealircd"][$name]["default"] = true;
+}
+
+/* Ensure at least 1 server is default */
+function set_at_least_one_default_rpc_server()
+{
+       GLOBAL $config;
+
+       $has_default_rpc_server = false;
+       foreach ($config["unrealircd"] as $name=>$e)
+               if ($e["default"])
+                       $has_default_rpc_server = true;
+       if (!$has_default_rpc_server)
+       {
+               /* Make first server in the list the default */
+               foreach ($config["unrealircd"] as $name=>$e)
+               {
+                       $config["unrealircd"][$name]["default"] = true;
+                       break;
+               }
+       }
+}
+
 function secret_encrypt(string $text)
 {
        GLOBAL $config;
@@ -246,6 +339,14 @@ function upgrade_check()
                        write_config('unrealircd');
                }
        }
+       /* $config["unrealircd"] should be an array now.. */
+       if (isset($config['unrealircd']) && isset($config['unrealircd']['rpc_password']))
+       {
+               $config["unrealircd"]["default"] = true;
+               $config['unrealircd'] = [
+                       "Primary" => $config['unrealircd']];
+               write_config("unrealircd");
+       }
 
        $version = get_version();
        if (!isset($config['webpanel_version']))
@@ -310,7 +411,7 @@ if (!is_dir(UPATH . "/vendor"))
        die("The vendor/ directory is missing. Most likely the admin forgot to run 'composer install'\n");
 require_once UPATH . '/vendor/autoload.php';
 require_once UPATH . "/Classes/class-cmodes.php";
-require_once UPATH . "/cfg/defines.php";
+require_once UPATH . "/inc/defines.php";
 require_once UPATH . "/misc/strings.php";
 require_once UPATH . "/misc/channel-lookup-misc.php";
 require_once UPATH . "/misc/user-lookup-misc.php";
@@ -337,24 +438,25 @@ 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" => "spamfilter.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",
+               "Plugins" => ["script" => "settings/plugins.php","no_irc_server_required"=>true],
+               "RPC Servers" => ["script" => "settings/rpc-servers.php","no_irc_server_required"=>true],
        ],
        
-       "News" => "news.php",
+       "News" => ["script" => "news.php","no_irc_server_required"=>true],
 ];
 
 if (!panel_start_session())
@@ -362,19 +464,31 @@ 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!");
+                       die("No authentication plugin loaded. You must load either sql_db, file_db, 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";
-
+       $pages["Settings"]["Accounts"] = [
+               "script" => "settings/index.php",
+               "no_irc_server_required"=>true
+       ];
+       if (current_user_can(PERMISSION_MANAGE_USERS))
+       {
+               $pages["Settings"]["Role Editor"] = [
+                       "script"=>"settings/user-role-edit.php",
+                       "no_irc_server_required"=>true
+               ];
+       }
        $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
+               ];
        }
 }
 
@@ -397,4 +511,6 @@ Hook::run(HOOKTYPE_NAVBAR, $pages);
  *               $pages[$page_name] = $page_link;
  *       }
  * }
-*/
\ No newline at end of file
+*/
+
+$current_page = get_current_page();