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