client = $client; $this->hydraAdminBaseUrl = $hydraAdminBaseUrl; } public function fetchLoginRequestInfo(string $loginChallenge): ResponseInterface { $response = $this->client->request( 'GET', $this->hydraAdminBaseUrl.'/oauth2/auth/requests/login', [ 'query' => [ 'login_challenge' => $loginChallenge, ], ] ); switch ($response->getStatusCode()) { case 404: throw new InvalidChallengeException(); } return $response; } public function fetchLogoutRequestInfo(string $logoutChallenge): ResponseInterface { $response = $this->client->request( 'GET', $this->hydraAdminBaseUrl.'/oauth2/auth/requests/logout', [ 'query' => [ 'logout_challenge' => $logoutChallenge, ], ] ); switch ($response->getStatusCode()) { case 404: throw new InvalidChallengeException(); } return $response; } public function fetchConsentRequestInfo(string $consentChallenge): ResponseInterface { $attempt = 0; while ($attempt < self::MAX_RETRY) { $response = $this->client->request( 'GET', $this->hydraAdminBaseUrl.'/oauth2/auth/requests/consent', [ 'query' => [ 'consent_challenge' => $consentChallenge, ], ] ); $status = $response->getStatusCode(); if (503 === $status) { ++$attempt; usleep(1000 * self::SLEEP_TIME[$attempt] + rand(1, 5) * 1000); continue; } switch ($status) { case 404: throw new InvalidChallengeException(); } break; } if (self::MAX_RETRY === $attempt) { throw new Exception(sprintf('Fetch consent a rencontré une erreur %s après %s tentatives', $response->getStatusCode(), self::MAX_RETRY)); } return $response; } public function acceptLoginRequest(string $loginChallenge, array $payload): ResponseInterface { $response = $this->client->request( 'PUT', $this->hydraAdminBaseUrl.'/oauth2/auth/requests/login/accept', [ 'query' => [ 'login_challenge' => $loginChallenge, ], 'headers' => [ 'Content-Type' => 'application/json', ], 'body' => json_encode($payload), ] ); return $response; } public function acceptConsentRequest(string $consentChallenge, array $payload): ResponseInterface { $response = $this->client->request( 'PUT', $this->hydraAdminBaseUrl.'/oauth2/auth/requests/consent/accept', [ 'query' => [ 'consent_challenge' => $consentChallenge, ], 'headers' => [ 'Content-Type' => 'application/json', ], 'body' => json_encode($payload), ] ); return $response; } public function acceptLogoutRequest(string $logoutChallenge): ResponseInterface { $response = $this->client->request( 'PUT', $this->hydraAdminBaseUrl.'/oauth2/auth/requests/logout/accept', [ 'query' => [ 'logout_challenge' => $logoutChallenge, ], 'headers' => [ 'Content-Type' => 'application/json', ], ] ); return $response; } }