Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
10 / 10
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
HasRefreshableToken
100.00% covered (success)
100.00%
10 / 10
100.00% covered (success)
100.00%
2 / 2
5
100.00% covered (success)
100.00%
1 / 1
 createTokenWithRefresh
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 revokeBothToken
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
1 / 1
4
1<?php
2
3namespace Albet\SanctumRefresh\Traits;
4
5use Albet\SanctumRefresh\Exceptions\MustHaveTraitException;
6use Albet\SanctumRefresh\Repositories\RefreshTokenRepository;
7use Albet\SanctumRefresh\Services\Factories\Token;
8use Albet\SanctumRefresh\Services\Factories\TokenConfig;
9use Albet\SanctumRefresh\Services\TokenIssuer;
10
11trait HasRefreshableToken
12{
13    /**
14     * @throws MustHaveTraitException
15     */
16    public function createTokenWithRefresh(string $name, TokenConfig $tokenConfig = new TokenConfig()): Token
17    {
18        return TokenIssuer::issue($this, $name, $tokenConfig);
19    }
20
21    public function revokeBothToken(): bool
22    {
23        $accTokens = $this->load('tokens')->tokens->all();
24
25        if ($accTokens) {
26            /** @var RefreshTokenRepository $refreshTokenRepository */
27            $refreshTokenRepository = app(RefreshTokenRepository::class);
28            foreach ($accTokens as $accToken) {
29                // @phpstan-ignore-next-line
30                if ($accToken->id) {
31                    $refreshTokenRepository->revokeRefreshTokenFromTokenId($accToken->id);
32                    $accToken->delete();
33
34                    return true;
35                }
36            }
37        }
38
39        return false;
40    }
41}