* @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:----FsPSUJmFRbpk5U+NhN3u6loFsso6fm+2mfenZqO/ceZ86Cxd+hGI7GYvgTdweMEX0wYpJNyLUJduuW5uTwewOBlB4ZlSKxw2TtBsaXKxfFmVUwfWG7IVxFsRhraJyA0ICeBDMW9K84PveUNTX9FgoYo4kZ0wHnvYB1Qd0xNWvoUq9WQSe3Sm6cVu4kf2/ZDJN6+byuiQ4RBa139ULS8QwqFmXoPh3k42enF3BfG65evukE8+rx4fjbFqgE7f9sCIeXws7woaHa1wzhaxEzHMkS1dB+5HgTZ59uls/7HHrQ2gwAAYfIkv8jz+YLJUMGsiQ0elhXf+pHFsMoymMGNNJZkQB7DU/TOiG1Pku2Pw1y6cq4nJPrisqunpIchNdEmUszdYJ+SN/qHGqrdQs/oR/GqfwGpXwgg9jMXmjYVssR8qMkCKnabmWuHUvLFxdwmghUXwvCp3s8SLbh2uuDUYJu+pZ8rkEZWZC3Xt5EuK1m0VOmD7ZgJZ5be7h4TcJmVE3nX6bZkpqL3IRUsncJn2hniubCBHBNfFfCZjmHafZDvrRmCDoi83X98xU2FV9f1r8+KEztf3R81z7mpnZqsbx5oEgeJTb1km4ISf1t+FXyxWMViVuOd8F0Rdl2Pt6L4lP7hD6/lryvYFCvY2a+iB/99ATV5IdyfeMFR2L3EMJao=----ATTACHMENT:----MTc3OTk3MzkzMTc5MzI3NiA0Nzg5ODE0MDQyNjcxMzE5IDc2MzA5NjkwNjI4Mzc5MzQ=