2 require_once "../inc/common.php";
3 require_once "../inc/header.php";
5 if (isset($_POST['do_add_server']))
7 $opts = (object)$_POST;
9 /* TODO: Server-side validation */
11 // TODO: syntax of each item
13 // TODO: check server already exists with that (new) displayname
15 if (isset($config["unrealircd"][$opts->rpc_displayname
]) &&
16 !($opts->rpc_displayname
== $opts->edit_existing
))
18 die("Server with that name already exists"); // TODO: pretier :D
22 "rpc_user" => $opts->rpc_user
,
23 "rpc_password" => $opts->rpc_password
,
24 "host"=>$opts->rpc_iphost
,
25 "port"=>$opts->rpc_port
,
26 "tls_verify_cert"=>isset($opts->rpc_tls_verify_cert
)?true:false,
27 "default"=>isset($opts->rpc_default
)?true:false,
30 if (!empty($opts->edit_existing
))
32 // Change existing server
33 if (!isset($config["unrealircd"][$opts->edit_existing
]))
34 die("Editing a server that does not exist!?"); // not very graceful, isn't it?
35 if ($new_properties["rpc_password"] == "****************")
36 $new_properties["rpc_password"] = $config["unrealircd"][$opts->edit_existing
]["rpc_password"];
37 // we unset because there could be a rename
38 unset($config["unrealircd"][$opts->edit_existing
]);
39 $config["unrealircd"][$opts->rpc_displayname
] = $new_properties;
42 $config["unrealircd"][$opts->rpc_displayname
] = $new_properties;
43 // TODO: encrypt pwd ;)
46 if ($new_properties["default"])
48 /* Mark all other servers as non-default */
49 foreach ($config["unrealircd"] as $name=>$e)
50 if ($name != $opts->rpc_displayname
)
51 $config["unrealircd"][$name]["default"] = false;
53 /* Ensure at least 1 server is default */
54 $has_default_server = false;
55 foreach ($config["unrealircd"] as $name=>$e)
57 $has_default_server = true;
58 if (!$has_default_server)
60 /* Make first server in the list the default */
61 foreach ($config["unrealircd"] as $name=>$e)
63 $config["unrealircd"][$name]["default"] = true;
69 /* And write the new config */
71 // TODO: change this message if it's the first server added? tell them to browse around?
72 Message
::Success("RPC Server successfully added.");
78 You can configure which JSON
-RPC
server(s
) the panel can connect to
.<br
><br
>
79 You normally only need one server
, but it can be useful to have multiple servers
, so
80 you can
switch to a secondary server in
case the primary server goes down
.<br
>
83 <!-- Server action
buttons (only Add server
) -->
84 <div id
="ServerActions">
86 <?php
if (1) /* current_user_can(PERMISSION_MANAGE_RPC_SERVERS)) */ { ?>
87 <div
class="col-sm-3">
89 <div
class="btn btn-primary" onclick
="add_rpc_server()">Add Server
</div
>
96 <!-- Add server modal
-->
97 <div
class="modal" id
="server_add" tabindex
="-1" role
="dialog" aria
-labelledby
="confirmModalCenterTitle" aria
-hidden
="true">
98 <div
class="modal-dialog modal-dialog-centered" role
="document">
100 <input name
="edit_existing" type
="hidden" id
="edit_existing" value
="">
101 <div
class="modal-content">
102 <div
class="modal-header">
103 <h5
class="modal-title" id
="server_add_title">Add RPC Server
</h5
>
104 <button type
="button" class="close" data
-dismiss
="modal" aria
-label
="Close">
105 <span aria
-hidden
="true">×
;</span
></button
>
107 <div
class="modal-body">
108 <div
class="form-group">
109 <label
for="rpc_displayname">Display name
</label
>
110 <input name
="rpc_displayname" type
="text" class="form-control" id
="rpc_displayname" aria
-describedby
="rpc_displayname_help" value
="" required
>
111 <small id
="rpc_displayname_help" class="form-text text-muted">A short display name
for in the RPC server
list.</small
>
113 <div
class="form-group form-check">
114 <input name
="rpc_default" type
="checkbox" class="revalidation-needed-rpc form-check-input" id
="rpc_default">
115 <label
class="form-check-label" for="rpc_default">Default server
</label
>
116 <small id
="rpc_default_help" class="form-text text-muted">Make this the
default (primary
) server that will be used
for connections
.</code
></small
>
118 <div
class="form-group">
119 <label
for="rpc_iphost">Hostname
or IP
</label
>
120 <input name
="rpc_iphost" type
="text" class="revalidation-needed-rpc form-control" id
="rpc_iphost" aria
-describedby
="hostname_help" value
="127.0.0.1">
121 <small id
="hostname_help" class="form-text text-muted">The hostname
or IP address of your UnrealIRCd server
. You should
use <code
>127.0.0.1</code
> for the same machine
.</small
>
123 <div
class="form-group">
124 <label
for="rpc_port">Server Port
</label
>
125 <input name
="rpc_port" type
="text" class="revalidation-needed-rpc form-control" id
="rpc_port" aria
-describedby
="port_help" value
="8600">
126 <small id
="port_help" class="form-text text-muted">The port which you designated
for RPC connections in your
<code
>unrealircd
.conf
</code
></small
>
128 <div
class="form-group form-check">
129 <input name
="rpc_tls_verify_cert" type
="checkbox" class="revalidation-needed-rpc form-check-input" id
="rpc_tls_verify_cert">
130 <label
class="form-check-label" for="rpc_tls_verify_cert">Verify SSL
/TLS certificate
</label
>
131 <small id
="rpc_tls_verify_cert_help" class="form-text text-muted">Can only be used with hostnames
, don
't enable this for 127.0.0.1.</code></small>
133 <div class="form-group">
134 <label for="rpc_username">Username</label>
135 <input name="rpc_user" type="text" class="revalidation-needed-rpc form-control" id="rpc_user" aria-describedby="username_help" autocomplete="new-password">
136 <small id="username_help" class="form-text text-muted">The name of your <code>rpc-user</code> block as defined in your <code>unrealircd.conf</code></small>
138 <div class="form-group">
139 <label for="rpc_password">Password</label>
140 <input name="rpc_password" type="password" class="revalidation-needed-rpc form-control" id="rpc_password" autocomplete="new-password">
144 <div class="modal-footer">
145 <button id="CloseButton" type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
146 <button type="submit" name="do_add_server" id="do_add_server" class="btn btn-primary">Add Server</button>
153 <!-- Server error modal -->
154 <div class="modal" id="server_error" tabindex="-1" role="dialog" aria-labelledby="confirmModalCenterTitle" aria-hidden="true">
155 <div class="modal-dialog modal-dialog-centered" role="document">
156 <div class="modal-content">
157 <div class="modal-header">
158 <h5 class="modal-title">RPC Server error</h5>
159 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
160 <span aria-hidden="true">×</span>
163 <div class="modal-body">
164 The RPC Server failed to connect. Check your settings and try again.
167 <div class="modal-footer">
168 <button id="CloseButton" type="button" class="btn btn-primary" data-dismiss="modal" onclick="cancel_error()">OK</button>
176 <table class="container-xxl table table-sm table-responsive caption-top table-striped">
177 <thead class="table-primary">
178 <th scope="col">Display name</th>
179 <th scope="col">Hostname</th>
180 <th scope="col">Port</th>
181 <th scope="col">RPC User</th>
185 foreach($config['unrealircd
'] as $name=>$e)
188 if (isset($e["default"]) && $e["default"])
189 $primary = " <span class=\"badge rounded-pill badge-success\">Default</span>";
190 $name = htmlspecialchars($name);
191 $default_server = $e["default"] ? "true" : "false";
192 $host = htmlspecialchars($e["host"]);
193 $port = htmlspecialchars($e["port"]);
194 $rpc_user = htmlspecialchars($e["rpc_user"]);
195 $tls_verify_cert = $e["tls_verify_cert"] ? "true" : "false";
196 $name = "<a href=\"javascript:edit_rpc_server('$name',$default_server,'$host','$port','$rpc_user',$tls_verify_cert)\">$name</a>";
198 echo "<td scope=\"col\">".$name.$primary."</td>";
199 echo "<td scope=\"col\"><code>".$host."</code></td>";
200 echo "<td scope=\"col\"><code>".$port."</code></td>";
201 echo "<td scope=\"col\"><code>".$rpc_user."</code></td>";
209 let do_add_server = document.getElementById('do_add_server
');
211 let rpc_host = document.getElementById('rpc_iphost
');
212 let rpc_port = document.getElementById('rpc_port
');
213 let rpc_user = document.getElementById('rpc_user
');
214 let rpc_pass = document.getElementById('rpc_password
');
215 let rpc_tls_verify_cert = document.getElementById('rpc_tls_verify_cert
');
216 let rpc_server_ok = false;
218 do_add_server.addEventListener('click
', e => {
226 /* The RPC connection tester! */
227 function test_rpc_server()
229 fetch(<?php echo get_config("base_url"); ?> + 'api
/installation2
.php
', {
231 headers: {'Content-Type':'application/x-www-form-urlencoded'},
233 'host
='+encodeURIComponent(rpc_host.value)+
234 '&port
='+encodeURIComponent(rpc_port.value)+
235 '&user
='+encodeURIComponent(rpc_user.value)+
236 '&password
='+encodeURIComponent(rpc_pass.value)+
237 '&tls_verify
='+rpc_tls_verify_cert.checked+
238 '&edit_existing
='+encodeURIComponent(edit_existing.value)
240 .then(response => response.json())
244 rpc_server_ok = true;
245 do_add_server.click();
249 $('#server_add').modal('hide');
250 $
('#server_error').modal();
254 test_conn
.innerHTML
= "Failed!";
255 $
('#server_add').modal('hide');
256 $
('#server_error').modal();
260 function cancel_error()
262 $
('#server_add').modal('show');
266 function edit_rpc_server(name
, default_server
, host
, port
, rpc_user
, tls_verify_cert
)
268 $
('#edit_existing').val(name
);
269 $
('#rpc_displayname').val(name
);
270 $
('#rpc_default').prop('checked', default_server
);
271 $
('#rpc_host').val(host
);
272 $
('#rpc_port').val(port
);
273 $
('#rpc_user').val(rpc_user
);
274 $
('#rpc_password').val("****************"); // magic value to indicate saved password
275 $
('#server_add_title').html("Edit Server");
276 $
('#do_add_server').html("Submit");
277 $
('#rpc_tls_verify_cert').prop('checked', tls_verify_cert
);
278 $
('#server_add').modal('show');
281 // This is in a function because a canceled edit_rpc_server otherwise causes a prefilled effect
282 function add_rpc_server()
284 $
('#rpc_displayname').val("");
285 $
('#rpc_host').val("127.0.0.1");
286 $
('#rpc_port').val("8600");
287 $
('#rpc_user').val("");
288 $
('#rpc_password').val("");
289 $
('#server_add_title').html("Add Server");
290 $
('#do_add_server').html("Add Server");
291 $
('#rpc_tls_verify_cert').prop('checked', false);
292 $
('#server_add').modal('show');
297 require_once "../inc/footer.php";