Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
90.91% covered (success)
90.91%
10 / 11
66.67% covered (warning)
66.67%
2 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
ApiHooks
90.91% covered (success)
90.91%
10 / 11
66.67% covered (warning)
66.67%
2 / 3
5.02
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onApiBeforeMain
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 onApiCheckCanExecute
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
3
1<?php
2
3namespace MediaWiki\Wikispeech\Hooks;
4
5/**
6 * @file
7 * @ingroup Extensions
8 * @license GPL-2.0-or-later
9 */
10
11use ApiBase;
12use ApiMain;
13use ApiMessage;
14use Config;
15use ConfigFactory;
16use IApiMessage;
17use MediaWiki\Api\Hook\ApiCheckCanExecuteHook;
18use MediaWiki\Hook\ApiBeforeMainHook;
19use MediaWiki\Http\HttpRequestFactory;
20use MediaWiki\Logger\LoggerFactory;
21use MediaWiki\Permissions\PermissionManager;
22use MediaWiki\Wikispeech\ConfigurationValidator;
23use Message;
24use Psr\Log\LoggerInterface;
25use User;
26
27/**
28 * @since 0.1.11
29 */
30
31class ApiHooks implements ApiBeforeMainHook, ApiCheckCanExecuteHook {
32
33    /** @var LoggerInterface */
34    private $logger;
35
36    /** @var Config */
37    private $config;
38
39    /** @var ConfigurationValidator */
40    private $configValidator;
41
42    /** @var PermissionManager */
43    private $permissionManager;
44
45    /** @var HttpRequestFactory */
46    private $requestFactory;
47
48    /**
49     * @param ConfigFactory $configFactory
50     * @param PermissionManager $permissionManager
51     * @param HttpRequestFactory $requestFactory
52     */
53    public function __construct(
54        ConfigFactory $configFactory,
55        PermissionManager $permissionManager,
56        HttpRequestFactory $requestFactory
57    ) {
58        $this->logger = LoggerFactory::getInstance( 'Wikispeech' );
59        $this->config = $configFactory->makeConfig( 'wikispeech' );
60        $this->configValidator = new ConfigurationValidator( $this->config, $this->logger );
61        $this->permissionManager = $permissionManager;
62        $this->requestFactory = $requestFactory;
63    }
64
65    /**
66     * Calls configuration validation for logging purposes on API calls.
67     *
68     * @param ApiMain &$main
69     * @return bool|void
70     */
71    public function onApiBeforeMain( &$main ) {
72        $this->configValidator->validateConfiguration();
73    }
74
75    /**
76     * Check if the user is allowed to use an API module.
77     *
78     * @param ApiBase $module
79     * @param User $user
80     * @param IApiMessage|Message|string|array &$message
81     * @return bool
82     */
83    public function onApiCheckCanExecute( $module, $user, &$message ): bool {
84        if (
85            $module->getModuleName() === 'wikispeech-listen' &&
86            !$this->permissionManager->userHasRight( $user, 'wikispeech-listen' )
87        ) {
88            $message = ApiMessage::create( 'apierror-wikispeech-listen-notallowed' );
89            return false;
90        }
91        return true;
92    }
93}