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();