/** * @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; }
/** * @returns HttpRequestA */ public function getRequest() { if (!HttpRequestA::isValid($this->oRequest)) { $this->oRequest = vsc::getEnv()->getHttpRequest(); } return $this->oRequest; }
/** * * @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; } }
public function testBasicDestroySession() { $o = new HttpRequestA_underTest_destroySession(); $this->assertNotEquals('', session_id()); @HttpRequestA::destroySession(); $this->assertEquals('', session_id()); $this->assertEmpty(session_id()); }
public function testHasSession() { $this->assertFalse(HttpRequestA::hasSession()); @session_start(); $this->assertTrue(HttpRequestA::hasSession()); session_destroy(); $this->assertFalse(HttpRequestA::hasSession()); }
/** * @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); }
/** * @param HttpRequestA $oRequest */ public function setHttpRequest(HttpRequestA $oRequest) { if (HttpRequestA::isValid($oRequest)) { $this->oRequest = $oRequest; } }
public function testUseless() { $sSessionId = uniqid('test:'); @HttpRequestA::startSession($sSessionId); $this->assertEquals($sSessionId, session_id()); }
public function getCookieVar($key) { return parent::getCookieVar($key); }
/** * 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 } }
public static function getDecodedVar($var) { return parent::getDecodedVar($var); }
public function testUseless() { $this->assertTrue(HttpRequestA::validContentType('*/*')); }
public function setAuthentication(HttpAuthenticationA $oHttpAuthentication) { parent::setAuthentication($oHttpAuthentication); }
/** * @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; }
/** * * @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; } }