diff --git a/webservice.php b/webservice.php new file mode 100644 index 0000000..8348717 --- /dev/null +++ b/webservice.php @@ -0,0 +1,128 @@ +success = false; + $state->error = $error; + unset($state->result); + $output = $operationManager->encode($state); + echo $output; + + } + + function writeOutput($operationManager, $data){ + + setResponseHeaders(); + $state = new State(); + $state->success = true; + $state->result = $data; + unset($state->error); + $output = $operationManager->encode($state); + echo $output; + + } + + $operation = vtws_getParameter($_REQUEST, "operation"); + $operation = strtolower($operation); + $format = vtws_getParameter($_REQUEST, "format","json"); + $sessionId = vtws_getParameter($_REQUEST,"sessionName"); + + $sessionManager = new SessionManager(); + $operationManager = new OperationManager($adb,$operation,$format,$sessionManager); + + try{ + if(!$sessionId || strcasecmp($sessionId,"null")===0){ + $sessionId = null; + } + + $input = $operationManager->getOperationInput(); + $adoptSession = false; + if(strcasecmp($operation,"extendsession")===0){ + if(isset($input['operation'])){ + // Workaround fix for PHP 5.3.x: $_REQUEST doesn't have PHPSESSID + if(isset($_REQUEST['PHPSESSID'])) { + $sessionId = vtws_getParameter($_REQUEST,"PHPSESSID"); + } else { + // NOTE: Need to evaluate for possible security issues + $sessionId = vtws_getParameter($_COOKIE,'PHPSESSID'); + } + // END + $adoptSession = true; + }else{ + writeErrorOutput($operationManager,new WebServiceException(WebServiceErrorCode::$AUTHREQUIRED,"Authencation required")); + return; + } + } + $sid = $sessionManager->startSession($sessionId,$adoptSession); + + if(!$sessionId && !$operationManager->isPreLoginOperation()){ + writeErrorOutput($operationManager,new WebServiceException(WebServiceErrorCode::$AUTHREQUIRED,"Authencation required")); + return; + } + + if(!$sid){ + writeErrorOutput($operationManager, $sessionManager->getError()); + return; + } + + $userid = $sessionManager->get("authenticatedUserId"); + + if($userid){ + + $seed_user = new Users(); + $current_user = $seed_user->retrieveCurrentUserInfoFromFile($userid); + + }else{ + $current_user = null; + } + + $operationInput = $operationManager->sanitizeOperation($input); + $includes = $operationManager->getOperationIncludes(); + + foreach($includes as $ind=>$path){ + require_once($path); + } + $rawOutput = $operationManager->runOperation($operationInput,$current_user); + writeOutput($operationManager, $rawOutput); + }catch(WebServiceException $e){ + writeErrorOutput($operationManager,$e); + }catch(Exception $e){ + writeErrorOutput($operationManager, + new WebServiceException(WebServiceErrorCode::$INTERNALERROR,"Unknown Error while processing request")); + } +?>