From 483e9d3cdbe45e0214e7da56b89f299c06348f90 Mon Sep 17 00:00:00 2001 From: Derk-Jan Hartman Date: Fri, 4 Sep 2015 21:13:21 +0200 Subject: [PATCH] Add option to ApiFormatRaw to generate a HTTP errorcode New method setFailWithHTTPError() allows you to configure ApiFormatRaw to return HTTP status code 400 in case it encounters (any) error. This is useful for when the output format is intended to be read by a user-agent which has no other method to be notified of errors. Change-Id: I11b2824c6725143cff5b4c56194f94c44ce451c0 --- includes/api/ApiFormatRaw.php | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/includes/api/ApiFormatRaw.php b/includes/api/ApiFormatRaw.php index 7bb2453d2c..9dbd4a553f 100644 --- a/includes/api/ApiFormatRaw.php +++ b/includes/api/ApiFormatRaw.php @@ -31,14 +31,20 @@ class ApiFormatRaw extends ApiFormatBase { private $errorFallback; + private $mFailWithHTTPError = false; + /** * @param ApiMain $main - * @param ApiFormatBase $errorFallback Object to fall back on for errors + * @param ApiFormatBase |null $errorFallback Object to fall back on for errors */ - public function __construct( ApiMain $main, ApiFormatBase $errorFallback ) { + public function __construct( ApiMain $main, ApiFormatBase $errorFallback = null ) { parent::__construct( $main, 'raw' ); - $this->errorFallback = $errorFallback; + if ( $errorFallback === null ) { + $this->errorFallback = $main->createPrinterByName( $main->getParameter( 'format' ) ); + } else { + $this->errorFallback = $errorFallback; + } } public function getMimeType() { @@ -59,6 +65,9 @@ class ApiFormatRaw extends ApiFormatBase { $data = $this->getResult()->getResultData(); if ( isset( $data['error'] ) ) { $this->errorFallback->initPrinter( $unused ); + if ( $this->mFailWithHTTPError ) { + $this->getMain()->getRequest()->response()->statusHeader( 400 ); + } } else { parent::initPrinter( $unused ); } @@ -85,4 +94,17 @@ class ApiFormatRaw extends ApiFormatBase { } $this->printText( $data['text'] ); } + + /** + * Output HTTP error code 400 when if an error is encountered + * + * The purpose is for output formats where the user-agent will + * not be able to interpret the validity of the content in any + * other way. For example subtitle files read by browser video players. + * + * @param bool $fail + */ + public function setFailWithHTTPError( $fail ) { + $this->mFailWithHTTPError = $fail; + } } -- 2.20.1