From b5d73f840c30e99de07c227450a240a38f1052ab Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 9 Oct 2018 05:04:24 +0000 Subject: [PATCH] AP fixes: LD-signature, wrong owner for completed thres, account removal --- composer.lock | 10 +++++----- src/Protocol/ActivityPub/Processor.php | 15 ++++++++++++++- src/Protocol/ActivityPub/Receiver.php | 5 +++++ src/Worker/Notifier.php | 4 ++-- 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/composer.lock b/composer.lock index 7973167762..9230bb4db9 100644 --- a/composer.lock +++ b/composer.lock @@ -332,11 +332,11 @@ }, { "name": "friendica/json-ld", - "version": "1.0.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://git.friendi.ca/friendica/php-json-ld", - "reference": "a9ac64daf01cfd97e80c36a5104247d37c0ae5ef" + "reference": "ca3916d10d2ad9073b3b1eae383978dbe828e1e1" }, "require": { "ext-json": "*", @@ -355,11 +355,11 @@ { "name": "Digital Bazaar, Inc.", "email": "support@digitalbazaar.com", - "url": "http://digitalbazaar.com/" + "homepage": "http://digitalbazaar.com/" }, { "name": "Friendica Team", - "url": "https://friendi.ca/" + "homepage": "https://friendi.ca/" } ], "description": "A JSON-LD Processor and API implementation in PHP.", @@ -372,7 +372,7 @@ "Semantic Web", "jsonld" ], - "time": "2018-09-28T00:01:12+00:00" + "time": "2018-10-08T20:41:00+00:00" }, { "name": "fxp/composer-asset-plugin", diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php index 32cfcc6cb0..a85123817a 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -18,6 +18,9 @@ use Friendica\Protocol\ActivityPub; /** * ActivityPub Protocol class + * + * To-Do: + * - Store Diaspora signature */ class Processor { @@ -194,7 +197,14 @@ class Processor $item['network'] = Protocol::ACTIVITYPUB; $item['private'] = !in_array(0, $activity['receiver']); $item['author-id'] = Contact::getIdForURL($activity['author'], 0, true); - $item['owner-id'] = Contact::getIdForURL($activity['actor'], 0, true); + + if (empty($activity['thread-completion'])) { + $item['owner-id'] = Contact::getIdForURL($activity['actor'], 0, true); + } else { + logger('Ignoring actor because of thread completion.', LOGGER_DEBUG); + $item['owner-id'] = $item['author-id']; + } + $item['uri'] = $activity['id']; $item['created'] = $activity['published']; $item['edited'] = $activity['updated']; @@ -261,6 +271,9 @@ class Processor $activity['type'] = 'Create'; $ldactivity = JsonLD::compact($activity); + + $ldactivity['thread-completion'] = true; + ActivityPub\Receiver::processActivity($ldactivity); logger('Activity ' . $url . ' had been fetched and processed.'); } diff --git a/src/Protocol/ActivityPub/Receiver.php b/src/Protocol/ActivityPub/Receiver.php index 1dac0bb827..f371eede7f 100644 --- a/src/Protocol/ActivityPub/Receiver.php +++ b/src/Protocol/ActivityPub/Receiver.php @@ -268,6 +268,11 @@ class Receiver return; } + // Internal flag for thread completion. See Processor.php + if (!empty($activity['thread-completion'])) { + $object_data['thread-completion'] = $activity['thread-completion']; + } + switch ($type) { case 'as:Create': case 'as:Announce': diff --git a/src/Worker/Notifier.php b/src/Worker/Notifier.php index b57c81db77..6bfd2bc3b3 100644 --- a/src/Worker/Notifier.php +++ b/src/Worker/Notifier.php @@ -103,9 +103,9 @@ class Notifier $inboxes = ActivityPub\Transmitter::fetchTargetInboxesforUser(0); foreach ($inboxes as $inbox) { - logger('Account removal for user ' . $uid . ' to ' . $inbox .' via ActivityPub', LOGGER_DEBUG); + logger('Account removal for user ' . $item_id . ' to ' . $inbox .' via ActivityPub', LOGGER_DEBUG); Worker::add(['priority' => $a->queue['priority'], 'created' => $a->queue['created'], 'dont_fork' => true], - 'APDelivery', Delivery::REMOVAL, '', $inbox, $uid); + 'APDelivery', Delivery::REMOVAL, '', $inbox, $item_id); } return;