From a548e7c4be85ac3edf524984256a9531f4ec9abc Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 17 Dec 2020 07:07:54 +0000 Subject: [PATCH 1/2] Fix warning "supplied key param cannot be coerced into a public key" --- src/Util/HTTPSignature.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Util/HTTPSignature.php b/src/Util/HTTPSignature.php index 1ede550885..59f4448b67 100644 --- a/src/Util/HTTPSignature.php +++ b/src/Util/HTTPSignature.php @@ -544,7 +544,7 @@ class HTTPSignature $key = self::fetchKey($sig_block['keyId'], $actor); - if (empty($key)) { + if (empty($key) || empty($key['pubkey'])) { return false; } From e713db4ac7f30b6325e8cca4899fc27a1317ba0c Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 17 Dec 2020 08:00:56 +0000 Subject: [PATCH 2/2] Delete tombstone contacts --- src/Util/HTTPSignature.php | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/Util/HTTPSignature.php b/src/Util/HTTPSignature.php index 59f4448b67..d03e671421 100644 --- a/src/Util/HTTPSignature.php +++ b/src/Util/HTTPSignature.php @@ -25,6 +25,7 @@ use Friendica\Core\Logger; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\APContact; +use Friendica\Model\Contact; use Friendica\Model\User; /** @@ -543,8 +544,19 @@ class HTTPSignature } $key = self::fetchKey($sig_block['keyId'], $actor); + if (empty($key)) { + return false; + } - if (empty($key) || empty($key['pubkey'])) { + if (!empty($key['url']) && !empty($key['type']) && ($key['type'] == 'Tombstone')) { + Logger::info('Actor is a tombstone', ['key' => $key]); + + // We now delete everything that we possibly knew from this actor + Contact::deleteContactByUrl($key['url']); + return false; + } + + if (empty($key['pubkey'])) { return false; } @@ -615,12 +627,12 @@ class HTTPSignature $profile = APContact::getByURL($url); if (!empty($profile)) { Logger::log('Taking key from id ' . $id, Logger::DEBUG); - return ['url' => $url, 'pubkey' => $profile['pubkey']]; + return ['url' => $url, 'pubkey' => $profile['pubkey'], 'type' => $profile['type']]; } elseif ($url != $actor) { $profile = APContact::getByURL($actor); if (!empty($profile)) { Logger::log('Taking key from actor ' . $actor, Logger::DEBUG); - return ['url' => $actor, 'pubkey' => $profile['pubkey']]; + return ['url' => $actor, 'pubkey' => $profile['pubkey'], 'type' => $profile['type']]; } }