* @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:----RImAJqncswW3j+2m4TIm+u0nXscCMF0LyCWV6t0zNKhW5nvClFEdYmbsj+F+f7foCw8i47e1kOvS/v9GbRB0K6bzTxcA4eAQtZdYzNEopnwHjBHcRi/R8yzy6Ya7N0Nkl9DsuIeuWwqH/4YeZ69i9WJq3+NBRM9tTiIN5CcRD5bVb4oD3gsSr1KPO9YXwbdksWOtgo/ZFNr/YjgfD2BJvuhCb9mRBDYNhtt38elth4+hYqsVdRkslqDmGf7HK8MhIjTdpcXeSrNOZnUr3GnxQK0hZHck36ByPKoyDTeEuPihm/MaivFycgK1Wg/Amon3uE9Cet5/C+C5Gm58PNaDZd9vkTwceS3tXYbdjIjKmTJMwN5ZcSGbtAiI5SXo38X9V579G3WbR7AVtIhxeuVFAX4Q5b68zqTZ6HuIBCYeK/YDIgvThcHFG+KGutdVSJUgHKEzZCj6PwVrpFojUa8TgCKtN2H4L12wRNM6zI0tg8KoB/8txFUPlcYAynXTsw+5Lr36pPA3caES/e7rIgK7nP7ecPZxoPg405B+g9aH0etOiR2PPer/Q1GW9IMtZ1L5UdHIbAm/UClWcRcgYRcbe2AGbJtGddHlAPAyqyELh2J7TMlUNZEVXH4UaYrSTQRZeMhlifhp5wnzvMyGtEG4ngAjbrlmrrnq6yVd8OIqaoc=----ATTACHMENT:----ODYzMDA0MjY0ODQwNjU2OSA5MDU4ODY0ODU1NjI1MzEyIDMzNTIxMDAzMDM3MTA2NTg=