diff options
Diffstat (limited to 'inc/Remote/XmlRpcServer.php')
-rw-r--r-- | inc/Remote/XmlRpcServer.php | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/inc/Remote/XmlRpcServer.php b/inc/Remote/XmlRpcServer.php new file mode 100644 index 000000000..1b0097856 --- /dev/null +++ b/inc/Remote/XmlRpcServer.php @@ -0,0 +1,61 @@ +<?php + +namespace dokuwiki\Remote; + +/** + * Contains needed wrapper functions and registers all available XMLRPC functions. + */ +class XmlRpcServer extends \IXR_Server +{ + protected $remote; + + /** + * Constructor. Register methods and run Server + */ + public function __construct() + { + $this->remote = new Api(); + $this->remote->setDateTransformation(array($this, 'toDate')); + $this->remote->setFileTransformation(array($this, 'toFile')); + parent::__construct(); + } + + /** + * @inheritdoc + */ + public function call($methodname, $args) + { + try { + $result = $this->remote->call($methodname, $args); + return $result; + } /** @noinspection PhpRedundantCatchClauseInspection */ catch (AccessDeniedException $e) { + if (!isset($_SERVER['REMOTE_USER'])) { + http_status(401); + return new \IXR_Error(-32603, "server error. not authorized to call method $methodname"); + } else { + http_status(403); + return new \IXR_Error(-32604, "server error. forbidden to call the method $methodname"); + } + } catch (RemoteException $e) { + return new \IXR_Error($e->getCode(), $e->getMessage()); + } + } + + /** + * @param string|int $data iso date(yyyy[-]mm[-]dd[ hh:mm[:ss]]) or timestamp + * @return \IXR_Date + */ + public function toDate($data) + { + return new \IXR_Date($data); + } + + /** + * @param string $data + * @return \IXR_Base64 + */ + public function toFile($data) + { + return new \IXR_Base64($data); + } +} |