aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/inc/Remote
diff options
context:
space:
mode:
Diffstat (limited to 'inc/Remote')
-rw-r--r--inc/Remote/Api.php10
-rw-r--r--inc/Remote/XmlRpcServer.php61
2 files changed, 66 insertions, 5 deletions
diff --git a/inc/Remote/Api.php b/inc/Remote/Api.php
index 1982c5479..36957a873 100644
--- a/inc/Remote/Api.php
+++ b/inc/Remote/Api.php
@@ -120,13 +120,13 @@ class Api
* @param string $method name of method
* @param array $args
* @return mixed
- * @throws \dokuwiki\Remote\RemoteException if method not exists
+ * @throws RemoteException if method not exists
*/
private function callCustomCallPlugin($method, $args)
{
$customCalls = $this->getCustomCallPlugins();
if (!array_key_exists($method, $customCalls)) {
- throw new \dokuwiki\Remote\RemoteException('Method does not exist', -32603);
+ throw new RemoteException('Method does not exist', -32603);
}
$customCall = $customCalls[$method];
return $this->callPlugin($customCall[0], $customCall[1], $args);
@@ -155,14 +155,14 @@ class Api
* @param string $method method name
* @param array $args
* @return mixed return of custom method
- * @throws \dokuwiki\Remote\RemoteException
+ * @throws RemoteException
*/
private function callPlugin($pluginName, $method, $args)
{
$plugin = plugin_load('remote', $pluginName);
$methods = $this->getPluginMethods();
if (!$plugin) {
- throw new \dokuwiki\Remote\RemoteException('Method does not exist', -32603);
+ throw new RemoteException('Method does not exist', -32603);
}
$this->checkAccess($methods[$method]);
$name = $this->getMethodName($methods, $method);
@@ -175,7 +175,7 @@ class Api
* @param string $method name of method
* @param array $args
* @return mixed
- * @throws \dokuwiki\Remote\RemoteException if method not exist
+ * @throws RemoteException if method not exist
*/
private function callCoreMethod($method, $args)
{
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);
+ }
+}