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