REST API initial commit
[lhc/web/wiklou.git] / includes / Rest / EntryPoint.php
1 <?php
2
3 namespace MediaWiki\Rest;
4
5 use ExtensionRegistry;
6 use MediaWiki\MediaWikiServices;
7 use RequestContext;
8 use Title;
9
10 class EntryPoint {
11 public static function main() {
12 // URL safety checks
13 global $wgRequest;
14 if ( !$wgRequest->checkUrlExtension() ) {
15 return;
16 }
17
18 // Set $wgTitle and the title in RequestContext, as in api.php
19 global $wgTitle;
20 $wgTitle = Title::makeTitle( NS_SPECIAL, 'Badtitle/rest.php' );
21 RequestContext::getMain()->setTitle( $wgTitle );
22
23 $services = MediaWikiServices::getInstance();
24
25 $conf = $services->getMainConfig();
26 $request = new RequestFromGlobals( [
27 'cookiePrefix' => $conf->get( 'CookiePrefix' )
28 ] );
29
30 global $IP;
31 $router = new Router(
32 [ "$IP/includes/Rest/coreRoutes.json" ],
33 ExtensionRegistry::getInstance()->getAttribute( 'RestRoutes' ),
34 $conf->get( 'RestPath' ),
35 $services->getLocalServerObjectCache(),
36 new ResponseFactory
37 );
38
39 $response = $router->execute( $request );
40
41 $webResponse = $wgRequest->response();
42 $webResponse->header(
43 'HTTP/' . $response->getProtocolVersion() . ' ' .
44 $response->getStatusCode() . ' ' .
45 $response->getReasonPhrase() );
46
47 foreach ( $response->getRawHeaderLines() as $line ) {
48 $webResponse->header( $line );
49 }
50
51 foreach ( $response->getCookies() as $cookie ) {
52 $webResponse->setCookie(
53 $cookie['name'],
54 $cookie['value'],
55 $cookie['expiry'],
56 $cookie['options'] );
57 }
58
59 $stream = $response->getBody();
60 $stream->rewind();
61 if ( $stream instanceof CopyableStreamInterface ) {
62 $stream->copyToStream( fopen( 'php://output', 'w' ) );
63 } else {
64 while ( true ) {
65 $buffer = $stream->read( 65536 );
66 if ( $buffer === '' ) {
67 break;
68 }
69 echo $buffer;
70 }
71 }
72 }
73 }