]> git.mxchange.org Git - friendica.git/blobdiff - mod/parse_url.php
New function "Item::storeForUserByUriId"
[friendica.git] / mod / parse_url.php
index b982ccf084f9e4a6b3c8caa9f0d3aa7e67e1d3d1..67610140b6985461a09484a8c0857d99d8a853c8 100644 (file)
@@ -1,31 +1,54 @@
 <?php
-
 /**
- * @file mod/parse_url.php
- * @brief The parse_url module
+ * @copyright Copyright (C) 2020, Friendica
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  *
  * This module does parse an url for embeddable content (audio, video, image files or link)
  * information and does format this information to BBCode
  *
  * @see ParseUrl::getSiteinfo() for more information about scraping embeddable content
  */
+
 use Friendica\App;
+use Friendica\Content\PageInfo;
 use Friendica\Core\Hook;
 use Friendica\Core\Logger;
+use Friendica\Core\System;
 use Friendica\Util\Network;
 use Friendica\Util\ParseUrl;
+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'])) {
@@ -43,6 +66,10 @@ 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 (empty($arrurl['scheme'])) {
@@ -57,9 +84,8 @@ function parse_url_content(App $a)
 
        // 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,22 +99,35 @@ function parse_url_content(App $a)
                        }
                }
                $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();
                }
        }
 
@@ -130,8 +169,16 @@ 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);
+       $info = "\n" . PageInfo::getFooterFromData($siteinfo);
 
        echo $info;
 
@@ -139,7 +186,7 @@ function parse_url_content(App $a)
 }
 
 /**
- * @brief Legacy function to call ParseUrl::getSiteinfoCached
+ * Legacy function to call ParseUrl::getSiteinfoCached
  *
  * Note: We have moved the function to ParseUrl.php. This function is only for
  * legacy support and will be remove in the future