From 92a5b9ac41b6e60c5250307a2cd6f58802cd0fd5 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Thu, 29 Nov 2018 10:34:18 +0100 Subject: [PATCH 01/19] Add PHOTO_CACHE photo type --- boot.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/boot.php b/boot.php index c74309be0..e49134a55 100755 --- a/boot.php +++ b/boot.php @@ -53,7 +53,7 @@ define ( 'PLATFORM_NAME', 'hubzilla' ); define ( 'STD_VERSION', '3.9.5' ); define ( 'ZOT_REVISION', '6.0a' ); -define ( 'DB_UPDATE_VERSION', 1228 ); +define ( 'DB_UPDATE_VERSION', 1229 ); define ( 'PROJECT_BASE', __DIR__ ); @@ -217,6 +217,7 @@ define ( 'PHOTO_PROFILE', 0x0001 ); define ( 'PHOTO_XCHAN', 0x0002 ); define ( 'PHOTO_THING', 0x0004 ); define ( 'PHOTO_COVER', 0x0010 ); +define ( 'PHOTO_CACHE', 0x0020 ); define ( 'PHOTO_ADULT', 0x0008 ); define ( 'PHOTO_FLAG_OS', 0x4000 ); From 72d2fe2fd46ccd37a22b2bda8b25ab366e8ba920 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Thu, 29 Nov 2018 10:35:11 +0100 Subject: [PATCH 02/19] Add expires for photo --- install/schema_mysql.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/install/schema_mysql.sql b/install/schema_mysql.sql index 3e3e6fe88..49a2c476a 100644 --- a/install/schema_mysql.sql +++ b/install/schema_mysql.sql @@ -947,6 +947,7 @@ CREATE TABLE IF NOT EXISTS `photo` ( `resource_id` char(191) NOT NULL DEFAULT '', `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `edited` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `expires` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `title` char(191) NOT NULL DEFAULT '', `description` text NOT NULL, `album` char(191) NOT NULL DEFAULT '', @@ -979,6 +980,7 @@ CREATE TABLE IF NOT EXISTS `photo` ( KEY `xchan` (`xchan`), KEY `filesize` (`filesize`), KEY `resource_id` (`resource_id`), + KEY `expires` (`expires`), KEY `is_nsfw` (`is_nsfw`), KEY `os_storage` (`os_storage`), KEY `photo_usage` (`photo_usage`) From bb91064416e7217553c2caa4e250d0214b6ed2e4 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Thu, 29 Nov 2018 10:35:56 +0100 Subject: [PATCH 03/19] Add expires for photo --- install/schema_postgres.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/install/schema_postgres.sql b/install/schema_postgres.sql index 44f98b944..1b6cab51b 100644 --- a/install/schema_postgres.sql +++ b/install/schema_postgres.sql @@ -928,6 +928,7 @@ CREATE TABLE "photo" ( "resource_id" text NOT NULL, "created" timestamp NOT NULL, "edited" timestamp NOT NULL, + "expires" timestamp NOT NULL, "title" text NOT NULL, "description" text NOT NULL, "album" text NOT NULL, @@ -961,6 +962,7 @@ create index "photo_aid" on photo ("aid"); create index "photo_xchan" on photo ("xchan"); create index "photo_filesize" on photo ("filesize"); create index "photo_resource_id" on photo ("resource_id"); +create index "photo_expires_idx" on photo ("expires"); create index "photo_usage" on photo ("photo_usage"); create index "photo_is_nsfw" on photo ("is_nsfw"); create index "photo_os_storage" on photo ("os_storage"); From bd10d48338ef7465d186b44c0982b81503ac861b Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Thu, 29 Nov 2018 10:36:56 +0100 Subject: [PATCH 04/19] Update database with expires field for photo --- Zotlabs/Update/_1229.php | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Zotlabs/Update/_1229.php diff --git a/Zotlabs/Update/_1229.php b/Zotlabs/Update/_1229.php new file mode 100644 index 000000000..8e8711644 --- /dev/null +++ b/Zotlabs/Update/_1229.php @@ -0,0 +1,32 @@ + Date: Thu, 29 Nov 2018 10:37:39 +0100 Subject: [PATCH 05/19] Add photo cache cleanup --- Zotlabs/Daemon/Cron.php | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/Zotlabs/Daemon/Cron.php b/Zotlabs/Daemon/Cron.php index 25e49b817..8b6b42c8a 100644 --- a/Zotlabs/Daemon/Cron.php +++ b/Zotlabs/Daemon/Cron.php @@ -94,6 +94,29 @@ class Cron { @time_sleep_until(microtime(true) + (float) $interval); } } + + // Clean expired photos from cache + + $age = get_config('system','active_expire_days', '30'); + $r = q("SELECT DISTINCT xchan, content FROM photo WHERE photo_usage = %d AND expires < %s - INTERVAL %s", + intval(PHOTO_CACHE), + db_utcnow(), + db_quoteinterval($age . ' DAY') + ); + if($r) { + foreach($r as $rr) { + $file = dbunescbin($rr['content']); + if(is_file($file)) { + @unlink($file); + logger('info: deleted cached photo file ' . $file, LOGGER_DEBUG); + } + } + } + q("DELETE FROM photo WHERE photo_usage = %d AND expires < %s - INTERVAL %s", + intval(PHOTO_CACHE), + db_utcnow(), + db_quoteinterval($age . ' DAY') + ); // publish any applicable items that were set to be published in the future // (time travel posts). Restrict to items that have come of age in the last From bd0fc8a2d7f71e9b9d6fa768fa30484bcb7e22f2 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Thu, 29 Nov 2018 10:38:25 +0100 Subject: [PATCH 06/19] Add photo cache hooks --- Zotlabs/Module/Photo.php | 90 +++++++++++++++++++++++++--------------- 1 file changed, 57 insertions(+), 33 deletions(-) diff --git a/Zotlabs/Module/Photo.php b/Zotlabs/Module/Photo.php index 30e8340e2..55e92ca04 100644 --- a/Zotlabs/Module/Photo.php +++ b/Zotlabs/Module/Photo.php @@ -1,19 +1,19 @@ false, // Cache off + 'age' => 86400, // max-age + 'exp' => true, // Use own max-age + 'leak' => false // Do not allow non members use our cache + ); + call_hooks('cache_mode_hook', $cache_mode); + $observer_xchan = get_observer_hash(); $ismodified = $_SERVER['HTTP_IF_MODIFIED_SINCE']; @@ -106,13 +114,14 @@ class Photo extends \Zotlabs\Web\Controller { License link: http://creativecommons.org/licenses/by/3.0/ */ + // @FIXME It seems this part doesn't work because we are not setting such cookie $cookie_value = false; if (isset($_COOKIE['devicePixelRatio'])) { $cookie_value = intval($_COOKIE['devicePixelRatio']); } else { // Force revalidation of cache on next request - $cache_directive = 'no-cache'; + // $prvcachecontrol = 'no-cache'; $status = 'no cookie'; } @@ -129,27 +138,44 @@ class Photo extends \Zotlabs\Web\Controller { $resolution = 1; } - $r = q("SELECT uid, photo_usage FROM photo WHERE resource_id = '%s' AND imgscale = %d LIMIT 1", + $r = q("SELECT uid, photo_usage, expires, display_path FROM photo WHERE resource_id = '%s' AND imgscale = %d LIMIT 1", dbesc($photo), intval($resolution) ); if($r) { - $allowed = (-1); - if(intval($r[0]['photo_usage'])) { + $u = intval($r[0]['photo_usage']); + if($u) { $allowed = 1; - if(intval($r[0]['photo_usage']) === PHOTO_COVER) + if($u === PHOTO_COVER) if($resolution < PHOTO_RES_COVER_1200) $allowed = (-1); - if(intval($r[0]['photo_usage']) === PHOTO_PROFILE) + if($u === PHOTO_PROFILE) if(! in_array($resolution,[4,5,6])) $allowed = (-1); + if($u === PHOTO_CACHE) { + $origurl = $r[0]['display_path']; + // Cached image leak protection + if(! (local_channel() || $cache_mode['leak'])) { + header("Location: " . $origurl); + killme(); + } + // Revalidate cache + if($cache_mode['on'] && strtotime($r[0]['expires']) - 60 < time()) { + $cache = array( + 'url' => $origurl, + 'uid' => $r[0]['uid'] + ); + call_hooks('cache_url_hook', $cache); + if(! $cache['status']) + http_status_exit(404,'not found'); + } + } } - if($allowed === (-1)) { + if($allowed === (-1)) $allowed = attach_can_view($r[0]['uid'],$observer_xchan,$photo); - } $channel = channelx_by_n($r[0]['uid']); @@ -160,16 +186,19 @@ class Photo extends \Zotlabs\Web\Controller { ); $exists = (($e) ? true : false); - + if($exists && $allowed) { + $expires = strtotime($e[0]['expires'] . 'Z'); $data = dbunescbin($e[0]['content']); $filesize = $e[0]['filesize']; $mimetype = $e[0]['mimetype']; $modified = strtotime($e[0]['edited'] . 'Z'); - if(intval($e[0]['os_storage'])) + + if(intval($e[0]['os_storage'])) { $streaming = $data; + } if($e[0]['allow_cid'] != '' || $e[0]['allow_gid'] != '' || $e[0]['deny_gid'] != '' || $e[0]['deny_gid'] != '') - $prvcachecontrol = true; + $prvcachecontrol = 'no-store, no-cache, must-revalidate'; } else { if(! $allowed) { @@ -180,9 +209,9 @@ class Photo extends \Zotlabs\Web\Controller { } } - } else { + } + else http_status_exit(404,'not found'); - } } header_remove('Pragma'); @@ -225,24 +254,14 @@ class Photo extends \Zotlabs\Web\Controller { $mimetype = $ph->getType(); } } - - // @FIXME Seems never invoked - // Writing in cachefile - if (isset($cachefile) && $cachefile != '') { - file_put_contents($cachefile, $data); - $modified = filemtime($cachefile); - } - - header("Content-type: " . $mimetype); - - if($prvcachecontrol) { + if(isset($prvcachecontrol)) { // it is a private photo that they have no permission to view. // tell the browser not to cache it, in case they authenticate // and subsequently have permission to see it - header("Cache-Control: no-store, no-cache, must-revalidate"); + header("Cache-Control: " . $prvcachecontrol); } else { @@ -255,18 +274,23 @@ class Photo extends \Zotlabs\Web\Controller { // This has performance considerations but we highly recommend you // leave it alone. - $cache = get_config('system','photo_cache_time', 86400); // 1 day by default + $maxage = $cache_mode['age']; - header("Expires: " . gmdate("D, d M Y H:i:s", time() + $cache) . " GMT"); - header("Cache-Control: max-age=" . $cache); + if($cache_mode['exp'] || (! isset($expires)) || (isset($expires) && $expires - 60 < time())) + $expires = time() + $maxage; + else + $maxage = $expires - time(); + + header("Expires: " . gmdate("D, d M Y H:i:s", $expires) . " GMT"); + header("Cache-Control: max-age=" . $maxage); } + header("Content-type: " . $mimetype); header("Last-Modified: " . gmdate("D, d M Y H:i:s", $modified) . " GMT"); header("Content-Length: " . (isset($filesize) ? $filesize : strlen($data))); // If it's a file resource, stream it. - if($streaming && $channel) { if(strpos($streaming,'store') !== false) $istream = fopen($streaming,'rb'); From 48cd5855fe0bb530d3a26ea3a095bd3ab9c2493e Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Thu, 29 Nov 2018 11:06:14 +0100 Subject: [PATCH 07/19] Add photo cache support using sslify() --- include/text.php | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/include/text.php b/include/text.php index 646bfe749..113448a92 100644 --- a/include/text.php +++ b/include/text.php @@ -1105,12 +1105,33 @@ function linkify($s, $me = false) { * to a local redirector which uses https and which redirects to the selected content * * @param string $s + * @param int $uid * @returns string */ -function sslify($s) { +function sslify($s, $uid) { + + // Local photo cache + if(get_config('system','photo_cache_enable', 0)) { + $matches = null; + $cnt = preg_match_all("/\/",$s,$matches,PREG_SET_ORDER); + if ($cnt) { + foreach ($matches as $match) { + logger('uid: ' . $uid . '; url: ' . $match[2], LOGGER_DEBUG); + $cache = array( + 'url' => $match[2], + 'uid' => $uid + ); + call_hooks('cache_url_hook', $cache); + logger('cache status: ' . intval($cache['status']) .'; cached as: ' . ($cache['cached'] ? $cache['hash'] : '-'), LOGGER_DEBUG); + if($cache['cached']) + $s = str_replace($match[2], z_root() . '/photo/' . $cache['hash'] . '-' . $cache['res'], $s); + } + } + } + if (strpos(z_root(),'https:') === false) return $s; - + // By default we'll only sslify img tags because media files will probably choke. // You can set sslify_everything if you want - but it will likely white-screen if it hits your php memory limit. // The downside is that http: media files will likely be blocked by your browser @@ -1118,7 +1139,7 @@ function sslify($s) { $allow = get_config('system','sslify_everything'); - $pattern = (($allow) ? "/\<(.*?)src=\"(http\:.*?)\"(.*?)\>/" : "/\/" ); + $pattern = (($allow) ? "/\<(.*?)src=[\"|'](http\:.*?)[\"|'](.*?)\>/" : "/\/" ); $matches = null; $cnt = preg_match_all($pattern,$s,$matches,PREG_SET_ORDER); @@ -1681,7 +1702,7 @@ function prepare_body(&$item,$attach = false,$opts = false) { if(local_channel() == $item['uid']) $filer = format_filer($item); - $s = sslify($s); + $s = sslify($s, $item['uid']); $prep_arr = array( 'item' => $item, @@ -3259,7 +3280,7 @@ function share_unshield($m) { } -function cleanup_bbcode($body) { +function cleanup_bbcode($body, $uid = 0) { /** * fix naked links by passing through a callback to see if this is a hubzilla site @@ -3295,7 +3316,7 @@ function cleanup_bbcode($body) { $body = preg_replace('/\[\/code\]\s*\[code\]/ism',"\n",$body); - $body = scale_external_images($body,false); + $body = scale_external_images($body, false, false, $uid); return $body; } From d9faf6c4bb5d26d6eff5e3176b46761ea26dcf63 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Thu, 29 Nov 2018 11:48:12 +0100 Subject: [PATCH 08/19] Update text.php --- include/text.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/text.php b/include/text.php index 113448a92..5574b9054 100644 --- a/include/text.php +++ b/include/text.php @@ -3280,7 +3280,7 @@ function share_unshield($m) { } -function cleanup_bbcode($body, $uid = 0) { +function cleanup_bbcode($body) { /** * fix naked links by passing through a callback to see if this is a hubzilla site @@ -3316,7 +3316,7 @@ function cleanup_bbcode($body, $uid = 0) { $body = preg_replace('/\[\/code\]\s*\[code\]/ism',"\n",$body); - $body = scale_external_images($body, false, false, $uid); + $body = scale_external_images($body, false); return $body; } From 6aa99a903fd221d306c62a807cf3c1a4564f0b4d Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Thu, 29 Nov 2018 11:56:56 +0100 Subject: [PATCH 09/19] Code cleanup --- Zotlabs/Module/Photo.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Zotlabs/Module/Photo.php b/Zotlabs/Module/Photo.php index 55e92ca04..b8d1c36f2 100644 --- a/Zotlabs/Module/Photo.php +++ b/Zotlabs/Module/Photo.php @@ -5,6 +5,7 @@ namespace Zotlabs\Module; require_once('include/security.php'); require_once('include/attach.php'); +require_once('include/photo/photo_driver.php'); class Photo extends \Zotlabs\Web\Controller { @@ -155,16 +156,15 @@ class Photo extends \Zotlabs\Web\Controller { if(! in_array($resolution,[4,5,6])) $allowed = (-1); if($u === PHOTO_CACHE) { - $origurl = $r[0]['display_path']; // Cached image leak protection if(! (local_channel() || $cache_mode['leak'])) { - header("Location: " . $origurl); + header("Location: " . $r[0]['display_path']); killme(); } // Revalidate cache if($cache_mode['on'] && strtotime($r[0]['expires']) - 60 < time()) { $cache = array( - 'url' => $origurl, + 'url' => $r[0]['display_path'], 'uid' => $r[0]['uid'] ); call_hooks('cache_url_hook', $cache); From d8b5f383f52274e30e02a8cf8ce77aac0a6bd910 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Thu, 29 Nov 2018 16:21:50 +0100 Subject: [PATCH 10/19] Disable links to cached photos for non logged viewers --- include/text.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/text.php b/include/text.php index 5574b9054..00e12dc06 100644 --- a/include/text.php +++ b/include/text.php @@ -1111,7 +1111,7 @@ function linkify($s, $me = false) { function sslify($s, $uid) { // Local photo cache - if(get_config('system','photo_cache_enable', 0)) { + if(get_config('system','photo_cache_enable', 0) && local_channel()) { $matches = null; $cnt = preg_match_all("/\/",$s,$matches,PREG_SET_ORDER); if ($cnt) { From 9de650e17521542d84d9d07e2c3fabfbf1519acc Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Thu, 29 Nov 2018 19:13:43 +0100 Subject: [PATCH 11/19] Cache for viewer channel --- include/text.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/include/text.php b/include/text.php index 00e12dc06..a20d9564b 100644 --- a/include/text.php +++ b/include/text.php @@ -1108,18 +1108,17 @@ function linkify($s, $me = false) { * @param int $uid * @returns string */ -function sslify($s, $uid) { +function sslify($s) { // Local photo cache if(get_config('system','photo_cache_enable', 0) && local_channel()) { $matches = null; - $cnt = preg_match_all("/\/",$s,$matches,PREG_SET_ORDER); + $cnt = preg_match_all("/\/",$s,$matches,PREG_SET_ORDER); if ($cnt) { foreach ($matches as $match) { logger('uid: ' . $uid . '; url: ' . $match[2], LOGGER_DEBUG); $cache = array( - 'url' => $match[2], - 'uid' => $uid + 'url' => $match[2] ); call_hooks('cache_url_hook', $cache); logger('cache status: ' . intval($cache['status']) .'; cached as: ' . ($cache['cached'] ? $cache['hash'] : '-'), LOGGER_DEBUG); @@ -1702,7 +1701,7 @@ function prepare_body(&$item,$attach = false,$opts = false) { if(local_channel() == $item['uid']) $filer = format_filer($item); - $s = sslify($s, $item['uid']); + $s = sslify($s); $prep_arr = array( 'item' => $item, From 1a9ea6452305c44df285e16f17475a5b16b54a37 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Thu, 29 Nov 2018 19:28:54 +0100 Subject: [PATCH 12/19] Update text.php --- include/text.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/text.php b/include/text.php index a20d9564b..bb9c6075b 100644 --- a/include/text.php +++ b/include/text.php @@ -1118,7 +1118,8 @@ function sslify($s) { foreach ($matches as $match) { logger('uid: ' . $uid . '; url: ' . $match[2], LOGGER_DEBUG); $cache = array( - 'url' => $match[2] + 'url' => $match[2], + 'uid' => local_channel() ); call_hooks('cache_url_hook', $cache); logger('cache status: ' . intval($cache['status']) .'; cached as: ' . ($cache['cached'] ? $cache['hash'] : '-'), LOGGER_DEBUG); From 3265c2e54305fd46fdb237d716d34b4e77e98e08 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Thu, 29 Nov 2018 20:36:21 +0100 Subject: [PATCH 13/19] Skip sslify for images if it already were cached with https enabled --- include/text.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/include/text.php b/include/text.php index bb9c6075b..426229d36 100644 --- a/include/text.php +++ b/include/text.php @@ -1111,7 +1111,8 @@ function linkify($s, $me = false) { function sslify($s) { // Local photo cache - if(get_config('system','photo_cache_enable', 0) && local_channel()) { + $cacheon = get_config('system','photo_cache_enable', 0); + if($cache && local_channel()) { $matches = null; $cnt = preg_match_all("/\/",$s,$matches,PREG_SET_ORDER); if ($cnt) { @@ -1138,6 +1139,10 @@ function sslify($s) { // Complain to your browser maker $allow = get_config('system','sslify_everything'); + + //We can skip next part if this only images and cache is on + if((! $allow) && $cacheon) + return $s; $pattern = (($allow) ? "/\<(.*?)src=[\"|'](http\:.*?)[\"|'](.*?)\>/" : "/\/" ); From f3831fa77fe62d8696f867259ae9f007a0a3d2ea Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Thu, 29 Nov 2018 21:27:06 +0100 Subject: [PATCH 14/19] Better cache settings logic --- Zotlabs/Module/Photo.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Zotlabs/Module/Photo.php b/Zotlabs/Module/Photo.php index b8d1c36f2..d85db7307 100644 --- a/Zotlabs/Module/Photo.php +++ b/Zotlabs/Module/Photo.php @@ -32,10 +32,10 @@ class Photo extends \Zotlabs\Web\Controller { } $cache_mode = array( - 'on' => false, // Cache off - 'age' => 86400, // max-age - 'exp' => true, // Use own max-age - 'leak' => false // Do not allow non members use our cache + 'on' => get_config('system','photo_cache_enable', 0), + 'age' => 86400, + 'exp' => true, + 'leak' => false ); call_hooks('cache_mode_hook', $cache_mode); From d6442ec99160c1f556d9e5b7bc3b2fec76200aa1 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Thu, 29 Nov 2018 23:07:39 +0100 Subject: [PATCH 15/19] Update text.php --- include/text.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/include/text.php b/include/text.php index 426229d36..234747342 100644 --- a/include/text.php +++ b/include/text.php @@ -1139,11 +1139,6 @@ function sslify($s) { // Complain to your browser maker $allow = get_config('system','sslify_everything'); - - //We can skip next part if this only images and cache is on - if((! $allow) && $cacheon) - return $s; - $pattern = (($allow) ? "/\<(.*?)src=[\"|'](http\:.*?)[\"|'](.*?)\>/" : "/\/" ); $matches = null; From 6f2d09eb205f09cdc83225b6fadff316b934e1eb Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Thu, 29 Nov 2018 23:28:45 +0100 Subject: [PATCH 16/19] Fix wrong parameter --- include/text.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/include/text.php b/include/text.php index 234747342..7c0610ed9 100644 --- a/include/text.php +++ b/include/text.php @@ -1111,10 +1111,9 @@ function linkify($s, $me = false) { function sslify($s) { // Local photo cache - $cacheon = get_config('system','photo_cache_enable', 0); - if($cache && local_channel()) { + if(get_config('system','photo_cache_enable', 0) && local_channel()) { $matches = null; - $cnt = preg_match_all("/\/",$s,$matches,PREG_SET_ORDER); + $cnt = preg_match_all("/\/", $s, $matches, PREG_SET_ORDER); if ($cnt) { foreach ($matches as $match) { logger('uid: ' . $uid . '; url: ' . $match[2], LOGGER_DEBUG); @@ -1142,7 +1141,7 @@ function sslify($s) { $pattern = (($allow) ? "/\<(.*?)src=[\"|'](http\:.*?)[\"|'](.*?)\>/" : "/\/" ); $matches = null; - $cnt = preg_match_all($pattern,$s,$matches,PREG_SET_ORDER); + $cnt = preg_match_all($pattern, $s, $matches, PREG_SET_ORDER); if ($cnt) { foreach ($matches as $match) { $filename = basename( parse_url($match[2], PHP_URL_PATH) ); From 0ee403eab3a29a98f85dc9fe304c25c6f037b24a Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Fri, 30 Nov 2018 10:50:00 +0100 Subject: [PATCH 17/19] Move cache code to addon --- include/text.php | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/include/text.php b/include/text.php index 7c0610ed9..866b3fa2c 100644 --- a/include/text.php +++ b/include/text.php @@ -1111,23 +1111,13 @@ function linkify($s, $me = false) { function sslify($s) { // Local photo cache - if(get_config('system','photo_cache_enable', 0) && local_channel()) { - $matches = null; - $cnt = preg_match_all("/\/", $s, $matches, PREG_SET_ORDER); - if ($cnt) { - foreach ($matches as $match) { - logger('uid: ' . $uid . '; url: ' . $match[2], LOGGER_DEBUG); - $cache = array( - 'url' => $match[2], - 'uid' => local_channel() - ); - call_hooks('cache_url_hook', $cache); - logger('cache status: ' . intval($cache['status']) .'; cached as: ' . ($cache['cached'] ? $cache['hash'] : '-'), LOGGER_DEBUG); - if($cache['cached']) - $s = str_replace($match[2], z_root() . '/photo/' . $cache['hash'] . '-' . $cache['res'], $s); - } - } - } + $str = array( + 'body' => $s, + 'uid' => local_channel() + ); + call_hooks('cache_body_hook', $str); + + $s = $str['body']; if (strpos(z_root(),'https:') === false) return $s; From 53d9cbc69cecc0825c1e8fdc670cfe8ea09b03bf Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Fri, 30 Nov 2018 11:38:47 +0100 Subject: [PATCH 18/19] Check local_channel() before cache call --- include/text.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/include/text.php b/include/text.php index 866b3fa2c..6e4402a9f 100644 --- a/include/text.php +++ b/include/text.php @@ -1111,13 +1111,15 @@ function linkify($s, $me = false) { function sslify($s) { // Local photo cache - $str = array( - 'body' => $s, - 'uid' => local_channel() - ); - call_hooks('cache_body_hook', $str); + if(local_channel()) { + $str = array( + 'body' => $s, + 'uid' => local_channel() + ); + call_hooks('cache_body_hook', $str); - $s = $str['body']; + $s = $str['body']; + } if (strpos(z_root(),'https:') === false) return $s; From 2a57e00cb4a7dada0993e91e0e2176ad335cf12f Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Sun, 2 Dec 2018 10:07:12 +0100 Subject: [PATCH 19/19] Remove local_channel() check on cache_body_hook call --- include/text.php | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/include/text.php b/include/text.php index 6e4402a9f..7f6e87d3b 100644 --- a/include/text.php +++ b/include/text.php @@ -1111,16 +1111,14 @@ function linkify($s, $me = false) { function sslify($s) { // Local photo cache - if(local_channel()) { - $str = array( - 'body' => $s, - 'uid' => local_channel() - ); - call_hooks('cache_body_hook', $str); - - $s = $str['body']; - } + $str = array( + 'body' => $s, + 'uid' => local_channel() + ); + call_hooks('cache_body_hook', $str); + $s = $str['body']; + if (strpos(z_root(),'https:') === false) return $s;