From: Michael <heluecht@pirati.ca>
Date: Sat, 10 Dec 2022 12:08:55 +0000 (+0000)
Subject: Issue 12373: Fix communication to Diaspora
X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=019bb56668e6c41254b851e2274be0f5c6cf79ea;p=friendica.git

Issue 12373: Fix communication to Diaspora
---

diff --git a/src/Model/Contact.php b/src/Model/Contact.php
index e80f0752ea..873de08906 100644
--- a/src/Model/Contact.php
+++ b/src/Model/Contact.php
@@ -1396,6 +1396,8 @@ class Contact
 
 		if ($data['network'] == Protocol::DIASPORA) {
 			DI::dsprContact()->updateFromProbeArray($data);
+		} elseif (!empty($data['networks'][Protocol::DIASPORA])) {
+			DI::dsprContact()->updateFromProbeArray($data['networks'][Protocol::DIASPORA]);
 		}
 
 		self::updateFromProbeArray($contact_id, $data);
@@ -2487,6 +2489,8 @@ class Contact
 
 		if ($ret['network'] == Protocol::DIASPORA) {
 			DI::dsprContact()->updateFromProbeArray($ret);
+		} elseif (!empty($ret['networks'][Protocol::DIASPORA])) {
+			DI::dsprContact()->updateFromProbeArray($ret['networks'][Protocol::DIASPORA]);
 		}
 
 		return self::updateFromProbeArray($id, $ret);
diff --git a/src/Network/Probe.php b/src/Network/Probe.php
index d79cd4055f..9cdcd5fa89 100644
--- a/src/Network/Probe.php
+++ b/src/Network/Probe.php
@@ -134,6 +134,13 @@ class Probe
 			}
 		}
 
+		$newdata['networks'] = $data['networks'] ?? [];
+		foreach ([Protocol::DIASPORA, Protocol::OSTATUS] as $network) {
+			if (empty($newdata['networks'][$network])) {
+				unset($newdata['networks'][$network]);
+			}
+		}
+
 		// We don't use the "priority" field anymore and replace it with a dummy.
 		$newdata['priority'] = 0;
 
@@ -345,7 +352,11 @@ class Probe
 				$data = [];
 			}
 			if (empty($data) || (!empty($ap_profile) && empty($network) && (($data['network'] ?? '') != Protocol::DFRN))) {
+				$networks = $data['networks'] ?? [];
+				unset($data['networks']);
+				$networks[$data['network']] = $data;
 				$data = $ap_profile;
+				$data['networks'] = $networks;
 			} elseif (!empty($ap_profile)) {
 				$ap_profile['batch'] = '';
 				$data = array_merge($ap_profile, $data);
@@ -716,9 +727,13 @@ class Probe
 		}
 		if ((!$result && ($network == '')) || ($network == Protocol::DIASPORA)) {
 			$result = self::diaspora($webfinger);
+		} else {
+			$result['networks'][Protocol::DIASPORA] = self::diaspora($webfinger);
 		}
 		if ((!$result && ($network == '')) || ($network == Protocol::OSTATUS)) {
 			$result = self::ostatus($webfinger);
+		} else {
+			$result['networks'][Protocol::OSTATUS] = self::ostatus($webfinger);
 		}
 		if (in_array($network, ['', Protocol::ZOT])) {
 			$result = self::zot($webfinger, $result, $baseurl);
diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php
index 3c60f4041b..e5194ba3d0 100644
--- a/src/Protocol/Diaspora.php
+++ b/src/Protocol/Diaspora.php
@@ -826,9 +826,15 @@ class Diaspora
 	 */
 	public static function isSupportedByContactUrl(string $url, ?bool $update = null): bool
 	{
-		$contact = Contact::getByURL($url, $update);
+		$contact = Contact::getByURL($url, $update, ['uri-id', 'network']);
 
-		return DI::dsprContact()->existsByUriId($contact['uri-id'] ?? 0);
+		$supported = DI::dsprContact()->existsByUriId($contact['uri-id'] ?? 0);
+
+		if (!$supported && is_null($update) && ($contact['network'] == Protocol::DFRN)) {
+			$supported = self::isSupportedByContactUrl($url, true);
+		}
+
+		return $supported;
 	}
 
 	/**
@@ -4035,6 +4041,7 @@ class Diaspora
 
 		if (!self::parentSupportDiaspora($item['thr-parent-id'])) {
 			Logger::info('One of the parents does not support Diaspora. A signature will not be created.', ['uri-id' => $item['uri-id'], 'guid' => $item['guid']]);
+			echo "5";
 			return false;
 		}
 
@@ -4064,7 +4071,7 @@ class Diaspora
 			return false;
 		}
 
-		if (!self::isSupportedByContactUrl($parent_post['author-link'], false)) {
+		if (!self::isSupportedByContactUrl($parent_post['author-link'])) {
 			Logger::info('Parent author is no Diaspora contact.', ['parent-id' => $parent_id]);
 			return false;
 		}
diff --git a/src/Worker/Delivery.php b/src/Worker/Delivery.php
index cec894480c..1a0758987a 100644
--- a/src/Worker/Delivery.php
+++ b/src/Worker/Delivery.php
@@ -277,7 +277,7 @@ class Delivery
 	private static function deliverDFRN(string $cmd, array $contact, array $owner, array $items, array $target_item, bool $public_message, bool $top_level, bool $followup, int $server_protocol = null)
 	{
 		// Transmit Diaspora reshares via Diaspora if the Friendica contact support Diaspora
-		if (Diaspora::getReshareDetails($target_item ?? []) && Diaspora::isSupportedByContactUrl($contact['addr'], false)) {
+		if (Diaspora::getReshareDetails($target_item ?? []) && Diaspora::isSupportedByContactUrl($contact['addr'])) {
 			Logger::info('Reshare will be transmitted via Diaspora', ['url' => $contact['url'], 'guid' => ($target_item['guid'] ?? '') ?: $target_item['id']]);
 			self::deliverDiaspora($cmd, $contact, $owner, $items, $target_item, $public_message, $top_level, $followup);
 			return;
diff --git a/src/Worker/Notifier.php b/src/Worker/Notifier.php
index db593b6a47..c09faca89b 100644
--- a/src/Worker/Notifier.php
+++ b/src/Worker/Notifier.php
@@ -191,7 +191,7 @@ class Notifier
 			// when the original comment author does support the Diaspora protocol.
 			if ($thr_parent['author-link'] && $target_item['parent-uri'] != $target_item['thr-parent']) {
 				$diaspora_delivery = Diaspora::isSupportedByContactUrl($thr_parent['author-link']);
-				if ($diaspora_delivery &&  empty($target_item['signed_text'])) {
+				if ($diaspora_delivery && empty($target_item['signed_text'])) {
 					Logger::debug('Post has got no Diaspora signature, so there will be no Diaspora delivery', ['guid' => $target_item['guid'], 'uri-id' => $target_item['uri-id']]);
 					$diaspora_delivery = false;
 				}