X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2FCore%2FProtocol.php;h=4effa8d74b94eff2aa3f41649bb3d983fa9a70cc;hb=dc9658f532a067adaf96d753a34f3ee99ff8587b;hp=096e12c27bd19979eee61950211035bfaa732490;hpb=352b7a0ac37f4f693a7b4e16f8a95546f9d8b3d9;p=friendica.git diff --git a/src/Core/Protocol.php b/src/Core/Protocol.php index 096e12c27b..4effa8d74b 100644 --- a/src/Core/Protocol.php +++ b/src/Core/Protocol.php @@ -1,6 +1,6 @@ $contact['id']]); + return null; } $protocol = $contact['network']; @@ -202,24 +205,24 @@ class Protocol 'uri-id' => 0, ]; - $slap = OStatus::salmon($item, $user); + $slap = OStatus::salmon($item, $owner); if (empty($contact['notify'])) { - return true; - throw new \InvalidArgumentException('Missing expected "notify" key in OStatus/DFRN contact'); + Logger::notice('OStatus/DFRN Contact is missing notify, we quit here', ['id' => $contact['id']]); + return null; } - return Salmon::slapper($user, $contact['notify'], $slap) === 0; + return Salmon::slapper($owner, $contact['notify'], $slap) === 0; } elseif ($protocol == Protocol::DIASPORA) { - return Diaspora::sendUnshare($user, $contact) > 0; + return Diaspora::sendUnshare($owner, $contact) > 0; } elseif ($protocol == Protocol::ACTIVITYPUB) { - return ActivityPub\Transmitter::sendContactUndo($contact['url'], $contact['id'], $user['uid']); + return ActivityPub\Transmitter::sendContactUndo($contact['url'], $contact['id'], $owner); } // Catch-all hook for connector addons $hook_data = [ 'contact' => $contact, - 'uid' => $user['uid'], + 'uid' => $owner['uid'], 'result' => null, ]; Hook::callAll('unfollow', $hook_data); @@ -231,12 +234,12 @@ class Protocol * Revoke an incoming follow from the provided contact * * @param array $contact Target public contact (uid == 0) array - * @param int $uid Source local user id + * @param array $owner Source owner-view record * @return bool|null true if successful, false if not, null if no action was performed * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - public static function revokeFollow(array $contact, int $uid): ?bool + public static function revokeFollow(array $contact, array $owner): ?bool { if (empty($contact['network'])) { throw new \InvalidArgumentException('Missing network key in contact array'); @@ -248,13 +251,13 @@ class Protocol } if ($protocol == Protocol::ACTIVITYPUB) { - return ActivityPub\Transmitter::sendContactReject($contact['url'], $contact['hub-verify'], $uid); + return ActivityPub\Transmitter::sendContactReject($contact['url'], $contact['hub-verify'], $owner); } // Catch-all hook for connector addons $hook_data = [ 'contact' => $contact, - 'uid' => $uid, + 'uid' => $owner['uid'], 'result' => null, ]; Hook::callAll('revoke_follow', $hook_data); @@ -303,4 +306,31 @@ class Protocol return $hook_data['result']; } + + /** + * Returns whether the provided protocol supports probing for contacts + * + * @param $protocol + * @return bool + * @throws HTTPException\InternalServerErrorException + */ + public static function supportsProbe($protocol): bool + { + // "Mail" can only be probed for a specific user in a specific condition, so we are ignoring it here. + if ($protocol == self::MAIL) { + return false; + } + + if (in_array($protocol, array_merge(self::NATIVE_SUPPORT, [self::ZOT, self::PHANTOM]))) { + return true; + } + + $hook_data = [ + 'protocol' => $protocol, + 'result' => null + ]; + Hook::callAll('support_probe', $hook_data); + + return $hook_data['result'] === true; + } }