]> git.mxchange.org Git - friendica.git/blobdiff - src/Module/Proxy.php
Add new TemplateEngine->testInstall method
[friendica.git] / src / Module / Proxy.php
index 75a1142af6221331ce4715d3a87c7f8988a7c44f..e1231f0b13ab1d5cffabb5074706a50e480533a4 100644 (file)
@@ -1,20 +1,36 @@
 <?php
 /**
- * @file src/Module/Proxy.php
- * @brief Based upon "Privacy Image Cache" by Tobias Hößl <https://github.com/CatoTH/>
+ * @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/>.
+ *
  */
+
 namespace Friendica\Module;
 
 use Friendica\BaseModule;
-use Friendica\Core\L10n;
-use Friendica\Core\System;
+use Friendica\Core\Logger;
+use Friendica\DI;
 use Friendica\Model\Photo;
 use Friendica\Object\Image;
 use Friendica\Util\HTTPSignature;
 use Friendica\Util\Proxy as ProxyUtils;
 
 /**
- * @brief Module Proxy
+ * Module Proxy
  *
  * urls:
  * /proxy/[sub1/[sub2/]]<base64url image url>[.ext][:size]
@@ -24,15 +40,15 @@ class Proxy extends BaseModule
 {
 
        /**
-        * @brief Initializer method for this class.
+        * Initializer method for this class.
         *
         * Sets application instance and checks if /proxy/ path is writable.
         *
         */
-       public static function init()
+       public static function init(array $parameters = [])
        {
                // Set application instance here
-               $a = self::getApp();
+               $a = DI::app();
 
                /*
                 * Pictures are stored in one of the following ways:
@@ -92,7 +108,8 @@ class Proxy extends BaseModule
                $img_str = $fetchResult->getBody();
 
                // If there is an error then return a blank image
-               if ((substr($fetchResult->getReturnCode(), 0, 1) == '4') || (!$img_str)) {
+               if ((substr($fetchResult->getReturnCode(), 0, 1) == '4') || empty($img_str)) {
+                       Logger::info('Error fetching image', ['image' => $request['url'], 'return' => $fetchResult->getReturnCode(), 'empty' => empty($img_str)]);
                        self::responseError();
                        // stop.
                }
@@ -104,6 +121,7 @@ class Proxy extends BaseModule
 
                $image = new Image($img_str, $mime);
                if (!$image->isValid()) {
+                       Logger::info('The image is invalid', ['image' => $request['url'], 'mime' => $mime]);
                        self::responseError();
                        // stop.
                }
@@ -140,7 +158,7 @@ class Proxy extends BaseModule
 
 
        /**
-        * @brief Build info about requested image to be proxied
+        * Build info about requested image to be proxied
         *
         * @return array
         *    [
@@ -153,7 +171,7 @@ class Proxy extends BaseModule
         */
        private static function getRequestInfo()
        {
-               $a = self::getApp();
+               $a = DI::app();
                $size = 1024;
                $sizetype = '';
 
@@ -207,7 +225,7 @@ class Proxy extends BaseModule
                        $url = base64_decode(strtr($url, '-_', '+/'), true);
 
                } else {
-                       $url = defaults($_REQUEST, 'url', '');
+                       $url = $_REQUEST['url'] ?? '';
                }
 
                return [
@@ -220,14 +238,14 @@ class Proxy extends BaseModule
 
 
        /**
-        * @brief setup ./proxy folder for direct cache
+        * setup ./proxy folder for direct cache
         *
         * @return bool  False if direct cache can't be used.
         * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        private static function setupDirectCache()
        {
-               $a = self::getApp();
+               $a = DI::app();
                $basepath = $a->getBasePath();
 
                // If the cache path isn't there, try to create it
@@ -245,7 +263,7 @@ class Proxy extends BaseModule
 
 
        /**
-        * @brief Try to reply with image in cachefile
+        * Try to reply with image in cachefile
         *
         * @param array $request Array from getRequestInfo
         *
@@ -267,7 +285,7 @@ class Proxy extends BaseModule
        }
 
        /**
-        * @brief Try to reply with image in database
+        * Try to reply with image in database
         *
         * @param array $request Array from getRequestInfo
         *
@@ -287,18 +305,17 @@ class Proxy extends BaseModule
        }
 
        /**
-        * @brief Output a blank image, without cache headers, in case of errors
+        * In case of an error just stop. We don't return content to avoid caching problems
         *
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        private static function responseError()
        {
-               header('Content-type: image/png');
-               echo file_get_contents('images/blank.png');
-               exit();
+               throw new \Friendica\Network\HTTPException\InternalServerErrorException();
        }
 
        /**
-        * @brief Output the image with cache headers
+        * Output the image with cache headers
         *
         * @param Image $img
         * @throws \Friendica\Network\HTTPException\InternalServerErrorException
@@ -306,6 +323,7 @@ class Proxy extends BaseModule
        private static function responseImageHttpCache(Image $img)
        {
                if (is_null($img) || !$img->isValid()) {
+                       Logger::info('The cached image is invalid');
                        self::responseError();
                        // stop.
                }