diff --git a/config/dbstructure.json b/config/dbstructure.json index c467ba6bc7..8767c0db16 100644 --- a/config/dbstructure.json +++ b/config/dbstructure.json @@ -215,7 +215,7 @@ "reply-to-uri": {"type": "varbinary(255)", "not null": "1", "default": "", "comment": "URI to which this item is a reply"}, "conversation-uri": {"type": "varbinary(255)", "not null": "1", "default": "", "comment": "GNU Social conversation URI"}, "conversation-href": {"type": "varbinary(255)", "not null": "1", "default": "", "comment": "GNU Social conversation link"}, - "protocol": {"type": "tinyint unsigned", "not null": "1", "default": "0", "comment": "The protocol of the item"}, + "protocol": {"type": "tinyint unsigned", "not null": "1", "default": "255", "comment": "The protocol of the item"}, "source": {"type": "mediumtext", "comment": "Original source"}, "received": {"type": "datetime", "not null": "1", "default": "0001-01-01 00:00:00", "comment": "Receiving date"} }, diff --git a/src/Model/Conversation.php b/src/Model/Conversation.php index ba50dc25e4..be1eaf2295 100644 --- a/src/Model/Conversation.php +++ b/src/Model/Conversation.php @@ -17,14 +17,14 @@ class Conversation * These constants represent the parcel format used to transport a conversation independently of the message protocol. * It currently is stored in the "protocol" field for legacy reasons. */ - const PARCEL_UNKNOWN = 0; + const PARCEL_ACTIVITYPUB = 0; const PARCEL_DFRN = 1; const PARCEL_DIASPORA = 2; const PARCEL_SALMON = 3; const PARCEL_FEED = 4; // Deprecated - const PARCEL_ACTIVITYPUB = 5; const PARCEL_SPLIT_CONVERSATION = 6; const PARCEL_TWITTER = 67; + const PARCEL_UNKNOWN = 255; /** * @brief Store the conversation data @@ -71,8 +71,8 @@ class Conversation unset($old_conv['source']); } // Update structure data all the time but the source only when its from a better protocol. - if (isset($conversation['protocol']) && isset($conversation['source']) && ($old_conv['protocol'] < $conversation['protocol']) - && ($old_conv['protocol'] != 0) && ($old_conv['protocol'] != self::PARCEL_ACTIVITYPUB)) { + if (empty($conversation['source']) || (!empty($old_conv['source']) && + ($old_conv['protocol'] < defaults($conversation, 'protocol', PARCEL_UNKNOWN)))) { unset($conversation['protocol']); unset($conversation['source']); } diff --git a/src/Module/Inbox.php b/src/Module/Inbox.php index 21dd77151c..d47419a415 100644 --- a/src/Module/Inbox.php +++ b/src/Module/Inbox.php @@ -47,6 +47,6 @@ class Inbox extends BaseModule ActivityPub::processInbox($postdata, $_SERVER, $uid); - System::httpExit(201); + System::httpExit(202); } } diff --git a/src/Protocol/ActivityPub.php b/src/Protocol/ActivityPub.php index 5b5d16e85a..9fb22b2bd9 100644 --- a/src/Protocol/ActivityPub.php +++ b/src/Protocol/ActivityPub.php @@ -32,6 +32,7 @@ use Friendica\Network\Probe; * * Digest: https://tools.ietf.org/html/rfc5843 * https://tools.ietf.org/html/draft-cavage-http-signatures-10#ref-15 + * https://github.com/digitalbazaar/php-json-ld * * Part of the code for HTTP signing is taken from the Osada project. * https://framagit.org/macgirvin/osada @@ -156,6 +157,19 @@ class ActivityPub { $item = Item::selectFirst([], ['id' => $item_id]); + if (!DBA::isResult($item)) { + return false; + } + + $condition = ['item-uri' => $item['uri'], 'protocol' => Conversation::PARCEL_ACTIVITYPUB]; + $conversation = DBA::selectFirst('conversation', ['source'], $condition); + if (DBA::isResult($conversation)) { + $data = json_decode($conversation['source']); + if (!empty($data)) { + return $data; + } + } + $data = ['@context' => ['https://www.w3.org/ns/activitystreams', 'https://w3id.org/security/v1', ['Emoji' => 'toot:Emoji', 'Hashtag' => 'as:Hashtag', 'atomUri' => 'ostatus:atomUri', 'conversation' => 'ostatus:conversation', 'inReplyToAtomUri' => 'ostatus:inReplyToAtomUri', @@ -1029,6 +1043,11 @@ class ActivityPub $tag_text .= ','; } + if (empty($tag['href'])) { + //$tag['href'] + logger('Blubb!'); + } + $tag_text .= substr($tag['name'], 0, 1) . '[url=' . $tag['href'] . ']' . substr($tag['name'], 1) . '[/url]'; } }