content['sslverify'] = $sslverify;
$this->body['id'] = $this->generate_id();
$this->body['jsonrpc'] = "2.0";
$this->body['method'] = NULL; // MUST be set later
$this->body['params'] = []; // CAN be set later
}
function add_body(array $b) : void
{
array_merge($this->body, $b);
}
private function generate_id()
{
$time = microtime(true);
$str = (string)$time;
$last = $str[strlen($str) - 1];
$last = (int)$last;
$id = $time * $time * $last;
$id = md5(base64_encode($id));
return $id;
}
/**
* This function sets the method of the RPC call you're making.
* For a list of available methods, see:
* https://www.unrealircd.org/docs/JSON-RPC#JSON-RPC_Methods
*/
function set_method(String $method) : void
{
$this->body['method'] = $method;
}
function set_params(array $params) : void
{
array_merge($this->body['params'], $params);
}
function execute()
{
$this->content['body'] = json_encode($this->body);
if (!$this->content['body'])
return;
$url = "https://".UNREALIRCD_HOST.":".UNREALIRCD_PORT."/api";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$headers = array(
"Accept: application/json",
"Content-Type: application/json",
"Authorization: Basic ". base64_encode(UNREALIRCD_RPC_USER.":".UNREALIRCD_RPC_PASSWORD),
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POSTFIELDS, $this->content['body']);
//for debug only!
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$apiResponse = curl_exec($curl);
curl_close($curl);
$this->result = $apiResponse;
}
function fetch_assoc()
{
return json_decode($this->result, true);
}
static function die(array $err)
{
die("There was a problem processing the request: ".$err['message']." (".$err['code'].")
Please contact the plugin author.
".
"If you are a developer, see: https://www.unrealircd.org/docs/JSON-RPC#Error");
}
}
class RPC_List
{
static $user = [];
static $channel = [];
static $tkl = [];
static $spamfilter = [];
static $opercount = 0;
static $services_count = 0;
static $most_populated_channel = NULL;
static $channel_pop_count = 0;
}
function rpc_pop_lists()
{
$rpc = new RPC();
/* Get the user list */
$rpc->set_method("user.list");
$rpc->execute();
foreach($rpc->fetch_assoc() as $key => $value)
{
if ($key == "error")
{
RPC::die($value);
return;
}
if ($key == "result")
foreach($value['list'] as $r)
{
RPC_List::$user[] = $r;
if (strpos($r['user']['modes'],"o") !== false && strpos($r['user']['modes'],"S") == false)
RPC_List::$opercount++;
elseif (strpos($r['user']['modes'],"S") !== false)
RPC_List::$services_count++;
}
}
/* Get the channels list */
$rpc->set_method("channel.list");
$rpc->execute();
foreach($rpc->fetch_assoc() as $key => $value)
{
if ($key == "error")
{
RPC::die($value);
return;
}
if ($key == "result")
foreach($value['list'] as $r)
{
RPC_List::$channel[] = $r;
if ($r['num_users'] > RPC_List::$channel_pop_count)
{
RPC_List::$channel_pop_count = $r['num_users'];
RPC_List::$most_populated_channel = $r['name'];
}
}
}
/* Get the tkl list */
$rpc->set_method("server_ban.list");
$rpc->execute();
foreach($rpc->fetch_assoc() as $key => $value)
{
if ($key == "error")
{
RPC::die($value);
return;
}
if ($key == "result")
foreach($value['list'] as $r)
RPC_List::$tkl[] = $r;
}
/* Get the tkl list */
$rpc->set_method("spamfilter.list");
$rpc->execute();
foreach($rpc->fetch_assoc() as $key => $value)
{
if ($key == "error")
{
RPC::die($value);
return;
}
if ($key == "result")
foreach($value['list'] as $r)
RPC_List::$spamfilter[] = $r;
}
}