From ddb5fd813c97f97822c7e5169607e434a1a84530 Mon Sep 17 00:00:00 2001 From: ErickSkrauch Date: Sun, 20 Mar 2016 17:39:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=BF=D0=BE=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D0=BA=D0=B8=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20=D0=BE=D0=B1=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=80=D0=B5=D0=B4=D0=B8=D1=80=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=B0=20=D0=BD=D0=B0=20=D1=81=D0=B0=D0=B9=D1=82?= =?UTF-8?q?=D1=8B=20=D1=81=20=D0=B5=D0=B3=D0=BE=20=D1=84=D0=B8=D0=BA=D1=81?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D1=8B=D0=BC=20=D0=B7?= =?UTF-8?q?=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oauth/Storage/Yii2/ClientStorage.php | 36 ++++++++++++------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/common/components/oauth/Storage/Yii2/ClientStorage.php b/common/components/oauth/Storage/Yii2/ClientStorage.php index 51aa1a3..5e8808d 100644 --- a/common/components/oauth/Storage/Yii2/ClientStorage.php +++ b/common/components/oauth/Storage/Yii2/ClientStorage.php @@ -7,45 +7,55 @@ use League\OAuth2\Server\Entity\ClientEntity; use League\OAuth2\Server\Entity\SessionEntity as OriginalSessionEntity; use League\OAuth2\Server\Storage\AbstractStorage; use League\OAuth2\Server\Storage\ClientInterface; +use yii\helpers\StringHelper; class ClientStorage extends AbstractStorage implements ClientInterface { + const REDIRECT_STATIC_PAGE = 'static_page'; + const REDIRECT_STATIC_PAGE_WITH_CODE = 'static_page_with_code'; + /** * @inheritdoc */ public function get($clientId, $clientSecret = null, $redirectUri = null, $grantType = null) { $query = OauthClient::find() - ->select(['id', 'name', 'secret']) + ->select(['id', 'name', 'secret', 'redirect_uri']) ->where([OauthClient::tableName() . '.id' => $clientId]); if ($clientSecret !== null) { $query->andWhere(['secret' => $clientSecret]); } - if ($redirectUri !== null) { - $query - ->addSelect(['redirect_uri']) - ->andWhere(['redirect_uri' => $redirectUri]); - } - $model = $query->asArray()->one(); if ($model === null) { return null; } + // TODO: нужно учитывать тип приложения + /* + * Для приложений типа "настольный" redirect_uri необязателем - он должен быть по умолчанию равен + * статичному редиректу на страницу сайта + * А для приложений типа "сайт" редирект должен быть всегда. + * Короче это нужно учесть + */ + if ($redirectUri !== null) { + if ($redirectUri === self::REDIRECT_STATIC_PAGE || $redirectUri === self::REDIRECT_STATIC_PAGE_WITH_CODE) { + // Тут, наверное, нужно проверить тип приложения + } else { + if (!StringHelper::startsWith($redirectUri, $model['redirect_uri'], false)) { + return null; + } + } + } + $entity = new ClientEntity($this->server); $entity->hydrate([ 'id' => $model['id'], 'name' => $model['name'], 'secret' => $model['secret'], + 'redirectUri' => $redirectUri, ]); - if (isset($model['redirect_uri'])) { - $entity->hydrate([ - 'redirectUri' => $model['redirect_uri'], - ]); - } - return $entity; }