$response = $this->getRequest()->response();
$headerStr = 'MediaWiki-API-Error: ' . $errCode;
- if ( $e->getCode() === 0 ) {
- $response->header( $headerStr );
- } else {
- $response->header( $headerStr, true, $e->getCode() );
- }
+ $response->header( $headerStr );
// Reset and print just the error message
ob_clean();
$this->createErrorPrinter();
try {
- $this->printResult( true );
+ $this->printResult( $e->getCode() );
} catch ( UsageException $ex ) {
// The error printer itself is failing. Try suppressing its request
// parameters and redo.
$this->mPrinter = null;
$this->createErrorPrinter();
$this->mPrinter->forceDefaultParams();
- $this->printResult( true );
+ if ( $e->getCode() ) {
+ $response->statusHeader( 200 ); // Reset in case the fallback doesn't want a non-200
+ }
+ $this->printResult( $e->getCode() );
}
}
* If the parameter and the header do match, the header is checked against $wgCrossSiteAJAXdomains
* and $wgCrossSiteAJAXdomainExceptions, and if the origin qualifies, the appropriate CORS
* headers are set.
- * http://www.w3.org/TR/cors/#resource-requests
- * http://www.w3.org/TR/cors/#resource-preflight-requests
+ * https://www.w3.org/TR/cors/#resource-requests
+ * https://www.w3.org/TR/cors/#resource-preflight-requests
*
* @return bool False if the caller should abort (403 case), true otherwise (all other cases)
*/
$response->header( "Access-Control-Allow-Origin: $allowOrigin" );
$response->header( "Access-Control-Allow-Credentials: $allowCredentials" );
- // http://www.w3.org/TR/resource-timing/#timing-allow-origin
+ // https://www.w3.org/TR/resource-timing/#timing-allow-origin
if ( $allowTiming !== false ) {
$response->header( "Timing-Allow-Origin: $allowTiming" );
}
MWDebug::appendDebugInfoToApiResult( $this->getContext(), $this->getResult() );
// Print result data
- $this->printResult( false );
+ $this->printResult();
}
}
'ip' => $request->getIP(),
'userAgent' => $this->getUserAgent(),
'wiki' => wfWikiID(),
- 'timeSpentBackend' => (int) round( $time * 1000 ),
+ 'timeSpentBackend' => (int)round( $time * 1000 ),
'hadError' => $e !== null,
'errorCodes' => [],
'params' => [],
/**
* Print results using the current printer
*
- * @param bool $isError
+ * @param int $httpCode HTTP status code, or 0 to not change
*/
- protected function printResult( $isError ) {
+ protected function printResult( $httpCode = 0 ) {
if ( $this->getConfig()->get( 'DebugAPI' ) !== false ) {
$this->setWarning( 'SECURITY WARNING: $wgDebugAPI is enabled' );
}
$printer = $this->mPrinter;
$printer->initPrinter( false );
+ if ( $httpCode ) {
+ $printer->setHttpStatus( $httpCode );
+ }
$printer->execute();
$printer->closePrinter();
}