X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=thumb.php;h=70329093c6b63570437298ef395c01b051c2de5d;hb=846f600dd0464c593a741e2284e2c2810be3afd6;hp=02ac0b024dcd580e8030f1863cad7ebee407cc46;hpb=9a6b2a4fffb82840d0bf780eb4ecb873ad64fa54;p=lhc%2Fweb%2Fwiklou.git diff --git a/thumb.php b/thumb.php index 02ac0b024d..70329093c6 100644 --- a/thumb.php +++ b/thumb.php @@ -35,7 +35,7 @@ if ( defined( 'THUMB_HANDLER' ) ) { wfThumbHandle404(); } else { // Called directly, use $_GET params - wfStreamThumb( $_GET ); + wfStreamThumb( $wgRequest->getQueryValues() ); } $mediawiki = new MediaWiki(); @@ -94,7 +94,7 @@ function wfStreamThumb( array $params ) { $headers = []; // HTTP headers to send - $fileName = isset( $params['f'] ) ? $params['f'] : ''; + $fileName = $params['f'] ?? ''; // Backwards compatibility parameters if ( isset( $params['w'] ) ) { @@ -235,16 +235,16 @@ function wfStreamThumb( array $params ) { // Fix IE brokenness $imsString = preg_replace( '/;.*$/', '', $_SERVER["HTTP_IF_MODIFIED_SINCE"] ); // Calculate time - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $imsUnix = strtotime( $imsString ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( wfTimestamp( TS_UNIX, $img->getTimestamp() ) <= $imsUnix ) { HttpStatus::header( 304 ); return; } } - $rel404 = isset( $params['rel404'] ) ? $params['rel404'] : null; + $rel404 = $params['rel404'] ?? null; unset( $params['r'] ); // ignore 'r' because we unconditionally pass File::RENDER unset( $params['f'] ); // We're done with 'f' parameter. unset( $params['rel404'] ); // moved to $rel404 @@ -337,7 +337,16 @@ function wfStreamThumb( array $params ) { return; } - list( $thumb, $errorMsg ) = wfGenerateThumbnail( $img, $params, $thumbName, $thumbPath ); + $thumbProxyUrl = $img->getRepo()->getThumbProxyUrl(); + + if ( strlen( $thumbProxyUrl ) ) { + wfProxyThumbnailRequest( $img, $thumbName ); + // No local fallback when in proxy mode + return; + } else { + // Generate the thumbnail locally + list( $thumb, $errorMsg ) = wfGenerateThumbnail( $img, $params, $thumbName, $thumbPath ); + } /** @var MediaTransformOutput|MediaTransformError|bool $thumb */ @@ -377,6 +386,43 @@ function wfStreamThumb( array $params ) { } } +/** + * Proxies thumbnail request to a service that handles thumbnailing + * + * @param File $img + * @param string $thumbName + */ +function wfProxyThumbnailRequest( $img, $thumbName ) { + $thumbProxyUrl = $img->getRepo()->getThumbProxyUrl(); + + // Instead of generating the thumbnail ourselves, we proxy the request to another service + $thumbProxiedUrl = $thumbProxyUrl . $img->getThumbRel( $thumbName ); + + $req = MWHttpRequest::factory( $thumbProxiedUrl ); + $secret = $img->getRepo()->getThumbProxySecret(); + + // Pass a secret key shared with the proxied service if any + if ( strlen( $secret ) ) { + $req->setHeader( 'X-Swift-Secret', $secret ); + } + + // Send request to proxied service + $status = $req->execute(); + + // Simply serve the response from the proxied service as-is + header( 'HTTP/1.1 ' . $req->getStatus() ); + + $headers = $req->getResponseHeaders(); + + foreach ( $headers as $key => $values ) { + foreach ( $values as $value ) { + header( $key . ': ' . $value, false ); + } + } + + echo $req->getContent(); +} + /** * Actually try to generate a new thumbnail * @@ -454,7 +500,7 @@ function wfGenerateThumbnail( File $file, array $params, $thumbName, $thumbPath } /** @noinspection PhpUnusedLocalVariableInspection */ - $done = true; // no PHP fatal occured + $done = true; // no PHP fatal occurred if ( !$thumb || $thumb->isError() ) { // Randomize TTL to reduce stampedes @@ -580,7 +626,7 @@ function wfThumbErrorText( $status, $msgText ) { * * @param int $status * @param string $msgHtml HTML - * @param string $msgText Short error description, for internal logging. Defaults to $msgHtml. + * @param string|null $msgText Short error description, for internal logging. Defaults to $msgHtml. * Only used for HTTP 500 errors. * @param array $context Error context, for internal logging. Only used for HTTP 500 errors. * @return void @@ -602,7 +648,7 @@ function wfThumbError( $status, $msgHtml, $msgText = null, $context = [] ) { if ( $wgShowHostnames ) { header( 'X-MW-Thumbnail-Renderer: ' . wfHostname() ); $url = htmlspecialchars( - isset( $_SERVER['REQUEST_URI'] ) ? $_SERVER['REQUEST_URI'] : '', + $_SERVER['REQUEST_URI'] ?? '', ENT_NOQUOTES ); $hostname = htmlspecialchars( wfHostname(), ENT_NOQUOTES );