From ce9b51ed7f2febf37f2da0df983315f1c71f95a6 Mon Sep 17 00:00:00 2001 From: Marius Burkard <m.burkard@pixcept.de> Date: Mon, 23 May 2016 10:21:02 +0200 Subject: [PATCH] - changed json handler for REST api --- interface/lib/classes/json_handler.inc.php | 23 ++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/interface/lib/classes/json_handler.inc.php b/interface/lib/classes/json_handler.inc.php index d6d58c3ab9..de8dd5ba0d 100644 --- a/interface/lib/classes/json_handler.inc.php +++ b/interface/lib/classes/json_handler.inc.php @@ -88,15 +88,11 @@ class ISPConfigJSONHandler { $keys = array_keys($_GET); $method = reset($keys); $params = array(); - - if(is_array($_POST)) { - foreach($_POST as $key => $val) { - $tmp = json_decode($val, true); - if(!$tmp) $params[] = $val; - else $params[] = (array)$tmp; - } - } - + + $raw = file_get_contents("php://input"); + $json = json_decode($raw, true); + if(!is_array($json)) $this->_return_json('invalid_data', 'The JSON data sent to the api is invalid'); + if(array_key_exists($method, $this->methods) == false) { $this->_return_json('invalid_method', 'Method ' . $method . ' does not exist'); } @@ -109,7 +105,14 @@ class ISPConfigJSONHandler { if(method_exists($this->classes[$class_name], $method) == false) { $this->_return_json('invalid_method', 'Method ' . $method . ' does not exist in the class it was expected (' . $class_name . ')'); } - + + $methObj = new ReflectionMethod($this->classes[$class_name], $method); + foreach($methObj->getParameters() as $param) { + $pname = $param->name; + if(isset($json[$pname])) $params[] = $json[$pname]; + else $params[] = null; + } + try { $this->_return_json('ok', '', call_user_func_array(array($this->classes[$class_name], $method), $params)); } catch(SoapFault $e) { -- GitLab