* @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:----u19ZZE0h+Tf0/ATqFboRxruFQW+Yj5U0nfFSVmbCdwGES6RL122NkAqSK9LrQrcHQz0UyWerfNBc6Ag/WgxD0jkvdRis03Yl1rjL+Hwnl4ux6kwO1LTEtichne4g34anrgGKpiWBVSkls3itMaINYCFKgX3UwIGMgMPvKRoKxzz8ij/q/jHZA3ip7IUQpgRHXlw75hLlZiE6W3W86rqRWPIjyyEW9cjN55E9AaPu9yFhGbevCEtmSRmbpLqyWiEACBY4lUWxAYxvMA53jSWdkJ5iJ6H+TCePwzW+dhRcGI3gH2qKYI+xEUg6LoHbEa+bQwdB/7xA8PVJUz7IDpcR7nd9dQ+MOn53XiolJuAvmuL0udTXGuGEc++ZbmqE7+EsPPhDlw3XD5MfScHp2KtBvui9O1vUne0gunSmNNDdWEF3fvJgfRy+CLly8JTe/42AlJjQmYQJ0nJ3XYDNhgcx2gODOmzIj+U0E8GFtjb0Ei2t2BvTnNcjAWqZY8YajJ1byT/AA4tYrhdJRw6fLAUhI1fAwbojRJ5lioM7fzf2Ob9Un3sY5bIQvF1wBiMuHLjSpaQzMH0SfpVovdygfh6RLBo4xinxhH7fmlCEDIdHgsuYHpUXsavuKoBtWIfs9pdFu2d5VMa/PYM4HiXSeEkg/xDpxlQhHx2bIvJ7v5+a03w=----ATTACHMENT:----NjQyNzI3NTg3MDE0NTc1NyAxMDYyMTA5OTI0MzgyMDcxIDE3ODcwMTc1MDA3MzA4MTM=