From 13489aca7d486b79ee5b210c13bc2f120802c68f Mon Sep 17 00:00:00 2001 From: Joffrey JAFFEUX Date: Wed, 12 Apr 2023 15:02:14 +0200 Subject: [PATCH 1/4] FIC: stores encrypt preference in pending PMs --- .../scheduled/discourse_automation_tracker.rb | 3 +- app/lib/discourse_automation/scriptable.rb | 8 +++-- .../scripts/gift_exchange.rb | 2 +- .../discourse_automation/scripts/send_pms.rb | 2 +- app/models/discourse_automation/field.rb | 2 +- .../components/fields/da-pms-field.js | 2 +- .../components/fields/da-pms-field.hbs | 6 ++-- config/locales/client.ar.yml | 2 +- config/locales/client.de.yml | 2 +- config/locales/client.en.yml | 2 +- config/locales/client.es.yml | 2 +- config/locales/client.fi.yml | 2 +- config/locales/client.fr.yml | 2 +- config/locales/client.hu.yml | 2 +- config/locales/client.it.yml | 2 +- config/locales/client.ja.yml | 2 +- config/locales/client.nl.yml | 2 +- config/locales/client.pt_BR.yml | 2 +- config/locales/client.ru.yml | 2 +- config/locales/client.sv.yml | 2 +- config/locales/client.tr_TR.yml | 2 +- config/locales/client.zh_CN.yml | 2 +- ...203310_post_migrate_gift_from_pm_to_pms.rb | 2 +- ...dd_prefers_encrypt_field_to_pending_pms.rb | 7 +++++ spec/scripts/send_pms_spec.rb | 31 +++++++++++++++++++ 25 files changed, 68 insertions(+), 27 deletions(-) create mode 100644 db/migrate/20230412120414_add_prefers_encrypt_field_to_pending_pms.rb diff --git a/app/jobs/scheduled/discourse_automation_tracker.rb b/app/jobs/scheduled/discourse_automation_tracker.rb index 5f4a63ee..2b3bf1b8 100644 --- a/app/jobs/scheduled/discourse_automation_tracker.rb +++ b/app/jobs/scheduled/discourse_automation_tracker.rb @@ -24,8 +24,9 @@ def execute(_args = nil) def send_pending_pm(pending_pm) DiscourseAutomation::Scriptable::Utils.send_pm( - pending_pm.attributes.slice("target_usernames", "title", "raw"), + pending_pm.attributes.slice("target_usernames", "title", "raw",), sender: pending_pm.sender, + prefers_encrypt: pending_pm.prefers_encrypt, ) pending_pm.destroy! diff --git a/app/lib/discourse_automation/scriptable.rb b/app/lib/discourse_automation/scriptable.rb index b988a9dd..631b1622 100644 --- a/app/lib/discourse_automation/scriptable.rb +++ b/app/lib/discourse_automation/scriptable.rb @@ -194,21 +194,23 @@ def self.send_pm( sender: Discourse.system_user.username, delay: nil, automation_id: nil, - encrypt: true + prefers_encrypt: true ) pm = pm.symbolize_keys + prefers_encrypt = prefers_encrypt && defined?(EncryptedPostCreator) - if delay && automation_id + if delay && delay.to_i > 0 && automation_id pm[:execute_at] = delay.to_i.minutes.from_now pm[:sender] = sender pm[:automation_id] = automation_id + pm[:prefers_encrypt] = prefers_encrypt DiscourseAutomation::PendingPm.create!(pm) else if sender = User.find_by(username: sender) post_created = false pm = pm.merge(archetype: Archetype.private_message) - if encrypt && defined?(EncryptedPostCreator) + if prefers_encrypt pm[:target_usernames] = (pm[:target_usernames] || []).join(",") post_created = EncryptedPostCreator.new(sender, pm).create end diff --git a/app/lib/discourse_automation/scripts/gift_exchange.rb b/app/lib/discourse_automation/scripts/gift_exchange.rb index 0069cb42..4cad6843 100644 --- a/app/lib/discourse_automation/scripts/gift_exchange.rb +++ b/app/lib/discourse_automation/scripts/gift_exchange.rb @@ -62,7 +62,7 @@ utils.send_pm( { target_usernames: Array(gifter), title: title, raw: raw }, delay: giftee_assignment_message["delay"], - encrypt: giftee_assignment_message["encrypt"], + prefers_encrypt: giftee_assignment_message["prefers_encrypt"], automation_id: automation.id, ) end diff --git a/app/lib/discourse_automation/scripts/send_pms.rb b/app/lib/discourse_automation/scripts/send_pms.rb index e96a0bb7..0283fd61 100644 --- a/app/lib/discourse_automation/scripts/send_pms.rb +++ b/app/lib/discourse_automation/scripts/send_pms.rb @@ -49,7 +49,7 @@ sender: sender_username, automation_id: automation.id, delay: sendable["delay"], - encrypt: sendable["encrypt"], + prefers_encrypt: sendable["prefers_encrypt"], ) end end diff --git a/app/models/discourse_automation/field.rb b/app/models/discourse_automation/field.rb index f01012d2..92f8fd20 100644 --- a/app/models/discourse_automation/field.rb +++ b/app/models/discourse_automation/field.rb @@ -174,7 +174,7 @@ def metadata_schema "delay" => { "type" => "integer", }, - "encrypt" => { + "prefers_encrypt" => { "type" => "boolean", }, }, diff --git a/assets/javascripts/discourse/components/fields/da-pms-field.js b/assets/javascripts/discourse/components/fields/da-pms-field.js index 920ae9c2..72e0c8aa 100644 --- a/assets/javascripts/discourse/components/fields/da-pms-field.js +++ b/assets/javascripts/discourse/components/fields/da-pms-field.js @@ -30,7 +30,7 @@ export default class PmsField extends BaseField { title: "", raw: "", delay: 0, - encrypt: true, + prefers_encrypt: true, }); } } diff --git a/assets/javascripts/discourse/templates/components/fields/da-pms-field.hbs b/assets/javascripts/discourse/templates/components/fields/da-pms-field.hbs index cfca9ecf..7f5fdbc6 100644 --- a/assets/javascripts/discourse/templates/components/fields/da-pms-field.hbs +++ b/assets/javascripts/discourse/templates/components/fields/da-pms-field.hbs @@ -73,14 +73,14 @@
{{input type="checkbox" - checked=pm.encrypt - click=(action (mut pm.encrypt) value="target.checked") + checked=pm.prefers_encrypt + click=(action (mut pm.prefers_encrypt) value="target.checked") disabled=field.isDisabled }}
diff --git a/config/locales/client.ar.yml b/config/locales/client.ar.yml index 0dd73c87..14b53e8c 100644 --- a/config/locales/client.ar.yml +++ b/config/locales/client.ar.yml @@ -46,7 +46,7 @@ ar: label: النص delay: label: التأخير (بالدقائق) - encrypt: + prefers_encrypt: label: يشفِّر الرسائل الشخصية إذا كانت متاحة group: label: المجموعة diff --git a/config/locales/client.de.yml b/config/locales/client.de.yml index 2a6f0b0d..ed2fb868 100644 --- a/config/locales/client.de.yml +++ b/config/locales/client.de.yml @@ -46,7 +46,7 @@ de: label: Body delay: label: Verzögerung (Minuten) - encrypt: + prefers_encrypt: label: Verschlüsselt PN, falls verfügbar group: label: Gruppe diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index dfb59c17..73cdd9ba 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -40,7 +40,7 @@ en: label: Body delay: label: Delay (minutes) - encrypt: + prefers_encrypt: label: Encrypts PM if available group: label: Group diff --git a/config/locales/client.es.yml b/config/locales/client.es.yml index ba88c7bd..c4df951f 100644 --- a/config/locales/client.es.yml +++ b/config/locales/client.es.yml @@ -46,7 +46,7 @@ es: label: Cuerpo delay: label: Retardo (en minutos) - encrypt: + prefers_encrypt: label: Cifrar el mensaje cuando sea posible group: label: Grupo diff --git a/config/locales/client.fi.yml b/config/locales/client.fi.yml index 26b770b3..83302d6f 100644 --- a/config/locales/client.fi.yml +++ b/config/locales/client.fi.yml @@ -46,7 +46,7 @@ fi: label: Teksti delay: label: Viive (minuutteina) - encrypt: + prefers_encrypt: label: Salaa yksityisviestin, jos käytettävissä group: label: Ryhmä diff --git a/config/locales/client.fr.yml b/config/locales/client.fr.yml index 711c6de8..c8a056a0 100644 --- a/config/locales/client.fr.yml +++ b/config/locales/client.fr.yml @@ -46,7 +46,7 @@ fr: label: Corps delay: label: Délai (minutes) - encrypt: + prefers_encrypt: label: Chiffrer le MP si disponible group: label: Groupe diff --git a/config/locales/client.hu.yml b/config/locales/client.hu.yml index 6b9f4944..905c9bd6 100644 --- a/config/locales/client.hu.yml +++ b/config/locales/client.hu.yml @@ -46,7 +46,7 @@ hu: label: Törzs delay: label: Késleltetés (perc) - encrypt: + prefers_encrypt: label: PÜ titkosítása, ha elérhető group: label: Csoport diff --git a/config/locales/client.it.yml b/config/locales/client.it.yml index 88b63373..3c3da721 100644 --- a/config/locales/client.it.yml +++ b/config/locales/client.it.yml @@ -46,7 +46,7 @@ it: label: Corpo delay: label: Ritardo (minuti) - encrypt: + prefers_encrypt: label: Applica crittografia ai MP se disponibile group: label: Gruppo diff --git a/config/locales/client.ja.yml b/config/locales/client.ja.yml index 5866d855..1223314d 100644 --- a/config/locales/client.ja.yml +++ b/config/locales/client.ja.yml @@ -46,7 +46,7 @@ ja: label: 本文 delay: label: 遅延(分) - encrypt: + prefers_encrypt: label: 可能な場合は PM を暗号化する group: label: グループ diff --git a/config/locales/client.nl.yml b/config/locales/client.nl.yml index ad1b602e..47f613f6 100644 --- a/config/locales/client.nl.yml +++ b/config/locales/client.nl.yml @@ -46,7 +46,7 @@ nl: label: Tekst delay: label: Vertraging (minuten) - encrypt: + prefers_encrypt: label: Versleutelt PB indien beschikbaar group: label: Groep diff --git a/config/locales/client.pt_BR.yml b/config/locales/client.pt_BR.yml index 51dbcc75..db5f8c7e 100644 --- a/config/locales/client.pt_BR.yml +++ b/config/locales/client.pt_BR.yml @@ -46,7 +46,7 @@ pt_BR: label: Corpo delay: label: Atraso (minutos) - encrypt: + prefers_encrypt: label: Criptografa PM, se disponível group: label: Grupo diff --git a/config/locales/client.ru.yml b/config/locales/client.ru.yml index 20c70e26..4b2cb2e1 100644 --- a/config/locales/client.ru.yml +++ b/config/locales/client.ru.yml @@ -46,7 +46,7 @@ ru: label: Тело сообщения delay: label: Задержка (в минутах) - encrypt: + prefers_encrypt: label: Шифрует ЛС, если это возможно group: label: Группа diff --git a/config/locales/client.sv.yml b/config/locales/client.sv.yml index 5e9ffef4..e0d78d96 100644 --- a/config/locales/client.sv.yml +++ b/config/locales/client.sv.yml @@ -46,7 +46,7 @@ sv: label: Kropp delay: label: Fördröjning (minuter) - encrypt: + prefers_encrypt: label: Krypterar PM om tillgängligt group: label: Grupp diff --git a/config/locales/client.tr_TR.yml b/config/locales/client.tr_TR.yml index 1cbb71ef..f6788a42 100644 --- a/config/locales/client.tr_TR.yml +++ b/config/locales/client.tr_TR.yml @@ -46,7 +46,7 @@ tr_TR: label: Gövde delay: label: Gecikme (dakika) - encrypt: + prefers_encrypt: label: Mümkünse özel mesajı şifreler group: label: Grup diff --git a/config/locales/client.zh_CN.yml b/config/locales/client.zh_CN.yml index 8e6a07f2..e29a3e45 100644 --- a/config/locales/client.zh_CN.yml +++ b/config/locales/client.zh_CN.yml @@ -46,7 +46,7 @@ zh_CN: label: 正文 delay: label: 延迟(分钟) - encrypt: + prefers_encrypt: label: 加密 PM(如果可用) group: label: 群组 diff --git a/db/migrate/20210528203310_post_migrate_gift_from_pm_to_pms.rb b/db/migrate/20210528203310_post_migrate_gift_from_pm_to_pms.rb index 3a5432ca..4d3012a2 100644 --- a/db/migrate/20210528203310_post_migrate_gift_from_pm_to_pms.rb +++ b/db/migrate/20210528203310_post_migrate_gift_from_pm_to_pms.rb @@ -20,7 +20,7 @@ def up title: pm["title"], raw: pm["body"], delay: pm["delay"] || 0, - encrypt: pm["encrypt"] || true, + prefers_encrypt: pm["encrypt"] || true, }, ], } diff --git a/db/migrate/20230412120414_add_prefers_encrypt_field_to_pending_pms.rb b/db/migrate/20230412120414_add_prefers_encrypt_field_to_pending_pms.rb new file mode 100644 index 00000000..60b2593b --- /dev/null +++ b/db/migrate/20230412120414_add_prefers_encrypt_field_to_pending_pms.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddPrefersEncryptFieldToPendingPms < ActiveRecord::Migration[7.0] + def change + add_column :discourse_automation_pending_pms, :prefers_encrypt, :boolean, null: false, default: false + end +end diff --git a/spec/scripts/send_pms_spec.rb b/spec/scripts/send_pms_spec.rb index 0d9e60ea..5056c5df 100644 --- a/spec/scripts/send_pms_spec.rb +++ b/spec/scripts/send_pms_spec.rb @@ -87,4 +87,35 @@ }.to change { Post.count }.by(1) end end + + context "when delayed" do + fab!(:user_1) { Fabricate(:user) } + + before do + automation.update!(trigger: DiscourseAutomation::Triggerable::RECURRING) + end + + it "correctly stores encrypt preference" do + automation.upsert_field!( + "sendable_pms", + "pms", + { + value: [ + { + title: "A message from %%SENDER_USERNAME%%", + raw: "This is a message sent to @%%RECEIVER_USERNAME%%", + delay: 1, + prefers_encrypt: false, + }, + ], + }, + target: "script" + ) + automation.upsert_field!("receiver", "user", { value: Discourse.system_user.username }) + + automation.trigger! + + expec(DiscourseAutomation::PendingPm.last.prefers_encrypt).to eq(false) + end + end end From ba5baeda648377628e759328f3da465efd37bddd Mon Sep 17 00:00:00 2001 From: Joffrey JAFFEUX Date: Wed, 12 Apr 2023 16:49:07 +0200 Subject: [PATCH 2/4] linting --- app/jobs/scheduled/discourse_automation_tracker.rb | 2 +- ...230412120414_add_prefers_encrypt_field_to_pending_pms.rb | 6 +++++- spec/scripts/send_pms_spec.rb | 6 ++---- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/jobs/scheduled/discourse_automation_tracker.rb b/app/jobs/scheduled/discourse_automation_tracker.rb index 2b3bf1b8..d7d98c82 100644 --- a/app/jobs/scheduled/discourse_automation_tracker.rb +++ b/app/jobs/scheduled/discourse_automation_tracker.rb @@ -24,7 +24,7 @@ def execute(_args = nil) def send_pending_pm(pending_pm) DiscourseAutomation::Scriptable::Utils.send_pm( - pending_pm.attributes.slice("target_usernames", "title", "raw",), + pending_pm.attributes.slice("target_usernames", "title", "raw"), sender: pending_pm.sender, prefers_encrypt: pending_pm.prefers_encrypt, ) diff --git a/db/migrate/20230412120414_add_prefers_encrypt_field_to_pending_pms.rb b/db/migrate/20230412120414_add_prefers_encrypt_field_to_pending_pms.rb index 60b2593b..1b4da060 100644 --- a/db/migrate/20230412120414_add_prefers_encrypt_field_to_pending_pms.rb +++ b/db/migrate/20230412120414_add_prefers_encrypt_field_to_pending_pms.rb @@ -2,6 +2,10 @@ class AddPrefersEncryptFieldToPendingPms < ActiveRecord::Migration[7.0] def change - add_column :discourse_automation_pending_pms, :prefers_encrypt, :boolean, null: false, default: false + add_column :discourse_automation_pending_pms, + :prefers_encrypt, + :boolean, + null: false, + default: false end end diff --git a/spec/scripts/send_pms_spec.rb b/spec/scripts/send_pms_spec.rb index 5056c5df..22df7930 100644 --- a/spec/scripts/send_pms_spec.rb +++ b/spec/scripts/send_pms_spec.rb @@ -91,9 +91,7 @@ context "when delayed" do fab!(:user_1) { Fabricate(:user) } - before do - automation.update!(trigger: DiscourseAutomation::Triggerable::RECURRING) - end + before { automation.update!(trigger: DiscourseAutomation::Triggerable::RECURRING) } it "correctly stores encrypt preference" do automation.upsert_field!( @@ -109,7 +107,7 @@ }, ], }, - target: "script" + target: "script", ) automation.upsert_field!("receiver", "user", { value: Discourse.system_user.username }) From d126f2840ed226179ac2b95529a815650d05b312 Mon Sep 17 00:00:00 2001 From: Joffrey JAFFEUX Date: Wed, 12 Apr 2023 16:49:34 +0200 Subject: [PATCH 3/4] typo --- spec/scripts/send_pms_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/scripts/send_pms_spec.rb b/spec/scripts/send_pms_spec.rb index 22df7930..79ffb802 100644 --- a/spec/scripts/send_pms_spec.rb +++ b/spec/scripts/send_pms_spec.rb @@ -113,7 +113,7 @@ automation.trigger! - expec(DiscourseAutomation::PendingPm.last.prefers_encrypt).to eq(false) + expect(DiscourseAutomation::PendingPm.last.prefers_encrypt).to eq(false) end end end From 534f1ca59e094d05d24bd310eed977ce5df411ea Mon Sep 17 00:00:00 2001 From: Joffrey JAFFEUX Date: Wed, 12 Apr 2023 16:57:50 +0200 Subject: [PATCH 4/4] correct boolean check --- app/lib/discourse_automation/scriptable.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/lib/discourse_automation/scriptable.rb b/app/lib/discourse_automation/scriptable.rb index 631b1622..d004c42b 100644 --- a/app/lib/discourse_automation/scriptable.rb +++ b/app/lib/discourse_automation/scriptable.rb @@ -197,7 +197,7 @@ def self.send_pm( prefers_encrypt: true ) pm = pm.symbolize_keys - prefers_encrypt = prefers_encrypt && defined?(EncryptedPostCreator) + prefers_encrypt = prefers_encrypt && !!defined?(EncryptedPostCreator) if delay && delay.to_i > 0 && automation_id pm[:execute_at] = delay.to_i.minutes.from_now