140 lines
3.7 KiB
PHP
140 lines
3.7 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace App\Hydra;
|
||
|
|
||
|
use App\Hydra\Exception\InvalidChallengeException;
|
||
|
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||
|
use Symfony\Contracts\HttpClient\ResponseInterface;
|
||
|
|
||
|
class Client
|
||
|
{
|
||
|
protected $client;
|
||
|
|
||
|
protected $hydraAdminBaseUrl;
|
||
|
|
||
|
public function __construct(HttpClientInterface $client, string $hydraAdminBaseUrl)
|
||
|
{
|
||
|
$this->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
|
||
|
{
|
||
|
$response = $this->client->request(
|
||
|
'GET',
|
||
|
$this->hydraAdminBaseUrl . '/oauth2/auth/requests/consent',
|
||
|
[
|
||
|
'query' => [
|
||
|
'consent_challenge' => $consentChallenge,
|
||
|
]
|
||
|
]
|
||
|
);
|
||
|
|
||
|
switch ($response->getStatusCode()) {
|
||
|
case 404:
|
||
|
throw new InvalidChallengeException();
|
||
|
}
|
||
|
|
||
|
|
||
|
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;
|
||
|
}
|
||
|
}
|