Реализация классов AccessToken

This commit is contained in:
Artem Vasilev 2024-03-06 15:16:14 +03:00
parent 7cd246e6c8
commit 1efe232439
2 changed files with 66 additions and 17 deletions

View File

@ -12,4 +12,15 @@ class AccessToken implements AccessTokenEntityInterface
use AccessTokenTrait; use AccessTokenTrait;
use EntityTrait; use EntityTrait;
use TokenEntityTrait; use TokenEntityTrait;
public function getData(): array
{
return [
'identifier' => $this->getIdentifier(),
'expiry' => $this->getExpiryDateTime(),
'user_id' => $this->getUserIdentifier(),
'scopes' => $this->getScopes(),
'client_identifier' => $this->getClient()->getIdentifier()
];
}
} }

View File

@ -2,39 +2,77 @@
namespace Webmasterskaya\Component\OauthServer\Site\Repository; namespace Webmasterskaya\Component\OauthServer\Site\Repository;
use Joomla\CMS\MVC\Factory\MVCFactoryAwareTrait;
use League\OAuth2\Server\Entities\AccessTokenEntityInterface; use League\OAuth2\Server\Entities\AccessTokenEntityInterface;
use League\OAuth2\Server\Entities\ClientEntityInterface; use League\OAuth2\Server\Entities\ClientEntityInterface;
use League\OAuth2\Server\Entities\Traits\AccessTokenTrait; use League\OAuth2\Server\Exception\UniqueTokenIdentifierConstraintViolationException;
use League\OAuth2\Server\Entities\Traits\EntityTrait;
use League\OAuth2\Server\Entities\Traits\TokenEntityTrait;
use League\OAuth2\Server\Repositories\AccessTokenRepositoryInterface; use League\OAuth2\Server\Repositories\AccessTokenRepositoryInterface;
use Webmasterskaya\Component\OauthServer\Administrator\Model\AccessTokenModel;
use Webmasterskaya\Component\OauthServer\Administrator\Model\ClientModel;
use Webmasterskaya\Component\OauthServer\Site\Entity\AccessToken;
class AccessTokenRepository implements AccessTokenRepositoryInterface class AccessTokenRepository implements AccessTokenRepositoryInterface
{ {
use AccessTokenTrait; private AccessTokenModel $accessTokenModel;
use EntityTrait; private ClientModel $clientModel;
use TokenEntityTrait;
use MVCFactoryAwareTrait; /**
* @param \Webmasterskaya\Component\OauthServer\Administrator\Model\AccessTokenModel $accessTokenModel
public function getNewToken(ClientEntityInterface $clientEntity, array $scopes, $userIdentifier = null) * @param \Webmasterskaya\Component\OauthServer\Administrator\Model\ClientModel $clientModel
*
* @since version
*/
public function __construct(AccessTokenModel $accessTokenModel, ClientModel $clientModel)
{ {
// TODO: Implement getNewToken() method. $this->accessTokenModel = $accessTokenModel;
$this->clientModel = $clientModel;
} }
public function persistNewAccessToken(AccessTokenEntityInterface $accessTokenEntity) public function getNewToken(ClientEntityInterface $clientEntity, array $scopes, $userIdentifier = null): AccessTokenEntityInterface
{ {
// TODO: Implement persistNewAccessToken() method. $accessToken = new AccessToken();
$accessToken->setClient($clientEntity);
$accessToken->setUserIdentifier($userIdentifier);
foreach ($scopes as $scope) {
$accessToken->addScope($scope);
} }
public function revokeAccessToken($tokenId) return $accessToken;
{
// TODO: Implement revokeAccessToken() method.
} }
public function isAccessTokenRevoked($tokenId) public function persistNewAccessToken(AccessTokenEntityInterface $accessTokenEntity): void
{ {
// TODO: Implement isAccessTokenRevoked() method. /** @var AccessToken $accessTokenEntity */
$accessToken = $this->accessTokenModel->getItemByIdentifier($accessTokenEntity->getIdentifier());
if ($accessToken->id > 0) {
throw UniqueTokenIdentifierConstraintViolationException::create();
}
/** @var AccessToken $accessTokenEntity */
$data = $accessTokenEntity->getData();
$client = $this->clientModel->getItemByIdentifier($accessTokenEntity->getClient()->getIdentifier());
$data['client_id'] = $client->id;
unset($data['client_identifier']);
$this->accessTokenModel->save($data);
}
public function revokeAccessToken($tokenId): void
{
$this->accessTokenModel->revoke($tokenId);
}
public function isAccessTokenRevoked($tokenId): bool
{
$accessToken = $this->accessTokenModel->getItemByIdentifier($tokenId);
if (!$accessToken->id) {
return true;
}
return !!$accessToken->revoked;
} }
} }