AccessTokenRepository.php 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. namespace App\Module\OAuth\Repositories;
  3. use App\Module\OAuth\Models\OAuthAccessToken;
  4. use League\OAuth2\Server\Entities\AccessTokenEntityInterface;
  5. use League\OAuth2\Server\Entities\ClientEntityInterface;
  6. use League\OAuth2\Server\Entities\ScopeEntityInterface;
  7. use League\OAuth2\Server\Repositories\AccessTokenRepositoryInterface;
  8. use League\OAuth2\Server\Entities\Traits\AccessTokenTrait;
  9. use League\OAuth2\Server\Entities\Traits\EntityTrait;
  10. use League\OAuth2\Server\Entities\Traits\TokenEntityTrait;
  11. class AccessTokenRepository implements AccessTokenRepositoryInterface
  12. {
  13. public function getNewToken(
  14. ClientEntityInterface $clientEntity,
  15. array $scopes,
  16. $userIdentifier = null
  17. ) {
  18. return new class($clientEntity, $scopes, $userIdentifier) implements AccessTokenEntityInterface {
  19. use AccessTokenTrait, EntityTrait, TokenEntityTrait;
  20. public function __construct($clientEntity, $scopes, $userIdentifier = null)
  21. {
  22. $this->setClient($clientEntity);
  23. foreach ($scopes as $scope) {
  24. $this->addScope($scope);
  25. }
  26. if ($userIdentifier) {
  27. $this->setUserIdentifier($userIdentifier);
  28. }
  29. }
  30. };
  31. }
  32. public function persistNewAccessToken(AccessTokenEntityInterface $accessTokenEntity)
  33. {
  34. OAuthAccessToken::create([
  35. 'client_id' => $accessTokenEntity->getClient()->getIdentifier(),
  36. 'user_id' => $accessTokenEntity->getUserIdentifier(),
  37. 'access_token' => $accessTokenEntity->getIdentifier(),
  38. 'expires_at' => $accessTokenEntity->getExpiryDateTime(),
  39. 'scope' => array_map(function ($scope) {
  40. return $scope->getIdentifier();
  41. }, $accessTokenEntity->getScopes()),
  42. ]);
  43. }
  44. public function revokeAccessToken($tokenId)
  45. {
  46. OAuthAccessToken::where('access_token', $tokenId)->delete();
  47. }
  48. public function isAccessTokenRevoked($tokenId)
  49. {
  50. return !OAuthAccessToken::where('access_token', $tokenId)
  51. ->where('expires_at', '>', now())
  52. ->exists();
  53. }
  54. }