xref: /dokuwiki/lib/exe/xmlrpc.php (revision 3a6d76070be7220b8e5f7c04443aa923bc8cddf2)
1<?php
2if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
3
4// fix when '< ?xml' isn't on the very first line
5if(isset($HTTP_RAW_POST_DATA)) $HTTP_RAW_POST_DATA = trim($HTTP_RAW_POST_DATA);
6
7require_once(DOKU_INC.'inc/init.php');
8require_once(DOKU_INC.'inc/remote.php');
9session_write_close();  //close session
10
11if(!$conf['xmlrpc']) die('XML-RPC server not enabled.');
12
13/**
14 * Contains needed wrapper functions and registers all available
15 * XMLRPC functions.
16 */
17class dokuwiki_xmlrpc_server extends IXR_Server {
18    var $remote;
19
20    /**
21     * Constructor. Register methods and run Server
22     */
23    function dokuwiki_xmlrpc_server(){
24        $this->remote = new RemoteAPI();
25        $this->remote->setDateTransformation(array($this, 'toDate'));
26        $this->remote->setFileTransformation(array($this, 'toFile'));
27        $this->IXR_Server();
28    }
29
30    function call($methodname, $args){
31        try {
32            $result = $this->remote->call($methodname, $args);
33            return $result;
34        } catch (RemoteAccessDeniedException $e) {
35            if (!isset($_SERVER['REMOTE_USER'])) {
36                header('HTTP/1.1 401 Unauthorized');
37            } else {
38                header('HTTP/1.1 403 Forbidden');
39            }
40            return new IXR_Error(-32603, "server error. not authorized to call method $methodname");
41        } catch (RemoteException $e) {
42            return new IXR_Error($e->getCode(), $e->getMessage());
43        }
44    }
45
46    function toDate($data) {
47        return new IXR_Date($data);
48    }
49
50    function toFile($data) {
51        return new IXR_Base64($data);
52    }
53}
54
55$server = new dokuwiki_xmlrpc_server();
56
57// vim:ts=4:sw=4:et:
58