use Kanboard\Api\ProjectPermission; use Kanboard\Api\Subtask; use Kanboard\Api\Swimlane; use Kanboard\Api\Task; use Kanboard\Api\TaskLink; use Kanboard\Api\User; use Kanboard\Api\Group; use Kanboard\Api\GroupMember; $server = new Server(); $server->setAuthenticationHeader(API_AUTHENTICATION_HEADER); $server->before(array(new Auth($container), 'checkCredentials')); $server->attach(new Me($container)); $server->attach(new Action($container)); $server->attach(new App($container)); $server->attach(new Board($container)); $server->attach(new Column($container)); $server->attach(new Category($container)); $server->attach(new Comment($container)); $server->attach(new File($container)); $server->attach(new Link($container)); $server->attach(new Project($container)); $server->attach(new ProjectPermission($container)); $server->attach(new Subtask($container)); $server->attach(new Swimlane($container)); $server->attach(new Task($container)); $server->attach(new TaskLink($container)); $server->attach(new User($container)); $server->attach(new Group($container)); $server->attach(new GroupMember($container)); echo $server->execute();
/** * Handle batch request * * @access private * @return string */ private function handleBatchRequest() { $responses = array(); foreach ($this->payload as $payload) { if (!is_array($payload)) { $responses[] = $this->getResponse(array('error' => array('code' => -32600, 'message' => 'Invalid Request')), array('id' => null)); } else { $server = new Server($payload); $response = $server->execute(); if ($response) { $responses[] = $response; } } } return empty($responses) ? '' : '[' . implode(',', $responses) . ']'; }
public function testBatchNotifications() { $server = new Server('[ {"jsonrpc": "2.0", "method": "notify_sum", "params": [1,2,4]}, {"jsonrpc": "2.0", "method": "notify_hello", "params": [7]} ]'); $server->register('notify_sum', function ($a, $b, $c) { }); $server->register('notify_hello', function ($id) { }); $this->assertEquals('', $server->execute()); }
/** * Parse incoming requests * * @access public * @return string */ public function execute() { // Parse payload if (empty($this->payload)) { $this->payload = file_get_contents('php://input'); } if (is_string($this->payload)) { $this->payload = json_decode($this->payload, true); } // Check JSON format if (!is_array($this->payload)) { return $this->getResponse(array('error' => array('code' => -32700, 'message' => 'Parse error')), array('id' => null)); } // Handle batch request if (array_keys($this->payload) === range(0, count($this->payload) - 1)) { $responses = array(); foreach ($this->payload as $payload) { if (!is_array($payload)) { $responses[] = $this->getResponse(array('error' => array('code' => -32600, 'message' => 'Invalid Request')), array('id' => null)); } else { $server = new Server($payload); $response = $server->execute(); if ($response) { $responses[] = $response; } } } return empty($responses) ? '' : '[' . implode(',', $responses) . ']'; } // Check JSON-RPC format if (!isset($this->payload['jsonrpc']) || !isset($this->payload['method']) || !is_string($this->payload['method']) || $this->payload['jsonrpc'] !== '2.0' || isset($this->payload['params']) && !is_array($this->payload['params'])) { return $this->getResponse(array('error' => array('code' => -32600, 'message' => 'Invalid Request')), array('id' => null)); } // Procedure not found if (!isset(self::$procedures[$this->payload['method']])) { return $this->getResponse(array('error' => array('code' => -32601, 'message' => 'Method not found')), $this->payload); } $callback = self::$procedures[$this->payload['method']]; $params = array(); $reflection = new ReflectionFunction($callback); if (isset($this->payload['params'])) { $parameters = $reflection->getParameters(); if (!$this->mapParameters($this->payload['params'], $parameters, $params)) { return $this->getResponse(array('error' => array('code' => -32602, 'message' => 'Invalid params')), $this->payload); } } $result = $reflection->invokeArgs($params); return $this->getResponse(array('result' => $result), $this->payload); }