1 | <?php |
||||
2 | |||||
3 | namespace roaresearch\yii2\oauth2server\models; |
||||
4 | |||||
5 | use Yii; |
||||
6 | use yii\db\IntegrityException; |
||||
7 | |||||
8 | class AuthForm extends \yii\base\Model |
||||
9 | { |
||||
10 | public ?bool $authorized = null; |
||||
11 | public ?string $client_id = null; |
||||
12 | public ?string $scopes = null; |
||||
13 | public ?string $response_type = null; |
||||
14 | public ?string $state = null; |
||||
15 | public ?string $redirect_uri = null; |
||||
16 | |||||
17 | protected ?OauthClients $clientModel = null; |
||||
18 | protected array $scopesList = []; |
||||
19 | |||||
20 | public function rules() |
||||
21 | { |
||||
22 | $validatedClient = fn () => !$this->hasErrors('client_id'); |
||||
23 | |||||
24 | return [ |
||||
25 | [ |
||||
26 | [ |
||||
27 | 'authorized', |
||||
28 | 'client_id', |
||||
29 | 'response_type', |
||||
30 | 'state', |
||||
31 | 'redirect_uri', |
||||
32 | ], |
||||
33 | 'required', |
||||
34 | ], |
||||
35 | [['authorized'], 'boolean'], |
||||
36 | [['redirect_uri'], 'url'], |
||||
37 | [ |
||||
38 | [ |
||||
39 | 'client_id', |
||||
40 | 'scopes', |
||||
41 | 'response_type', |
||||
42 | 'state', |
||||
43 | 'redirect_uri', |
||||
44 | ], |
||||
45 | 'string', |
||||
46 | ], |
||||
47 | [ |
||||
48 | ['client_id'], |
||||
49 | 'exist', |
||||
50 | 'targetClass' => OauthClients::class, |
||||
51 | ], |
||||
52 | [ |
||||
53 | ['scopes'], |
||||
54 | function ($attribute) { |
||||
55 | try { |
||||
56 | $this->getScopesList(); |
||||
57 | } catch (IntegrityException $e) { |
||||
58 | $this->addError($atribute, $e->getMessage()); |
||||
0 ignored issues
–
show
Comprehensibility
Best Practice
introduced
by
![]() |
|||||
59 | } |
||||
60 | }, |
||||
61 | 'when' => $validatedClient, |
||||
62 | ], |
||||
63 | [ |
||||
64 | ['redirect_uri'], |
||||
65 | function ($attribute) { |
||||
66 | if ( |
||||
67 | !$this->getClientModel() |
||||
68 | ->validateUri($this->redirect_uri) |
||||
0 ignored issues
–
show
It seems like
$this->redirect_uri can also be of type null ; however, parameter $uri of roaresearch\yii2\oauth2s...hClients::validateUri() does only seem to accept string , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||
69 | ) { |
||||
70 | $this->addError( |
||||
71 | $attribute, |
||||
72 | "Redirection URI not recognized by client." |
||||
73 | ); |
||||
74 | } |
||||
75 | }, |
||||
76 | 'when' => $validatedClient, |
||||
77 | ], |
||||
78 | ]; |
||||
79 | } |
||||
80 | |||||
81 | public function getClientModel(): ?OauthClients |
||||
82 | { |
||||
83 | if (empty($this->client_id) || isset($this->clientModel)) { |
||||
84 | return $this->clientModel; |
||||
85 | } |
||||
86 | |||||
87 | $this->clientModel = OauthClients::findOne($this->client_id) |
||||
88 | ?: throw new IntegrityException( |
||||
89 | "Unknown client '{$this->client_id}'" |
||||
90 | ); |
||||
91 | |||||
92 | return $this->clientModel; |
||||
93 | } |
||||
94 | |||||
95 | public function getScopesList(): array |
||||
96 | { |
||||
97 | if (empty($this->scopes) || !empty($this->scopesList)) { |
||||
98 | return $this->scopesList; |
||||
99 | } |
||||
100 | |||||
101 | $clientModel = $this->getClientModel(); |
||||
102 | foreach (explode(' ', $this->scopes) as $scope) { |
||||
103 | $this->scopesList[$scope] = $clientModel->assureScope($scope); |
||||
104 | } |
||||
105 | |||||
106 | return $this->scopesList; |
||||
107 | } |
||||
108 | } |
||||
109 |