diff --git a/webservice/clienttools/ajaxhandler.php b/webservice/clienttools/ajaxhandler.php index cc2109a..4e3e9a5 100644 --- a/webservice/clienttools/ajaxhandler.php +++ b/webservice/clienttools/ajaxhandler.php @@ -8,6 +8,7 @@ class ajaxHandler{ public $kt=NULL; public $authenticator=NULL; public $noAuthRequireList=array(); + public $standardServices=array('system'); public function __construct(&$ret=NULL,&$kt,$noAuthRequests=''){ // set a local copy of the json request wrapper @@ -30,6 +31,7 @@ class ajaxHandler{ } $this->ret->setRequest($this->req->jsonArray); $this->ret->setTitle($this->request['service'].'::'.$this->request['function']); + $this->ret->setDebug('Server Versions',$this->getServerVersions()); if(get_class($kt)=='KTAPI'){ $this->kt=&$kt; @@ -38,20 +40,22 @@ class ajaxHandler{ return $this->render(); } - // Prepar - $this->loadService('auth'); - $this->authenticator=new auth($this->ret,$this->kt,$this->request,$this->auth); - - - //Make sure a token exists before continuing - if(!$this->verifyToken())return $this->render(); - - - if(!$this->verifySession()){ - $this->doLogin(); - $isAuthRequired=$this->isNoAuthRequiredRequest(); - $isAuthenticated=$this->isAuthenticated(); - if(!$isAuthRequired && !$isAuthenticated)return $this->render(); + // Prepare + if(!$this->isStandardService()){ + $this->loadService('auth'); + $this->authenticator=new auth($this,$this->ret,$this->kt,$this->request,$this->auth); + + + //Make sure a token exists before continuing + if(!$this->verifyToken())return $this->render(); + + + if(!$this->verifySession()){ + $this->doLogin(); + $isAuthRequired=$this->isNoAuthRequiredRequest(); + $isAuthenticated=$this->isAuthenticated(); + if(!$isAuthRequired && !$isAuthenticated)return $this->render(); + } } $this->dispatch(); @@ -70,11 +74,15 @@ class ajaxHandler{ $service=$this->authenticator; }else{ $this->loadService($request['service']); - $service=new $request['service']($this->ret,$this->kt,$this->request,$this->auth); + if(class_exists($request['service'])){ + $service=new $request['service']($this,$this->ret,$this->kt,$this->request,$this->auth); + }else{ + $this->ret->setDebug('Service could not be loaded',$request['service']); + } } $this->ret->setdebug('dispatch_request','The service class loaded'); if(method_exists($service,$request['function'])){ - $this->ret->setdebug('dispatch_execution','The service method was found. Executing'); + $this->ret->setDebug('dispatch_execution','The service method was found. Executing'); $service->$request['function']($request['parameters']); }else{ $this->ret->addError("Service {$request['service']} does not contain the method: {$request['function']}"); @@ -82,16 +90,34 @@ class ajaxHandler{ } } + public function isStandardService(){ + return in_array($this->request['service'],$this->standardServices); + } + public function loadService($serviceName=NULL){ - $version=$this->getVersion(); - if(!class_exists($serviceName)){ - if(file_exists('services/'.$version.'/'.$serviceName.'.php')){ - require_once('services/'.$version.'/'.$serviceName.'.php'); - return true; - }else{ - throw new Exception('Service could not be found: '.$serviceName); - return false; + if(in_array($serviceName,$this->standardServices)){ + $fileName=dirname(__FILE__).'/standardservices/'.$serviceName.'.php'; + $this->ret->setDebug('standardService Found',$fileName); + if(!class_exists($serviceName)){ + if(file_exists($fileName)){ + require_once($fileName); + return true; + }else{ + throw new Exception('Standard Service could not be found: '.$serviceName); + return false; + } + } + }else{ + $version=$this->getVersion(); + if(!class_exists($serviceName)){ + if(file_exists('services/'.$version.'/'.$serviceName.'.php')){ + require_once('services/'.$version.'/'.$serviceName.'.php'); + return true; + }else{ + throw new Exception('Service could not be found: '.$serviceName); + return false; + } } } } @@ -106,10 +132,22 @@ class ajaxHandler{ return true; } - protected function getVersion(){ + public function getVersion(){ if(!$this->version)$this->version=$this->req->getVersion(); return $this->version; } + + public function getServerVersions(){ + $folder='services/'; + $contents=scandir($folder); + $dir=array(); + foreach($contents as $item){ + if(is_dir($folder.$item) && $item!='.' && $item!=='..'){ + $dir[]=$item; + } + } + return $dir; + } protected function verifySession(){ return $this->authenticator->pickup_session(); diff --git a/webservice/clienttools/client_service.php b/webservice/clienttools/client_service.php index 971fc30..078dd5a 100644 --- a/webservice/clienttools/client_service.php +++ b/webservice/clienttools/client_service.php @@ -5,8 +5,9 @@ class client_service{ public $KT; public $Request; public $AuthInfo; + public $handler; - public function __construct(&$ResponseObject,&$KT_Instance,&$Request,&$AuthInfo){ + public function __construct(&$handler,&$ResponseObject,&$KT_Instance,&$Request,&$AuthInfo){ // set the response object // if(get_class($ResponseObject)=='jsonResponseObject'){ // $this->Response=&$ResponseObject; @@ -14,7 +15,7 @@ class client_service{ // $this->Response=new jsonResponseObject(); // } - + $this->handler=$handler; $this->Response=&$ResponseObject; $this->KT=&$KT_Instance; $this->AuthInfo=&$AuthInfo; diff --git a/webservice/clienttools/jsonWrapper.php b/webservice/clienttools/jsonWrapper.php index df4e092..c025f35 100644 --- a/webservice/clienttools/jsonWrapper.php +++ b/webservice/clienttools/jsonWrapper.php @@ -14,7 +14,7 @@ class jsonResponseObject{ public $additional=array(); public $isDataSource=false; - public $includeDebug=false; + public $includeDebug=true; public $response=array( 'requestName' =>'', diff --git a/webservice/clienttools/services/0.1/auth.php b/webservice/clienttools/services/0.1/auth.php index 67a62e7..e7cdc65 100644 --- a/webservice/clienttools/services/0.1/auth.php +++ b/webservice/clienttools/services/0.1/auth.php @@ -100,17 +100,25 @@ class auth extends client_service { public function ping(){ global $default; $user=$this->KT->get_user_object_by_username($this->AuthInfo['user']); + $versions=$this->handler->getServerVersions(); + $bestVer=$versions[count($versions)-1]; + $clientVer=$this->handler->getVersion(); $ret=array( 'response' =>'pong', 'loginLocation' => '/index.html', - 'currentversion' =>$default->systemVersion, - 'requiredversion' =>$default->systemVersion, - 'versionok' =>true, - 'fullName' =>PEAR::isError($user)?'':$user->getName() + 'versionok' =>in_array($clientVer,$versions), + 'fullName' =>PEAR::isError($user)?'':$user->getName(), + 'serverVersions' =>$versions, + 'serverBestVersion' =>$bestVer, + 'clientVersion' =>$clientVer, + 'canUpgradeClient' =>($clientVer<$bestVer?true:false), + 'canUpgradeServer' =>($clientVer>$bestVer?true:false) + ); $this->setResponse($ret); return true; } + function logout($params){ $params=$this->AuthInfo; diff --git a/webservice/clienttools/services/0.2/auth.php b/webservice/clienttools/services/0.2/auth.php index 67a62e7..5d7275f 100644 --- a/webservice/clienttools/services/0.2/auth.php +++ b/webservice/clienttools/services/0.2/auth.php @@ -100,13 +100,20 @@ class auth extends client_service { public function ping(){ global $default; $user=$this->KT->get_user_object_by_username($this->AuthInfo['user']); + $versions=$this->handler->getServerVersions(); + $bestVer=$versions[count($versions)-1]; + $clientVer=$this->handler->getVersion(); $ret=array( 'response' =>'pong', 'loginLocation' => '/index.html', - 'currentversion' =>$default->systemVersion, - 'requiredversion' =>$default->systemVersion, - 'versionok' =>true, - 'fullName' =>PEAR::isError($user)?'':$user->getName() + 'versionok' =>in_array($clientVer,$versions), + 'fullName' =>PEAR::isError($user)?'':$user->getName(), + 'serverVersions' =>$versions, + 'serverBestVersion' =>$bestVer, + 'clientVersion' =>$clientVer, + 'canUpgradeClient' =>($clientVer<$bestVer?true:false), + 'canUpgradeServer' =>($clientVer>$bestVer?true:false) + ); $this->setResponse($ret); return true; diff --git a/webservice/clienttools/services/0.2/kt.php b/webservice/clienttools/services/0.2/kt.php index f0aeb16..da76840 100644 --- a/webservice/clienttools/services/0.2/kt.php +++ b/webservice/clienttools/services/0.2/kt.php @@ -140,6 +140,7 @@ class kt extends client_service { $folder=&$kt->get_folder_by_id($arr['node']); if (PEAR::isError($folder)){ + echo '
'.print_r($arr,true).''; $this->addError('Folder Not found'); return false; } @@ -430,6 +431,7 @@ class kt extends client_service { } } $this->setResponse(array('items'=>$items, 'count'=>count($items))); + return true; } function update_document_type($params) { diff --git a/webservice/clienttools/standardservices/system.php b/webservice/clienttools/standardservices/system.php new file mode 100644 index 0000000..17b4a01 --- /dev/null +++ b/webservice/clienttools/standardservices/system.php @@ -0,0 +1,26 @@ +KT->get_user_object_by_username($this->AuthInfo['user']); + $versions=$this->handler->getServerVersions(); + $bestVer=$versions[count($versions)-1]; + $clientVer=$this->handler->getVersion(); + $ret=array( + 'response' =>'pong', + 'loginLocation' => '/index.html', + 'versionok' =>in_array($clientVer,$versions), + 'fullName' =>PEAR::isError($user)?'':$user->getName(), + 'serverVersions' =>$versions, + 'serverBestVersion' =>$bestVer, + 'clientVersion' =>$clientVer, + 'canUpgradeClient' =>($clientVer<$bestVer?true:false), + 'canUpgradeServer' =>($clientVer>$bestVer?true:false) + + ); + $this->setResponse($ret); + return true; + } +} + +?> \ No newline at end of file