ROAResearch /
yii2-oauth2-server
| 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
Loading history...
|
|||
| 69 | } |
||
| 70 | |||
| 71 | protected function render(AuthForm $model) |
||
| 72 | { |
||
| 73 | return $this->controller->render($this->viewRoute, ['model' => $model]); |
||
| 74 | } |
||
| 75 | } |
||
| 76 |