feature 2831: simple way to protect urls of originals

git-svn-id: http://piwigo.org/svn/trunk@20516 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
rvelices 2013-02-02 07:09:52 +00:00
parent 21c97f3858
commit 5b22fcea0e
4 changed files with 34 additions and 4 deletions

View file

@ -266,5 +266,10 @@ add_event_handler('render_comment_content', 'render_comment_content');
add_event_handler('render_comment_author', 'strip_tags'); add_event_handler('render_comment_author', 'strip_tags');
add_event_handler('render_tag_url', 'str2url'); add_event_handler('render_tag_url', 'str2url');
add_event_handler('blockmanager_register_blocks', 'register_default_menubar_blocks', EVENT_HANDLER_PRIORITY_NEUTRAL-1); add_event_handler('blockmanager_register_blocks', 'register_default_menubar_blocks', EVENT_HANDLER_PRIORITY_NEUTRAL-1);
if ( !empty($conf['original_url_protection']) )
{
add_event_handler('get_element_url', 'get_element_url_protection_handler', EVENT_HANDLER_PRIORITY_NEUTRAL, 2 );
add_event_handler('get_src_image_url', 'get_src_image_url_protection_handler', EVENT_HANDLER_PRIORITY_NEUTRAL, 2 );
}
trigger_action('init'); trigger_action('init');
?> ?>

View file

@ -777,4 +777,8 @@ $conf['derivative_default_size'] = 'medium';
//Maximum Ajax requests at once, for thumbnails on-the-fly generation //Maximum Ajax requests at once, for thumbnails on-the-fly generation
$conf['max_requests']=3; $conf['max_requests']=3;
// one of '', 'images', 'all'
//TODO: Put this in admin and also manage .htaccess in #sites and upload folders
$conf['original_url_protection'] = '';
?> ?>

View file

@ -19,7 +19,7 @@
// | USA. | // | USA. |
// +-----------------------------------------------------------------------+ // +-----------------------------------------------------------------------+
/*A source image is used to get a derivative image. A source image is either the original file for a jpg or a /*A source image is used to get a derivative image. A source image is either the original file for a jpg or a
'representative' image of a non image file or a standard icon for the non-image file.*/ 'representative' image of a non image file or a standard icon for the non-image file.*/
final class SrcImage final class SrcImage
{ {
@ -78,7 +78,7 @@ final class SrcImage
$width = $infos['height']; $width = $infos['height'];
$height = $infos['width']; $height = $infos['width'];
} }
$this->size = array($width, $height); $this->size = array($width, $height);
} }
elseif (!array_key_exists('width', $infos)) elseif (!array_key_exists('width', $infos))
@ -106,7 +106,7 @@ final class SrcImage
function get_url() function get_url()
{ {
$url = get_root_url().$this->rel_path; $url = get_root_url().$this->rel_path;
if ($this->flags & self::IS_ORIGINAL) if ( !($this->flags & self::IS_MIMETYPE) )
{ {
$url = trigger_event('get_src_image_url', $url, $this); $url = trigger_event('get_src_image_url', $url, $this);
} }
@ -170,7 +170,7 @@ final class DerivativeImage
return self::url(IMG_THUMB, $infos); return self::url(IMG_THUMB, $infos);
} }
/** /**
@return derivative image url @return derivative image url
@param type string of standard derivative param type (e.g. IMG_???) or a DerivativeParams object @param type string of standard derivative param type (e.g. IMG_???) or a DerivativeParams object
@param infos assoc array of data from images table or a SrcImage object @param infos assoc array of data from images table or a SrcImage object

View file

@ -593,4 +593,25 @@ function get_thumbnail_title($info, $title, $comment)
return $title; return $title;
} }
/** optional event handler to protect src image urls */
function get_src_image_url_protection_handler($url, $src_image)
{
return get_action_url($src_image->id, $src_image->is_original() ? 'e' : 'r', false);
}
/** optional event handler to protect element urls */
function get_element_url_protection_handler($url, $infos)
{
global $conf;
if ('images'==$conf['original_url_protection'])
{// protect only images and not other file types (for example large movies that we don't want to send through our file proxy)
$ext = get_extension($infos['path']);
if (!in_array($ext, $conf['picture_ext']))
{
return $url;
}
}
return get_action_url($infos['id'], 'e', false);
}
?> ?>