]> git.mxchange.org Git - friendica.git/blobdiff - src/Util/HTTPSignature.php
Merge pull request #6641 from nupplaphil/config_followup
[friendica.git] / src / Util / HTTPSignature.php
index db1ea90dcb5ff74ad1c170e21c219cc05dfee06a..a3a73ce1366ddfab6d2e516d62b9e8de01e89a34 100644 (file)
@@ -5,14 +5,10 @@
  */
 namespace Friendica\Util;
 
-use Friendica\BaseObject;
 use Friendica\Core\Config;
 use Friendica\Core\Logger;
-use Friendica\Database\DBA;
 use Friendica\Model\User;
 use Friendica\Model\APContact;
-use Friendica\Protocol\ActivityPub;
-use Friendica\Util\DateTimeFormat;
 
 /**
  * @brief Implements HTTP Signatures per draft-cavage-http-signatures-07.
@@ -34,6 +30,7 @@ class HTTPSignature
         * @param $key
         *
         * @return array with verification data
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        public static function verifyMagic($key)
        {
@@ -188,6 +185,7 @@ class HTTPSignature
         *   - \e string \b algorithm
         *   - \e array  \b headers
         *   - \e string \b signature
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        public static function parseSigheader($header)
        {
@@ -217,7 +215,7 @@ class HTTPSignature
                        $ret['signature'] = base64_decode(preg_replace('/\s+/', '', $matches[1]));
                }
 
-               if (($ret['signature']) && ($ret['algorithm']) && (!$ret['headers'])) {
+               if (!empty($ret['signature']) && !empty($ret['algorithm']) && empty($ret['headers'])) {
                        $ret['headers'] = ['date'];
                }
 
@@ -235,6 +233,7 @@ class HTTPSignature
         *   - \e string \b key
         *   - \e string \b alg
         *   - \e string \b data
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        private static function decryptSigheader($header, $prvkey = null)
        {
@@ -276,11 +275,12 @@ class HTTPSignature
        /**
         * @brief Transmit given data to a target for a user
         *
-        * @param array $data Data that is about to be send
-        * @param string $target The URL of the inbox
-        * @param integer $uid User id of the sender
+        * @param array   $data   Data that is about to be send
+        * @param string  $target The URL of the inbox
+        * @param integer $uid    User id of the sender
         *
         * @return boolean Was the transmission successful?
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        public static function transmit($data, $target, $uid)
        {
@@ -320,10 +320,11 @@ class HTTPSignature
        /**
         * @brief Fetches JSON data for a user
         *
-        * @param string $request request url
-        * @param integer $uid User id of the requester
+        * @param string  $request request url
+        * @param integer $uid     User id of the requester
         *
         * @return array JSON array
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        public static function fetch($request, $uid)
        {
@@ -372,17 +373,25 @@ class HTTPSignature
         * @param $content
         * @param $http_headers
         *
-        * @return signer string
+        * @return string Signer
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        public static function getSigner($content, $http_headers)
        {
-               $object = json_decode($content, true);
-
-               if (empty($object)) {
+               if (empty($http_headers['HTTP_SIGNATURE'])) {
                        return false;
                }
 
-               $actor = JsonLD::fetchElement($object, 'actor', 'id');
+               if (!empty($content)) {
+                       $object = json_decode($content, true);
+                       if (empty($object)) {
+                               return false;
+                       }
+
+                       $actor = JsonLD::fetchElement($object, 'actor', 'id');
+               } else {
+                       $actor = '';
+               }
 
                $headers = [];
                $headers['(request-target)'] = strtolower($http_headers['REQUEST_METHOD']) . ' ' . $http_headers['REQUEST_URI'];
@@ -486,6 +495,7 @@ class HTTPSignature
         * @param $actor
         *
         * @return array with actor url and public key
+        * @throws \Exception
         */
        private static function fetchKey($id, $actor)
        {