diff --git a/mod/pubsub.php b/mod/pubsub.php index cbf678a93f..14cb7465b1 100644 --- a/mod/pubsub.php +++ b/mod/pubsub.php @@ -25,11 +25,11 @@ use Friendica\Core\Protocol; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Contact; -use Friendica\Protocol\Feed; use Friendica\Protocol\OStatus; use Friendica\Util\Strings; use Friendica\Util\Network; -use Friendica\Core\System; +use Friendica\Model\GServer; +use Friendica\Model\Post; function hub_return($valid, $body) { @@ -134,6 +134,10 @@ function pubsub_post(App $a) } } + if (!empty($contact['gsid'])) { + GServer::setProtocol($contact['gsid'], Post\DeliveryData::OSTATUS); + } + if (!in_array($contact['rel'], [Contact::SHARING, Contact::FRIEND]) && ($contact['network'] != Protocol::FEED)) { Logger::log('Contact ' . $contact['id'] . ' is not expected to share with us - ignored.'); hub_post_return(); diff --git a/mod/salmon.php b/mod/salmon.php index bc4410434b..6b3c1a407b 100644 --- a/mod/salmon.php +++ b/mod/salmon.php @@ -25,6 +25,8 @@ use Friendica\Core\Protocol; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Contact; +use Friendica\Model\GServer; +use Friendica\Model\Post; use Friendica\Protocol\ActivityNamespace; use Friendica\Protocol\OStatus; use Friendica\Protocol\Salmon; @@ -185,6 +187,10 @@ function salmon_post(App $a, $xml = '') { } } + if (!empty($r[0]['gsid'])) { + GServer::setProtocol($r[0]['gsid'], Post\DeliveryData::OSTATUS); + } + // Have we ignored the person? // If so we can not accept this post. diff --git a/src/Model/GServer.php b/src/Model/GServer.php index ca939c176c..30a1acc02a 100644 --- a/src/Model/GServer.php +++ b/src/Model/GServer.php @@ -1793,7 +1793,7 @@ class GServer } } - Logger::info('Protocol for server', ['protocol' => $protocol, 'old' => $old, 'id' => $gsid, 'url' => $gserver['url']]); + Logger::info('Protocol for server', ['protocol' => $protocol, 'old' => $old, 'id' => $gsid, 'url' => $gserver['url'], 'callstack' => System::callstack(20)]); DBA::update('gserver', ['protocol' => $protocol], ['id' => $gsid]); } diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php index 82eb4d0294..1345332fba 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -33,6 +33,7 @@ use Friendica\Model\APContact; use Friendica\Model\Contact; use Friendica\Model\Conversation; use Friendica\Model\Event; +use Friendica\Model\GServer; use Friendica\Model\Item; use Friendica\Model\ItemURI; use Friendica\Model\Mail; @@ -367,6 +368,19 @@ class Processor $item = self::constructAttachList($activity, $item); + // We received the post via AP, so we set the protocol of the server to AP + $contact = Contact::getById($item['author-id'], ['gsid']); + if (!empty($contact['gsid'])) { + GServer::setProtocol($contact['gsid'], Post\DeliveryData::ACTIVITYPUB); + } + + if ($item['author-id'] != $item['owner-id']) { + $contact = Contact::getById($item['owner-id'], ['gsid']); + if (!empty($contact['gsid'])) { + GServer::setProtocol($contact['gsid'], Post\DeliveryData::ACTIVITYPUB); + } + } + return $item; } diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index 7cb9db1a13..53ee0e5aaa 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -34,6 +34,7 @@ use Friendica\Model\Contact; use Friendica\Model\Conversation; use Friendica\Model\Event; use Friendica\Model\FContact; +use Friendica\Model\GServer; use Friendica\Model\Item; use Friendica\Model\ItemURI; use Friendica\Model\Mail; @@ -2604,6 +2605,14 @@ class DFRN Logger::log("Import DFRN message for user " . $importer["importer_uid"] . " from contact " . $importer["id"], Logger::DEBUG); + if (!empty($importer['gsid'])) { + if ($protocol == Conversation::PARCEL_DIASPORA_DFRN) { + GServer::setProtocol($importer['gsid'], Post\DeliveryData::DFRN); + } elseif ($protocol == Conversation::PARCEL_LEGACY_DFRN) { + GServer::setProtocol($importer['gsid'], Post\DeliveryData::LEGACY_DFRN); + } + } + // is it a public forum? Private forums aren't exposed with this method $forum = intval(XML::getFirstNodeValue($xpath, "/atom:feed/dfrn:community/text()")); diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index 950e8dc552..c33896c517 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -35,6 +35,7 @@ use Friendica\DI; use Friendica\Model\Contact; use Friendica\Model\Conversation; use Friendica\Model\FContact; +use Friendica\Model\GServer; use Friendica\Model\Item; use Friendica\Model\ItemURI; use Friendica\Model\Mail; @@ -1498,6 +1499,10 @@ class Diaspora return false; } + if (!empty($contact['gsid'])) { + GServer::setProtocol($contact['gsid'], Post\DeliveryData::DIASPORA); + } + $message_id = self::messageExists($importer["uid"], $guid); if ($message_id) { return true; @@ -1682,6 +1687,10 @@ class Diaspora return false; } + if (!empty($contact['gsid'])) { + GServer::setProtocol($contact['gsid'], Post\DeliveryData::DIASPORA); + } + $conversation = DBA::selectFirst('conv', [], ['uid' => $importer["uid"], 'guid' => $guid]); if (!DBA::isResult($conversation)) { $r = q( @@ -1741,6 +1750,10 @@ class Diaspora return false; } + if (!empty($contact['gsid'])) { + GServer::setProtocol($contact['gsid'], Post\DeliveryData::DIASPORA); + } + $message_id = self::messageExists($importer["uid"], $guid); if ($message_id) { return true; @@ -1851,6 +1864,10 @@ class Diaspora return false; } + if (!empty($contact['gsid'])) { + GServer::setProtocol($contact['gsid'], Post\DeliveryData::DIASPORA); + } + $conversation = null; $condition = ['uid' => $importer["uid"], 'guid' => $conversation_guid]; @@ -1911,6 +1928,10 @@ class Diaspora return false; } + if (!empty($contact['gsid'])) { + GServer::setProtocol($contact['gsid'], Post\DeliveryData::DIASPORA); + } + if (self::messageExists($importer["uid"], $guid)) { return true; } @@ -2407,6 +2428,10 @@ class Diaspora return false; } + if (!empty($contact['gsid'])) { + GServer::setProtocol($contact['gsid'], Post\DeliveryData::DIASPORA); + } + $message_id = self::messageExists($importer["uid"], $guid); if ($message_id) { return true; @@ -2679,6 +2704,10 @@ class Diaspora return false; } + if (!empty($contact['gsid'])) { + GServer::setProtocol($contact['gsid'], Post\DeliveryData::DIASPORA); + } + $message_id = self::messageExists($importer["uid"], $guid); if ($message_id) { return true;