From c4ebf01e69ba553f566879f526b68a9853567fff Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Fri, 10 Feb 2017 10:25:10 +0300 Subject: [PATCH] add af_zz_imgproxy (initial) --- plugins/af_zz_imgproxy/init.php | 133 ++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 plugins/af_zz_imgproxy/init.php diff --git a/plugins/af_zz_imgproxy/init.php b/plugins/af_zz_imgproxy/init.php new file mode 100644 index 000000000..b13117570 --- /dev/null +++ b/plugins/af_zz_imgproxy/init.php @@ -0,0 +1,133 @@ + true); + } + + function init($host) { + $this->host = $host; + + $host->add_hook($host::HOOK_RENDER_ARTICLE, $this); + $host->add_hook($host::HOOK_RENDER_ARTICLE_CDM, $this); + $host->add_hook($host::HOOK_RENDER_ARTICLE_API, $this); + } + + function hook_render_article($article) { + return $this->hook_render_article_cdm($article); + } + + function hook_render_article_api($headline) { + return $this->hook_render_article_cdm($headline["headline"], true); + } + + /*public function vidproxy() { + $url = $_REQUEST["url"]; + + if (preg_match("/\.(mp4|webm|gifv)/", $url, $matches)) { + $type = $matches[1]; + $embed_url = $url; + + if ($type == "gifv") { + $type = "mp4"; + $embed_url = str_replace(".gifv", ".mp4", $embed_url); + } + + header("Content-type: text/html"); + + $embed_url = htmlspecialchars("backend.php?op=pluginhandler&plugin=af_zz_imgproxy&method=imgproxy&url=" . + urlencode($embed_url)); + + print ""; + } else { + header("Location: " . htmlspecialchars($url)); + } + }*/ + + public function imgproxy() { + $url = rewrite_relative_url(SELF_URL_PATH, $_REQUEST["url"]); + + if (function_exists("getimagesize")) { + $is = @getimagesize($url); + header("Content-type: " . $is["mime"]); + } + + print fetch_file_contents(array("url" => $url)); + } + + function rewrite_url_if_needed($url) { + $scheme = parse_url($url, PHP_URL_SCHEME); + + if ($scheme != 'https' && $scheme != "") { + $url = "backend.php?op=pluginhandler&plugin=af_zz_imgproxy&method=imgproxy&url=" . + htmlspecialchars($url); + + } + + return $url; + } + + function hook_render_article_cdm($article, $api_mode = false) { + + $need_saving = false; + + $doc = new DOMDocument(); + if (@$doc->loadHTML($article["content"])) { + $xpath = new DOMXPath($doc); + $imgs = $xpath->query("//img[@src]"); + + foreach ($imgs as $img) { + $new_src = $this->rewrite_url_if_needed($img->getAttribute("src")); + + if ($new_src != $img->getAttribute("src")) { + $img->setAttribute("src", $new_src); + + $need_saving = true; + } + } + + $vids = $xpath->query("//video"); + + foreach ($vids as $vid) { + if ($vid->hasAttribute("poster")) { + $new_src = $this->rewrite_url_if_needed($vid->getAttribute("poster")); + + if ($new_src != $vid->getAttribute("poster")) { + $vid->setAttribute("poster", $new_src); + + $need_saving = true; + } + } + + $vsrcs = $xpath->query("source", $vid); + + foreach ($vsrcs as $vsrc) { + $new_src = $this->rewrite_url_if_needed($vsrc->getAttribute("src")); + + if ($new_src != $vsrc->getAttribute("src")) { + $vid->setAttribute("src", $new_src); + + $need_saving = true; + } + } + } + } + + if ($need_saving) $article["content"] = $doc->saveXML(); + + return $article; + } + + function api_version() { + return 2; + } +} \ No newline at end of file