Skip to content

Commit ca63a86

Browse files
authored
Add access token revoked event (#1776)
1 parent ead5067 commit ca63a86

File tree

3 files changed

+49
-1
lines changed

3 files changed

+49
-1
lines changed

src/Bridge/AccessTokenRepository.php

+4-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use DateTime;
66
use Illuminate\Contracts\Events\Dispatcher;
77
use Laravel\Passport\Events\AccessTokenCreated;
8+
use Laravel\Passport\Events\AccessTokenRevoked;
89
use Laravel\Passport\Passport;
910
use Laravel\Passport\TokenRepository;
1011
use League\OAuth2\Server\Entities\AccessTokenEntityInterface;
@@ -78,7 +79,9 @@ public function persistNewAccessToken(AccessTokenEntityInterface $accessTokenEnt
7879
*/
7980
public function revokeAccessToken($tokenId)
8081
{
81-
$this->tokenRepository->revokeAccessToken($tokenId);
82+
if ($this->tokenRepository->revokeAccessToken($tokenId)) {
83+
$this->events->dispatch(new AccessTokenRevoked($tokenId));
84+
}
8285
}
8386

8487
/**

src/Events/AccessTokenRevoked.php

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
namespace Laravel\Passport\Events;
4+
5+
class AccessTokenRevoked
6+
{
7+
/**
8+
* Create a new event instance.
9+
*
10+
* @param string $tokenId
11+
* @return void
12+
*/
13+
public function __construct(
14+
public string $tokenId,
15+
) {
16+
}
17+
}

tests/Unit/BridgeAccessTokenRepositoryTest.php

+28
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,34 @@ public function test_access_tokens_can_be_persisted()
4949
$repository->persistNewAccessToken($accessToken);
5050
}
5151

52+
public function test_access_tokens_can_be_revoked()
53+
{
54+
$tokenRepository = m::mock(TokenRepository::class);
55+
$events = m::mock(Dispatcher::class);
56+
57+
$tokenRepository->shouldReceive('revokeAccessToken')->with('token-id')->once()->andReturn(1);
58+
$events->shouldReceive('dispatch')->once();
59+
60+
$repository = new AccessTokenRepository($tokenRepository, $events);
61+
$repository->revokeAccessToken('token-id');
62+
63+
$this->expectNotToPerformAssertions();
64+
}
65+
66+
public function test_access_token_revoke_event_is_not_dispatched_when_nothing_happened()
67+
{
68+
$tokenRepository = m::mock(TokenRepository::class);
69+
$events = m::mock(Dispatcher::class);
70+
71+
$tokenRepository->shouldReceive('revokeAccessToken')->with('token-id')->once()->andReturn(0);
72+
$events->shouldNotReceive('dispatch');
73+
74+
$repository = new AccessTokenRepository($tokenRepository, $events);
75+
$repository->revokeAccessToken('token-id');
76+
77+
$this->expectNotToPerformAssertions();
78+
}
79+
5280
public function test_can_get_new_access_token()
5381
{
5482
$tokenRepository = m::mock(TokenRepository::class);

0 commit comments

Comments
 (0)