]> git.mxchange.org Git - friendica.git/commitdiff
Merge pull request #2906 from annando/1611-parseurl
authorTobias Diekershoff <tobias.diekershoff@gmx.net>
Mon, 14 Nov 2016 05:41:04 +0000 (06:41 +0100)
committerGitHub <noreply@github.com>
Mon, 14 Nov 2016 05:41:04 +0000 (06:41 +0100)
Improvements to page_info (bad ssl, bad formatted url)

include/items.php
mod/parse_url.php

index 93df36fb39dcdd7c07b0943bdba09fd25b956950..a0fe59bf17d41ddad8d82b4f5508329385528f3c 100644 (file)
@@ -147,19 +147,23 @@ function add_page_info_data($data) {
        // It maybe is a rich content, but if it does have everything that a link has,
        // then treat it that way
        if (($data["type"] == "rich") AND is_string($data["title"]) AND
-               is_string($data["text"]) AND (sizeof($data["images"]) > 0))
+               is_string($data["text"]) AND (sizeof($data["images"]) > 0)) {
                $data["type"] = "link";
+       }
 
-       if ((($data["type"] != "link") AND ($data["type"] != "video") AND ($data["type"] != "photo")) OR ($data["title"] == $url))
-               return("");
+       if ((($data["type"] != "link") AND ($data["type"] != "video") AND ($data["type"] != "photo")) OR ($data["title"] == $data["url"])) {
+               return "";
+       }
 
-       if ($no_photos AND ($data["type"] == "photo"))
-               return("");
+       if ($no_photos AND ($data["type"] == "photo")) {
+               return "";
+       }
 
-       if (sizeof($data["images"]) > 0)
+       if (sizeof($data["images"]) > 0) {
                $preview = $data["images"][0];
-       else
+       } else {
                $preview = "";
+       }
 
        // Escape some bad characters
        $data["url"] = str_replace(array("[", "]"), array("&#91;", "&#93;"), htmlentities($data["url"], ENT_QUOTES, 'UTF-8', false));
@@ -167,19 +171,33 @@ function add_page_info_data($data) {
 
        $text = "[attachment type='".$data["type"]."'";
 
-       if ($data["url"] != "")
+       if ($data["text"] == "") {
+               $data["text"] = $data["title"];
+       }
+
+       if ($data["text"] == "") {
+               $data["text"] = $data["url"];
+       }
+
+       if ($data["url"] != "") {
                $text .= " url='".$data["url"]."'";
-       if ($data["title"] != "")
+       }
+
+       if ($data["title"] != "") {
                $text .= " title='".$data["title"]."'";
+       }
+
        if (sizeof($data["images"]) > 0) {
                $preview = str_replace(array("[", "]"), array("&#91;", "&#93;"), htmlentities($data["images"][0]["src"], ENT_QUOTES, 'UTF-8', false));
                // if the preview picture is larger than 500 pixels then show it in a larger mode
                // But only, if the picture isn't higher than large (To prevent huge posts)
-               if (($data["images"][0]["width"] >= 500) AND ($data["images"][0]["width"] >= $data["images"][0]["height"]))
+               if (($data["images"][0]["width"] >= 500) AND ($data["images"][0]["width"] >= $data["images"][0]["height"])) {
                        $text .= " image='".$preview."'";
-               else
+               } else {
                        $text .= " preview='".$preview."'";
+               }
        }
+
        $text .= "]".$data["text"]."[/attachment]";
 
        $hashtags = "";
index baf86775010a8360a7e09c451efc3f3ee3303905..23075ad775e64a6bc73b7c47a3b4f3726fff45b2 100644 (file)
@@ -89,6 +89,13 @@ function parseurl_getsiteinfo($url, $no_guessing = false, $do_oembed = true, $co
 
        $siteinfo = array();
 
+       // Check if the URL does contain a scheme
+       $scheme = parse_url($url, PHP_URL_SCHEME);
+
+       if ($scheme == "") {
+               $url = "http://".trim($url, "/");
+       }
+
        if ($count > 10) {
                logger("parseurl_getsiteinfo: Endless loop detected for ".$url, LOGGER_DEBUG);
                return($siteinfo);
@@ -102,6 +109,8 @@ function parseurl_getsiteinfo($url, $no_guessing = false, $do_oembed = true, $co
        $siteinfo["url"] = $url;
        $siteinfo["type"] = "link";
 
+       $check_cert = get_config('system','verifyssl');
+
        $stamp1 = microtime(true);
 
        $ch = curl_init();
@@ -110,8 +119,9 @@ function parseurl_getsiteinfo($url, $no_guessing = false, $do_oembed = true, $co
        curl_setopt($ch, CURLOPT_NOBODY, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 3);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-       //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_USERAGENT, $a->get_useragent());
+       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false));
+       curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, (($check_cert) ? 2 : false));
 
        $header = curl_exec($ch);
        $curl_info = @curl_getinfo($ch);
@@ -142,8 +152,9 @@ function parseurl_getsiteinfo($url, $no_guessing = false, $do_oembed = true, $co
 
                $oembed_data = oembed_fetch_url($url);
 
-               if ($oembed_data->type != "error")
+               if (!in_array($oembed_data->type, array("error", "rich"))) {
                        $siteinfo["type"] = $oembed_data->type;
+               }
 
                if (($oembed_data->type == "link") AND ($siteinfo["type"] != "photo")) {
                        if (isset($oembed_data->title))
@@ -165,6 +176,8 @@ function parseurl_getsiteinfo($url, $no_guessing = false, $do_oembed = true, $co
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_USERAGENT, $a->get_useragent());
+       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false));
+       curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, (($check_cert) ? 2 : false));
 
        $header = curl_exec($ch);
        $curl_info = @curl_getinfo($ch);