Use UserIdentity instead of User in REST

Change-Id: Ia6a517c6a64664be2363492108f9497fc949f299
This commit is contained in:
Petr Pchelko 2019-09-13 14:07:59 -07:00 committed by Tim Starling
parent 88d9cc22d3
commit 0df763f71d
9 changed files with 56 additions and 35 deletions

View file

@ -2,24 +2,24 @@
namespace MediaWiki\Rest\BasicAccess;
use User;
use MediaWiki\Permissions\PermissionManager;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\RequestInterface;
use MediaWiki\User\UserIdentity;
/**
* A factory for MWBasicRequestAuthorizer which passes through a User object
* A factory for MWBasicRequestAuthorizer which passes through a UserIdentity.
*
* @internal
*/
class MWBasicAuthorizer extends BasicAuthorizerBase {
/** @var User */
/** @var UserIdentity */
private $user;
/** @var PermissionManager */
private $permissionManager;
public function __construct( User $user, PermissionManager $permissionManager ) {
public function __construct( UserIdentity $user, PermissionManager $permissionManager ) {
$this->user = $user;
$this->permissionManager = $permissionManager;
}

View file

@ -2,7 +2,7 @@
namespace MediaWiki\Rest\BasicAccess;
use User;
use MediaWiki\User\UserIdentity;
use MediaWiki\Permissions\PermissionManager;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\RequestInterface;
@ -13,14 +13,14 @@ use MediaWiki\Rest\RequestInterface;
* @internal
*/
class MWBasicRequestAuthorizer extends BasicRequestAuthorizer {
/** @var User */
/** @var UserIdentity */
private $user;
/** @var PermissionManager */
private $permissionManager;
public function __construct( RequestInterface $request, Handler $handler,
User $user, PermissionManager $permissionManager
UserIdentity $user, PermissionManager $permissionManager
) {
parent::__construct( $request, $handler );
$this->user = $user;

View file

@ -57,7 +57,11 @@ class EntryPoint {
$services->getPermissionManager() );
// @phan-suppress-next-line PhanAccessMethodInternal
$restValidator = new Validator( $objectFactory, $request, RequestContext::getMain()->getUser() );
$restValidator = new Validator( $objectFactory,
$services->getPermissionManager(),
$request,
RequestContext::getMain()->getUser()
);
global $IP;
$router = new Router(

View file

@ -3,21 +3,30 @@
namespace MediaWiki\Rest\Validator;
use InvalidArgumentException;
use MediaWiki\Permissions\PermissionManager;
use MediaWiki\Rest\RequestInterface;
use MediaWiki\User\UserIdentity;
use Psr\Http\Message\UploadedFileInterface;
use User;
use Wikimedia\ParamValidator\Callbacks;
use Wikimedia\ParamValidator\ValidationException;
class ParamValidatorCallbacks implements Callbacks {
/** @var PermissionManager */
private $permissionManager;
/** @var RequestInterface */
private $request;
/** @var User */
/** @var UserIdentity */
private $user;
public function __construct( RequestInterface $request, User $user ) {
public function __construct(
PermissionManager $permissionManager,
RequestInterface $request,
UserIdentity $user
) {
$this->permissionManager = $permissionManager;
$this->request = $request;
$this->user = $user;
}
@ -76,7 +85,7 @@ class ParamValidatorCallbacks implements Callbacks {
}
public function useHighLimits( array $options ) {
return $this->user->isAllowed( 'apihighlimits' );
return $this->permissionManager->userHasRight( $this->user, 'apihighlimits' );
}
}

View file

@ -2,10 +2,11 @@
namespace MediaWiki\Rest\Validator;
use MediaWiki\Permissions\PermissionManager;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\HttpException;
use MediaWiki\Rest\RequestInterface;
use User;
use MediaWiki\User\UserIdentity;
use Wikimedia\ObjectFactory;
use Wikimedia\ParamValidator\ParamValidator;
use Wikimedia\ParamValidator\TypeDef\BooleanDef;
@ -62,16 +63,20 @@ class Validator {
private $paramValidator;
/**
* @internal
* @param ObjectFactory $objectFactory
* @param PermissionManager $permissionManager
* @param RequestInterface $request
* @param User $user
* @param UserIdentity $user
* @internal
*/
public function __construct(
ObjectFactory $objectFactory, RequestInterface $request, User $user
ObjectFactory $objectFactory,
PermissionManager $permissionManager,
RequestInterface $request,
UserIdentity $user
) {
$this->paramValidator = new ParamValidator(
new ParamValidatorCallbacks( $request, $user ),
new ParamValidatorCallbacks( $permissionManager, $request, $user ),
$objectFactory,
[
'typeDefs' => self::$typeDefs,

View file

@ -3,7 +3,7 @@
namespace MediaWiki\Tests\Rest\BasicAccess;
use GuzzleHttp\Psr7\Uri;
use MediaWiki\MediaWikiServices;
use MediaWiki\Permissions\PermissionManager;
use MediaWiki\Rest\BasicAccess\MWBasicAuthorizer;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\RequestData;
@ -26,20 +26,18 @@ use Wikimedia\ObjectFactory;
class MWBasicRequestAuthorizerTest extends MediaWikiTestCase {
private function createRouter( $userRights, $request ) {
$user = User::newFromName( 'Test user' );
// Don't allow the rights to everybody so that user rights kick in.
$this->mergeMwGlobalArrayValue( 'wgGroupPermissions', [ '*' => $userRights ] );
$this->overrideUserPermissions(
$user,
array_keys( array_filter( $userRights ), function ( $value ) {
return $value === true;
} )
);
global $IP;
$objectFactory = new ObjectFactory(
$this->getMockForAbstractClass( ContainerInterface::class )
);
$permissionManager = $this->createMock( PermissionManager::class );
// Don't allow the rights to everybody so that user rights kick in.
$permissionManager->method( 'isEveryoneAllowed' )->willReturn( false );
$permissionManager->method( 'userHasRight' )
->will( $this->returnCallback( function ( $user, $action ) use ( $userRights ) {
return isset( $userRights[$action] ) && $userRights[$action];
} ) );
global $IP;
return new Router(
[ "$IP/tests/phpunit/unit/includes/Rest/testRoutes.json" ],
@ -47,9 +45,9 @@ class MWBasicRequestAuthorizerTest extends MediaWikiTestCase {
'/rest',
new \EmptyBagOStuff(),
new ResponseFactory( [] ),
new MWBasicAuthorizer( $user, MediaWikiServices::getInstance()->getPermissionManager() ),
new MWBasicAuthorizer( $user, $permissionManager ),
$objectFactory,
new Validator( $objectFactory, $request, $user )
new Validator( $objectFactory, $permissionManager, $request, $user )
);
}

View file

@ -5,6 +5,7 @@ namespace MediaWiki\Tests\Rest;
use EmptyBagOStuff;
use GuzzleHttp\Psr7\Uri;
use GuzzleHttp\Psr7\Stream;
use MediaWiki\Permissions\PermissionManager;
use MediaWiki\Rest\BasicAccess\StaticBasicAuthorizer;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\EntryPoint;
@ -32,6 +33,7 @@ class EntryPointTest extends \MediaWikiTestCase {
$objectFactory = new ObjectFactory(
$this->getMockForAbstractClass( ContainerInterface::class )
);
$permissionManager = $this->createMock( PermissionManager::class );
return new Router(
[ "$IP/tests/phpunit/unit/includes/Rest/testRoutes.json" ],
@ -41,7 +43,7 @@ class EntryPointTest extends \MediaWikiTestCase {
new ResponseFactory( [] ),
new StaticBasicAuthorizer(),
$objectFactory,
new Validator( $objectFactory, $request, new User )
new Validator( $objectFactory, $permissionManager, $request, new User )
);
}

View file

@ -4,6 +4,7 @@ namespace MediaWiki\Tests\Rest\Handler;
use EmptyBagOStuff;
use GuzzleHttp\Psr7\Uri;
use MediaWiki\Permissions\PermissionManager;
use MediaWiki\Rest\BasicAccess\StaticBasicAuthorizer;
use MediaWiki\Rest\RequestData;
use MediaWiki\Rest\ResponseFactory;
@ -55,7 +56,7 @@ class HelloHandlerTest extends \MediaWikiUnitTestCase {
$objectFactory = new ObjectFactory(
$this->getMockForAbstractClass( ContainerInterface::class )
);
$permissionManager = $this->createMock( PermissionManager::class );
$request = new RequestData( $requestInfo );
$router = new Router(
[ __DIR__ . '/../testRoutes.json' ],
@ -65,7 +66,7 @@ class HelloHandlerTest extends \MediaWikiUnitTestCase {
new ResponseFactory( [] ),
new StaticBasicAuthorizer(),
$objectFactory,
new Validator( $objectFactory, $request, new User )
new Validator( $objectFactory, $permissionManager, $request, new User )
);
$response = $router->execute( $request );
if ( isset( $responseInfo['statusCode'] ) ) {

View file

@ -3,6 +3,7 @@
namespace MediaWiki\Tests\Rest;
use GuzzleHttp\Psr7\Uri;
use MediaWiki\Permissions\PermissionManager;
use MediaWiki\Rest\BasicAccess\StaticBasicAuthorizer;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\HttpException;
@ -24,6 +25,7 @@ class RouterTest extends \MediaWikiUnitTestCase {
$objectFactory = new ObjectFactory(
$this->getMockForAbstractClass( ContainerInterface::class )
);
$permissionManager = $this->createMock( PermissionManager::class );
return new Router(
[ __DIR__ . '/testRoutes.json' ],
[],
@ -32,7 +34,7 @@ class RouterTest extends \MediaWikiUnitTestCase {
new ResponseFactory( [] ),
new StaticBasicAuthorizer( $authError ),
$objectFactory,
new Validator( $objectFactory, $request, new User )
new Validator( $objectFactory, $permissionManager, $request, new User )
);
}