Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
74 / 74
100.00% covered (success)
100.00%
18 / 18
CRAP
100.00% covered (success)
100.00%
1 / 1
AbuseFilterHookRunner
100.00% covered (success)
100.00%
74 / 74
100.00% covered (success)
100.00%
18 / 18
18
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 onAbuseFilter_builder
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAbuseFilter_deprecatedVariables
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAbuseFilter_computeVariable
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAbuseFilter_contentToString
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAbuseFilterAlterVariables
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAbuseFilter_generateTitleVars
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAbuseFilter_generateUserVars
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAbuseFilterGenerateAccountCreationVars
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAbuseFilter_generateGenericVars
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAbuseFilterGenerateVarsForRecentChange
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAbuseFilter_interceptVariable
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAbuseFilterShouldFilterAction
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAbuseFilterGetDangerousActions
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onAbuseFilterCustomActions
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onAbuseFilterCustomProtectedVariables
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onAbuseFilterLogProtectedVariableValueAccess
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onAbuseFilterCanViewProtectedVariables
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace MediaWiki\Extension\AbuseFilter\Hooks;
4
5use MediaWiki\Content\Content;
6use MediaWiki\Extension\AbuseFilter\AbuseFilterPermissionStatus;
7use MediaWiki\Extension\AbuseFilter\VariableGenerator\RCVariableGenerator;
8use MediaWiki\Extension\AbuseFilter\Variables\VariableHolder;
9use MediaWiki\HookContainer\HookContainer;
10use MediaWiki\Permissions\Authority;
11use MediaWiki\RecentChanges\RecentChange;
12use MediaWiki\Title\Title;
13use MediaWiki\User\User;
14use MediaWiki\User\UserIdentity;
15
16/**
17 * Handle running AbuseFilter's hooks
18 * @author DannyS712
19 */
20class AbuseFilterHookRunner implements
21    AbuseFilterAlterVariablesHook,
22    AbuseFilterBuilderHook,
23    AbuseFilterCanViewProtectedVariablesHook,
24    AbuseFilterComputeVariableHook,
25    AbuseFilterContentToStringHook,
26    AbuseFilterCustomActionsHook,
27    AbuseFilterCustomProtectedVariablesHook,
28    AbuseFilterDeprecatedVariablesHook,
29    AbuseFilterGenerateGenericVarsHook,
30    AbuseFilterGenerateTitleVarsHook,
31    AbuseFilterGenerateUserVarsHook,
32    AbuseFilterGenerateAccountCreationVarsHook,
33    AbuseFilterGenerateVarsForRecentChangeHook,
34    AbuseFilterGetDangerousActionsHook,
35    AbuseFilterInterceptVariableHook,
36    AbuseFilterProtectedVarsAccessLoggerHook,
37    AbuseFilterShouldFilterActionHook
38{
39    public const SERVICE_NAME = 'AbuseFilterHookRunner';
40
41    private HookContainer $hookContainer;
42
43    public function __construct( HookContainer $hookContainer ) {
44        $this->hookContainer = $hookContainer;
45    }
46
47    /**
48     * @inheritDoc
49     */
50    public function onAbuseFilter_builder( array &$realValues ) {
51        return $this->hookContainer->run(
52            'AbuseFilter-builder',
53            [ &$realValues ]
54        );
55    }
56
57    /**
58     * @inheritDoc
59     */
60    public function onAbuseFilter_deprecatedVariables( array &$deprecatedVariables ) {
61        return $this->hookContainer->run(
62            'AbuseFilter-deprecatedVariables',
63            [ &$deprecatedVariables ]
64        );
65    }
66
67    /**
68     * @inheritDoc
69     */
70    public function onAbuseFilter_computeVariable(
71        string $method,
72        VariableHolder $vars,
73        array $parameters,
74        ?string &$result
75    ) {
76        return $this->hookContainer->run(
77            'AbuseFilter-computeVariable',
78            [ $method, $vars, $parameters, &$result ]
79        );
80    }
81
82    /**
83     * @inheritDoc
84     */
85    public function onAbuseFilter_contentToString(
86        Content $content,
87        ?string &$text
88    ) {
89        return $this->hookContainer->run(
90            'AbuseFilter-contentToString',
91            [ $content, &$text ]
92        );
93    }
94
95    /**
96     * @inheritDoc
97     */
98    public function onAbuseFilterAlterVariables(
99        VariableHolder &$vars,
100        Title $title,
101        User $user
102    ) {
103        return $this->hookContainer->run(
104            'AbuseFilterAlterVariables',
105            [ &$vars, $title, $user ]
106        );
107    }
108
109    /**
110     * @inheritDoc
111     */
112    public function onAbuseFilter_generateTitleVars(
113        VariableHolder $vars,
114        Title $title,
115        string $prefix,
116        ?RecentChange $rc
117    ) {
118        return $this->hookContainer->run(
119            'AbuseFilter-generateTitleVars',
120            [ $vars, $title, $prefix, $rc ]
121        );
122    }
123
124    /**
125     * @inheritDoc
126     */
127    public function onAbuseFilter_generateUserVars(
128        VariableHolder $vars,
129        User $user,
130        ?RecentChange $rc
131    ) {
132        return $this->hookContainer->run(
133            'AbuseFilter-generateUserVars',
134            [ $vars, $user, $rc ]
135        );
136    }
137
138    /** @inheritDoc */
139    public function onAbuseFilterGenerateAccountCreationVars(
140        VariableHolder $vars,
141        UserIdentity $creator,
142        UserIdentity $createdUser,
143        bool $autocreate,
144        ?RecentChange $rc
145    ) {
146        return $this->hookContainer->run(
147            'AbuseFilterGenerateAccountCreationVars',
148            [ $vars, $creator, $createdUser, $autocreate, $rc ]
149        );
150    }
151
152    /**
153     * @inheritDoc
154     */
155    public function onAbuseFilter_generateGenericVars(
156        VariableHolder $vars,
157        ?RecentChange $rc
158    ) {
159        return $this->hookContainer->run(
160            'AbuseFilter-generateGenericVars',
161            [ $vars, $rc ]
162        );
163    }
164
165    /**
166     * @inheritDoc
167     */
168    public function onAbuseFilterGenerateVarsForRecentChange(
169        RCVariableGenerator $generator,
170        RecentChange $rc,
171        VariableHolder $vars,
172        User $contextUser
173    ) {
174        return $this->hookContainer->run(
175            'AbuseFilterGenerateVarsForRecentChange',
176            [ $generator, $rc, $vars, $contextUser ]
177        );
178    }
179
180    /**
181     * @inheritDoc
182     */
183    public function onAbuseFilter_interceptVariable(
184        string $method,
185        VariableHolder $vars,
186        array $parameters,
187        &$result
188    ) {
189        return $this->hookContainer->run(
190            'AbuseFilter-interceptVariable',
191            [ $method, $vars, $parameters, &$result ]
192        );
193    }
194
195    /**
196     * @inheritDoc
197     */
198    public function onAbuseFilterShouldFilterAction(
199        VariableHolder $vars,
200        Title $title,
201        User $user,
202        array &$skipReasons
203    ) {
204        return $this->hookContainer->run(
205            'AbuseFilterShouldFilterAction',
206            [ $vars, $title, $user, &$skipReasons ]
207        );
208    }
209
210    /**
211     * @inheritDoc
212     */
213    public function onAbuseFilterGetDangerousActions( array &$actions ): void {
214        $this->hookContainer->run(
215            'AbuseFilterGetDangerousActions',
216            [ &$actions ],
217            [ 'abortable' => false ]
218        );
219    }
220
221    /**
222     * @inheritDoc
223     */
224    public function onAbuseFilterCustomActions( array &$actions ): void {
225        $this->hookContainer->run(
226            'AbuseFilterCustomActions',
227            [ &$actions ],
228            [ 'abortable' => false ]
229        );
230    }
231
232    /**
233     * @inheritDoc
234     */
235    public function onAbuseFilterCustomProtectedVariables( array &$variables ): void {
236        $this->hookContainer->run(
237            'AbuseFilterCustomProtectedVariables',
238            [ &$variables ],
239            [ 'abortable' => false ]
240        );
241    }
242
243    /**
244     * @inheritDoc
245     */
246    public function onAbuseFilterLogProtectedVariableValueAccess(
247        UserIdentity $performer,
248        string $target,
249        string $action,
250        bool $shouldDebounce,
251        int $timestamp,
252        array &$params
253    ) {
254        return $this->hookContainer->run(
255            'AbuseFilterLogProtectedVariableValueAccess',
256            [ $performer, $target, $action, $shouldDebounce, $timestamp, &$params ],
257            [ 'abortable' => true ]
258        );
259    }
260
261    /** @inheritDoc */
262    public function onAbuseFilterCanViewProtectedVariables(
263        Authority $performer, array $variables, AbuseFilterPermissionStatus $status
264    ): void {
265        $this->hookContainer->run(
266            'AbuseFilterCanViewProtectedVariables',
267            [ $performer, $variables, $status ],
268            [ 'abortable' => false ]
269        );
270    }
271}