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