Example #1
0
 /**
  * @param HttpRequestA $oRequest
  * @return \vsc\domain\models\ModelA
  * @throws \vsc\presentation\responses\ExceptionResponseError
  */
 public function handleRequest(HttpRequestA $oRequest)
 {
     if (!$oRequest->isGet() && !RawHttpRequest::isValid($oRequest)) {
         $oRequest = new RawHttpRequest();
         vsc::getEnv()->setHttpRequest($oRequest);
     }
     switch ($oRequest->getHttpMethod()) {
         case HttpRequestTypes::GET:
             $oModel = $this->handleGet($oRequest);
             break;
         case HttpRequestTypes::HEAD:
             $oModel = $this->handleHead($oRequest);
             break;
         case HttpRequestTypes::POST:
             $oModel = $this->handlePost($oRequest);
             break;
         case HttpRequestTypes::PUT:
             $oModel = $this->handlePut($oRequest);
             break;
         case HttpRequestTypes::DELETE:
             $oModel = $this->handleDelete($oRequest);
             break;
         default:
             throw new ExceptionResponseError('Method [' . $oRequest->getHttpMethod() . '] is unavailable.', HttpResponseType::METHOD_NOT_ALLOWED);
     }
     return $oModel;
 }
Example #2
0
 /**
  * @returns HttpRequestA
  */
 public function getRequest()
 {
     if (!HttpRequestA::isValid($this->oRequest)) {
         $this->oRequest = vsc::getEnv()->getHttpRequest();
     }
     return $this->oRequest;
 }
Example #3
0
 /**
  *
  * @param string $sVarName
  * @throws Exception
  * @return mixed
  */
 protected function getCookieVar($sVarName)
 {
     if (array_key_exists($sVarName, $this->aCookieVars)) {
         return HttpRequestA::getDecodedVar($this->aCookieVars[$sVarName]);
     } else {
         return null;
     }
 }
Example #4
0
 public function testBasicDestroySession()
 {
     $o = new HttpRequestA_underTest_destroySession();
     $this->assertNotEquals('', session_id());
     @HttpRequestA::destroySession();
     $this->assertEquals('', session_id());
     $this->assertEmpty(session_id());
 }
Example #5
0
 public function testHasSession()
 {
     $this->assertFalse(HttpRequestA::hasSession());
     @session_start();
     $this->assertTrue(HttpRequestA::hasSession());
     session_destroy();
     $this->assertFalse(HttpRequestA::hasSession());
 }
Example #6
0
 /**
  * @param HttpRequestA $oRequest
  * @param RESTProcessorA $oProcessor
  * @returns HttpResponseA
  * @throws \vsc\presentation\responses\ExceptionResponse
  * @throws \vsc\presentation\responses\ExceptionResponseError
  * @throws \vsc\presentation\views\ExceptionView
  * @throws ExceptionResponseError
  */
 public function getResponse(HttpRequestA $oRequest, $oProcessor = null)
 {
     $oModel = null;
     try {
         if (!$oRequest->isGet()) {
             if ($oRequest->hasContentType() && !RESTRequest::validContentType($oRequest->getContentType())) {
                 throw new ExceptionResponseError('Invalid request content type', HttpResponseType::UNSUPPORTED_MEDIA_TYPE);
             }
         }
         if (!ProcessorA::isValid($oProcessor)) {
             throw new ExceptionController('Invalid request processor');
         }
         /* @var RESTProcessorA $oProcessor */
         if (RESTProcessorA::isValid($oProcessor) && !$oProcessor->validRequestMethod($oRequest->getHttpMethod())) {
             throw new ExceptionResponseError('Invalid request method', HttpResponseType::METHOD_NOT_ALLOWED);
         }
         $oMap = $oProcessor->getMap();
         if ($oMap->requiresAuthentication()) {
             try {
                 if ($oProcessor instanceof AuthenticatedProcessorI) {
                     /* @var AuthenticatedProcessorI $oProcessor */
                     if (!$oRequest->hasAuthenticationData()) {
                         throw new ExceptionAuthenticationNeeded('This resource needs authentication');
                     }
                     // here we check that the request contains the same authentication type as the map
                     if (($oRequest->getAuthentication()->getType() & $oMap->getAuthenticationType()) !== $oMap->getAuthenticationType()) {
                         throw new ExceptionAuthenticationNeeded('Invalid authorization scheme. Supported schemes: ' . implode(', ', $oMap->getValidAuthenticationSchemas()));
                     }
                     if (!$oProcessor->handleAuthentication($oRequest->getAuthentication())) {
                         throw new ExceptionAuthenticationNeeded('Invalid authentication data', 'testrealm');
                     }
                 } else {
                     throw new ExceptionAuthenticationNeeded('This resource requires authentication but doesn\'t support any authorization scheme');
                 }
             } catch (ExceptionAuthenticationNeeded $e) {
                 return $this->getErrorResponse($e, $oRequest);
             }
         }
     } catch (\Exception $e) {
         return $this->getErrorResponse($e, $oRequest);
     }
     return parent::getResponse($oRequest, $oProcessor);
 }
Example #7
0
 /**
  * @param HttpRequestA $oRequest
  */
 public function setHttpRequest(HttpRequestA $oRequest)
 {
     if (HttpRequestA::isValid($oRequest)) {
         $this->oRequest = $oRequest;
     }
 }
Example #8
0
 public function testUseless()
 {
     $sSessionId = uniqid('test:');
     @HttpRequestA::startSession($sSessionId);
     $this->assertEquals($sSessionId, session_id());
 }
Example #9
0
 public function getCookieVar($key)
 {
     return parent::getCookieVar($key);
 }
Example #10
0
 /**
  * This exists as the php::parse_url function sometimes breaks inexplicably
  * @param string $sUrl
  * @return Url
  */
 protected static function parse_url($sUrl = null)
 {
     if (is_null($sUrl)) {
         return new Url();
     }
     if (mb_detect_encoding($sUrl) !== 'ASCII') {
         $sUrl = rawurlencode($sUrl);
     }
     $oUrl = new Url();
     try {
         if (!stristr($sUrl, '://') && is_file($sUrl) && is_readable($sUrl)) {
             $oUrl->setScheme('file');
             $oUrl->setPath($sUrl);
             return $oUrl;
         }
     } catch (\Exception $e) {
         // possible open basedir restriction
         $oUrl->setScheme('file');
         $oUrl->setPath($sUrl);
         return $oUrl;
     }
     try {
         if (!self::urlHasScheme($sUrl)) {
             $sUrl = (HttpRequestA::isSecure() ? 'https:' : 'http:') . $sUrl;
         }
         $aParsed = parse_url($sUrl);
         if (!is_array($aParsed)) {
             return null;
         }
         if (isset($aParsed['scheme'])) {
             $oUrl->setScheme($aParsed['scheme']);
         }
         if (isset($aParsed['host'])) {
             $oUrl->setHost($aParsed['host']);
         }
         if (isset($aParsed['port'])) {
             $oUrl->setPort($aParsed['port']);
         }
         if (isset($aParsed['path'])) {
             $oUrl->setPath($aParsed['path']);
         }
         if (isset($aParsed['query'])) {
             $oUrl->setRawQuery($aParsed['query']);
         }
         if (isset($aParsed['fragment'])) {
             $oUrl->setFragment($aParsed['fragment']);
         }
         return $oUrl;
     } catch (\Exception $e) {
         // failed php::parse_url
     }
 }
Example #11
0
 public static function getDecodedVar($var)
 {
     return parent::getDecodedVar($var);
 }
Example #12
0
 public function testUseless()
 {
     $this->assertTrue(HttpRequestA::validContentType('*/*'));
 }
Example #13
0
 public function setAuthentication(HttpAuthenticationA $oHttpAuthentication)
 {
     parent::setAuthentication($oHttpAuthentication);
 }
Example #14
0
 /**
  * @param \Exception $e
  * @param HttpRequestA $oRequest
  * @return HttpResponseA
  * @throws ExceptionPath
  * @throws ExceptionResponse
  */
 public function getErrorResponse(\Exception $e, $oRequest = null)
 {
     $oResponse = vsc::getEnv()->getHttpResponse();
     $oProcessor = new ErrorProcessor($e);
     /* @var ControllerMap $oMyMap */
     $oMyMap = $this->getMap();
     $oMyMap->setMainTemplatePath(VSC_RES_PATH . 'templates');
     $oMyMap->setMainTemplate('main.php');
     if (!HttpRequestA::isValid($oRequest)) {
         $oRequest = vsc::getEnv()->getHttpRequest();
     }
     /** @var ErrorModel $oModel */
     $oModel = $oProcessor->handleRequest($oRequest);
     $iCode = $oModel->getHttpStatus();
     if (HttpResponseType::isValidStatus($iCode)) {
         $oResponse->setStatus($iCode);
     } else {
         $oResponse->setStatus(500);
     }
     // we didn't set any special view
     // this means that the developer needs to provide his own views
     $oView = $this->getView();
     /* @var ProcessorMap $oMap */
     $oMap = $oProcessor->getMap();
     $oMap->merge($oMyMap);
     $oProcessorResponse = $oMap->getResponse();
     if (HttpResponseA::isValid($oProcessorResponse)) {
         $oResponse = $oProcessorResponse;
     }
     // setting the processor map
     $oView->setMap($oMap);
     if (ControllerMap::isValid($oMyMap)) {
         $oView->setMainTemplate($oMyMap->getMainTemplatePath() . DIRECTORY_SEPARATOR . $oView->getViewFolder() . DIRECTORY_SEPARATOR . $oMyMap->getMainTemplate());
     }
     $oView->setModel($oModel);
     $oResponse->setView($oView);
     $aHeaders = $oMap->getHeaders();
     if (count($aHeaders) > 0) {
         foreach ($aHeaders as $sName => $sHeader) {
             $oResponse->addHeader($sName, $sHeader);
         }
     }
     return $oResponse;
 }
Example #15
0
 /**
  *
  * @param string $sVarName
  * @return mixed
  */
 public function getSessionVar($sVarName)
 {
     if (array_key_exists($sVarName, $this->aSessionVars)) {
         return HttpRequestA::getDecodedVar($this->aSessionVars[$sVarName]);
     } else {
         return null;
     }
 }