From 93df71ae1f2bba49c85a1b06b792726ba67ae426 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 29 Jun 2023 07:51:38 +0300 Subject: add domain blacklist (imgur likes to 429 aggressively) --- init.php | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/init.php b/init.php index 64ba048..2cafbd0 100644 --- a/init.php +++ b/init.php @@ -4,6 +4,7 @@ class Api_Resize_Media extends Plugin { const MAX_WIDTH = 1024; const DEFAULT_QUALITY = 80; const IGNORE_SCHEMES = [ "magnet", "data" ]; + const DEFAULT_DOMAIN_BLACKLIST = [ "i.imgur.com" ]; /** @var array */ private $article_link_cache = []; @@ -131,6 +132,14 @@ class Api_Resize_Media extends Plugin { return; } + $origin_domain = parse_url($url, PHP_URL_HOST); + $domain_blacklist = $this->host->get_array($this, "domain_blacklist", self::DEFAULT_DOMAIN_BLACKLIST); + + if (in_array($origin_domain, $domain_blacklist)) { + Debug::log("[api_resize_media] URL is blacklisted, skipping.", Debug::LOG_VERBOSE); + return; + } + $local_filename = sha1($url); $local_filename_flag = "$local_filename.api_resize-flag"; $quality = $this->host->get($this, "quality", self::DEFAULT_QUALITY); @@ -184,10 +193,23 @@ class Api_Resize_Media extends Plugin { public function api_resize() : void { $url = UrlHelper::validate($_REQUEST["url"]); + + // TODO: render error image using GD + if (!$url) + return; + $referrer = UrlHelper::validate($_REQUEST["referrer"] ?? ""); $width = (int) $_REQUEST["width"]; $force_stamp = sql_bool_to_bool($_REQUEST["force_stamp"]); + $origin_domain = parse_url($url, PHP_URL_HOST); + $domain_blacklist = $this->host->get_array($this, "domain_blacklist", self::DEFAULT_DOMAIN_BLACKLIST); + + if (in_array($origin_domain, $domain_blacklist)) { + header("Location: $url"); + return; + } + if ($width > self::MAX_WIDTH) $width = self::MAX_WIDTH; @@ -533,6 +555,7 @@ class Api_Resize_Media extends Plugin { $force_width = (int) $this->host->profile_get($this, "force_width", 0); $prepare_widths = implode(", ", $this->host->get_array($this, "prepare_widths")); + $domain_blacklist = implode(", ", $this->host->get_array($this, "domain_blacklist", self::DEFAULT_DOMAIN_BLACKLIST)); $quality = (int) $this->host->profile_get($this, "quality", self::DEFAULT_QUALITY); ?> @@ -572,6 +595,16 @@ class Api_Resize_Media extends Plugin { __('(comma-separated list, disabled if empty)') ?> +
+ + " + name='domain_blacklist' value=""> +   + __('(comma-separated list, disabled if empty)') ?> +
+
host->set($this, "prepare_widths", $prepare_widths); + $this->host->set($this, "domain_blacklist", $domain_blacklist); $this->host->profile_set($this, "force_width", $force_width); $this->host->profile_set($this, "quality", $quality); - echo $this->T_sprintf("Data saved (%d, %d)", $force_width, $quality); + echo $this->T_sprintf("Configuration has been saved."); } function api_version() { -- cgit v1.2.3