]> git.mxchange.org Git - friendica.git/blobdiff - src/Util/HTTPSignature.php
Merge pull request #12445 from MrPetovan/bug/12382-tag-attachment
[friendica.git] / src / Util / HTTPSignature.php
index 9f732acb6e1725aa9bbe5fb3be3ca510b677ea74..225a2bcf20f16081b97d7f7f392311aeb75ebad9 100644 (file)
@@ -485,6 +485,31 @@ class HTTPSignature
                return $curlResult;
        }
 
+       /**
+        * Fetch the apcontact entry of the keyId in the given header
+        *
+        * @param array $http_headers
+        *
+        * @return array APContact entry
+        */
+       public static function getKeyIdContact(array $http_headers): array
+       {
+               if (empty($http_headers['HTTP_SIGNATURE'])) {
+                       Logger::debug('No HTTP_SIGNATURE header', ['header' => $http_headers]);
+                       return [];
+               }
+
+               $sig_block = self::parseSigHeader($http_headers['HTTP_SIGNATURE']);
+
+               if (empty($sig_block['keyId'])) {
+                       Logger::debug('No keyId', ['sig_block' => $sig_block]);
+                       return [];
+               }
+
+               $url = (strpos($sig_block['keyId'], '#') ? substr($sig_block['keyId'], 0, strpos($sig_block['keyId'], '#')) : $sig_block['keyId']);
+               return APContact::getByURL($url);
+       }
+
        /**
         * Gets a signer from a given HTTP request
         *
@@ -508,7 +533,7 @@ class HTTPSignature
                                return false;
                        }
 
-                       $actor = JsonLD::fetchElement($object, 'actor', 'id');
+                       $actor = JsonLD::fetchElement($object, 'actor', 'id') ?? '';
                } else {
                        $actor = '';
                }