1 | <?php |
||
2 | |||
3 | namespace roaresearch\yii2\oauth2server\actions; |
||
4 | |||
5 | use roaresearch\yii2\oauth2server\{ |
||
6 | models\AuthForm, |
||
7 | Module as OAuth2Module |
||
8 | }; |
||
9 | use Yii; |
||
10 | |||
11 | class AuthorizeAction extends \yii\base\Action |
||
12 | { |
||
13 | public string|array $loginUri = ['/site/login']; |
||
14 | |||
15 | public string $modelClass = AuthForm::class; |
||
16 | |||
17 | public string $viewRoute = '@roaresearch/yii2/oauth2server/views/authorize'; |
||
18 | |||
19 | public ?string $modelName = ''; |
||
20 | |||
21 | public string|OAuth2Module $oauth2Module = 'oauth2'; |
||
22 | |||
23 | public function run() |
||
24 | { |
||
25 | return Yii::$app->user->getIsGuest() |
||
26 | ? $this->loginRedirect() |
||
27 | : $this->handle(); |
||
28 | } |
||
29 | |||
30 | protected function handle() |
||
31 | { |
||
32 | $model = $this->createModel(); |
||
33 | $req = Yii::$app->request; |
||
34 | $model->load($req->get(), ''); |
||
35 | |||
36 | if (is_string($this->oauth2Module)) { |
||
37 | $this->oauth2Module = Yii::$app->getModule($this->oauth2Module); |
||
38 | $this->oauth2Module->initOauth2Server(); |
||
39 | } |
||
40 | |||
41 | if ( |
||
42 | $model->load($req->post(), $this->modelName) |
||
43 | && $model->validate() |
||
44 | ) { |
||
45 | $resp = $this->oauth2Module->handleAuthorizeRequest( |
||
46 | $model->authorized, |
||
47 | Yii::$app->user->getId() |
||
48 | ); |
||
49 | |||
50 | return $resp->isRedirection() |
||
51 | ? $this->controller->redirect( |
||
52 | $resp->getHttpHeader('Location'), |
||
53 | $resp->getStatusCode(), |
||
54 | ) |
||
55 | : $resp->send(); |
||
56 | } |
||
57 | |||
58 | return $this->render($model); |
||
59 | } |
||
60 | |||
61 | protected function loginRedirect() |
||
62 | { |
||
63 | return $this->controller->redirect($this->loginUri); |
||
64 | } |
||
65 | |||
66 | protected function createModel(): AuthForm |
||
67 | { |
||
68 | return new ($this->modelClass)(); |
||
0 ignored issues
–
show
Bug
introduced
by
![]() |
|||
69 | } |
||
70 | |||
71 | protected function render(AuthForm $model) |
||
72 | { |
||
73 | return $this->controller->render($this->viewRoute, ['model' => $model]); |
||
74 | } |
||
75 | } |
||
76 |