Merge pull request #856 from lookyman/phpstan-level-7

PHPStan level 7
This commit is contained in:
Andrew Millington 2018-04-21 22:01:25 +01:00 committed by GitHub
commit 2375b8c7f3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 68 additions and 10 deletions

View File

@ -21,7 +21,7 @@ install:
script: script:
- vendor/bin/phpunit --coverage-clover=coverage.clover - vendor/bin/phpunit --coverage-clover=coverage.clover
- vendor/bin/phpstan analyse -l 6 -c phpstan.neon src tests - vendor/bin/phpstan analyse -l 7 -c phpstan.neon src tests
after_script: after_script:
- wget https://scrutinizer-ci.com/ocular.phar - wget https://scrutinizer-ci.com/ocular.phar

View File

@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
## [Unreleased] ## [Unreleased]
### Changed
- Upgrade PHPStan checks to level 7 (PR #856)
### Added ### Added
- Added event emitters for issued access and refresh tokens (PR #860) - Added event emitters for issued access and refresh tokens (PR #860)
- Can now use Defuse\Crypto\Key for encryption/decryption of keys which is faster than the Cryto class (PR #812) - Can now use Defuse\Crypto\Key for encryption/decryption of keys which is faster than the Cryto class (PR #812)

View File

@ -54,7 +54,7 @@ The library uses [PHPUnit](https://phpunit.de/) for unit tests and [PHPStan](htt
``` ```
vendor/bin/phpunit vendor/bin/phpunit
vendor/bin/phpstan analyse -l 6 -c phpstan.neon src tests vendor/bin/phpstan analyse -l 7 -c phpstan.neon src tests
``` ```
## Continous Integration ## Continous Integration

View File

@ -3,3 +3,8 @@ includes:
- vendor/phpstan/phpstan-phpunit/rules.neon - vendor/phpstan/phpstan-phpunit/rules.neon
- vendor/phpstan/phpstan-phpunit/strictRules.neon - vendor/phpstan/phpstan-phpunit/strictRules.neon
- vendor/phpstan/phpstan-strict-rules/rules.neon - vendor/phpstan/phpstan-strict-rules/rules.neon
services:
-
class: LeagueTests\PHPStan\AbstractGrantExtension
tags:
- phpstan.broker.dynamicMethodReturnTypeExtension

View File

@ -12,7 +12,7 @@ namespace League\OAuth2\Server\Entities;
interface AuthCodeEntityInterface extends TokenInterface interface AuthCodeEntityInterface extends TokenInterface
{ {
/** /**
* @return string * @return string|null
*/ */
public function getRedirectUri(); public function getRedirectUri();

View File

@ -17,7 +17,7 @@ trait AuthCodeTrait
protected $redirectUri; protected $redirectUri;
/** /**
* @return string * @return string|null
*/ */
public function getRedirectUri() public function getRedirectUri()
{ {

View File

@ -386,7 +386,7 @@ abstract class AbstractGrant implements GrantTypeInterface
* @param \DateInterval $authCodeTTL * @param \DateInterval $authCodeTTL
* @param ClientEntityInterface $client * @param ClientEntityInterface $client
* @param string $userIdentifier * @param string $userIdentifier
* @param string $redirectUri * @param string|null $redirectUri
* @param ScopeEntityInterface[] $scopes * @param ScopeEntityInterface[] $scopes
* *
* @throws OAuthServerException * @throws OAuthServerException
@ -407,7 +407,10 @@ abstract class AbstractGrant implements GrantTypeInterface
$authCode->setExpiryDateTime((new \DateTime())->add($authCodeTTL)); $authCode->setExpiryDateTime((new \DateTime())->add($authCodeTTL));
$authCode->setClient($client); $authCode->setClient($client);
$authCode->setUserIdentifier($userIdentifier); $authCode->setUserIdentifier($userIdentifier);
if ($redirectUri !== null) {
$authCode->setRedirectUri($redirectUri); $authCode->setRedirectUri($redirectUri);
}
foreach ($scopes as $scope) { foreach ($scopes as $scope) {
$authCode->addScope($scope); $authCode->addScope($scope);

View File

@ -276,7 +276,11 @@ class AuthCodeGrant extends AbstractAuthorizeGrant
$authorizationRequest->setGrantTypeId($this->getIdentifier()); $authorizationRequest->setGrantTypeId($this->getIdentifier());
$authorizationRequest->setClient($client); $authorizationRequest->setClient($client);
$authorizationRequest->setRedirectUri($redirectUri); $authorizationRequest->setRedirectUri($redirectUri);
if ($stateParameter !== null) {
$authorizationRequest->setState($stateParameter); $authorizationRequest->setState($stateParameter);
}
$authorizationRequest->setScopes($scopes); $authorizationRequest->setScopes($scopes);
if ($this->enableCodeExchangeProof === true) { if ($this->enableCodeExchangeProof === true) {

View File

@ -177,7 +177,11 @@ class ImplicitGrant extends AbstractAuthorizeGrant
$authorizationRequest->setGrantTypeId($this->getIdentifier()); $authorizationRequest->setGrantTypeId($this->getIdentifier());
$authorizationRequest->setClient($client); $authorizationRequest->setClient($client);
$authorizationRequest->setRedirectUri($redirectUri); $authorizationRequest->setRedirectUri($redirectUri);
if ($stateParameter !== null) {
$authorizationRequest->setState($stateParameter); $authorizationRequest->setState($stateParameter);
}
$authorizationRequest->setScopes($finalizedScopes); $authorizationRequest->setScopes($finalizedScopes);
return $authorizationRequest; return $authorizationRequest;

View File

@ -60,7 +60,7 @@ class AuthorizationRequest
/** /**
* The state parameter on the authorization request * The state parameter on the authorization request
* *
* @var string * @var string|null
*/ */
protected $state; protected $state;
@ -175,7 +175,7 @@ class AuthorizationRequest
} }
/** /**
* @return string * @return string|null
*/ */
public function getState() public function getState()
{ {

View File

@ -0,0 +1,39 @@
<?php
declare(strict_types = 1);
namespace LeagueTests\PHPStan;
use League\OAuth2\Server\Grant\AbstractGrant;
use PhpParser\Node\Expr\MethodCall;
use PHPStan\Analyser\Scope;
use PHPStan\Reflection\MethodReflection;
use PHPStan\Type\DynamicMethodReturnTypeExtension;
use PHPStan\Type\NullType;
use PHPStan\Type\StringType;
use PHPStan\Type\Type;
use PHPStan\Type\TypeCombinator;
final class AbstractGrantExtension implements DynamicMethodReturnTypeExtension
{
public function getClass(): string
{
return AbstractGrant::class;
}
public function isMethodSupported(MethodReflection $methodReflection): bool
{
return in_array($methodReflection->getName(), [
'getRequestParameter',
'getQueryStringParameter',
'getCookieParameter',
], true);
}
public function getTypeFromMethodCall(MethodReflection $methodReflection, MethodCall $methodCall, Scope $scope): Type
{
return TypeCombinator::union(...[
new StringType(),
isset($methodCall->args[2]) ? $scope->getType($methodCall->args[2]->value) : new NullType(),
]);
}
}