51 if ( isset(
$params[
'URL'] ) ) {
56 $mparams = array_merge( [
58 'url' =>
'http://localhost:8000/',
59 'prefix' =>
'localhost',
60 'domain' =>
'localhost',
62 'forwardCookies' =>
false,
66 if ( substr( $mparams[
'url'], -1 ) !==
'/' ) {
67 $mparams[
'url'] .=
'/';
72 $mparams[
'domain'] = preg_replace(
73 '/^(https?:\/\/)?([^\/:]+?)(:\d+)?\/?$/',
77 parent::__construct( $mparams );
80 public function onRequests( array $reqs, Closure $idGeneratorFunc ) {
82 foreach ( $reqs as $key =>
$req ) {
83 $parts = explode(
'/',
$req[
'url'] );
94 if ( isset( $this->params[
'restbaseCompat'] ) && $this->params[
'restbaseCompat'] ) {
95 if ( $version !==
'v1' ) {
96 throw new Exception(
"Only RESTBase v1 API is supported." );
98 # Map RESTBase v1 API to Parsoid v3 API (pretty easy)
99 $req[
'url'] = preg_replace(
'#^local/v1/#',
'local/v3/',
$req[
'url'] );
100 } elseif ( $version !==
'v3' ) {
104 if ( $targetWiki !==
'local' ) {
105 throw new Exception(
"Only 'local' target wiki is currently supported" );
107 if ( $reqType !==
'page' && $reqType !==
'transform' ) {
108 throw new Exception(
"Request action must be either 'page' or 'transform'" );
110 if ( $format !==
'html' && $format !==
'wikitext' ) {
111 throw new Exception(
"Request format must be either 'html' or 'wt'" );
114 $req[
'url'] = preg_replace(
'#^local/#', $this->params[
'domain'] .
'/',
$req[
'url'] );
116 $req[
'url'] = $this->params[
'url'] .
$req[
'url'];
118 if ( $this->params[
'HTTPProxy'] ) {
119 $req[
'proxy'] = $this->params[
'HTTPProxy'];
121 if ( $this->params[
'timeout'] !=
null ) {
122 $req[
'reqTimeout'] = $this->params[
'timeout'];
124 if ( $this->params[
'forwardCookies'] ) {
125 $req[
'headers'][
'Cookie'] = $this->params[
'forwardCookies'];
127 $result[$key] =
$req;
155 $parts = explode(
'/',
$req[
'url'] );
161 if ( $targetWiki !==
'local' ) {
162 throw new Exception(
"Only 'local' target wiki is currently supported" );
163 } elseif ( $version !==
'v1' ) {
164 throw new Exception(
"Only v1 and v3 are supported." );
165 } elseif ( $reqType !==
'page' && $reqType !==
'transform' ) {
166 throw new Exception(
"Request type must be either 'page' or 'transform'" );
168 $req[
'url'] = $this->params[
'url'] . $this->params[
'domain'] .
'/v3/';
169 if ( $reqType ===
'page' ) {
171 if ( $parts[4] !==
'html' ) {
172 throw new Exception(
"Only 'html' output format is currently supported" );
175 if ( isset( $parts[5] ) ) {
176 $req[
'url'] .=
'/' . $parts[5];
177 } elseif ( isset(
$req[
'query'][
'oldid'] ) &&
$req[
'query'][
'oldid'] ) {
178 $req[
'url'] .=
'/' .
$req[
'query'][
'oldid'];
179 unset(
$req[
'query'][
'oldid'] );
181 } elseif ( $reqType ===
'transform' ) {
182 $req[
'url'] .=
'transform/'. $parts[3] .
'/to/' . $parts[5];
184 if ( isset( $parts[6] ) ) {
185 $req[
'url'] .=
'/' . $parts[6];
188 if ( isset( $parts[7] ) ) {
189 $req[
'url'] .=
'/' . $parts[7];
190 } elseif ( isset(
$req[
'body'][
'oldid'] ) &&
$req[
'body'][
'oldid'] ) {
191 $req[
'url'] .=
'/' .
$req[
'body'][
'oldid'];
192 unset(
$req[
'body'][
'oldid'] );
194 if ( $parts[4] !==
'to' ) {
195 throw new Exception(
"Part index 4 is not 'to'" );
197 if ( $parts[3] ===
'html' && $parts[5] ===
'wikitext' ) {
198 if ( !isset(
$req[
'body'][
'html'] ) ) {
199 throw new Exception(
"You must set an 'html' body key for this request" );
201 } elseif ( $parts[3] ==
'wikitext' && $parts[5] ==
'html' ) {
202 if ( !isset(
$req[
'body'][
'wikitext'] ) ) {
203 throw new Exception(
"You must set a 'wikitext' body key for this request" );
205 if ( isset(
$req[
'body'][
'body'] ) ) {
206 $req[
'body'][
'body_only'] =
$req[
'body'][
'body'];
207 unset(
$req[
'body'][
'body'] );
210 throw new Exception(
"Transformation unsupported" );
214 if ( $this->params[
'HTTPProxy'] ) {
215 $req[
'proxy'] = $this->params[
'HTTPProxy'];
217 if ( $this->params[
'timeout'] !=
null ) {
218 $req[
'reqTimeout'] = $this->params[
'timeout'];
220 if ( $this->params[
'forwardCookies'] ) {
221 $req[
'headers'][
'Cookie'] = $this->params[
'forwardCookies'];
Virtual HTTP service client for Parsoid.
onRequests(array $reqs, Closure $idGeneratorFunc)
Prepare virtual HTTP(S) requests (for this service) for execution.
__construct(array $params)
Example Parsoid v3 requests: GET /local/v3/page/html/$title/{$revision}.
onParsoid1Request(array $req, Closure $idGeneratorFunc)
Remap a Parsoid v1 request to a Parsoid v3 request.
Virtual HTTP service instance that can be mounted on to a VirtualRESTService.
array $params
Key/value map.
deferred txt A few of the database updates required by various functions here can be deferred until after the result page is displayed to the user For updating the view updating the linked to tables after a etc PHP does not yet have any way to tell the server to actually return and disconnect while still running these but it might have such a feature in the future We handle these by creating a deferred update object and putting those objects on a global list
this hook is for auditing only $req
namespace being checked & $result
namespace and then decline to actually register it file or subcat img or subcat $title