]> git.mxchange.org Git - friendica.git/blobdiff - src/Module/Proxy.php
Merge pull request #7255 from annando/issue-7223
[friendica.git] / src / Module / Proxy.php
index 221ce8d08164c25f0def5c958068d17859324345..75a1142af6221331ce4715d3a87c7f8988a7c44f 100644 (file)
@@ -10,7 +10,7 @@ use Friendica\Core\L10n;
 use Friendica\Core\System;
 use Friendica\Model\Photo;
 use Friendica\Object\Image;
-use Friendica\Util\Network;
+use Friendica\Util\HTTPSignature;
 use Friendica\Util\Proxy as ProxyUtils;
 
 /**
@@ -70,7 +70,7 @@ class Proxy extends BaseModule
                $request = self::getRequestInfo();
 
                if (empty($request['url'])) {
-                       System::httpExit(400, ['title' => L10n::t('Bad Request.')]);
+                       throw new \Friendica\Network\HTTPException\BadRequestException();
                }
 
                // Webserver already tried direct cache...
@@ -81,38 +81,35 @@ class Proxy extends BaseModule
                // Try to use photo from db
                self::responseFromDB($request);
 
-
                //
                // If script is here, the requested url has never cached before.
                // Let's fetch it, scale it if required, then save it in cache.
                //
 
-
                // It shouldn't happen but it does - spaces in URL
                $request['url'] = str_replace(' ', '+', $request['url']);
-               $redirects = 0;
-               $fetchResult = Network::fetchUrlFull($request['url'], true, $redirects, 10);
+               $fetchResult = HTTPSignature::fetchRaw($request['url'], local_user(), true, ['timeout' => 10]);
                $img_str = $fetchResult->getBody();
 
-               $tempfile = tempnam(get_temppath(), 'cache');
-               file_put_contents($tempfile, $img_str);
-               $mime = mime_content_type($tempfile);
-               unlink($tempfile);
-
                // If there is an error then return a blank image
                if ((substr($fetchResult->getReturnCode(), 0, 1) == '4') || (!$img_str)) {
                        self::responseError();
                        // stop.
                }
 
+               $tempfile = tempnam(get_temppath(), 'cache');
+               file_put_contents($tempfile, $img_str);
+               $mime = mime_content_type($tempfile);
+               unlink($tempfile);
+
                $image = new Image($img_str, $mime);
                if (!$image->isValid()) {
                        self::responseError();
                        // stop.
                }
-               
+
                $basepath = $a->getBasePath();
-               
+
                // Store original image
                if ($direct_cache) {
                        // direct cache , store under ./proxy/
@@ -159,9 +156,9 @@ class Proxy extends BaseModule
                $a = self::getApp();
                $size = 1024;
                $sizetype = '';
-               
-               
+
                // Look for filename in the arguments
+               // @TODO: Replace with parameter from router
                if (($a->argc > 1) && !isset($_REQUEST['url'])) {
                        if (isset($a->argv[3])) {
                                $url = $a->argv[3];
@@ -172,6 +169,7 @@ class Proxy extends BaseModule
                        }
 
                        /// @TODO: Why? And what about $url in this case?
+                       /// @TODO: Replace with parameter from router
                        if (isset($a->argv[3]) && ($a->argv[3] == 'thumb')) {
                                $size = 200;
                        }
@@ -211,7 +209,7 @@ class Proxy extends BaseModule
                } else {
                        $url = defaults($_REQUEST, 'url', '');
                }
-               
+
                return [
                        'url' => $url,
                        'urlhash' => 'pic:' . sha1($url),
@@ -239,9 +237,9 @@ class Proxy extends BaseModule
 
                // Checking if caching into a folder in the webroot is activated and working
                $direct_cache = (is_dir($basepath . '/proxy') && is_writable($basepath . '/proxy'));
-               // we don't use direct cache if image url is passed in args and not in querystring 
+               // we don't use direct cache if image url is passed in args and not in querystring
                $direct_cache = $direct_cache && ($a->argc > 1) && !isset($_REQUEST['url']);
-               
+
                return $direct_cache;
        }
 
@@ -277,8 +275,8 @@ class Proxy extends BaseModule
         * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         * @throws \ImagickException
         */
-       private static function responseFromDB(&$request) {
-       
+       private static function responseFromDB(&$request)
+       {
                $photo = Photo::getPhoto($request['urlhash']);
 
                if ($photo !== false) {
@@ -287,13 +285,14 @@ class Proxy extends BaseModule
                        // stop.
                }
        }
-       
+
        /**
         * @brief Output a blank image, without cache headers, in case of errors
         *
         */
-       private static function responseError() {
-               header('Content-type: ' . $img->getType());
+       private static function responseError()
+       {
+               header('Content-type: image/png');
                echo file_get_contents('images/blank.png');
                exit();
        }
@@ -319,5 +318,3 @@ class Proxy extends BaseModule
                exit();
        }
 }
-
-