Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 32 |
|
0.00% |
0 / 2 |
CRAP | n/a |
0 / 0 |
|
wfWebStartNoLocalSettings | |
0.00% |
0 / 2 |
|
0.00% |
0 / 1 |
2 | |||
wfWebStartSetup | |
0.00% |
0 / 2 |
|
0.00% |
0 / 1 |
6 |
1 | <?php |
2 | /** |
3 | * The set up for all MediaWiki web requests. |
4 | * |
5 | * It does: |
6 | * - web-related security checks, |
7 | * - decide how and from where to load site configuration (LocalSettings.php), |
8 | * - load Setup.php. |
9 | * |
10 | * This program is free software; you can redistribute it and/or modify |
11 | * it under the terms of the GNU General Public License as published by |
12 | * the Free Software Foundation; either version 2 of the License, or |
13 | * (at your option) any later version. |
14 | * |
15 | * This program is distributed in the hope that it will be useful, |
16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
18 | * GNU General Public License for more details. |
19 | * |
20 | * You should have received a copy of the GNU General Public License along |
21 | * with this program; if not, write to the Free Software Foundation, Inc., |
22 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
23 | * http://www.gnu.org/copyleft/gpl.html |
24 | * |
25 | * @file |
26 | */ |
27 | |
28 | use MediaWiki\Context\RequestContext; |
29 | use MediaWiki\Settings\SettingsBuilder; |
30 | |
31 | # T17461: Make IE8 turn off content sniffing. Everybody else should ignore this |
32 | # We're adding it here so that it's *always* set, even for alternate entry |
33 | # points and when $wgOut gets disabled or overridden. |
34 | header( 'X-Content-Type-Options: nosniff' ); |
35 | |
36 | # Valid web server entry point, enable includes. |
37 | # Please don't move this line to includes/Defines.php. This line essentially |
38 | # defines a valid entry point. If you put it in includes/Defines.php, then |
39 | # any script that includes it becomes an entry point, thereby defeating |
40 | # its purpose. |
41 | define( 'MEDIAWIKI', true ); |
42 | |
43 | /** |
44 | * @param SettingsBuilder $settings |
45 | * @return never |
46 | */ |
47 | function wfWebStartNoLocalSettings( SettingsBuilder $settings ) { |
48 | # LocalSettings.php is the per-site customization file. If it does not exist |
49 | # the wiki installer needs to be launched or the generated file uploaded to |
50 | # the root wiki directory. Give a hint, if it is not readable by the server. |
51 | require_once __DIR__ . '/Output/NoLocalSettings.php'; |
52 | die(); |
53 | } |
54 | |
55 | require_once __DIR__ . '/BootstrapHelperFunctions.php'; |
56 | |
57 | // If no LocalSettings file exists, try to display an error page |
58 | // (use a callback because it depends on TemplateParser) |
59 | if ( !defined( 'MW_CONFIG_CALLBACK' ) ) { |
60 | wfDetectLocalSettingsFile(); |
61 | if ( !is_readable( MW_CONFIG_FILE ) ) { |
62 | define( 'MW_CONFIG_CALLBACK', 'wfWebStartNoLocalSettings' ); |
63 | } |
64 | } |
65 | |
66 | function wfWebStartSetup( SettingsBuilder $settings ) { |
67 | // Initialize the default MediaWiki output buffering if no buffer is already active. |
68 | // This avoids clashes with existing buffers in order to avoid problems, |
69 | // like mixing gzip and non-gzip output. |
70 | if ( ob_get_level() == 0 ) { |
71 | // During HTTP requests, MediaWiki normally buffers the response body in a string |
72 | // within OutputPage and prints it when ready. PHP buffers provide protection against |
73 | // premature sending of HTTP headers due to output from PHP warnings and notices. |
74 | // They also can be used to implement gzip support in PHP without the webserver knowing |
75 | // which requests yield HTML and which yield large files that can be streamed. |
76 | ob_start( [ MediaWiki\Output\OutputHandler::class, 'handle' ] ); |
77 | } |
78 | } |
79 | |
80 | // Custom setup for WebStart entry point |
81 | if ( !defined( 'MW_SETUP_CALLBACK' ) ) { |
82 | define( 'MW_SETUP_CALLBACK', 'wfWebStartSetup' ); |
83 | } |
84 | |
85 | require_once __DIR__ . '/Setup.php'; |
86 | |
87 | # Multiple DBs or commits might be used; keep the request as transactional as possible |
88 | if ( isset( $_SERVER['REQUEST_METHOD'] ) && $_SERVER['REQUEST_METHOD'] === 'POST' ) { |
89 | ignore_user_abort( true ); |
90 | } |
91 | |
92 | if ( !defined( 'MW_API' ) && !defined( 'MW_REST_API' ) && |
93 | RequestContext::getMain()->getRequest()->getHeader( 'Promise-Non-Write-API-Action' ) |
94 | ) { |
95 | header( 'Cache-Control: no-cache' ); |
96 | header( 'Content-Type: text/html; charset=utf-8' ); |
97 | HttpStatus::header( 400 ); |
98 | $errorHtml = wfMessage( 'nonwrite-api-promise-error' ) |
99 | ->useDatabase( false ) |
100 | ->inContentLanguage() |
101 | ->escaped(); |
102 | $content = <<<HTML |
103 | <!DOCTYPE html> |
104 | <html> |
105 | <head><meta charset="UTF-8" /><meta name="color-scheme" content="light dark" /></head> |
106 | <body> |
107 | $errorHtml |
108 | </body> |
109 | </html> |
110 | |
111 | HTML; |
112 | header( 'Content-Length: ' . strlen( $content ) ); |
113 | echo $content; |
114 | die(); |
115 | } |