diff --git a/database.sql b/database.sql index 01bd84b00..d8b26cebe 100644 --- a/database.sql +++ b/database.sql @@ -1,6 +1,6 @@ -- ------------------------------------------ -- Friendica 2022.09-dev (Giant Rhubarb) --- DB_UPDATE_VERSION 1473 +-- DB_UPDATE_VERSION 1474 -- ------------------------------------------ @@ -724,6 +724,39 @@ CREATE TABLE IF NOT EXISTS `hook` ( UNIQUE INDEX `hook_file_function` (`hook`,`file`,`function`) ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='addon hook registry'; +-- +-- TABLE inbox-entry +-- +CREATE TABLE IF NOT EXISTS `inbox-entry` ( + `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID', + `activity-id` varbinary(255) COMMENT 'id of the incoming activity', + `object-id` varbinary(255) COMMENT '', + `in-reply-to-id` varbinary(255) COMMENT '', + `type` varchar(64) COMMENT 'Type of the activity', + `object-type` varchar(64) COMMENT 'Type of the object activity', + `object-object-type` varchar(64) COMMENT 'Type of the object\'s object activity', + `received` datetime COMMENT 'Receiving date', + `activity` mediumtext COMMENT 'The JSON activity', + `signer` varchar(255) COMMENT '', + `push` boolean NOT NULL DEFAULT '0' COMMENT '', + PRIMARY KEY(`id`), + UNIQUE INDEX `activity-id` (`activity-id`), + INDEX `object-id` (`object-id`), + INDEX `received` (`received`) +) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Incoming activity'; + +-- +-- TABLE inbox-entry-receiver +-- +CREATE TABLE IF NOT EXISTS `inbox-entry-receiver` ( + `queue-id` int unsigned NOT NULL COMMENT '', + `uid` mediumint unsigned NOT NULL COMMENT 'User id', + PRIMARY KEY(`queue-id`,`uid`), + INDEX `uid` (`uid`), + FOREIGN KEY (`queue-id`) REFERENCES `inbox-entry` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE, + FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE +) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Receiver for the incoming activity'; + -- -- TABLE inbox-status -- diff --git a/doc/database.md b/doc/database.md index fcff590e1..0effb1754 100644 --- a/doc/database.md +++ b/doc/database.md @@ -31,6 +31,8 @@ Database Tables | [gserver](help/database/db_gserver) | Global servers | | [gserver-tag](help/database/db_gserver-tag) | Tags that the server has subscribed | | [hook](help/database/db_hook) | addon hook registry | +| [inbox-entry](help/database/db_inbox-entry) | Incoming activity | +| [inbox-entry-receiver](help/database/db_inbox-entry-receiver) | Receiver for the incoming activity | | [inbox-status](help/database/db_inbox-status) | Status of ActivityPub inboxes | | [intro](help/database/db_intro) | | | [item-uri](help/database/db_item-uri) | URI and GUID for items | diff --git a/doc/database/db_inbox-entry-receiver.md b/doc/database/db_inbox-entry-receiver.md new file mode 100644 index 000000000..f905289d2 --- /dev/null +++ b/doc/database/db_inbox-entry-receiver.md @@ -0,0 +1,30 @@ +Table inbox-entry-receiver +=========== + +Receiver for the incoming activity + +Fields +------ + +| Field | Description | Type | Null | Key | Default | Extra | +| -------- | ----------- | ------------------ | ---- | --- | ------- | ----- | +| queue-id | | int unsigned | NO | PRI | NULL | | +| uid | User id | mediumint unsigned | NO | PRI | NULL | | + +Indexes +------------ + +| Name | Fields | +| ------- | ------------- | +| PRIMARY | queue-id, uid | +| uid | uid | + +Foreign Keys +------------ + +| Field | Target Table | Target Field | +|-------|--------------|--------------| +| queue-id | [inbox-entry](help/database/db_inbox-entry) | id | +| uid | [user](help/database/db_user) | uid | + +Return to [database documentation](help/database) diff --git a/doc/database/db_inbox-entry.md b/doc/database/db_inbox-entry.md new file mode 100644 index 000000000..56dee2c62 --- /dev/null +++ b/doc/database/db_inbox-entry.md @@ -0,0 +1,34 @@ +Table inbox-entry +=========== + +Incoming activity + +Fields +------ + +| Field | Description | Type | Null | Key | Default | Extra | +| ------------------ | ------------------------------------ | -------------- | ---- | --- | ------- | -------------- | +| id | sequential ID | int unsigned | NO | PRI | NULL | auto_increment | +| activity-id | id of the incoming activity | varbinary(255) | YES | | NULL | | +| object-id | | varbinary(255) | YES | | NULL | | +| in-reply-to-id | | varbinary(255) | YES | | NULL | | +| type | Type of the activity | varchar(64) | YES | | NULL | | +| object-type | Type of the object activity | varchar(64) | YES | | NULL | | +| object-object-type | Type of the object's object activity | varchar(64) | YES | | NULL | | +| received | Receiving date | datetime | YES | | NULL | | +| activity | The JSON activity | mediumtext | YES | | NULL | | +| signer | | varchar(255) | YES | | NULL | | +| push | | boolean | NO | | 0 | | + +Indexes +------------ + +| Name | Fields | +| ----------- | ------------------- | +| PRIMARY | id | +| activity-id | UNIQUE, activity-id | +| object-id | object-id | +| received | received | + + +Return to [database documentation](help/database) diff --git a/src/Protocol/ActivityPub/Queue.php b/src/Protocol/ActivityPub/Queue.php index 12bf7e268..c3605ebb6 100644 --- a/src/Protocol/ActivityPub/Queue.php +++ b/src/Protocol/ActivityPub/Queue.php @@ -44,7 +44,7 @@ class Queue public static function add(array $activity, string $type, int $uid, string $http_signer, bool $push): array { $fields = [ - 'activity-id' => $activity['id'], + 'activity-id' => $activity['id'], 'object-id' => $activity['object_id'], 'type' => $type, 'object-type' => $activity['object_type'], @@ -104,9 +104,9 @@ class Queue Logger::debug('Processing queue entry', ['id' => $entry['id'], 'type' => $entry['type'], 'object-type' => $entry['object-type'], 'uri' => $entry['object-id'], 'in-reply-to' => $entry['in-reply-to-id']]); - $activity = json_decode($entry['activity'], true); - $type = $entry['type']; - $push = $entry['push']; + $activity = json_decode($entry['activity'], true); + $type = $entry['type']; + $push = $entry['push']; $activity['entry-id'] = $entry['id'];