Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
93.02% covered (success)
93.02%
40 / 43
66.67% covered (warning)
66.67%
2 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
ResetClientSecret
93.02% covered (success)
93.02%
40 / 43
66.67% covered (warning)
66.67%
2 / 3
6.01
0.00% covered (danger)
0.00%
0 / 1
 getFixedParams
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
1
 getUnifiedParams
87.50% covered (warning)
87.50%
21 / 24
0.00% covered (danger)
0.00%
0 / 1
4.03
 getParamSettings
100.00% covered (success)
100.00%
13 / 13
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace MediaWiki\Extension\OAuth\Rest\Handler;
4
5use MediaWiki\Extension\OAuth\Backend\Consumer;
6use MediaWiki\Extension\OAuth\Backend\Utils;
7use MediaWiki\Extension\OAuth\Control\ConsumerAccessControl;
8use MediaWiki\Rest\LocalizedHttpException;
9use MWRestrictions;
10use RequestContext;
11use Wikimedia\Message\MessageValue;
12use Wikimedia\ParamValidator\ParamValidator;
13
14class ResetClientSecret extends AbstractClientHandler {
15
16    /**
17     * @inheritDoc
18     */
19    protected function getFixedParams(): array {
20        return [
21            'action' => 'update',
22            'rsaKey' => '',
23            'resetSecret' => true,
24            'restrictions' => MWRestrictions::newDefault(),
25        ];
26    }
27
28    /**
29     * @inheritDoc
30     */
31    protected function getUnifiedParams(): array {
32        $params = parent::getUnifiedParams();
33        $params['client_key'] = $this->getRequest()->getPathParam( 'client_key' );
34
35        $requestContext = RequestContext::getMain();
36        $dbr = Utils::getCentralDB( DB_REPLICA );
37        $clientAccess = ConsumerAccessControl::wrap(
38            Consumer::newFromKey( $dbr, $params['consumerKey'] ), $requestContext
39        );
40        if ( !$clientAccess ) {
41            throw new LocalizedHttpException(
42                MessageValue::new( 'mwoauth-invalid-consumer-key' ), 400
43            );
44        }
45
46        $dataAccessObj = $clientAccess->getDAO();
47
48        if ( $dataAccessObj->getDeleted() ) {
49            throw new LocalizedHttpException(
50                MessageValue::new( 'mwoauth-consumer-deleted-error' ), 401
51            );
52        } elseif ( $dataAccessObj->getUserId() !== Utils::getCentralIdFromLocalUser(
53                $requestContext->getUser()
54            ) ) {
55            throw new LocalizedHttpException(
56                MessageValue::new( 'mwoauth-consumer-user-mismatch' ), 400
57            );
58        }
59        $params['changeToken'] = $dataAccessObj->getChangeToken( $requestContext );
60
61        return $params;
62    }
63
64    /**
65     * @inheritDoc
66     */
67    public function getParamSettings(): array {
68        return [
69            'client_key' => [
70                self::PARAM_SOURCE => 'path',
71                ParamValidator::PARAM_TYPE => 'string',
72                ParamValidator::PARAM_REQUIRED => true,
73            ],
74            'reason' => [
75                self::PARAM_SOURCE => 'post',
76                ParamValidator::PARAM_TYPE => 'string',
77                ParamValidator::PARAM_REQUIRED => false,
78                ParamValidator::PARAM_DEFAULT => '',
79            ],
80        ];
81    }
82}