]> git.mxchange.org Git - friendica.git/commitdiff
Fix IHTTPResult::getHeader/s()
authorPhilipp <admin@philipp.info>
Fri, 20 Aug 2021 17:48:14 +0000 (19:48 +0200)
committerPhilipp <admin@philipp.info>
Fri, 20 Aug 2021 17:58:42 +0000 (19:58 +0200)
- Split functionality "getHeader()" and "getHeaders()" analog to IMessageInterface::getHeader/s()
- Fix functionality at various places - Adapt CurlResultTest

src/Network/CurlResult.php
src/Network/HTTPRequest.php
src/Network/IHTTPResult.php
src/Protocol/DFRN.php
src/Protocol/OStatus.php
src/Protocol/Salmon.php
src/Util/ParseUrl.php
tests/datasets/curl/about.head.php [new file with mode: 0644]
tests/datasets/curl/about.redirect.php [new file with mode: 0644]
tests/src/Network/CurlResultTest.php

index 6fb0153b6c7663e86c43b5b5e0d3d1080f9a360c..227d26140e8729c9f414ac78e6c7f5ff8bafa938 100644 (file)
@@ -242,23 +242,29 @@ class CurlResult implements IHTTPResult
        }
 
        /** {@inheritDoc} */
-       public function getHeader(string $field = '')
+       public function getHeader($header)
        {
-               if (empty($field)) {
-                       return $this->header;
+               if (empty($header)) {
+                       return '';
                }
 
-               $field = strtolower(trim($field));
+               $header = strtolower(trim($header));
 
                $headers = $this->getHeaderArray();
 
-               if (isset($headers[$field])) {
-                       return $headers[$field];
+               if (isset($headers[$header])) {
+                       return $headers[$header];
                }
 
                return '';
        }
 
+       /** {@inheritDoc} */
+       public function getHeaders()
+       {
+               return $this->getHeaderArray();
+       }
+
        /** {@inheritDoc} */
        public function inHeader(string $field)
        {
index 523efc69876ac19d22ad34fa3599b2f0dbe061ab..72311ea1980c61e49a68aa1fd7c019c5e017e383 100644 (file)
@@ -493,8 +493,7 @@ class HTTPRequest implements IHTTPRequest
                                'timeout'        => $timeout,
                                'accept_content' => $accept_content,
                                'cookiejar'      => $cookiejar
-                       ],
-                       $redirects
+                       ]
                );
        }
 
index be190c80c16469bc0eec1274507dbea25c285e94..5904bcfa386c8df8ab221645d07a46967c210a81 100644 (file)
@@ -2,6 +2,8 @@
 
 namespace Friendica\Network;
 
+use Psr\Http\Message\MessageInterface;
+
 /**
  * Temporary class to map Friendica used variables based on PSR-7 HTTPResponse
  */
@@ -23,15 +25,25 @@ interface IHTTPResult
 
        /**
         * Returns the headers
+        * @see MessageInterface::getHeader()
         *
-        * @param string $field optional header field. Return all fields if empty
+        * @param string $header optional header field. Return all fields if empty
         *
         * @return string the headers or the specified content of the header variable
         */
-       public function getHeader(string $field = '');
+       public function getHeader($header);
+
+       /**
+        * Returns all headers
+        * @see MessageInterface::getHeaders()
+        *
+        * @return string[][]
+        */
+       public function getHeaders();
 
        /**
         * Check if a specified header exists
+        * @see MessageInterface::hasHeader()
         *
         * @param string $field header field
         *
@@ -41,8 +53,10 @@ interface IHTTPResult
 
        /**
         * Returns the headers as an associated array
+        * @see MessageInterface::getHeaders()
+        * @deprecated
         *
-        * @return array associated header array
+        * @return string[][] associated header array
         */
        public function getHeaderArray();
 
@@ -62,6 +76,8 @@ interface IHTTPResult
        public function getRedirectUrl();
 
        /**
+        * @see MessageInterface::getBody()
+        *
         * @return string
         */
        public function getBody();
index 832e2bde23f7952c1dd658cef1c61760c4953b49..cd63291eed16bda98f3ce376f3bd8d85bdeb709e 100644 (file)
@@ -985,7 +985,7 @@ class DFRN
                        return -9; // timed out
                }
 
-               if (($curl_stat == 503) && (stristr($postResult->getHeader(), 'retry-after'))) {
+               if (($curl_stat == 503) && $postResult->inHeader('retry-after')) {
                        return -10;
                }
 
index e813cc2507c12a74a1a031fcc610584dfc54958d..8d818471bfbbc23fafba7cf619f0af4a1de22b68 100644 (file)
@@ -735,7 +735,8 @@ class OStatus
 
                $xml = '';
 
-               if (stristr($curlResult->getHeader(), 'Content-Type: application/atom+xml')) {
+               if ($curlResult->inHeader('Content-Type') &&
+                       stristr($curlResult->getHeader('Content-Type'), 'application/atom+xml')) {
                        $xml = $curlResult->getBody();
                }
 
@@ -928,7 +929,8 @@ class OStatus
 
                $xml = '';
 
-               if (stristr($curlResult->getHeader(), 'Content-Type: application/atom+xml')) {
+               if ($curlResult->inHeader('Content-Type') &&
+                       stristr($curlResult->getHeader('Content-Type'), 'application/atom+xml')) {
                        Logger::log('Directly fetched XML for URI ' . $related_uri, Logger::DEBUG);
                        $xml = $curlResult->getBody();
                }
index 81b1f7528d67f7725e0d0c96027b997505970e2c..53367f6d092976eb632a5a644d51e57e57025747 100644 (file)
@@ -215,7 +215,7 @@ class Salmon
                        return -1;
                }
 
-               if (($return_code == 503) && (stristr($postResult->getHeader(), 'retry-after'))) {
+               if (($return_code == 503) && $postResult->inHeader('retry-after')) {
                        return -1;
                }
 
index d5c9f02ad4a4eaf22f1879c4323a698054fc3e63..75210af0f0de0af85b26d324be9563c6677411bd 100644 (file)
@@ -232,7 +232,6 @@ class ParseUrl
                        }
                }
 
-               $header = $curlResult->getHeader();
                $body = $curlResult->getBody();
 
                if ($do_oembed) {
@@ -273,7 +272,7 @@ class ParseUrl
                $charset = '';
                // Look for a charset, first in headers
                // Expected form: Content-Type: text/html; charset=ISO-8859-4
-               if (preg_match('/charset=([a-z0-9-_.\/]+)/i', $header, $matches)) {
+               if (preg_match('/charset=([a-z0-9-_.\/]+)/i', $curlResult->getContentType(), $matches)) {
                        $charset = trim(trim(trim(array_pop($matches)), ';,'));
                }
 
diff --git a/tests/datasets/curl/about.head.php b/tests/datasets/curl/about.head.php
new file mode 100644 (file)
index 0000000..d0be0fe
--- /dev/null
@@ -0,0 +1,20 @@
+<?php
+
+return [
+       'http/2 200' => '',
+    'date' => 'Thu, 11 Oct 2018 18:43:54 GMT',
+    'content-type' => 'text/html; charset=utf-8',
+    'vary' => 'Accept-Encoding',
+    'server' => 'Mastodon',
+    'x-frame-options' => 'SAMEORIGIN',
+    'x-content-type-options' => 'nosniff',
+    'x-xss-protection' => '1; mode=block',
+    'etag' => 'W/"706e6c48957e1d46ecf9d7597a7880af"',
+    'cache-control' => 'max-age=0, private, must-revalidate',
+    'set-cookie' => '_mastodon_session=v3kcy%2FW3aZYBBvZUohuwksEKwzYIyEUlEuJ1KqTAfWPKvVQq%2F4UuJ39zp621VyfpQNlvY46TL%2FYutzXowSLYQBNFCJcrEiF04aU0TdtHls9zynMiyeHhoVgCijOXWXNt9%2FCmpQ49RkNEujkv9NaJ0cum32MCVZKjE9%2BMKmLM%2F8ZygZeLBGJ7sg%3D%3D--QGIiU0%2FpXc3Aym8F--he2iRRPePOdtEs3z%2BufSXg%3D%3D; path=/; secure; HttpOnly',
+    'x-request-id' => 'a0c0b8e7-cd60-4efa-b79b-cf1b0d5a0784',
+    'x-runtime' => '0.049566',
+    'strict-transport-security' => 'max-age=31536000; includeSubDomains; preload',
+    'referrer-policy' => 'same-origin',
+    'content-security-policy' => "frame-ancestors 'none'; script-src 'self'; object-src 'self'; img-src * data: blob:; media-src 'self' data:; font-src 'self' data: https://fonts.gstatic.com/; connect-src 'self' blob: wss://mastodonten.de",
+];
diff --git a/tests/datasets/curl/about.redirect.php b/tests/datasets/curl/about.redirect.php
new file mode 100644 (file)
index 0000000..5ae3fd8
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+
+return [
+       'http/2 301' => '',
+    'date' => 'Thu, 11 Oct 2018 18:43:54 GMT',
+    'content-type' => 'text/html; charset=utf-8',
+    'vary' => 'Accept-Encoding',
+    'server' => 'Mastodon',
+    'location' => 'https://test.other/some/',
+    'x-frame-options' => 'SAMEORIGIN',
+    'x-content-type-options' => 'nosniff',
+    'x-xss-protection' => '1; mode=block',
+    'etag' => 'W/"706e6c48957e1d46ecf9d7597a7880af"',
+    'cache-control' => 'max-age=0, private, must-revalidate',
+    'set-cookie' => '_mastodon_session=v3kcy%2FW3aZYBBvZUohuwksEKwzYIyEUlEuJ1KqTAfWPKvVQq%2F4UuJ39zp621VyfpQNlvY46TL%2FYutzXowSLYQBNFCJcrEiF04aU0TdtHls9zynMiyeHhoVgCijOXWXNt9%2FCmpQ49RkNEujkv9NaJ0cum32MCVZKjE9%2BMKmLM%2F8ZygZeLBGJ7sg%3D%3D--QGIiU0%2FpXc3Aym8F--he2iRRPePOdtEs3z%2BufSXg%3D%3D; path=/; secure; HttpOnly',
+    'x-request-id' => 'a0c0b8e7-cd60-4efa-b79b-cf1b0d5a0784',
+    'x-runtime' => '0.049566',
+    'strict-transport-security' => 'max-age=31536000; includeSubDomains; preload',
+    'referrer-policy' => 'same-origin',
+    'content-security-policy' => "frame-ancestors 'none'; script-src 'self'; object-src 'self'; img-src * data: blob:; media-src 'self' data:; font-src 'self' data: https://fonts.gstatic.com/; connect-src 'self' blob: wss://mastodonten.de",
+];
index 090479642ab90b061ab0aa8d9175ab114594a143..c28dc5f1b993818d7292a2d9be05074fd0cb72f5 100644 (file)
@@ -53,6 +53,7 @@ class CurlResultTest extends TestCase
        public function testNormal()
        {
                $header = file_get_contents(__DIR__ . '/../../datasets/curl/about.head');
+               $headerArray = include(__DIR__ . '/../../datasets/curl/about.head.php');
                $body = file_get_contents(__DIR__ . '/../../datasets/curl/about.body');
 
 
@@ -65,7 +66,7 @@ class CurlResultTest extends TestCase
                self::assertTrue($curlResult->isSuccess());
                self::assertFalse($curlResult->isTimeout());
                self::assertFalse($curlResult->isRedirectUrl());
-               self::assertSame($header, $curlResult->getHeader());
+               self::assertSame($headerArray, $curlResult->getHeaders());
                self::assertSame($body, $curlResult->getBody());
                self::assertSame('text/html; charset=utf-8', $curlResult->getContentType());
                self::assertSame('https://test.local', $curlResult->getUrl());
@@ -80,6 +81,7 @@ class CurlResultTest extends TestCase
        public function testRedirect()
        {
                $header = file_get_contents(__DIR__ . '/../../datasets/curl/about.head');
+               $headerArray = include(__DIR__ . '/../../datasets/curl/about.head.php');
                $body = file_get_contents(__DIR__ . '/../../datasets/curl/about.body');
 
 
@@ -93,7 +95,7 @@ class CurlResultTest extends TestCase
                self::assertTrue($curlResult->isSuccess());
                self::assertFalse($curlResult->isTimeout());
                self::assertTrue($curlResult->isRedirectUrl());
-               self::assertSame($header, $curlResult->getHeader());
+               self::assertSame($headerArray, $curlResult->getHeaders());
                self::assertSame($body, $curlResult->getBody());
                self::assertSame('text/html; charset=utf-8', $curlResult->getContentType());
                self::assertSame('https://test.local/test/it', $curlResult->getUrl());
@@ -106,6 +108,7 @@ class CurlResultTest extends TestCase
        public function testTimeout()
        {
                $header = file_get_contents(__DIR__ . '/../../datasets/curl/about.head');
+               $headerArray = include(__DIR__ . '/../../datasets/curl/about.head.php');
                $body = file_get_contents(__DIR__ . '/../../datasets/curl/about.body');
 
 
@@ -119,7 +122,7 @@ class CurlResultTest extends TestCase
                self::assertFalse($curlResult->isSuccess());
                self::assertTrue($curlResult->isTimeout());
                self::assertFalse($curlResult->isRedirectUrl());
-               self::assertSame($header, $curlResult->getHeader());
+               self::assertSame($headerArray, $curlResult->getHeaders());
                self::assertSame($body, $curlResult->getBody());
                self::assertSame('text/html; charset=utf-8', $curlResult->getContentType());
                self::assertSame('https://test.local/test/it', $curlResult->getRedirectUrl());
@@ -134,6 +137,7 @@ class CurlResultTest extends TestCase
        public function testRedirectHeader()
        {
                $header = file_get_contents(__DIR__ . '/../../datasets/curl/about.redirect');
+               $headerArray = include(__DIR__ . '/../../datasets/curl/about.redirect.php');
                $body = file_get_contents(__DIR__ . '/../../datasets/curl/about.body');
 
 
@@ -146,7 +150,7 @@ class CurlResultTest extends TestCase
                self::assertTrue($curlResult->isSuccess());
                self::assertFalse($curlResult->isTimeout());
                self::assertTrue($curlResult->isRedirectUrl());
-               self::assertSame($header, $curlResult->getHeader());
+               self::assertSame($headerArray, $curlResult->getHeaders());
                self::assertSame($body, $curlResult->getBody());
                self::assertSame('text/html; charset=utf-8', $curlResult->getContentType());
                self::assertSame('https://test.local/test/it?key=value', $curlResult->getUrl());
@@ -204,7 +208,7 @@ class CurlResultTest extends TestCase
                        'url' => 'https://test.local'
                ]);
 
-               self::assertNotEmpty($curlResult->getHeader());
+               self::assertNotEmpty($curlResult->getHeaders());
                self::assertEmpty($curlResult->getHeader('wrongHeader'));
        }
 }