img_auth: handle files in the transcoded zone
authorFaidon Liambotis <faidon@wikimedia.org>
Wed, 7 May 2014 17:01:16 +0000 (20:01 +0300)
committerOri.livneh <ori@wikimedia.org>
Thu, 8 May 2014 16:17:33 +0000 (16:17 +0000)
img_auth.php does not currently handle filepaths for transcoded videos
at all, and instead falls back attempting to open files out of the
public zone, which obviously fails as these files do not exist there.

Add a branch that handles transcoded containers in the same manner as
thumbs and thus allowing access to those files from private wiki.

Bug: 65007
Change-Id: I7182206ba09dd2466fc51aa1d51116dd13db980c

img_auth.php

index a3485df..6f449c6 100644 (file)
@@ -106,14 +106,15 @@ function wfImageAuthMain() {
 
        // Get the local file repository
        $repo = RepoGroup::singleton()->getRepo( 'local' );
+       $zone = strstr( ltrim( $path, '/' ), '/', true );
 
        // Get the full file storage path and extract the source file name.
        // (e.g. 120px-Foo.png => Foo.png or page2-120px-Foo.png => Foo.png).
-       // This only applies to thumbnails, and all thumbnails should
+       // This only applies to thumbnails/transcoded, and each of them should
        // be under a folder that has the source file name.
-       if ( strpos( $path, '/thumb/' ) === 0 ) {
-               $name = wfBaseName( dirname( $path ) ); // file is a thumbnail
-               $filename = $repo->getZonePath( 'thumb' ) . substr( $path, 6 ); // strip "/thumb"
+       if ( $zone === 'thumb' || $zone === 'transcoded' ) {
+               $name = wfBaseName( dirname( $path ) );
+               $filename = $repo->getZonePath( $zone ) . substr( $path, strlen( "/".$zone ) );
                // Check to see if the file exists
                if ( !$repo->fileExists( $filename ) ) {
                        wfForbidden( 'img-auth-accessdenied', 'img-auth-nofile', $filename );