X-Git-Url: https://jfr.im/git/irc/unrealircd/unrealircd-webpanel.git/blobdiff_plain/c06c1713af2db485d55a91073bbc5b63b6aa8c0b..0d62343db7cf98dda603d338e1948a9a09af5862:/inc/connection.php
diff --git a/inc/connection.php b/inc/connection.php
index 44ec034..0272138 100644
--- a/inc/connection.php
+++ b/inc/connection.php
@@ -6,21 +6,53 @@ if (!defined('UPATH'))
function connect_to_ircd()
{
GLOBAL $rpc;
+ GLOBAL $config;
- $host = get_config("unrealircd::host");
- $port = get_config("unrealircd::port");
- $rpc_user = get_config("unrealircd::rpc_user");
- $rpc_password = get_config("unrealircd::rpc_password");
+ $is_api_page = str_contains($_SERVER['SCRIPT_FILENAME'], "/api/") ? true : false;
+
+ $options = []; /* options that we pass to new UnrealIRCd\Connection */
+
+ $rpc = null; /* Initialize, mostly for API page failures */
+
+ $server = get_active_rpc_server();
+ if (!$server)
+ {
+ if ($is_api_page)
+ return;
+ Message::Fail("No RPC server configured. Go to Settings - RPC Servers.");
+ die;
+ }
+ $host = $config["unrealircd"][$server]["host"];
+ $port = $config["unrealircd"][$server]["port"];
+ $rpc_user = $config["unrealircd"][$server]["rpc_user"];
+ $rpc_password = $config["unrealircd"][$server]["rpc_password"];
if (str_starts_with($rpc_password, "secret:"))
$rpc_password = secret_decrypt($rpc_password);
+ if (isset($config["unrealircd"][$server]["tls_verify_cert"]))
+ $options["tls_verify"] = $config["unrealircd"][$server]["tls_verify_cert"];
if (!$host || !$port || !$rpc_user)
- die("Unable to find RPC credentials in your config.php");
+ {
+ if ($is_api_page)
+ return;
+ die("RPC Server is missing credentials");
+ }
+
if ($rpc_password === null)
- die("Your RPC password in the DB was encrypted with a different key than config/config.php contains.
\n".
- "Either restore your previous config/config.php or start with a fresh database.
\n");
+ {
+ if ($is_api_page)
+ return;
+ Message::Fail("Your RPC password in the DB was encrypted with a different key than config/config.php contains.
\n".
+ "Either restore your previous config/config.php or start with a fresh database.
\n");
+ die;
+ }
- $tls_verify = get_config("unrealircd::tls_verify_cert");
+ $user = unreal_get_current_user();
+ if ($user)
+ {
+ /* Set issuer for all the RPC commands */
+ $options['issuer'] = $user->username;
+ }
/* Connect now */
try {
@@ -28,24 +60,18 @@ function connect_to_ircd()
(
"wss://$host:$port",
"$rpc_user:$rpc_password",
- ["tls_verify" => $tls_verify]
+ $options
);
}
catch (Exception $e)
{
- echo "Unable to connect to UnrealIRCd: ".$e->getMessage() . "
";
- echo "Verify your connection details in config.php (rpc user, rpc password, host) and ".
- "verify your UnrealIRCd configuration (listen block with listen::options::rpc and ".
- "an rpc-user block with the correct IP allowed and the correct username and password).";
+ if ($is_api_page)
+ return;
+ Message::Fail("Unable to connect to UnrealIRCd: ".$e->getMessage() . "
".
+ "Verify that the connection details from Settings - RPC Servers match the ones in UnrealIRCd ".
+ "and that UnrealIRCd is up and running");
throw $e;
}
-
- $user = unreal_get_current_user();
- if ($user)
- {
- /* Set issuer for all the RPC commands */
- $rpc->rpc()->set_issuer($user->username);
- }
}
connect_to_ircd();