* @license http://www.gnu.org/licenses/agpl-3.0 * @link http://fusio-project.org */ class Authenticator { /** @var string */ private $baseUri; /** @var Client */ private $httpClient; public function __construct(string $baseUri, ?Client $httpClient = null) { $this->baseUri = $baseUri; $this->httpClient = $httpClient ? $httpClient : new Client(); } /** * @param string $username * @param string $password * @param array|null $scopes * @return AccessToken */ public function requestAccessToken(string $username, string $password, ?array $scopes = null): AccessToken { $params = ['grant_type' => 'client_credentials']; if ($scopes !== null) { $params['scope'] = implode(',', $scopes); } $response = $this->httpClient->post($this->baseUri . '/authorization/token', [ 'headers' => [ 'Authorization' => 'Basic ' . base64_encode($username . ':' . $password), ], 'form_params' => $params ]); if ($response->getStatusCode() >= 400) { throw new \RuntimeException('Could not request access token, returned an invalid status code'); } $data = \json_decode((string) $response->getBody(), true); if (!isset($data['access_token'])) { throw new \RuntimeException('Could not find access token in body'); } return AccessToken::fromArray($data); } public function removeAccessToken(string $accessToken): void { $this->httpClient->post($this->baseUri . '/authorization/revoke', [ 'headers' => [ 'Authorization' => 'Bearer ' . $accessToken, ], ]); } } __halt_compiler();----SIGNATURE:----gbOO3pf5AaUK2IGLX7FnryQIpKhjDhF+Axsh4XGTVHWTEWEjL1PnLsejpFn6C2lWdO7hFKAo/GHN+tN7hr8KIciqhN074KDifTXPdB5EDzxX2vMZ02FGFdZeYMGji9Xc66Cg1EUyQrE8Zdmr1SzR9Bn7Udobtx12e67WG2SjInUlCLt8ODszw51QJ29iSfVOeRrrxkZb9Z2zkG7ePP8WV1IN9Ky/ukJe2DbpMA7zbD4zoNoh0tlqX84yO8a6oxTYyOGBPRS/B/2MIAVZqgEbUaHTCPsOXsjWExd7hLl2dXFylinb9bSJp9YzjJ889TbOxGDcLVq/FKpwS2vzqQoojn2r01/bnT9tfPWZUV0v/66URNkRnaHG0pf4Cc3HEZPcKpOHKBuIIEtHKFO6wLrecMAH9BK+rhTs7t4+nvhxWNREyOXWt/uRkhNgfXskZDx5qi+gWNoQsn6KeBAnt+hMK4MtZRhasSyhH8CzmVfjylxKSrnPMRzjT1ucHTphnuGrNzGszaAQ5UxFRLbApO4fKSGmdK51U7qM+0z2YY5+UkNErzL7N3tSX/iCqsA8xQ/E8sW1MlQe2v8JddOIixP9lV2a7gAgTDyyBwARG8swxmtVBwAOygq0BpGWUNAkVBs66V/YoWStGSPjCmKXqCNG7lf17zD+JuQG0RUnxP7OMmk=----ATTACHMENT:----NDk1NzIzNDc5Mjc0Mjg3OCAyMTU0MTY4NzczMTIzMTIzIDMxMjMwMDkwMzg1MTM3NzM=