This implements the AuthManager class and its needed interfaces and subclasses, and integrates them into the backend portion of MediaWiki. Integration with frontend portions of MediaWiki (e.g. ApiLogin, Special:Login) is left for a followup. Bug: T91699 Bug: T71589 Bug: T111299 Co-Authored-By: Gergő Tisza <gtisza@wikimedia.org> Change-Id: If89d24838e326fe25fe867d02181eebcfbb0e196
177 lines
4 KiB
PHP
177 lines
4 KiB
PHP
<?php
|
|
|
|
namespace MediaWiki\Auth;
|
|
|
|
/**
|
|
* @group AuthManager
|
|
* @covers MediaWiki\Auth\UserDataAuthenticationRequest
|
|
*/
|
|
class UserDataAuthenticationRequestTest extends AuthenticationRequestTestCase {
|
|
|
|
protected function getInstance( array $args = [] ) {
|
|
return new UserDataAuthenticationRequest;
|
|
}
|
|
|
|
protected function setUp() {
|
|
parent::setUp();
|
|
$this->setMwGlobals( 'wgHiddenPrefs', [] );
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providePopulateUser
|
|
* @param string $email Email to set
|
|
* @param string $realname Realname to set
|
|
* @param StatusValue $expect Expected return
|
|
*/
|
|
public function testPopulateUser( $email, $realname, $expect ) {
|
|
$user = new \User();
|
|
$user->setEmail( 'default@example.com' );
|
|
$user->setRealName( 'Fake Name' );
|
|
|
|
$req = new UserDataAuthenticationRequest;
|
|
$req->email = $email;
|
|
$req->realname = $realname;
|
|
$this->assertEquals( $expect, $req->populateUser( $user ) );
|
|
if ( $expect->isOk() ) {
|
|
$this->assertSame( $email ?: 'default@example.com', $user->getEmail() );
|
|
$this->assertSame( $realname ?: 'Fake Name', $user->getRealName() );
|
|
}
|
|
|
|
}
|
|
|
|
public static function providePopulateUser() {
|
|
$good = \StatusValue::newGood();
|
|
return [
|
|
[ 'email@example.com', 'Real Name', $good ],
|
|
[ 'email@example.com', '', $good ],
|
|
[ '', 'Real Name', $good ],
|
|
[ '', '', $good ],
|
|
[ 'invalid-email', 'Real Name', \StatusValue::newFatal( 'invalidemailaddress' ) ],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider provideLoadFromSubmission
|
|
*/
|
|
public function testLoadFromSubmission(
|
|
array $args, array $data, $expectState /* $hiddenPref, $enableEmail */
|
|
) {
|
|
list( $args, $data, $expectState, $hiddenPref, $enableEmail ) = func_get_args();
|
|
$this->setMwGlobals( 'wgHiddenPrefs', $hiddenPref );
|
|
$this->setMwGlobals( 'wgEnableEmail', $enableEmail );
|
|
parent::testLoadFromSubmission( $args, $data, $expectState );
|
|
}
|
|
|
|
public function provideLoadFromSubmission() {
|
|
$unhidden = [];
|
|
$hidden = [ 'realname' ];
|
|
|
|
return [
|
|
'Empty request, unhidden, email enabled' => [
|
|
[],
|
|
[],
|
|
false,
|
|
$unhidden,
|
|
true
|
|
],
|
|
'email + realname, unhidden, email enabled' => [
|
|
[],
|
|
$data = [ 'email' => 'Email', 'realname' => 'Name' ],
|
|
$data,
|
|
$unhidden,
|
|
true
|
|
],
|
|
'email empty, unhidden, email enabled' => [
|
|
[],
|
|
$data = [ 'email' => '', 'realname' => 'Name' ],
|
|
$data,
|
|
$unhidden,
|
|
true
|
|
],
|
|
'email omitted, unhidden, email enabled' => [
|
|
[],
|
|
[ 'realname' => 'Name' ],
|
|
false,
|
|
$unhidden,
|
|
true
|
|
],
|
|
'realname empty, unhidden, email enabled' => [
|
|
[],
|
|
$data = [ 'email' => 'Email', 'realname' => '' ],
|
|
$data,
|
|
$unhidden,
|
|
true
|
|
],
|
|
'realname omitted, unhidden, email enabled' => [
|
|
[],
|
|
[ 'email' => 'Email' ],
|
|
false,
|
|
$unhidden,
|
|
true
|
|
],
|
|
'Empty request, hidden, email enabled' => [
|
|
[],
|
|
[],
|
|
false,
|
|
$hidden,
|
|
true
|
|
],
|
|
'email + realname, hidden, email enabled' => [
|
|
[],
|
|
[ 'email' => 'Email', 'realname' => 'Name' ],
|
|
[ 'email' => 'Email' ],
|
|
$hidden,
|
|
true
|
|
],
|
|
'email empty, hidden, email enabled' => [
|
|
[],
|
|
$data = [ 'email' => '', 'realname' => 'Name' ],
|
|
[ 'email' => '' ],
|
|
$hidden,
|
|
true
|
|
],
|
|
'email omitted, hidden, email enabled' => [
|
|
[],
|
|
[ 'realname' => 'Name' ],
|
|
false,
|
|
$hidden,
|
|
true
|
|
],
|
|
'realname empty, hidden, email enabled' => [
|
|
[],
|
|
$data = [ 'email' => 'Email', 'realname' => '' ],
|
|
[ 'email' => 'Email' ],
|
|
$hidden,
|
|
true
|
|
],
|
|
'realname omitted, hidden, email enabled' => [
|
|
[],
|
|
[ 'email' => 'Email' ],
|
|
[ 'email' => 'Email' ],
|
|
$hidden,
|
|
true
|
|
],
|
|
'email + realname, unhidden, email disabled' => [
|
|
[],
|
|
[ 'email' => 'Email', 'realname' => 'Name' ],
|
|
[ 'realname' => 'Name' ],
|
|
$unhidden,
|
|
false
|
|
],
|
|
'email omitted, unhidden, email disabled' => [
|
|
[],
|
|
[ 'realname' => 'Name' ],
|
|
[ 'realname' => 'Name' ],
|
|
$unhidden,
|
|
false
|
|
],
|
|
'email empty, unhidden, email disabled' => [
|
|
[],
|
|
[ 'email' => '', 'realname' => 'Name' ],
|
|
[ 'realname' => 'Name' ],
|
|
$unhidden,
|
|
false
|
|
],
|
|
];
|
|
}
|
|
}
|