Example #1
0
 /**
  * Takes an OAuth2 response and converts it to JSON output via Tonis\Http\Response.
  *
  * @param Response          $oauthResponse
  * @param ResponseInterface $psrResponse
  * @return ResponseInterface
  */
 public static function convertResponseToPsr7(Response $oauthResponse, ResponseInterface $psrResponse)
 {
     $psrResponse = $psrResponse->withStatus($oauthResponse->getStatusCode());
     foreach ($oauthResponse->getHttpHeaders() as $header => $value) {
         $psrResponse = $psrResponse->withHeader($header, $value);
     }
     if (!empty($oauthResponse->getParameters())) {
         $psrResponse = $psrResponse->withHeader('Content-Type', 'application/json');
         $psrResponse->getBody()->write(json_encode($oauthResponse->getParameters()));
     }
     return $psrResponse;
 }
 /**
  * Copies values from the given Oauth2\Response to a PSR-7 Http Response.
  *
  * @param OAuth2\Response $oauth2Response The OAuth2 server response.
  *
  * @return \Psr\Http\Message\ResponseInterface
  */
 public static final function fromOauth2(OAuth2\Response $oauth2Response)
 {
     $headers = [];
     foreach ($oauth2Response->getHttpHeaders() as $key => $value) {
         $headers[$key] = explode(', ', $value);
     }
     $stream = fopen('php://temp', 'r+');
     if (!empty($oauth2Response->getParameters())) {
         fwrite($stream, $oauth2Response->getResponseBody());
         rewind($stream);
     }
     return new Response(new Stream($stream), $oauth2Response->getStatusCode(), $headers);
 }
 public function testGrantCodeAccessTokenOnNewCode()
 {
     $request = TestRequest::createPost(array('grant_type' => 'device_code', 'client_id' => 'test_client_id'));
     $this->server->handleDeviceRequest($request, $response = new Response());
     $this->assertNotNull($response->getParameter('code'));
     $deviceCodeResponse = $response;
     // Get access token when user_id is null
     $request = TestRequest::createPost(array('grant_type' => 'device_token', 'client_id' => 'test_client_id', 'code' => $deviceCodeResponse->getParameter('code')));
     $this->server->handleDeviceRequest($request, $response = new Response());
     $this->assertEquals($response->getStatusCode(), 400);
     $this->assertArrayHasKey('error', $response->getParameters());
     $this->assertEquals('authorization_pending', $response->getParameter('error'));
     // Update user_id and verify response
     $deviceStorage = $this->server->getStorage('device_code');
     $code = $deviceStorage->getDeviceCode($deviceCodeResponse->getParameter('code'), 'test_client_id');
     $deviceStorage->setDeviceCode($code['device_code'], $code['user_code'], $code['client_id'], 1, $code['expires'], $code['scope']);
     $request = TestRequest::createPost(array('grant_type' => 'device_token', 'client_id' => 'test_client_id', 'code' => $deviceCodeResponse->getParameter('code')));
     $this->server->handleDeviceRequest($request, $response = new Response());
     $this->assertEquals($response->getStatusCode(), 200);
     $this->assertArrayHasKey('access_token', $response->getParameters());
     //ensure device code was deleted
     $code = $deviceStorage->getDeviceCode($deviceCodeResponse->getParameter('code'), 'test_client_id');
     $this->assertFalse($code);
 }
Example #4
0
 /**
  * Map OAuth2Response to ApiProblemResponse
  *
  * @param OAuth2Response $response
  * @return ApiProblemResponse
  */
 protected function getApiProblemResponse(OAuth2Response $response)
 {
     $parameters = $response->getParameters();
     $errorUri = isset($parameters['error_uri']) ? $parameters['error_uri'] : null;
     $error = isset($parameters['error']) ? $parameters['error'] : null;
     $errorDescription = isset($parameters['error_description']) ? $parameters['error_description'] : null;
     return new ApiProblemResponse(new ApiProblem($response->getStatusCode(), $errorDescription, $errorUri, $error));
 }
 protected function handleResponse(OAuth2Response $response)
 {
     $redirect = $response->getHttpHeader('Location');
     if (!empty($redirect)) {
         return $this->redirect()->toUrl($redirect);
     }
     $parameters = $response->getParameters();
     $errorUri = isset($parameters['error_uri']) ? $parameters['error_uri'] : null;
     $view = new ViewModel(array('statusCode' => $response->getStatusCode(), 'statusText' => $response->getStatusText(), 'errorDescription' => $parameters['error_description'], 'error' => $parameters['error'], 'errorUri' => $errorUri));
     $view->setTemplate('kap-security/oauth-authorize-error');
     return $view;
 }
Example #6
0
 private function buildResponse($format, HttpResponse $httpResponse, OAuthResponse $oauthResponse)
 {
     $httpResponse->setVersion($oauthResponse->version);
     $httpResponse->setStatusCode($oauthResponse->getStatusCode());
     $headers = $httpResponse->getHeaders();
     foreach ($oauthResponse->getHttpHeaders() as $name => $value) {
         $headers->addHeaderLine(sprintf('%s: %s', $name, $value));
     }
     switch ($format) {
         case 'json':
             $headers->addHeaderLine('Content-Type: application/json');
             $httpResponse->setContent(json_encode($oauthResponse->getParameters()));
             break;
         case 'xml':
             $headers->addHeaderLine('Content-Type: text/xml');
             $xml = new SimpleXMLElement('<response/>');
             foreach ($oauthResponse->getParameters() as $key => $param) {
                 $xml->addChild($key, $param);
             }
             $httpResponse->setContent($xml->asXML());
             break;
         default:
             throw new RuntimeException('Invalid format provided: ' . $format);
     }
     return $httpResponse;
 }