X-Git-Url: https://jfr.im/git/irc/unrealircd/unrealircd-webpanel.git/blobdiff_plain/91f0829e72c147dbb4c2ee230750a9a3c6dc04b8..7bcd30edb23fcc1872f0a6772ab91b3c9d8b4779:/inc/common.php?ds=sidebyside
diff --git a/inc/common.php b/inc/common.php
index f2364b5..3bd7823 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
$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;
}
@@ -59,6 +132,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;
}
@@ -77,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;
}
@@ -107,10 +198,10 @@ function write_config_file()
if ($str === null)
die("Error while running write_config_file() -- weird!");
if (!fwrite($fd, "");
}
@@ -143,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 = [];
@@ -191,6 +282,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;
@@ -236,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)
@@ -246,6 +384,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']))
@@ -320,7 +466,8 @@ 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-notes.php";
+require_once UPATH . "/Classes/class-plugins.php";
/* Do various checks and reading, except during setup step 1. */
if (!page_requires_no_config())
@@ -337,44 +484,61 @@ 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",
+ "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())
{
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
+ ];
+ }
+ 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
+ ];
}
}
@@ -397,4 +561,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);