X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FUtil%2FHTTPSignature.php;h=a3a73ce1366ddfab6d2e516d62b9e8de01e89a34;hb=256e845c5dd606d6e0f1d401a0859b6f8728fb2d;hp=db1ea90dcb5ff74ad1c170e21c219cc05dfee06a;hpb=9bec20223211100895ce69a9c3abca99ecc4a326;p=friendica.git diff --git a/src/Util/HTTPSignature.php b/src/Util/HTTPSignature.php index db1ea90dcb..a3a73ce136 100644 --- a/src/Util/HTTPSignature.php +++ b/src/Util/HTTPSignature.php @@ -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) {