From 9ef1d827f35dfcd779015003bc359e3dd7d6fef6 Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 5 Sep 2018 05:02:06 +0000 Subject: [PATCH] Restore the behaviour to remove the remote contact upon termination --- mod/contacts.php | 2 +- mod/dfrn_notify.php | 4 ++-- mod/dirfind.php | 2 +- mod/unfollow.php | 6 ++++-- src/Model/Contact.php | 12 ++++++++---- src/Protocol/DFRN.php | 13 ++++++++----- src/Worker/Notifier.php | 2 +- 7 files changed, 25 insertions(+), 16 deletions(-) diff --git a/mod/contacts.php b/mod/contacts.php index 70a582c6ee..68f68fec3b 100644 --- a/mod/contacts.php +++ b/mod/contacts.php @@ -368,7 +368,7 @@ function _contact_drop($orig_record) return; } - Contact::terminateFriendship($r[0], $orig_record); + Contact::terminateFriendship($r[0], $orig_record, true); Contact::remove($orig_record['id']); } diff --git a/mod/dfrn_notify.php b/mod/dfrn_notify.php index 88f706385b..f653faca95 100644 --- a/mod/dfrn_notify.php +++ b/mod/dfrn_notify.php @@ -322,8 +322,8 @@ function dfrn_notify_content(App $a) { $encrypted_id = ''; $id_str = $my_id . '.' . mt_rand(1000,9999); - $prv_key = trim($importer['prvkey']); - $pub_key = trim($importer['pubkey']); + $prv_key = trim($importer['cprvkey']); + $pub_key = trim($importer['cpubkey']); $dplx = intval($importer['duplex']); if (($dplx && strlen($prv_key)) || (strlen($prv_key) && !strlen($pub_key))) { diff --git a/mod/dirfind.php b/mod/dirfind.php index f4ddba45d4..332fe90f6c 100644 --- a/mod/dirfind.php +++ b/mod/dirfind.php @@ -44,7 +44,7 @@ function dirfind_content(App $a, $prefix = "") { $local = Config::get('system','poco_local_search'); - $search = $prefix.notags(trim($_REQUEST['search'])); + $search = $prefix.notags(trim(defaults($_REQUEST, 'search', ''))); $header = ''; diff --git a/mod/unfollow.php b/mod/unfollow.php index 956b6fbdb7..0aa114759f 100644 --- a/mod/unfollow.php +++ b/mod/unfollow.php @@ -46,13 +46,15 @@ function unfollow_post() // NOTREACHED } + $dissolve = ($contact['rel'] == Contact::SHARING); + $owner = User::getOwnerDataById($uid); if ($owner) { - Contact::terminateFriendship($owner, $contact); + Contact::terminateFriendship($owner, $contact, $dissolve); } // Sharing-only contacts get deleted as there no relationship any more - if ($contact['rel'] == Contact::SHARING) { + if ($dissolve) { Contact::remove($contact['id']); $return_path = 'contacts'; } else { diff --git a/src/Model/Contact.php b/src/Model/Contact.php index d53126f6ff..1bbc0228a8 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -17,6 +17,7 @@ use Friendica\Model\Profile; use Friendica\Network\Probe; use Friendica\Object\Image; use Friendica\Protocol\Diaspora; +use Friendica\Protocol\DFRN; use Friendica\Protocol\OStatus; use Friendica\Protocol\PortableContact; use Friendica\Protocol\Salmon; @@ -528,13 +529,16 @@ class Contact extends BaseObject /** * @brief Sends an unfriend message. Does not remove the contact * - * @param array $user User unfriending - * @param array $contact Contact unfriended + * @param array $user User unfriending + * @param array $contact Contact unfriended + * @param boolean $dissolve Remove the contact on the remote side * @return void */ - public static function terminateFriendship(array $user, array $contact) + public static function terminateFriendship(array $user, array $contact, $dissolve = false) { - if (in_array($contact['network'], [Protocol::OSTATUS, Protocol::DFRN])) { + if (($contact['network'] == Protocol::DFRN) && $dissolve) { + DFRN::deliver($user, $contact, 'placeholder', true); + } elseif (in_array($contact['network'], [Protocol::OSTATUS, Protocol::DFRN])) { // create an unfollow slap $item = []; $item['verb'] = NAMESPACE_OSTATUS . "/unfollow"; diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index c435550313..b207c3ca87 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -81,7 +81,8 @@ class DFRN return []; } - $user['importer_uid'] = $user['uid']; + $user['importer_uid'] = $user['uid']; + $user['uprvkey'] = $user['prvkey']; } else { $user = ['importer_uid' => 0, 'uprvkey' => '', 'timezone' => 'UTC', 'nickname' => '', 'sprvkey' => '', 'spubkey' => '', @@ -1168,10 +1169,12 @@ class DFRN $a = get_app(); // At first try the Diaspora transport layer - $ret = self::transmit($owner, $contact, $atom); - if ($ret >= 200) { - logger('Delivery via Diaspora transport layer was successful with status ' . $ret); - return $ret; + if (!$dissolve) { + $ret = self::transmit($owner, $contact, $atom); + if ($ret >= 200) { + logger('Delivery via Diaspora transport layer was successful with status ' . $ret); + return $ret; + } } $idtosend = $orig_id = (($contact['dfrn-id']) ? $contact['dfrn-id'] : $contact['issued-id']); diff --git a/src/Worker/Notifier.php b/src/Worker/Notifier.php index 6d2733b8ee..61eaba388b 100644 --- a/src/Worker/Notifier.php +++ b/src/Worker/Notifier.php @@ -96,7 +96,7 @@ class Notifier return; } foreach ($r as $contact) { - Contact::terminateFriendship($user, $contact); + Contact::terminateFriendship($user, $contact, true); } return; } elseif ($cmd == Delivery::RELOCATION) {