MediaWiki  1.34.0
RestbaseVirtualRESTService.php
Go to the documentation of this file.
1 <?php
51  public function __construct( array $params ) {
52  // set up defaults and merge them with the given params
53  $mparams = array_merge( [
54  'name' => 'restbase',
55  'url' => 'http://localhost:7231/',
56  'domain' => 'localhost',
57  'timeout' => 100,
58  'forwardCookies' => false,
59  'HTTPProxy' => null,
60  'parsoidCompat' => false,
61  'fixedUrl' => false,
62  ], $params );
63  // Ensure that the url parameter has a trailing slash.
64  if ( substr( $mparams['url'], -1 ) !== '/' ) {
65  $mparams['url'] .= '/';
66  }
67  // Ensure the correct domain format: strip protocol, port,
68  // and trailing slash if present. This lets us use
69  // $wgCanonicalServer as a default value, which is very convenient.
70  $mparams['domain'] = preg_replace(
71  '/^(https?:\/\/)?([^\/:]+?)(:\d+)?\/?$/',
72  '$2',
73  $mparams['domain']
74  );
75  parent::__construct( $mparams );
76  }
77 
78  public function onRequests( array $reqs, Closure $idGenFunc ) {
79  if ( $this->params['parsoidCompat'] ) {
80  return $this->onParsoidRequests( $reqs, $idGenFunc );
81  }
82 
83  $result = [];
84  foreach ( $reqs as $key => $req ) {
85  if ( $this->params['fixedUrl'] ) {
86  $version = explode( '/', $req['url'] )[1];
87  $req['url'] =
88  str_replace( '#version#', $version, $this->params['url'] ) .
89  preg_replace( '#^local/v./#', '', $req['url'] );
90  } else {
91  // replace /local/ with the current domain
92  $req['url'] = preg_replace( '#^local/#', $this->params['domain'] . '/', $req['url'] );
93  // and prefix it with the service URL
94  $req['url'] = $this->params['url'] . $req['url'];
95  }
96 
97  // set the appropriate proxy, timeout and headers
98  if ( $this->params['HTTPProxy'] ) {
99  $req['proxy'] = $this->params['HTTPProxy'];
100  }
101  if ( $this->params['timeout'] != null ) {
102  $req['reqTimeout'] = $this->params['timeout'];
103  }
104  if ( $this->params['forwardCookies'] ) {
105  $req['headers']['Cookie'] = $this->params['forwardCookies'];
106  }
107  $result[$key] = $req;
108  }
109 
110  return $result;
111  }
112 
120  public function onParsoidRequests( array $reqs, Closure $idGeneratorFunc ) {
121  $result = [];
122  foreach ( $reqs as $key => $req ) {
123  $version = explode( '/', $req['url'] )[1];
124  if ( $version === 'v3' ) {
125  $result[$key] = $this->onParsoid3Request( $req, $idGeneratorFunc );
126  } else {
127  throw new Exception( "Only Parsoid v3 is supported." );
128  }
129  }
130 
131  return $result;
132  }
133 
152  public function onParsoid3Request( array $req, Closure $idGeneratorFunc ) {
153  $parts = explode( '/', $req['url'] );
154  list(
155  $targetWiki, // 'local'
156  $version, // 'v3'
157  $action, // 'transform' or 'page'
158  $format, // 'html' or 'wikitext'
159  // $title, // optional
160  // $revision, // optional
161  ) = $parts;
162  if ( $targetWiki !== 'local' ) {
163  throw new Exception( "Only 'local' target wiki is currently supported" );
164  } elseif ( $version !== 'v3' ) {
165  throw new Exception( "Version mismatch: should not happen." );
166  }
167  // replace /local/ with the current domain, change v3 to v1,
168  $req['url'] = preg_replace( '#^local/v3/#', $this->params['domain'] . '/v1/', $req['url'] );
169  // and prefix it with the service URL
170  $req['url'] = $this->params['url'] . $req['url'];
171  // set the appropriate proxy, timeout and headers
172  if ( $this->params['HTTPProxy'] ) {
173  $req['proxy'] = $this->params['HTTPProxy'];
174  }
175  if ( $this->params['timeout'] != null ) {
176  $req['reqTimeout'] = $this->params['timeout'];
177  }
178  if ( $this->params['forwardCookies'] ) {
179  $req['headers']['Cookie'] = $this->params['forwardCookies'];
180  }
181 
182  return $req;
183  }
184 
185 }
RestbaseVirtualRESTService\onParsoid3Request
onParsoid3Request(array $req, Closure $idGeneratorFunc)
Remap a Parsoid v3 request to a RESTBase v1 request.
Definition: RestbaseVirtualRESTService.php:152
RestbaseVirtualRESTService\onRequests
onRequests(array $reqs, Closure $idGenFunc)
Prepare virtual HTTP(S) requests (for this service) for execution.
Definition: RestbaseVirtualRESTService.php:78
RestbaseVirtualRESTService\__construct
__construct(array $params)
Example RESTBase v1 requests: GET /local/v1/page/html/{title}{/revision} POST /local/v1/transform/htm...
Definition: RestbaseVirtualRESTService.php:51
RestbaseVirtualRESTService\onParsoidRequests
onParsoidRequests(array $reqs, Closure $idGeneratorFunc)
Remaps Parsoid v3 requests to RESTBase v1 requests.
Definition: RestbaseVirtualRESTService.php:120
RestbaseVirtualRESTService
Virtual HTTP service client for RESTBase.
Definition: RestbaseVirtualRESTService.php:25
VirtualRESTService
Virtual HTTP service instance that can be mounted on to a VirtualRESTService.
Definition: VirtualRESTService.php:36
VirtualRESTService\$params
array $params
Key/value map.
Definition: VirtualRESTService.php:38