/** * Get the authentication type list * Since Apigility 1.1 * */ public function authTypeAction() { $request = $this->getRequest(); $version = $this->getVersion($request); switch ($version) { case 1: return new ApiProblemResponse( new ApiProblem(406, 'This API is supported starting from version 2') ); case 2: if ($request->getMethod() !== $request::METHOD_GET) { $response = new ApiProblemResponse( new ApiProblem(405, 'Only the method GET is allowed for this URI') ); $response->getHeaders()->addHeaderLine('Allow', 'GET'); return $response; } return $this->createAdapterCollection(); default: return new ApiProblemResponse( new ApiProblem(406, 'The API version specified is not supported') ); } }
/** * @depends testApiProblemResponseIsAnHttpResponse */ public function testApiProblemResponseSetsContentTypeHeader() { $response = new ApiProblemResponse(new ApiProblem(400, 'Random error')); $headers = $response->getHeaders(); $this->assertTrue($headers->has('content-type')); $header = $headers->get('content-type'); $this->assertInstanceOf('Zend\\Http\\Header\\ContentType', $header); $this->assertEquals(ApiProblem::CONTENT_TYPE, $header->getFieldValue()); }
/** * Map the authentication adapter to a module * Since Apigility 1.1 * * @param Request $request * @return ViewModel|ApiProblemResponse */ protected function mappingAuthentication(Request $request) { $module = $this->params('name', false); $version = $this->params()->fromQuery('version', false); switch ($request->getMethod()) { case $request::METHOD_GET: return $this->createAuthenticationMapResult($this->model->getAuthenticationMap($module, $version)); case $request::METHOD_PUT: return $this->updateAuthenticationMap($this->bodyParams(), $module, $version); case $request::METHOD_DELETE: return $this->removeAuthenticationMap($module, $version); default: $response = new ApiProblemResponse(new ApiProblem(405, 'Only the methods GET, PUT, DELETE are allowed for this URI')); $response->getHeaders()->addHeaderLine('Allow', 'GET, PUT, DELETE'); return $response; } }
/** * Merge headers set on the application response into the API Problem response. * * @param HttpResponse $applicationResponse * @param ApiProblemResponse $apiProblemResponse */ protected function mergeHeaders(HttpResponse $applicationResponse, ApiProblemResponse $apiProblemResponse) { $apiProblemHeaders = $apiProblemResponse->getHeaders(); foreach ($applicationResponse->getHeaders() as $header) { if ($apiProblemHeaders->has($header->getFieldName())) { continue; } $apiProblemHeaders->addHeader($header); } }