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 7/** 8 * Increased whenever the API is changed 9 */ 10define('DOKU_XMLRPC_API_VERSION', 6); 11 12require_once(DOKU_INC.'inc/init.php'); 13require_once(DOKU_INC.'inc/remote.php'); 14session_write_close(); //close session 15 16if(!$conf['xmlrpc']) die('XML-RPC server not enabled.'); 17 18/** 19 * Contains needed wrapper functions and registers all available 20 * XMLRPC functions. 21 */ 22class dokuwiki_xmlrpc_server extends IXR_Server { 23 var $remote; 24 25 /** 26 * Constructor. Register methods and run Server 27 */ 28 function dokuwiki_xmlrpc_server(){ 29 $this->remote = new RemoteAPI(); 30 $this->remote->setDateTransformation(array($this, 'toDate')); 31 $this->remote->setFileTransformation(array($this, 'toFile')); 32 $this->IXR_Server(); 33 } 34 35 function call($methodname, $args){ 36 try { 37 //print 'a'; 38 $result = $this->remote->call($methodname, $args); 39 return $result; 40 } catch (RemoteAccessDeniedException $e) { 41 if (!isset($_SERVER['REMOTE_USER'])) { 42 header('HTTP/1.1 401 Unauthorized'); 43 } else { 44 header('HTTP/1.1 403 Forbidden'); 45 } 46 return new IXR_Error(-32603, 'server error. not authorized to call method'); 47 } catch (RemoteException $e) { 48 return new IXR_Error($e->getCode(), $e->getMessage()); 49 } 50 } 51 52 function toDate($data) { 53 return new IXR_Date($data); 54 } 55 56 function toFile($data) { 57 return new IXR_Base64($data); 58 } 59 60} 61 62$server = new dokuwiki_xmlrpc_server(); 63 64// vim:ts=4:sw=4:et: 65