diff options
author | Yaco <franco@reevo.org> | 2019-07-31 14:50:50 -0300 |
---|---|---|
committer | Yaco <franco@reevo.org> | 2019-07-31 14:50:50 -0300 |
commit | 3848848fc3bc2db035c824f1453635949505d76e (patch) | |
tree | 71fd898ebb220e7ba034cf2bc1bf708fdd0d6219 /www/wiki/thumb.php | |
parent | 2dfe0b926fe5c6c4f27ad1f9bc1c1377cb091111 (diff) |
ACTUALIZA MW a 1.31.3, SMW a 3.0.2 y extensiones menores
Diffstat (limited to 'www/wiki/thumb.php')
-rw-r--r-- | www/wiki/thumb.php | 59 |
1 files changed, 53 insertions, 6 deletions
diff --git a/www/wiki/thumb.php b/www/wiki/thumb.php index 7c3e7572..3b714135 100644 --- a/www/wiki/thumb.php +++ b/www/wiki/thumb.php @@ -235,9 +235,9 @@ 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; @@ -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 */ @@ -378,6 +387,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 * * @param File $file @@ -572,7 +618,7 @@ function wfExtractThumbParams( $file, $params ) { * @return void */ function wfThumbErrorText( $status, $msgText ) { - wfThumbError( $status, htmlspecialchars( $msgText ) ); + wfThumbError( $status, htmlspecialchars( $msgText, ENT_NOQUOTES ) ); } /** @@ -602,9 +648,10 @@ function wfThumbError( $status, $msgHtml, $msgText = null, $context = [] ) { if ( $wgShowHostnames ) { header( 'X-MW-Thumbnail-Renderer: ' . wfHostname() ); $url = htmlspecialchars( - isset( $_SERVER['REQUEST_URI'] ) ? $_SERVER['REQUEST_URI'] : '' + isset( $_SERVER['REQUEST_URI'] ) ? $_SERVER['REQUEST_URI'] : '', + ENT_NOQUOTES ); - $hostname = htmlspecialchars( wfHostname() ); + $hostname = htmlspecialchars( wfHostname(), ENT_NOQUOTES ); $debug = "<!-- $url -->\n<!-- $hostname -->\n"; } else { $debug = ''; |