1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78:
<?php
namespace Baguette\Mastodon\Grant;
use Baguette\Mastodon;
use Baguette\Mastodon\Service\AuthFactory;
use Baguette\Mastodon\Service\Scope;
use GuzzleHttp\ClientInterface as Client;
use Respect\Validation\Validator as v;
class CodeGrant extends Grant
{
private $code;
private $redirect_uri;
public function __construct($code, $redirect_uri)
{
$this->code = $code;
$this->redirect_uri = $redirect_uri;
}
public static function getRedirectUrl(Mastodon\Client $client, Mastodon\Service\AuthFactory $auth, Scope $scope, $callback_uri, $state = null)
{
$query = [
'client_id' => $auth->client_id,
'response_type' => 'code',
'redirect_uri' => $callback_uri,
'scopes' => (string)$scope,
];
if ($state !== null) {
v::stringType()->length(1, null)->assert($state);
$query['state'] = $state;
}
return sprintf('%s://%s/oauth/authorize?%s', $client->getScheme(), $client->getHostname(), http_build_query($query));
}
public function auth(Client $http, AuthFactory $factory, Scope $scope = null)
{
return $http->request('POST', static::getPathToOAuthToken($factory->client), [
'form_params' => [
'grant_type' => 'authorization_code',
'code' => $this->code,
'redirect_uri' => $this->redirect_uri,
] + static::getFormParamsWithSecret($factory),
]);
}
}