2011-03-28 14:21:28 +00:00
< ?
// Main image proxy page
// The image proxy does not use script_start.php, its code instead resides entirely in image.php in the document root
// Bear this in mind when you try to use script_start functions.
2011-09-10 08:00:10 +00:00
if ( ! check_perms ( 'site_proxy_images' )) { error ( 'forbidden' ); }
2011-08-27 08:00:05 +00:00
$URL = isset ( $_GET [ 'i' ]) ? htmlspecialchars_decode ( $_GET [ 'i' ]) : null ;
2011-03-28 14:21:28 +00:00
2011-09-10 08:00:10 +00:00
if ( ! extension_loaded ( 'openssl' ) && strtoupper ( $URL [ 4 ]) == 'S' ) { error ( 'badprotocol' ); }
2011-03-28 14:21:28 +00:00
if ( ! preg_match ( '/^' . IMAGE_REGEX . '/is' , $URL , $Matches )) {
error ( 'invalid' );
}
2011-09-10 08:00:10 +00:00
if ( isset ( $_GET [ 'c' ])) {
2011-03-28 14:21:28 +00:00
list ( $Data , $Type ) = $Cache -> get_value ( 'image_cache_' . md5 ( $URL ));
$Cached = true ;
}
if ( ! isset ( $Data ) || ! $Data ) {
$Cached = false ;
$Data = @ file_get_contents ( $URL , 0 , stream_context_create ( array ( 'http' => array ( 'timeout' => 15 ))));
2011-09-10 08:00:10 +00:00
if ( ! $Data || empty ( $Data )) {
2011-03-28 14:21:28 +00:00
error ( 'timeout' );
}
2011-09-10 08:00:10 +00:00
$Type = image_type ( $Data );
if ( $Type && function_exists ( 'imagecreatefrom' . $Type )) {
2011-03-28 14:21:28 +00:00
$Image = imagecreatefromstring ( $Data );
2011-09-10 08:00:10 +00:00
if ( invisible ( $Image )) {
2011-03-28 14:21:28 +00:00
error ( 'invisible' );
}
2011-09-10 08:00:10 +00:00
if ( verysmall ( $Image )) {
2011-03-28 14:21:28 +00:00
error ( 'small' );
}
}
2011-09-10 08:00:10 +00:00
if ( isset ( $_GET [ 'c' ]) && strlen ( $Data ) < 262144 ) {
2011-03-28 14:21:28 +00:00
$Cache -> cache_value ( 'image_cache_' . md5 ( $URL ), array ( $Data , $Type ), 3600 * 24 * 7 );
}
}
// Enforce avatar rules
2011-09-10 08:00:10 +00:00
if ( isset ( $_GET [ 'avatar' ])) {
2011-03-28 14:21:28 +00:00
if ( ! is_number ( $_GET [ 'avatar' ])) { die (); }
$UserID = $_GET [ 'avatar' ];
2011-09-10 08:00:10 +00:00
2011-03-28 14:21:28 +00:00
$Height = image_height ( $Type , $Data );
if ( strlen ( $Data ) > 256 * 1024 || $Height > 400 ) {
// Sometimes the cached image we have isn't the actual image
if ( $Cached ) {
$Data2 = @ file_get_contents ( $URL , 0 , stream_context_create ( array ( 'http' => array ( 'timeout' => 15 ))));
} else {
$Data2 = $Data ;
}
if ( strlen ( $Data2 ) > 256 * 1024 || image_height ( $Type , $Data2 ) > 400 ) {
require_once ( SERVER_ROOT . '/classes/class_mysql.php' );
require_once ( SERVER_ROOT . '/classes/class_time.php' ); //Require the time class
2011-09-10 08:00:10 +00:00
2011-03-28 14:21:28 +00:00
$DB = new DB_MYSQL ;
$DBURL = db_string ( $URL );
2011-09-10 08:00:10 +00:00
2011-03-28 14:21:28 +00:00
// Reset avatar, add mod note
$UserInfo = $Cache -> get_value ( 'user_info_' . $UserID );
$UserInfo [ 'Avatar' ] = '' ;
$Cache -> cache_value ( 'user_info_' . $UserID , $UserInfo , 2592000 );
2011-09-10 08:00:10 +00:00
$DB -> query ( " UPDATE users_info SET Avatar='', AdminComment=CONCAT(' " . sqltime () . " - Avatar reset automatically (Size: " . number_format (( strlen ( $Data )) / 1024 ) . " kb, Height: " . $Height . " px). Used to be $DBURL\n\n ', AdminComment) WHERE UserID=' $UserID ' " );
2011-03-28 14:21:28 +00:00
// Send PM
2011-09-10 08:00:10 +00:00
2012-10-11 08:00:15 +00:00
Misc :: send_pm ( $UserID , 0 , " Your avatar has been automatically reset " , " The following avatar rules have been in effect for months now:
2011-03-28 14:21:28 +00:00
[ b ] Avatars must not exceed 256 kB or be vertically longer than 400 px . [ / b ]
Your avatar at $DBURL has been found to exceed these rules . As such , it has been automatically reset . You are welcome to reinstate your avatar once it has been resized down to an acceptable size . " );
2011-09-10 08:00:10 +00:00
2011-03-28 14:21:28 +00:00
}
}
}
/*
TODO : solve this properl for photoshop output images which prepend shit to the image file . skip it or strip it
if ( ! isset ( $Type )) {
error ( 'timeout' );
}
*/
2011-09-10 08:00:10 +00:00
if ( isset ( $Type )) {
2011-03-28 14:21:28 +00:00
header ( 'Content-type: image/' . $Type );
}
echo $Data ;
?>