1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
<?php
use MediaWiki\Auth\AuthManager;
use MediaWiki\ParamValidator\TypeDef\UserDef;
use MediaWiki\User\UserFactory;
use MediaWiki\User\UserRigorOptions;
use Wikimedia\ParamValidator\ParamValidator;
/**
* @ingroup API
*/
class ApiValidatePassword extends ApiBase {
private AuthManager $authManager;
private UserFactory $userFactory;
/**
* @param ApiMain $mainModule
* @param string $moduleName
* @param AuthManager $authManager
* @param UserFactory $userFactory
*/
public function __construct(
ApiMain $mainModule,
string $moduleName,
AuthManager $authManager,
UserFactory $userFactory
) {
parent::__construct( $mainModule, $moduleName );
$this->authManager = $authManager;
$this->userFactory = $userFactory;
}
public function execute() {
$params = $this->extractRequestParams();
$this->requirePostedParameters( [ 'password' ] );
if ( $params['user'] !== null ) {
$user = $this->userFactory->newFromName(
$params['user'],
UserRigorOptions::RIGOR_CREATABLE
);
if ( !$user ) {
$encParamName = $this->encodeParamName( 'user' );
$this->dieWithError(
[ 'apierror-baduser', $encParamName, wfEscapeWikiText( $params['user'] ) ],
"baduser_{$encParamName}"
);
}
if ( $user->isRegistered() || $this->authManager->userExists( $user->getName() ) ) {
$this->dieWithError( 'userexists' );
}
$user->setEmail( (string)$params['email'] );
$user->setRealName( (string)$params['realname'] );
} else {
$user = $this->getUser();
}
$r = [];
$validity = $user->checkPasswordValidity( $params['password'] );
$r['validity'] = $validity->isGood() ? 'Good' : ( $validity->isOK() ? 'Change' : 'Invalid' );
$messages = array_merge(
$this->getErrorFormatter()->arrayFromStatus( $validity, 'error' ),
$this->getErrorFormatter()->arrayFromStatus( $validity, 'warning' )
);
if ( $messages ) {
$r['validitymessages'] = $messages;
}
$this->getHookRunner()->onApiValidatePassword( $this, $r );
$this->getResult()->addValue( null, $this->getModuleName(), $r );
}
public function mustBePosted() {
return true;
}
public function getAllowedParams() {
return [
'password' => [
ParamValidator::PARAM_TYPE => 'password',
ParamValidator::PARAM_REQUIRED => true
],
'user' => [
ParamValidator::PARAM_TYPE => 'user',
UserDef::PARAM_ALLOWED_USER_TYPES => [ 'name', 'id' ],
],
'email' => null,
'realname' => null,
];
}
protected function getExamplesMessages() {
return [
'action=validatepassword&password=foobar'
=> 'apihelp-validatepassword-example-1',
'action=validatepassword&password=querty&user=Example'
=> 'apihelp-validatepassword-example-2',
];
}
public function getHelpUrls() {
return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Validatepassword';
}
}
|