<?php
/* This tool is not officially supported by Zabbix SIA. */
/* If you would like to improve something, patches welcome. */
?>
<?php
function do_post_request($url, $data){

	$header = "Content-type: application/json-rpc\r\n";
	$header .= "Content-Length: ".strlen($data)."\r\n";
	$header .= "\r\n";

	$params = [
		'http' => [
			'method' => 'post',
			'content' => $data,
			'header' => $header
		]
	];

	$ctx = stream_context_create($params);

	$fp = @fopen($url, 'rb', false, $ctx);
	if(!$fp){
		throw new Exception("Problem with $url, $php_errormsg");
	}

	$response = @stream_get_contents($fp);

	fclose($fp);

	if($response === false) {
		throw new Exception("Problem reading data from $url, $php_errormsg");
	}

	return $response;
}

?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JSONRPC Zabbix API</title>
</head>
	<!-- Dependencies -->
	<script src="http://yui.yahooapis.com/2.8.2r1/build/yahoo/yahoo-min.js"></script>
	<!-- Source file -->
	<script src="http://yui.yahooapis.com/2.8.2r1/build/json/json-min.js"></script>

	<script src="http://yandex.st/highlightjs/5.16/highlight.min.js"></script>
	<link rel="stylesheet" href="http://yandex.st/highlightjs/5.16/styles/idea.min.css">

<?php
	$_REQUEST['path'] = isset($_REQUEST['path']) ? $_REQUEST['path'] : 'trunk';
	$user = isset($_REQUEST['user']) ? $_REQUEST['user'] : 'Admin';
	$pswd = isset($_REQUEST['pswd']) ? $_REQUEST['pswd'] : 'zabbix';
	$url = 'http://'.$_REQUEST['path'].'/api_jsonrpc.php';
?>
<body>
<form method="post">
	<label>Path: <input type="text" name="path" value="<?php print($_REQUEST['path']);?>"/></label><br />
	<label>User: <input type="text" name="user" value="<?php print($user);?>"/></label><br />
	<label>Pass: <input type="password" name="pswd" value="<?php print($pswd); ?>"/></label><br />
	<label>Method: <input type="text" name="apimethod" size="40" value="<?php print(isset($_REQUEST['apimethod']) ? $_REQUEST['apimethod'] : '');?>"/></label><br />
	Params: <textarea name="apiparams" cols="100" rows="20"><?php print(isset($_REQUEST['apiparams']) ? $_REQUEST['apiparams'] : '');?></textarea><br />
	<input type="submit" value="OK" name="apicall" />
	<br />
</form>
<?php

if(isset($_REQUEST['apicall'])){
	$data = [
		'jsonrpc' => '2.0',
		'method' => 'user.login',
		'params' => ['user'=>$user, 'password'=>$pswd],
		'id'=> 1
	];

	$data = json_encode($data);

	$response = do_post_request($url, $data);

	$json_decoded = json_decode($response, true);
	$auth = $json_decoded['result'];
?>
<span style="font-weight: bolder;">AUTH</span>
<div style="color: darkgreen; border: 2px solid darkblue;">
	<div>
		<span style="color: blue;">request:</span>
		<pre><code class="javascript"><?php print($data); ?></code></pre>
	</div>
	<div>
		<span style="color: blue;">response:</span>
		<pre><code class="javascript"><?php print($response); ?></code></pre>
	</div>
</div>

<?php
	$data = [
		'jsonrpc' => '2.0',
		'method' => $_REQUEST['apimethod'],
		'params' => json_decode($_REQUEST['apiparams'], true),
		'auth' => $auth,
		'id'=> 2
	];
	$data = json_encode($data);
	$response = do_post_request($url, $data);
?>

<span style="font-weight: bolder;">API call</span>
<div style="color: darkgreen; border: 2px solid darkblue;">
	<div>
		<span style="color: blue;">request:</span>
		<pre><code id="data" class="javascript"><?php print($data); ?></code></pre>
	</div>
	<div>
		<span style="color: blue;">response:</span>
		<pre><code id="resp" class="javascript"><?php print($response); ?></code></pre>
	</div>
</div>

<script type="text/javascript">
var j = YAHOO.lang.JSON.parse(document.getElementById("resp").innerHTML);
document.getElementById("resp").innerHTML = YAHOO.lang.JSON.stringify(j,function(key, value){return value;}, 4);
var j = YAHOO.lang.JSON.parse(document.getElementById("data").innerHTML);
document.getElementById("data").innerHTML = YAHOO.lang.JSON.stringify(j,function(key, value){return value;}, 4);

hljs.initHighlightingOnLoad();
</script>
<?php
}
?>

</body>
</html>