]> git.mxchange.org Git - friendica.git/blobdiff - mod/parse_url.php
Make Two Factor Field numeric
[friendica.git] / mod / parse_url.php
index 331ebf2629edb0ff74a58f5628d815a31a0f53fb..6b393932ebc8aa73e176670d6889329a70320fb7 100644 (file)
@@ -9,24 +9,32 @@
  *
  * @see ParseUrl::getSiteinfo() for more information about scraping embeddable content
  */
+
 use Friendica\App;
-use Friendica\Core\Addon;
+use Friendica\Core\Hook;
+use Friendica\Core\Logger;
+use Friendica\Core\System;
 use Friendica\Util\Network;
 use Friendica\Util\ParseUrl;
-
-require_once 'include/items.php';
+use Friendica\Util\Strings;
 
 function parse_url_content(App $a)
 {
        $text = null;
        $str_tags = '';
+       $format = '';
+       $ret= ['success' => false, 'contentType' => ''];
 
        $br = "\n";
 
-       if (!empty($_GET['binurl'])) {
+       if (!empty($_GET['binurl']) && Strings::isHex($_GET['binurl'])) {
                $url = trim(hex2bin($_GET['binurl']));
-       } else {
+       } elseif (!empty($_GET['url'])) {
                $url = trim($_GET['url']);
+       // fallback in case no url is valid
+       } else {
+               Logger::info('No url given');
+               exit();
        }
 
        if (!empty($_GET['title'])) {
@@ -44,23 +52,26 @@ function parse_url_content(App $a)
                }
        }
 
+       if (isset($_GET['format']) && $_GET['format'] == 'json') {
+               $format = 'json';
+       }
+
        // Add url scheme if it is missing
        $arrurl = parse_url($url);
-       if (!x($arrurl, 'scheme')) {
-               if (x($arrurl, 'host')) {
+       if (empty($arrurl['scheme'])) {
+               if (!empty($arrurl['host'])) {
                        $url = 'http:' . $url;
                } else {
                        $url = 'http://' . $url;
                }
        }
 
-       logger($url);
+       Logger::log($url);
 
        // Check if the URL is an image, video or audio file. If so format
        // the URL with the corresponding BBCode media tag
-       $redirects = 0;
        // Fetch the header of the URL
-       $curlResponse = Network::curl($url, false, $redirects, ['novalidate' => true, 'nobody' => true]);
+       $curlResponse = Network::curl($url, false, ['novalidate' => true, 'nobody' => true]);
 
        if ($curlResponse->isSuccess()) {
                // Convert the header fields into an array
@@ -73,23 +84,37 @@ function parse_url_content(App $a)
                                $hdrs[$k] = $v;
                        }
                }
+               $type = null;
+               $content_type = '';
+               $bbcode = '';
                if (array_key_exists('Content-Type', $hdrs)) {
                        $type = $hdrs['Content-Type'];
                }
                if ($type) {
                        if (stripos($type, 'image/') !== false) {
-                               echo $br . '[img]' . $url . '[/img]' . $br;
-                               exit();
+                               $content_type = 'image';
+                               $bbcode = $br . '[img]' . $url . '[/img]' . $br;
                        }
                        if (stripos($type, 'video/') !== false) {
-                               echo $br . '[video]' . $url . '[/video]' . $br;
-                               exit();
+                               $content_type = 'video';
+                               $bbcode = $br . '[video]' . $url . '[/video]' . $br;
                        }
                        if (stripos($type, 'audio/') !== false) {
-                               echo $br . '[audio]' . $url . '[/audio]' . $br;
-                               exit();
+                               $content_type = 'audio';
+                               $bbcode = $br . '[audio]' . $url . '[/audio]' . $br;
                        }
                }
+               if (!empty($content_type)) {
+                       if ($format == 'json') {
+                               $ret['contentType'] = $content_type;
+                               $ret['data'] = ['url' => $url];
+                               $ret['success'] = true;
+                               System::jsonExit($ret);
+                       }
+
+                       echo $bbcode;
+                       exit();
+               }
        }
 
 
@@ -97,7 +122,7 @@ function parse_url_content(App $a)
 
        $arr = ['url' => $url, 'text' => ''];
 
-       Addon::callHooks('parse_link', $arr);
+       Hook::callAll('parse_link', $arr);
 
        if (strlen($arr['text'])) {
                echo $arr['text'];
@@ -113,7 +138,7 @@ function parse_url_content(App $a)
 
                $result = sprintf($template, $url, ($title) ? $title : $url, $text) . $str_tags;
 
-               logger('(unparsed): returns: ' . $result);
+               Logger::log('(unparsed): returns: ' . $result);
 
                echo $result;
                exit();
@@ -130,6 +155,14 @@ function parse_url_content(App $a)
                exit();
        }
 
+       if ($format == 'json') {
+               $ret['data'] = $siteinfo;
+               $ret['contentType'] = 'attachment';
+               $ret['success'] = true;
+
+               System::jsonExit($ret);
+       }
+
        // Format it as BBCode attachment
        $info = add_page_info_data($siteinfo);
 
@@ -144,18 +177,18 @@ function parse_url_content(App $a)
  * Note: We have moved the function to ParseUrl.php. This function is only for
  * legacy support and will be remove in the future
  *
- * @param type $url The url of the page which should be scraped
- * @param type $no_guessing If true the parse doens't search for
- *    preview pictures
- * @param type $do_oembed The false option is used by the function fetch_oembed()
- *    to avoid endless loops
+ * @param string $url         The url of the page which should be scraped
+ * @param bool   $no_guessing If true the parse doens't search for
+ *                            preview pictures
+ * @param bool   $do_oembed   The false option is used by the function fetch_oembed()
+ *                            to avoid endless loops
  *
  * @return array which contains needed data for embedding
  *
- * @see ParseUrl::getSiteinfoCached()
+ * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+ * @see   ParseUrl::getSiteinfoCached()
  *
- * @todo Remove this function after all Addons has been changed to use
- *    ParseUrl::getSiteinfoCached
+ * @deprecated since version 3.6 use ParseUrl::getSiteinfoCached instead
  */
 function parseurl_getsiteinfo_cached($url, $no_guessing = false, $do_oembed = true)
 {