From 0d5d0bb65ad7c316b695cb276e58d991411bff4f Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 15 Apr 2020 05:24:36 +0000 Subject: [PATCH 1/5] Fix: some selected item fields hadn't been selected --- src/Model/Item.php | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/src/Model/Item.php b/src/Model/Item.php index a9a6eede23..b825170c0f 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -342,10 +342,6 @@ class Item } } - if (array_key_exists('signed_text', $row) && array_key_exists('interaction', $row) && !is_null($row['interaction'])) { - $row['signed_text'] = $row['interaction']; - } - if (array_key_exists('ignored', $row) && array_key_exists('internal-user-ignored', $row) && !is_null($row['internal-user-ignored'])) { $row['ignored'] = $row['internal-user-ignored']; } @@ -672,7 +668,8 @@ class Item { $fields = []; - $fields['item'] = ['id', 'uid', 'parent', 'uri', 'parent-uri', 'thr-parent', 'guid', + $fields['item'] = ['id', 'uid', 'parent', 'uri', 'parent-uri', 'thr-parent', + 'guid', 'uri-id', 'parent-uri-id', 'thr-parent-id', 'contact-id', 'owner-id', 'author-id', 'type', 'wall', 'gravity', 'extid', 'created', 'edited', 'commented', 'received', 'changed', 'psid', 'resource-id', 'event-id', 'tag', 'attach', 'post-type', 'file', @@ -714,9 +711,7 @@ class Item 'nofinish' => 'event-nofinish','adjust' => 'event-adjust', 'ignore' => 'event-ignore', 'id' => 'event-id']; - $fields['sign'] = ['signed_text', 'signature', 'signer']; - - $fields['diaspora-interaction'] = ['interaction']; + $fields['diaspora-interaction'] = ['interaction', 'interaction' => 'signed_text']; return $fields; } @@ -858,10 +853,6 @@ class Item $selected[] = 'internal-user-ignored'; } - if (in_array('signed_text', $selected)) { - $selected[] = 'interaction'; - } - $legacy_fields = array_merge(ItemDeliveryData::LEGACY_FIELD_LIST, self::MIXED_CONTENT_FIELDLIST); $selection = []; From 496d882d0610d29a90b56c571205bd72272cd1ed Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 15 Apr 2020 05:28:54 +0000 Subject: [PATCH 2/5] Fix: some selected item fields hadn't been selected --- database.sql | 15 +-------------- src/Model/Item.php | 23 +++-------------------- src/Worker/DBClean.php | 29 +++-------------------------- static/dbstructure.config.php | 14 -------------- 4 files changed, 7 insertions(+), 74 deletions(-) diff --git a/database.sql b/database.sql index 4956798ba2..d7772920d8 100644 --- a/database.sql +++ b/database.sql @@ -1,5 +1,5 @@ -- ------------------------------------------ --- Friendica 2020.03-rc (Dalmatian Bellflower) +-- Friendica 2020.06-dev (Red Hot Poker) -- DB_UPDATE_VERSION 1338 -- ------------------------------------------ @@ -1152,19 +1152,6 @@ CREATE TABLE IF NOT EXISTS `session` ( INDEX `expire` (`expire`) ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='web session storage'; --- --- TABLE sign --- -CREATE TABLE IF NOT EXISTS `sign` ( - `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID', - `iid` int unsigned NOT NULL DEFAULT 0 COMMENT 'item.id', - `signed_text` mediumtext COMMENT '', - `signature` text COMMENT '', - `signer` varchar(255) NOT NULL DEFAULT '' COMMENT '', - PRIMARY KEY(`id`), - UNIQUE INDEX `iid` (`iid`) -) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Diaspora signatures'; - -- -- TABLE term -- diff --git a/src/Model/Item.php b/src/Model/Item.php index a9a6eede23..d24340d764 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -342,10 +342,6 @@ class Item } } - if (array_key_exists('signed_text', $row) && array_key_exists('interaction', $row) && !is_null($row['interaction'])) { - $row['signed_text'] = $row['interaction']; - } - if (array_key_exists('ignored', $row) && array_key_exists('internal-user-ignored', $row) && !is_null($row['internal-user-ignored'])) { $row['ignored'] = $row['internal-user-ignored']; } @@ -672,7 +668,8 @@ class Item { $fields = []; - $fields['item'] = ['id', 'uid', 'parent', 'uri', 'parent-uri', 'thr-parent', 'guid', + $fields['item'] = ['id', 'uid', 'parent', 'uri', 'parent-uri', 'thr-parent', + 'guid', 'uri-id', 'parent-uri-id', 'thr-parent-id', 'contact-id', 'owner-id', 'author-id', 'type', 'wall', 'gravity', 'extid', 'created', 'edited', 'commented', 'received', 'changed', 'psid', 'resource-id', 'event-id', 'tag', 'attach', 'post-type', 'file', @@ -714,9 +711,7 @@ class Item 'nofinish' => 'event-nofinish','adjust' => 'event-adjust', 'ignore' => 'event-ignore', 'id' => 'event-id']; - $fields['sign'] = ['signed_text', 'signature', 'signer']; - - $fields['diaspora-interaction'] = ['interaction']; + $fields['diaspora-interaction'] = ['interaction', 'interaction' => 'signed_text']; return $fields; } @@ -801,10 +796,6 @@ class Item $joins .= " LEFT JOIN `event` ON `event-id` = `event`.`id`"; } - if (strpos($sql_commands, "`sign`.") !== false) { - $joins .= " LEFT JOIN `sign` ON `sign`.`iid` = `item`.`id`"; - } - if (strpos($sql_commands, "`diaspora-interaction`.") !== false) { $joins .= " LEFT JOIN `diaspora-interaction` ON `diaspora-interaction`.`uri-id` = `item`.`uri-id`"; } @@ -858,10 +849,6 @@ class Item $selected[] = 'internal-user-ignored'; } - if (in_array('signed_text', $selected)) { - $selected[] = 'interaction'; - } - $legacy_fields = array_merge(ItemDeliveryData::LEGACY_FIELD_LIST, self::MIXED_CONTENT_FIELDLIST); $selection = []; @@ -2000,10 +1987,6 @@ class Item if (!empty($dsprsig->signed_text) && empty($dsprsig->signature) && empty($dsprsig->signer)) { DBA::insert('diaspora-interaction', ['uri-id' => $item['uri-id'], 'interaction' => $dsprsig->signed_text], true); - } else { - // The other fields are used by very old Friendica servers, so we currently store them differently - DBA::insert('sign', ['iid' => $current_post, 'signed_text' => $dsprsig->signed_text, - 'signature' => $dsprsig->signature, 'signer' => $dsprsig->signer]); } } diff --git a/src/Worker/DBClean.php b/src/Worker/DBClean.php index 0316b9ebf6..e0cdd70347 100644 --- a/src/Worker/DBClean.php +++ b/src/Worker/DBClean.php @@ -71,7 +71,7 @@ class DBClean { * 3: Orphaned data from thread table. * 4: Orphaned data from notify table. * 5: Orphaned data from notify-threads table. - * 6: Orphaned data from sign table. + * 6: Legacy functionality (removed) * 7: Orphaned data from term table. * 8: Expired threads. * 9: Old global item entries from expired threads. @@ -224,31 +224,8 @@ class DBClean { DI::config()->set('system', 'finished-dbclean-5', true); } } elseif ($stage == 6) { - $last_id = DI::config()->get('system', 'dbclean-last-id-6', 0); - - Logger::log("Deleting orphaned data from sign table. Last ID: ".$last_id); - $r = DBA::p("SELECT `iid`, `id` FROM `sign` - WHERE NOT EXISTS (SELECT `id` FROM `item` WHERE `item`.`id` = `sign`.`iid`) AND `id` >= ? - ORDER BY `id` LIMIT ?", $last_id, $limit); - $count = DBA::numRows($r); - if ($count > 0) { - Logger::log("found sign orphans: ".$count); - while ($orphan = DBA::fetch($r)) { - $last_id = $orphan["id"]; - DBA::delete('sign', ['iid' => $orphan["iid"]]); - } - Worker::add(PRIORITY_MEDIUM, 'DBClean', 6, $last_id); - } else { - Logger::log("No sign orphans found"); - } - DBA::close($r); - Logger::log("Done deleting ".$count." orphaned data from sign table. Last ID: ".$last_id); - - DI::config()->set('system', 'dbclean-last-id-6', $last_id); - - if ($count < $limit) { - DI::config()->set('system', 'finished-dbclean-6', true); - } + // The legacy functionality had been removed + DI::config()->set('system', 'finished-dbclean-6', true); } elseif ($stage == 7) { $last_id = DI::config()->get('system', 'dbclean-last-id-7', 0); diff --git a/static/dbstructure.config.php b/static/dbstructure.config.php index 707e39468e..94d5a36025 100755 --- a/static/dbstructure.config.php +++ b/static/dbstructure.config.php @@ -1268,20 +1268,6 @@ return [ "expire" => ["expire"], ] ], - "sign" => [ - "comment" => "Diaspora signatures", - "fields" => [ - "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"], - "iid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["item" => "id"], "comment" => "item.id"], - "signed_text" => ["type" => "mediumtext", "comment" => ""], - "signature" => ["type" => "text", "comment" => ""], - "signer" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], - ], - "indexes" => [ - "PRIMARY" => ["id"], - "iid" => ["UNIQUE", "iid"], - ] - ], "term" => [ "comment" => "item taxonomy (categories, tags, etc.) table", "fields" => [ From 54a4b4df3b96ebc7df99fa3e1d5d624d014255e2 Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 15 Apr 2020 05:33:11 +0000 Subject: [PATCH 3/5] Whitespace removed --- src/Model/Item.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Model/Item.php b/src/Model/Item.php index 60539e6036..d24340d764 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -713,7 +713,6 @@ class Item $fields['diaspora-interaction'] = ['interaction', 'interaction' => 'signed_text']; - return $fields; } From fe48b078e413ea3c5e89bc0e8d24fe9cead7469c Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 15 Apr 2020 05:51:06 +0000 Subject: [PATCH 4/5] The old fields don't exist anymore --- src/Protocol/Diaspora.php | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index 828333b41f..4827a06510 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -3941,30 +3941,24 @@ class Diaspora Logger::log("Got relayable data ".$type." for item ".$item["guid"]." (".$item["id"].")", Logger::DEBUG); - // Old way - is used by the internal Friendica functions - /// @todo Change all signatur storing functions to the new format - if ($item['signed_text'] && $item['signature'] && $item['signer']) { - $message = self::messageFromSignature($item); - } else {// New way - $msg = json_decode($item['signed_text'], true); + $msg = json_decode($item['signed_text'], true); - $message = []; - if (is_array($msg)) { - foreach ($msg as $field => $data) { - if (!$item["deleted"]) { - if ($field == "diaspora_handle") { - $field = "author"; - } - if ($field == "target_type") { - $field = "parent_type"; - } + $message = []; + if (is_array($msg)) { + foreach ($msg as $field => $data) { + if (!$item["deleted"]) { + if ($field == "diaspora_handle") { + $field = "author"; + } + if ($field == "target_type") { + $field = "parent_type"; } - - $message[$field] = $data; } - } else { - Logger::log("Signature text for item ".$item["guid"]." (".$item["id"].") couldn't be extracted: ".$item['signed_text'], Logger::DEBUG); + + $message[$field] = $data; } + } else { + Logger::log("Signature text for item ".$item["guid"]." (".$item["id"].") couldn't be extracted: ".$item['signed_text'], Logger::DEBUG); } $message["parent_author_signature"] = self::signature($owner, $message); From a5f84c89918d144f0fd362551e47a4b26f91095b Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 15 Apr 2020 05:57:07 +0000 Subject: [PATCH 5/5] The old fields are not existing anymore --- src/Protocol/DFRN.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index 4c71de4d57..cbd7574158 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -1072,7 +1072,7 @@ class DFRN // The signed text contains the content in Markdown, the sender handle and the signatur for the content // It is needed for relayed comments to Diaspora. if ($item['signed_text']) { - $sign = base64_encode(json_encode(['signed_text' => $item['signed_text'],'signature' => $item['signature'],'signer' => $item['signer']])); + $sign = base64_encode(json_encode(['signed_text' => $item['signed_text'],'signature' => '','signer' => ''])); XML::addElement($doc, $entry, "dfrn:diaspora_signature", $sign); }