From 2eabe45a8e23512e31517ae8660f0576c111e32c Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 15 Sep 2018 22:25:58 +0000 Subject: [PATCH] Contact reject does work now as well --- mod/dfrn_confirm.php | 6 +++++- src/Model/Contact.php | 6 +++++- src/Protocol/ActivityPub.php | 35 ++++++++++++++++++++++++++++------- 3 files changed, 38 insertions(+), 9 deletions(-) diff --git a/mod/dfrn_confirm.php b/mod/dfrn_confirm.php index 4abaf978f..90d3d8990 100644 --- a/mod/dfrn_confirm.php +++ b/mod/dfrn_confirm.php @@ -356,7 +356,7 @@ function dfrn_confirm_post(App $a, $handsfree = null) $new_relation = $contact['rel']; $writable = $contact['writable']; - if ($network === Protocol::DIASPORA) { + if (in_array($network, [Protocol::DIASPORA, Protocol::ACTIVITYPUB])) { if ($duplex) { $new_relation = Contact::FRIEND; } else { @@ -393,6 +393,10 @@ function dfrn_confirm_post(App $a, $handsfree = null) Group::addMember(User::getDefaultGroup($uid, $contact["network"]), $contact['id']); + if ($network == Protocol::ACTIVITYPUB && $duplex) { + ActivityPub::transmitActivity('Follow', $contact['url'], $uid); + } + // Let's send our user to the contact editor in case they want to // do anything special with this new friend. if ($handsfree === null) { diff --git a/src/Model/Contact.php b/src/Model/Contact.php index 1e61c0d10..ae4203095 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -557,7 +557,11 @@ class Contact extends BaseObject } elseif ($contact['network'] == Protocol::DIASPORA) { Diaspora::sendUnshare($user, $contact); } elseif ($contact['network'] == Protocol::ACTIVITYPUB) { - ActivityPub::transmitContactUndo($contact['url'], '', $user['uid']); + ActivityPub::transmitContactUndo($contact['url'], $user['uid']); + + if ($dissolve) { + ActivityPub::transmitContactReject($contact['url'], $contact['hub-verify'], $user['uid']); + } } } diff --git a/src/Protocol/ActivityPub.php b/src/Protocol/ActivityPub.php index df6b0342b..19407b825 100644 --- a/src/Protocol/ActivityPub.php +++ b/src/Protocol/ActivityPub.php @@ -230,17 +230,32 @@ class ActivityPub return self::transmit($data, $profile['notify'], $uid); } - public static function transmitContactUndo($target, $id, $uid) + public static function transmitContactReject($target, $id, $uid) { $profile = Probe::uri($target, Protocol::ACTIVITYPUB); - if (empty($id)) { - $id = System::baseUrl() . '/activity/' . System::createGUID(); - } - $owner = User::getOwnerDataById($uid); $data = ['@context' => 'https://www.w3.org/ns/activitystreams', 'id' => System::baseUrl() . '/activity/' . System::createGUID(), + 'type' => 'Reject', + 'actor' => $owner['url'], + 'object' => ['id' => $id, 'type' => 'Follow', + 'actor' => $profile['url'], + 'object' => $owner['url']]]; + + logger('Sending reject to ' . $target . ' for user ' . $uid . ' with id ' . $id, LOGGER_DEBUG); + return self::transmit($data, $profile['notify'], $uid); + } + + public static function transmitContactUndo($target, $uid) + { + $profile = Probe::uri($target, Protocol::ACTIVITYPUB); + + $id = System::baseUrl() . '/activity/' . System::createGUID(); + + $owner = User::getOwnerDataById($uid); + $data = ['@context' => 'https://www.w3.org/ns/activitystreams', + 'id' => $id, 'type' => 'Undo', 'actor' => $owner['url'], 'object' => ['id' => $id, 'type' => 'Follow', @@ -1150,8 +1165,14 @@ class ActivityPub } $fields = ['pending' => false]; - $condition = ['id' => $cid, 'pending' => true]; - DBA::update('comtact', $fields, $condition); + + $contact = DBA::selectFirst('contact', ['rel'], ['id' => $cid]); + if ($contact['rel'] == Contact::FOLLOWER) { + $fields['rel'] = Contact::FRIEND; + } + + $condition = ['id' => $cid]; + DBA::update('contact', $fields, $condition); logger('Accept contact request from contact ' . $cid . ' for user ' . $uid, LOGGER_DEBUG); }