]> git.mxchange.org Git - friendica.git/commitdiff
Delete tombstone contacts
authorMichael <heluecht@pirati.ca>
Thu, 17 Dec 2020 08:00:56 +0000 (08:00 +0000)
committerMichael <heluecht@pirati.ca>
Thu, 17 Dec 2020 08:00:56 +0000 (08:00 +0000)
src/Util/HTTPSignature.php

index 59f4448b6743b726dbdc36657bd072eda33b8527..d03e671421f381b56813f34b0d92a7bf4226d88c 100644 (file)
@@ -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['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) || empty($key['pubkey'])) {
+               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']];
                        }
                }