diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d9cab9c..04f976d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -49,6 +49,7 @@ test:frontend: - cd frontend - npm i --silent > /dev/null - npm run lint --silent + # - npm run flow --silent # disabled due to missing libelf.so.1 in docker container - npm run test --silent build:production: diff --git a/api/components/OAuth2/Grants/AuthCodeGrant.php b/api/components/OAuth2/Grants/AuthCodeGrant.php index cfadbe0..134421a 100644 --- a/api/components/OAuth2/Grants/AuthCodeGrant.php +++ b/api/components/OAuth2/Grants/AuthCodeGrant.php @@ -2,6 +2,7 @@ namespace api\components\OAuth2\Grants; use api\components\OAuth2\Entities; +use League\OAuth2\Server\Entity\ClientEntity; class AuthCodeGrant extends \League\OAuth2\Server\Grant\AuthCodeGrant { @@ -17,4 +18,19 @@ class AuthCodeGrant extends \League\OAuth2\Server\Grant\AuthCodeGrant { return new Entities\SessionEntity($this->server); } + /** + * По стандарту OAuth2 scopes должны разделяться пробелом, а не запятой. Косяк. + * Так что оборачиваем функцию разбора скоупов, заменяя пробелы на запятые. + * + * @param string $scopeParam + * @param ClientEntity $client + * @param string $redirectUri + * + * @return \League\OAuth2\Server\Entity\ScopeEntity[] + */ + public function validateScopes($scopeParam = '', ClientEntity $client, $redirectUri = null) { + $scopes = str_replace(' ', $this->server->getScopeDelimiter(), $scopeParam); + return parent::validateScopes($scopes, $client, $redirectUri); + } + } diff --git a/api/components/OAuth2/Grants/ClientCredentialsGrant.php b/api/components/OAuth2/Grants/ClientCredentialsGrant.php index 4e7b467..ef80342 100644 --- a/api/components/OAuth2/Grants/ClientCredentialsGrant.php +++ b/api/components/OAuth2/Grants/ClientCredentialsGrant.php @@ -2,6 +2,7 @@ namespace api\components\OAuth2\Grants; use api\components\OAuth2\Entities; +use League\OAuth2\Server\Entity\ClientEntity; class ClientCredentialsGrant extends \League\OAuth2\Server\Grant\ClientCredentialsGrant { @@ -17,4 +18,19 @@ class ClientCredentialsGrant extends \League\OAuth2\Server\Grant\ClientCredentia return new Entities\SessionEntity($this->server); } + /** + * По стандарту OAuth2 scopes должны разделяться пробелом, а не запятой. Косяк. + * Так что оборачиваем функцию разбора скоупов, заменяя пробелы на запятые. + * + * @param string $scopeParam + * @param ClientEntity $client + * @param string $redirectUri + * + * @return \League\OAuth2\Server\Entity\ScopeEntity[] + */ + public function validateScopes($scopeParam = '', ClientEntity $client, $redirectUri = null) { + $scopes = str_replace(' ', $this->server->getScopeDelimiter(), $scopeParam); + return parent::validateScopes($scopes, $client, $redirectUri); + } + } diff --git a/api/components/OAuth2/Grants/RefreshTokenGrant.php b/api/components/OAuth2/Grants/RefreshTokenGrant.php index d98b3d6..d6e0161 100644 --- a/api/components/OAuth2/Grants/RefreshTokenGrant.php +++ b/api/components/OAuth2/Grants/RefreshTokenGrant.php @@ -4,6 +4,7 @@ namespace api\components\OAuth2\Grants; use api\components\OAuth2\Entities; use ErrorException; use League\OAuth2\Server\Entity\ClientEntity as OriginalClientEntity; +use League\OAuth2\Server\Entity\ClientEntity; use League\OAuth2\Server\Entity\RefreshTokenEntity as OriginalRefreshTokenEntity; use League\OAuth2\Server\Event; use League\OAuth2\Server\Exception; @@ -25,6 +26,21 @@ class RefreshTokenGrant extends \League\OAuth2\Server\Grant\RefreshTokenGrant { return new Entities\SessionEntity($this->server); } + /** + * По стандарту OAuth2 scopes должны разделяться пробелом, а не запятой. Косяк. + * Так что оборачиваем функцию разбора скоупов, заменяя пробелы на запятые. + * + * @param string $scopeParam + * @param ClientEntity $client + * @param string $redirectUri + * + * @return \League\OAuth2\Server\Entity\ScopeEntity[] + */ + public function validateScopes($scopeParam = '', ClientEntity $client, $redirectUri = null) { + $scopes = str_replace(' ', $this->server->getScopeDelimiter(), $scopeParam); + return parent::validateScopes($scopes, $client, $redirectUri); + } + /** * Метод таки пришлось переписать по той причине, что нынче мы храним access_token в redis с expire значением, * так что он может банально несуществовать на тот момент, когда к нему через refresh_token попытаются обратиться. diff --git a/common/config/config.php b/common/config/config.php index 236d9a9..7a7bd0d 100644 --- a/common/config/config.php +++ b/common/config/config.php @@ -1,6 +1,6 @@ '1.1.14', + 'version' => '1.1.15', 'vendorPath' => dirname(dirname(__DIR__)) . '/vendor', 'components' => [ 'cache' => [