Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
93.02% |
40 / 43 |
|
66.67% |
2 / 3 |
CRAP | |
0.00% |
0 / 1 |
ResetClientSecret | |
93.02% |
40 / 43 |
|
66.67% |
2 / 3 |
6.01 | |
0.00% |
0 / 1 |
getFixedParams | |
100.00% |
6 / 6 |
|
100.00% |
1 / 1 |
1 | |||
getUnifiedParams | |
87.50% |
21 / 24 |
|
0.00% |
0 / 1 |
4.03 | |||
getParamSettings | |
100.00% |
13 / 13 |
|
100.00% |
1 / 1 |
1 |
1 | <?php |
2 | |
3 | namespace MediaWiki\Extension\OAuth\Rest\Handler; |
4 | |
5 | use MediaWiki\Extension\OAuth\Backend\Consumer; |
6 | use MediaWiki\Extension\OAuth\Backend\Utils; |
7 | use MediaWiki\Extension\OAuth\Control\ConsumerAccessControl; |
8 | use MediaWiki\Rest\LocalizedHttpException; |
9 | use MWRestrictions; |
10 | use RequestContext; |
11 | use Wikimedia\Message\MessageValue; |
12 | use Wikimedia\ParamValidator\ParamValidator; |
13 | |
14 | class 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 | } |