schleuder 3.6.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -6
  3. data/Rakefile +12 -14
  4. data/bin/schleuder +1 -1
  5. data/db/migrate/20140501103532_create_lists.rb +1 -1
  6. data/db/migrate/20140501112859_create_subscriptions.rb +1 -1
  7. data/db/migrate/{201508092100_add_language_to_lists.rb → 20150809210000_add_language_to_lists.rb} +1 -1
  8. data/db/migrate/20150812165700_change_keywords_admin_only_defaults.rb +1 -1
  9. data/db/migrate/20150813235800_add_forward_all_incoming_to_admins.rb +1 -1
  10. data/db/migrate/{201508141727_change_send_encrypted_only_default.rb → 20150814172700_change_send_encrypted_only_default.rb} +1 -1
  11. data/db/migrate/{201508222143_add_logfiles_to_keep_to_lists.rb → 20150822214300_add_logfiles_to_keep_to_lists.rb} +1 -1
  12. data/db/migrate/{201508261723_rename_delivery_disabled_to_delivery_enabled_and_change_default.rb → 20150826172300_rename_delivery_disabled_to_delivery_enabled_and_change_default.rb} +1 -1
  13. data/db/migrate/{201508261815_strip_gpg_passphrase.rb → 20150826181500_strip_gpg_passphrase.rb} +1 -1
  14. data/db/migrate/{201508261827_remove_default_mime.rb → 20150826182700_remove_default_mime.rb} +1 -1
  15. data/db/migrate/20160501172700_fix_headers_to_meta_defaults.rb +1 -1
  16. data/db/migrate/20170713215059_add_internal_footer_to_list.rb +1 -1
  17. data/db/migrate/20180110203100_add_sig_enc_to_headers_to_meta_defaults.rb +1 -1
  18. data/db/migrate/20180723173900_add_deliver_selfsent_to_list.rb +1 -1
  19. data/db/migrate/20190906194820_add_autocrypt_header_to_list.rb +1 -1
  20. data/db/migrate/20200118170110_add_set_reply_to_to_sender_and_munge_from.rb +1 -1
  21. data/db/schema.rb +45 -47
  22. data/etc/postfix/schleuder_sqlite.cf +1 -1
  23. data/etc/schleuder-weekly-key-maintenance.service +9 -0
  24. data/etc/schleuder-weekly-key-maintenance.timer +9 -0
  25. data/etc/schleuder.yml +3 -3
  26. data/lib/schleuder-api-daemon/helpers/schleuder-api-daemon-helper.rb +3 -3
  27. data/lib/schleuder-api-daemon/routes/subscription.rb +4 -4
  28. data/lib/schleuder.rb +9 -11
  29. data/lib/schleuder/cli.rb +9 -188
  30. data/lib/schleuder/cli/cert.rb +2 -2
  31. data/lib/schleuder/cli/cli_helper.rb +14 -0
  32. data/lib/schleuder/cli/schleuder_cert_manager.rb +4 -4
  33. data/lib/schleuder/conf.rb +3 -3
  34. data/lib/schleuder/errors/base.rb +2 -2
  35. data/lib/schleuder/errors/decryption_failed.rb +1 -1
  36. data/lib/schleuder/errors/fatal_error.rb +1 -1
  37. data/lib/schleuder/errors/key_adduid_failed.rb +1 -1
  38. data/lib/schleuder/errors/key_generation_failed.rb +1 -1
  39. data/lib/schleuder/errors/message_empty.rb +1 -1
  40. data/lib/schleuder/errors/message_too_big.rb +1 -1
  41. data/lib/schleuder/errors/too_many_keys.rb +1 -1
  42. data/lib/schleuder/filters/post_decryption/10_request.rb +3 -3
  43. data/lib/schleuder/filters/post_decryption/20_max_message_size.rb +1 -1
  44. data/lib/schleuder/filters/post_decryption/30_forward_to_owner.rb +1 -1
  45. data/lib/schleuder/filters/post_decryption/40_receive_admin_only.rb +1 -1
  46. data/lib/schleuder/filters/post_decryption/50_receive_authenticated_only.rb +1 -1
  47. data/lib/schleuder/filters/post_decryption/60_receive_signed_only.rb +1 -1
  48. data/lib/schleuder/filters/post_decryption/70_receive_encrypted_only.rb +1 -1
  49. data/lib/schleuder/filters/post_decryption/80_receive_from_subscribed_emailaddresses_only.rb +1 -1
  50. data/lib/schleuder/filters/pre_decryption/10_forward_bounce_to_admins.rb +1 -1
  51. data/lib/schleuder/filters/pre_decryption/30_send_key.rb +1 -1
  52. data/lib/schleuder/filters/pre_decryption/40_fix_exchange_messages.rb +1 -1
  53. data/lib/schleuder/filters/pre_decryption/50_strip_html_from_alternative.rb +2 -2
  54. data/lib/schleuder/filters_runner.rb +9 -9
  55. data/lib/schleuder/gpgme/ctx.rb +15 -35
  56. data/lib/schleuder/gpgme/key.rb +4 -136
  57. data/lib/schleuder/gpgme/user_id.rb +2 -0
  58. data/lib/schleuder/keyword_handlers/attach_list_key.rb +17 -0
  59. data/lib/schleuder/keyword_handlers/base.rb +36 -0
  60. data/lib/schleuder/keyword_handlers/get_version.rb +11 -0
  61. data/lib/schleuder/keyword_handlers/key_management.rb +141 -0
  62. data/lib/schleuder/keyword_handlers/list_management.rb +19 -0
  63. data/lib/schleuder/keyword_handlers/resend.rb +208 -0
  64. data/lib/schleuder/keyword_handlers/sign_this.rb +54 -0
  65. data/lib/schleuder/keyword_handlers/subscription_management.rb +213 -0
  66. data/lib/schleuder/keyword_handlers_runner.rb +146 -0
  67. data/lib/schleuder/list.rb +11 -39
  68. data/lib/schleuder/list_builder.rb +16 -5
  69. data/lib/schleuder/listlogger.rb +1 -1
  70. data/lib/schleuder/mail/message.rb +82 -61
  71. data/lib/schleuder/runner.rb +18 -16
  72. data/lib/schleuder/subscription.rb +9 -10
  73. data/lib/schleuder/validators/boolean_validator.rb +1 -1
  74. data/lib/schleuder/validators/email_validator.rb +1 -1
  75. data/lib/schleuder/validators/fingerprint_validator.rb +1 -1
  76. data/lib/schleuder/validators/greater_than_zero_validator.rb +1 -1
  77. data/lib/schleuder/validators/no_line_breaks_validator.rb +1 -1
  78. data/lib/schleuder/version.rb +1 -1
  79. data/locales/de.yml +48 -36
  80. data/locales/en.yml +33 -21
  81. metadata +117 -53
  82. data/bin/pinentry-clearpassphrase +0 -72
  83. data/lib/schleuder/plugin_runners/base.rb +0 -91
  84. data/lib/schleuder/plugin_runners/list_plugins_runner.rb +0 -24
  85. data/lib/schleuder/plugin_runners/request_plugins_runner.rb +0 -27
  86. data/lib/schleuder/plugins/attach_listkey.rb +0 -13
  87. data/lib/schleuder/plugins/get_version.rb +0 -7
  88. data/lib/schleuder/plugins/key_management.rb +0 -121
  89. data/lib/schleuder/plugins/list_management.rb +0 -15
  90. data/lib/schleuder/plugins/resend.rb +0 -199
  91. data/lib/schleuder/plugins/sign_this.rb +0 -46
  92. data/lib/schleuder/plugins/subscription_management.rb +0 -207
@@ -1,7 +1,7 @@
1
1
  class BooleanValidator < ActiveModel::EachValidator
2
2
  def validate_each(record, attribute, value)
3
3
  if ! [true, false].include?(value)
4
- record.errors.add(attribute, I18n.t("errors.must_be_boolean"))
4
+ record.errors.add(attribute, I18n.t('errors.must_be_boolean'))
5
5
  end
6
6
  end
7
7
  end
@@ -1,7 +1,7 @@
1
1
  class EmailValidator < ActiveModel::EachValidator
2
2
  def validate_each(record, attribute, value)
3
3
  unless value =~ Conf::EMAIL_REGEXP
4
- record.errors[attribute] << (options[:message] || I18n.t("errors.invalid_email"))
4
+ record.errors.add(attribute, (options[:message] || I18n.t('errors.invalid_email')))
5
5
  end
6
6
  end
7
7
  end
@@ -1,7 +1,7 @@
1
1
  class FingerprintValidator < ActiveModel::EachValidator
2
2
  def validate_each(record, attribute, value)
3
3
  unless GPGME::Key.valid_fingerprint?(value)
4
- record.errors[attribute] << (options[:message] || I18n.t("errors.invalid_fingerprint"))
4
+ record.errors.add(attribute, (options[:message] || I18n.t('errors.invalid_fingerprint')))
5
5
  end
6
6
  end
7
7
  end
@@ -1,7 +1,7 @@
1
1
  class GreaterThanZeroValidator < ActiveModel::EachValidator
2
2
  def validate_each(record, attribute, value)
3
3
  if value.to_i == 0
4
- record.errors.add(attribute, I18n.t("errors.must_be_greater_than_zero"))
4
+ record.errors.add(attribute, I18n.t('errors.must_be_greater_than_zero'))
5
5
  end
6
6
  end
7
7
  end
@@ -1,7 +1,7 @@
1
1
  class NoLineBreaksValidator < ActiveModel::EachValidator
2
2
  def validate_each(record, attribute, value)
3
3
  if value.to_s.include?("\n")
4
- record.errors.add(attribute, I18n.t("errors.no_linebreaks") )
4
+ record.errors.add(attribute, I18n.t('errors.no_linebreaks') )
5
5
  end
6
6
  end
7
7
  end
@@ -1,3 +1,3 @@
1
1
  module Schleuder
2
- VERSION = '3.6.0'
2
+ VERSION = '4.0.0'
3
3
  end
data/locales/de.yml CHANGED
@@ -35,15 +35,15 @@ de:
35
35
  <%{sendkey_email}>.
36
36
  message_unsigned: Emails an diese Adresse müssen mit einem OpenPGP-Schlüssel signiert sein.
37
37
  message_signature_unknown: |
38
- Emails an diese Adresse müssen mit dem OpenPGP-Schlüssel signiert sein, der für
39
- dein Abo eingetragen ist. Wenn du nicht weisst, welcher Schlüssel das ist, frage
38
+ Emails an diese Adresse müssen mit dem OpenPGP-Schlüssel signiert sein, der
39
+ deiner Mitgliedschaft zugewiesen ist. Wenn du nicht weisst, welcher Schlüssel das ist, frage
40
40
  die Administrator/innen. Die erreichst du per Email an
41
41
  <%{owner_email}>.
42
42
  (Vorzugsweise verschlüssele die Email mit dem Schlüssel dieser Adresse:
43
43
  %{list_fingerprint}).
44
44
  message_unencrypted: Emails an diese Adresse müssen OpenPGP-konform verschlüsselt sein.
45
- message_unauthenticated: Emails an diese Adresse müssen verschlüsselt und mit einem OpenPGP-Schlüssel signiert sein, der für ein Abo eingetragen ist.
46
- message_sender_not_subscribed: Nur Absender mit Abo dürfen Emails an diese Adresse schicken.
45
+ message_unauthenticated: Emails an diese Adresse müssen verschlüsselt und mit einem OpenPGP-Schlüssel signiert sein, der für eine Mitgliedschaft eingetragen ist.
46
+ message_sender_not_subscribed: Nur Absender, die als Mitglied eingetragen sind, dürfen Emails an diese Adresse schicken.
47
47
  message_not_from_admin: Nur Admins dürfen Emails an diese Adresse schicken.
48
48
  message_empty: |
49
49
  Deine Email enthielt keinen Text, daher wurde sie nicht über die Liste verteilt.
@@ -60,6 +60,7 @@ de:
60
60
  not_writable: ist nicht beschreibbar
61
61
  not_readable: ist nicht lesbar
62
62
  keyword_admin_only: Das Schlüsselwort '%{keyword}' darf nur von Listen-Admins verwendet werden.
63
+ unknown_keyword: Das verwendete Schlüsselwort '%{input}' ist unbekannt. Bitte prüfe seine Schreibweise oder die Dokumentation.
63
64
  key_generation_failed: Das Erzeugen des OpenPGP-Schlüsselpaares für %{listname} ist aus unbekannten Gründen fehlgeschlagen. Bitte prüfe das Listen-Verzeichnis ('%{listdir}') und die Log-Dateien.
64
65
  key_adduid_failed: "Das Hinzufügen einer User-ID zum OpenPGP-Schlüssel ist mit folgender Meldung fehlgeschlagen:\n%{errmsg}"
65
66
  too_many_keys: "Fehler: In %{listdir} existieren mehrere OpenPGP-Schlüssel für %{listname}. Bitte lösche alle bis auf einen."
@@ -73,27 +74,37 @@ de:
73
74
  too_many_matching_keys: |
74
75
  Zu viele Schlüssel gefunden für '%{input}':
75
76
  %{key_strings}
76
- plugins:
77
- unknown_keyword: Unbekanntes Schlüsselwort '%{keyword}'.
78
- plugin_failed: Das Schlüsselwort '%{keyword}' verursachte einen unbekannten Fehler. Die System-Administratoren wurden benachrichtigt.
79
- keyword_admin_notify_request: "%{signer} schickte das Schlüsselwort '%{keyword}' mit den Werten '%{arguments}' und erhielt dies als Antwort:"
80
- keyword_admin_notify_request_without_arguments: "%{signer} schickte das Schlüsselwort '%{keyword}' und erhielt dies als Antwort:"
81
- keyword_admin_notify_lists: "%{signer} benutzte das Schlüsselwort '%{keyword}' mit den Werten '%{arguments}' in einer Email an die Liste."
82
- keyword_admin_notify_lists_without_arguments: "%{signer} benutzte das Schlüsselwort '%{keyword}' in einer Email an die Liste."
77
+ keyword_handlers:
78
+ handler_failed: Das Schlüsselwort '%{keyword}' verursachte einen unbekannten Fehler. Die System-Administratoren wurden benachrichtigt.
79
+ keyword_admin_notify:
80
+ request: |
81
+ %{sender} benutzte dieses Schlüsselwort:
82
+
83
+ %{keyword}: %{arguments}
84
+
85
+
86
+ ...und erhielt dies als Antwort:
87
+
88
+ {response}
89
+ list: |
90
+ %{sender} schickte dieses Schlüsselwort an die Liste:
91
+
92
+ %{keyword}: %{arguments}
83
93
  key_management:
94
+ key_not_found: "Fehler: Keinen Schlüssel mit Fingerabdruck '%{fingerprint}' gefunden."
84
95
  deleted: "Gelöscht: %{key_string}"
85
96
  not_deletable: "Darf nicht gelöscht werden: %{key_string}"
86
97
  no_imports: In deiner Email konnten keine Schlüssel gefunden werden. :(
87
98
  key_import_status:
88
99
  imported: |
89
100
  Dieser Schlüssel wurde neu hinzugefügt:
90
- %{key_oneline}
101
+ %{key_summary}
91
102
  updated: |
92
103
  Dieser Schlüssel wurde aktualisiert:
93
- %{key_oneline}
104
+ %{key_summary}
94
105
  unchanged: |
95
106
  Dieser Schlüssel wurde nicht verändert:
96
- %{key_oneline}
107
+ %{key_summary}
97
108
  error: |
98
109
  Der Schlüssel mit diesem Fingerabdruck konnte aus unbekanntem Grund nicht hinzugefügt werden:
99
110
  %{fingerprint}
@@ -120,6 +131,7 @@ de:
120
131
 
121
132
  Oder, um einen Schlüssel per HTTP von einem Server zu laden:
122
133
  X-FETCH-KEY: https://example.org/keys/mykey.asc
134
+ no_content_found: Deine Email enthielt keine Anhänge und keinen Text-Inhalt, daher konnte kein Schlüssel importiert werden.
123
135
  resend:
124
136
  not_resent_no_keys: Resending an <%{email}> fehlgeschlagen (%{all_keys} Schlüssel gefunden, davon %{usable_keys} nutzbar. Unverschlüsseltes Senden verboten).
125
137
  not_resent_encrypted_no_keys: Verschlüsseltes Resending an <%{email}> fehlgeschlagen (%{all_keys} Schlüssel gefunden, davon %{usable_keys} nutzbar).
@@ -128,26 +140,26 @@ de:
128
140
  unencrypted_to: Unverschlüsselt an
129
141
  invalid_recipient: "Ungültige Emailadresse für resend: %{address}"
130
142
  subscription_management:
131
- forbidden: "Fehler: Du bist nicht berechtigt, das Abo für %{email} zu löschen."
132
- is_not_subscribed: Kein Abo für %{email} gefunden.
133
- unsubscribed: Abo für %{email} wurde gelöscht.
143
+ forbidden: "Fehler: Du bist nicht berechtigt, die Mitgliedschaft von %{email} zu beenden."
144
+ is_not_subscribed: Keine Mitgliedschaft von %{email} gefunden.
145
+ unsubscribed: Die Mitgliedschaft von %{email} wurde gelöscht.
134
146
  unsubscribing_failed: |
135
- Abo für %{email} nicht gelöscht:
147
+ Mitgliedschaft von %{email} nicht gelöscht:
136
148
  %{errors}
137
149
  cannot_unsubscribe_last_admin: |
138
- %{email} ist das einzige admin-Abo für diese Liste, daher kann es nicht gelöscht werden.
150
+ %{email} ist die einzige admin-Mitgliedschaft für diese Liste, daher darf sie nicht gelöscht werden.
139
151
  subscribed: |
140
- Abo für %{email} mit diesen Werten eingetragen:
152
+ Mitgliedschaft von %{email} mit diesen Werten eingetragen:
141
153
 
142
154
  Fingerabdruck: %{fingerprint}
143
155
  Admin? %{admin}
144
156
  Email-Zustellung aktiv? %{delivery_enabled}
145
157
  subscribing_failed: |
146
- Abo für %{email} nicht eingetragen:
158
+ Die Mitgliedschaft von %{email} konnte aufgrund eines Fehlers nicht eingetragen werden:
147
159
 
148
160
  %{errors}.
149
- list_of_subscriptions: "Abos:\n"
150
- set_fingerprint_only_self: Nur admins dürfen den Fingerabdruck für andere Abos festlegen.
161
+ list_of_subscriptions: "Mitgliedschaften:\n"
162
+ set_fingerprint_only_self: Nur admins dürfen den Fingerabdruck für andere Mitgliedschaften festlegen.
151
163
  fingerprint_set: Fingerabdruck für %{email} auf %{fingerprint} gesetzt.
152
164
  setting_fingerprint_failed: |
153
165
  Fingerabdruck für %{email} konnte nicht auf %{fingerprint} gesetzt werden:
@@ -176,7 +188,7 @@ de:
176
188
  X-SET-FINGERPRINT: subscription2@hostname 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3
177
189
 
178
190
  Um einen Fingerprint zu entfernen kannst du das Schlüsselwort 'UNSET-FINGERPRINT' verwenden.
179
- unset_fingerprint_only_self: Nur admins dürfen den Fingerabdruck für andere Abos festlegen.
191
+ unset_fingerprint_only_self: Nur admins dürfen den Fingerabdruck für andere Mitgliedschaften löschen.
180
192
  fingerprint_unset: Fingerabdruck für %{email} wurde entfernt.
181
193
  unsetting_fingerprint_failed: |
182
194
  Fingerabdruck für %{email} konnte nicht entfernt werden:
@@ -195,17 +207,19 @@ de:
195
207
  Mindestens ein Wert ist nötig, drei weitere sind optional. Bspw.:
196
208
  X-SUBSCRIBE: new-subscription@hostname
197
209
 
198
- Oder, um den Schlüssel für das neue Abo zuzuweisen:
210
+ Oder, um den Schlüssel der neuen Mitgliedschaft zuzuweisen:
199
211
  X-SUBSCRIBE: new-subscription@hostname 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3
200
212
 
201
- Oder, um den Schlüssel zuzuweisen, und das Abo zum admin zu machen:
213
+ Oder, um den Schlüssel zuzuweisen, und die Mitgliedschaft als admin einzutragen:
202
214
  X-SUBSCRIBE: new-subscription@hostname 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3 true
203
215
 
204
- Oder, um den Schlüssel zuzuweisen, das Abo zum admin zu machen, und die Zustellung von Listen-Emails für dieses Abo abzuschalten:
216
+ Oder, um den Schlüssel zuzuweisen, die Mitgliedschaft als admin einzutragen, und die Zustellung von Listen-Emails für diese Mitgliedschaft abzuschalten:
205
217
  X-SUBSCRIBE: new-subscription@hostname 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3 true false
206
218
 
207
- Wenn du die optionalen Werte weglässt hat das Abo keinen Schlüssel zugewiesen, ist nicht admin, und hat die Zustellung von Listen-Email aktiviert.
208
- signatures_attached: Die Signaturen hängen an.
219
+ Wenn du die optionalen Werte weglässt hat die Mitgliedschaft keinen Schlüssel zugewiesen, ist nicht admin, und hat die Zustellung von Listen-Email aktiviert.
220
+ sign_this:
221
+ signatures_attached: Die Signaturen hängen an.
222
+ no_content_found: Deine Email enthielt keine Anhänge und keinen Text-Inhalt, daher konnte nichts signiert werden.
209
223
  list_management:
210
224
  no_logfile: Keine Log-Datei für %{listname} gefunden. (Das kann an einem hohem Log-Level und der Abwesenheit von Fehlern liegen.)
211
225
  logfile_attached: Die Log-Datei für %{listname} hängt an.
@@ -228,21 +242,19 @@ de:
228
242
  check_keys_intro: "Bitte kümmere dich um die folgenden Schlüssel für Liste %{email}."
229
243
  key_expires: |
230
244
  Dieser Schlüssel läuft in %{days} Tagen ab:
231
- %{key_oneline}
245
+ %{key_summary}
232
246
  key_unusable: |
233
247
  Dieser Schlüssel ist %{usability_issue}:
234
- %{key_oneline}
235
- missed_message_due_to_unusable_key: "Du hast eine Email von %{list_email} verpasst weil mit deinem Abo kein (benutzbarer) OpenPGP-Schlüssel verknüpft ist. Bitte kümmere dich darum."
248
+ %{key_summary}
249
+ missed_message_due_to_unusable_key: "Du hast eine Email von %{list_email} verpasst weil deiner Mitgliedschaft kein (benutzbarer) OpenPGP-Schlüssel zugewiesen ist. Bitte kümmere dich darum."
236
250
  refresh_keys: Schlüsselaktualisierung
237
251
  refresh_keys_intro: "Die Aktualisierung aller Schlüssel des Schlüsselrings für Liste %{email} ergab dies:"
238
- pin_keys: Schlüsselpinning
239
- pin_keys_intro: "Die Überprüfung aller Abos der Liste %{email} ergab, dass wir für folgende Abos einen Schlüssel zur Verwendung festgelegt haben:"
240
252
  key_updated: |
241
253
  Dieser Schlüssel wurde aktualisiert (%{states}):
242
- %{key_oneline}
254
+ %{key_summary}
243
255
  key_fetched: |
244
256
  Dieser Schlüssel wurde geholt (%{states}):
245
- %{key_oneline}
257
+ %{key_summary}
246
258
  import_states:
247
259
  unchanged: unverändert
248
260
  new_key: neuer Schlüssel
data/locales/en.yml CHANGED
@@ -60,6 +60,7 @@ en:
60
60
  not_writable: is not writable
61
61
  not_readable: is not readable
62
62
  keyword_admin_only: The keyword '%{keyword}' may only be used by list-admin.
63
+ unknown_keyword: The given keyword '%{keyword}' is unknown. Please check its spelling or the documentation.
63
64
  key_generation_failed: Generating the OpenPGP key pair for %{listname} failed for unknown reasons. Please check the list-directory ('%{listdir}') and the log-files.
64
65
  key_adduid_failed: "Adding a user-ID to the OpenPGP key failed with this message:\n%{errmsg}"
65
66
  too_many_keys: "Error: In %{listdir} there's more than one matching OpenPGP-key for %{listname}. Please delete all but one."
@@ -73,14 +74,24 @@ en:
73
74
  too_many_matching_keys: |
74
75
  Too many matching keys for '%{input}':
75
76
  %{key_strings}
76
- plugins:
77
- unknown_keyword: Unknown keyword '%{keyword}'.
78
- plugin_failed: Running keyword '%{keyword}' caused an unknown error. System-admins have been notified.
79
- keyword_admin_notify_request: "%{signer} sent the keyword '%{keyword}' with the values '%{arguments}' and received this response:"
80
- keyword_admin_notify_request_without_arguments: "%{signer} sent the keyword '%{keyword}' and received this response:"
81
- keyword_admin_notify_lists: "%{signer} used the keyword '%{keyword}' with the values '%{arguments}' in a message sent to the list."
82
- keyword_admin_notify_lists_without_arguments: "%{signer} used the keyword '%{keyword}' in a message sent to the list."
77
+ keyword_handlers:
78
+ handler_failed: Running keyword '%{keyword}' caused an unknown error. System-admins have been notified.
79
+ keyword_admin_notify:
80
+ request: |
81
+ %{sender} sent this keyword:
82
+
83
+ %{keyword}: %{arguments}
84
+
85
+
86
+ ...and received this response:
87
+
88
+ %{response}
89
+ list: |
90
+ %{sender} sent this keyword to the list:
91
+
92
+ %{keyword}: %{arguments}
83
93
  key_management:
94
+ key_not_found: "Error: No key found with this fingerprint: '%{fingerprint}'."
84
95
  deleted: |
85
96
  This key was deleted:
86
97
  %{key_string}
@@ -91,13 +102,13 @@ en:
91
102
  key_import_status:
92
103
  imported: |
93
104
  This key was newly added:
94
- %{key_oneline}
105
+ %{key_summary}
95
106
  updated: |
96
107
  This key was updated:
97
- %{key_oneline}
108
+ %{key_summary}
98
109
  unchanged: |
99
110
  This key was not changed:
100
- %{key_oneline}
111
+ %{key_summary}
101
112
  error: |
102
113
  The key with this fingerprint could not be added due to an unknown error:
103
114
  %{fingerprint}
@@ -124,6 +135,7 @@ en:
124
135
 
125
136
  Or, to fetch a key keys by URL:
126
137
  X-FETCH-KEY: https://example.org/keys/mykey.asc
138
+ no_content_found: Your message did not contain any attachments nor text content. Therefore no key could be imported.
127
139
  resend:
128
140
  not_resent_no_keys: Resending to <%{email}> failed (%{all_keys} keys found, of which %{usable_keys} can be used. Unencrypted sending not allowed).
129
141
  not_resent_encrypted_no_keys: Resending as encrypted email to <%{email}> failed (%{all_keys} keys found, of which %{usable_keys} can be used).
@@ -181,6 +193,10 @@ en:
181
193
 
182
194
  To remove a fingerprint you can use the keyword 'UNSET-FINGERPRINT'
183
195
  unset_fingerprint_only_self: Only admins may remove fingerprints of subscriptions other than their own.
196
+ fingerprint_unset: Fingerprint for %{email} removed.
197
+ unsetting_fingerprint_failed: |
198
+ Removing fingerprint for %{email} failed:
199
+ %{errors}.
184
200
  unset_fingerprint_requires_arguments: |
185
201
  Error: You did not send any arguments for the keyword 'UNSET-FINGERPRINT'
186
202
 
@@ -189,10 +205,6 @@ en:
189
205
 
190
206
  As an admin to unset your own fingerprint you must additionally pass the argument force. E.g.:
191
207
  X-UNSET-FINGERPRINT: adminsubscription2@hostname force
192
- fingerprint_unset: Fingerprint for %{email} removed.
193
- unsetting_fingerprint_failed: |
194
- Removing fingerprint for %{email} failed:
195
- %{errors}.
196
208
  subscribe_requires_arguments: |
197
209
  Error: You did not send any arguments for the keyword 'SUBSCRIBE'.
198
210
 
@@ -209,7 +221,9 @@ en:
209
221
  X-SUBSCRIBE: new-subscription@hostname 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3 true false
210
222
 
211
223
  If you omit the optional arguments, the subscription has no key assigned, is not an admin, and has the delivery of list-emails enabled.
212
- signatures_attached: Find the signatures attached.
224
+ sign_this:
225
+ signatures_attached: Find the signatures attached.
226
+ no_content_found: Your message did not contain any attachments nor text content. Therefore nothing could be signed.
213
227
  list_management:
214
228
  no_logfile: No logfile could be found for %{listname}. (This might be caused by a high log-level and the absence of errors.)
215
229
  logfile_attached: The logfile for %{listname} is attached.
@@ -232,21 +246,19 @@ en:
232
246
  check_keys_intro: "Please take care of these keys for list %{email}."
233
247
  key_expires: |
234
248
  This key expires in %{days} days:
235
- %{key_oneline}
249
+ %{key_summary}
236
250
  key_unusable: |
237
251
  This key is %{usability_issue}:
238
- %{key_oneline}
252
+ %{key_summary}
239
253
  missed_message_due_to_unusable_key: "You missed an email from %{list_email} because your subscription isn't associated with a (usable) OpenPGP key. Please fix this."
240
254
  refresh_keys: Keys update
241
255
  refresh_keys_intro: "Refreshing all keys from the keyring of list %{email} resulted in this:"
242
- pin_keys: Keys pinning
243
- pin_keys_intro: "While checking all subscriptions of list %{email} we were pinning a matching key for the following subscriptions:"
244
256
  key_updated: |
245
257
  This key was updated (%{states}):
246
- %{key_oneline}
258
+ %{key_summary}
247
259
  key_fetched: |
248
260
  This key was fetched (%{states}):
249
- %{key_oneline}
261
+ %{key_summary}
250
262
  import_states:
251
263
  unchanged: unchanged
252
264
  new_key: new key
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schleuder
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.6.0
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - schleuder dev team
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-07 00:00:00.000000000 Z
11
+ date: 2021-03-04 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bigdecimal
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.4'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.4'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: gpgme
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -51,9 +65,6 @@ dependencies:
51
65
  - - "~>"
52
66
  - !ruby/object:Gem::Version
53
67
  version: '0.3'
54
- - - "<"
55
- - !ruby/object:Gem::Version
56
- version: 0.4.3
57
68
  type: :runtime
58
69
  prerelease: false
59
70
  version_requirements: !ruby/object:Gem::Requirement
@@ -61,37 +72,34 @@ dependencies:
61
72
  - - "~>"
62
73
  - !ruby/object:Gem::Version
63
74
  version: '0.3'
64
- - - "<"
65
- - !ruby/object:Gem::Version
66
- version: 0.4.3
67
75
  - !ruby/object:Gem::Dependency
68
76
  name: activerecord
69
77
  requirement: !ruby/object:Gem::Requirement
70
78
  requirements:
71
79
  - - "~>"
72
80
  - !ruby/object:Gem::Version
73
- version: '4.2'
81
+ version: 6.1.3
74
82
  type: :runtime
75
83
  prerelease: false
76
84
  version_requirements: !ruby/object:Gem::Requirement
77
85
  requirements:
78
86
  - - "~>"
79
87
  - !ruby/object:Gem::Version
80
- version: '4.2'
88
+ version: 6.1.3
81
89
  - !ruby/object:Gem::Dependency
82
- name: rack-test
90
+ name: bcrypt
83
91
  requirement: !ruby/object:Gem::Requirement
84
92
  requirements:
85
93
  - - "~>"
86
94
  - !ruby/object:Gem::Version
87
- version: 0.7.0
95
+ version: 3.1.2
88
96
  type: :runtime
89
97
  prerelease: false
90
98
  version_requirements: !ruby/object:Gem::Requirement
91
99
  requirements:
92
100
  - - "~>"
93
101
  - !ruby/object:Gem::Version
94
- version: 0.7.0
102
+ version: 3.1.2
95
103
  - !ruby/object:Gem::Dependency
96
104
  name: rake
97
105
  requirement: !ruby/object:Gem::Requirement
@@ -112,42 +120,42 @@ dependencies:
112
120
  requirements:
113
121
  - - "~>"
114
122
  - !ruby/object:Gem::Version
115
- version: 1.3.6
123
+ version: 1.4.2
116
124
  type: :runtime
117
125
  prerelease: false
118
126
  version_requirements: !ruby/object:Gem::Requirement
119
127
  requirements:
120
128
  - - "~>"
121
129
  - !ruby/object:Gem::Version
122
- version: 1.3.6
130
+ version: 1.4.2
123
131
  - !ruby/object:Gem::Dependency
124
132
  name: sinatra
125
133
  requirement: !ruby/object:Gem::Requirement
126
134
  requirements:
127
135
  - - "~>"
128
136
  - !ruby/object:Gem::Version
129
- version: '1'
137
+ version: '2'
130
138
  type: :runtime
131
139
  prerelease: false
132
140
  version_requirements: !ruby/object:Gem::Requirement
133
141
  requirements:
134
142
  - - "~>"
135
143
  - !ruby/object:Gem::Version
136
- version: '1'
144
+ version: '2'
137
145
  - !ruby/object:Gem::Dependency
138
146
  name: sinatra-contrib
139
147
  requirement: !ruby/object:Gem::Requirement
140
148
  requirements:
141
149
  - - "~>"
142
150
  - !ruby/object:Gem::Version
143
- version: '1'
151
+ version: '2'
144
152
  type: :runtime
145
153
  prerelease: false
146
154
  version_requirements: !ruby/object:Gem::Requirement
147
155
  requirements:
148
156
  - - "~>"
149
157
  - !ruby/object:Gem::Version
150
- version: '1'
158
+ version: '2'
151
159
  - !ruby/object:Gem::Dependency
152
160
  name: thor
153
161
  requirement: !ruby/object:Gem::Requirement
@@ -196,58 +204,114 @@ dependencies:
196
204
  requirements:
197
205
  - - "~>"
198
206
  - !ruby/object:Gem::Version
199
- version: 3.5.0
207
+ version: '3'
200
208
  type: :development
201
209
  prerelease: false
202
210
  version_requirements: !ruby/object:Gem::Requirement
203
211
  requirements:
204
212
  - - "~>"
205
213
  - !ruby/object:Gem::Version
206
- version: 3.5.0
214
+ version: '3'
207
215
  - !ruby/object:Gem::Dependency
208
216
  name: hirb
209
217
  requirement: !ruby/object:Gem::Requirement
210
218
  requirements:
211
- - - ">="
219
+ - - "~>"
212
220
  - !ruby/object:Gem::Version
213
221
  version: '0'
214
222
  type: :development
215
223
  prerelease: false
216
224
  version_requirements: !ruby/object:Gem::Requirement
217
225
  requirements:
218
- - - ">="
226
+ - - "~>"
219
227
  - !ruby/object:Gem::Version
220
228
  version: '0'
221
229
  - !ruby/object:Gem::Dependency
222
230
  name: factory_bot
223
231
  requirement: !ruby/object:Gem::Requirement
224
232
  requirements:
225
- - - ">="
233
+ - - "~>"
226
234
  - !ruby/object:Gem::Version
227
- version: '0'
235
+ version: '6.0'
228
236
  type: :development
229
237
  prerelease: false
230
238
  version_requirements: !ruby/object:Gem::Requirement
231
239
  requirements:
232
- - - ">="
240
+ - - "~>"
233
241
  - !ruby/object:Gem::Version
234
- version: '0'
242
+ version: '6.0'
235
243
  - !ruby/object:Gem::Dependency
236
244
  name: database_cleaner
237
245
  requirement: !ruby/object:Gem::Requirement
238
246
  requirements:
239
- - - ">="
247
+ - - "~>"
248
+ - !ruby/object:Gem::Version
249
+ version: '2.0'
250
+ type: :development
251
+ prerelease: false
252
+ version_requirements: !ruby/object:Gem::Requirement
253
+ requirements:
254
+ - - "~>"
255
+ - !ruby/object:Gem::Version
256
+ version: '2.0'
257
+ - !ruby/object:Gem::Dependency
258
+ name: simplecov-console
259
+ requirement: !ruby/object:Gem::Requirement
260
+ requirements:
261
+ - - "~>"
240
262
  - !ruby/object:Gem::Version
241
263
  version: '0'
242
264
  type: :development
243
265
  prerelease: false
244
266
  version_requirements: !ruby/object:Gem::Requirement
245
267
  requirements:
246
- - - ">="
268
+ - - "~>"
247
269
  - !ruby/object:Gem::Version
248
270
  version: '0'
249
271
  - !ruby/object:Gem::Dependency
250
- name: simplecov-console
272
+ name: rack-test
273
+ requirement: !ruby/object:Gem::Requirement
274
+ requirements:
275
+ - - "~>"
276
+ - !ruby/object:Gem::Version
277
+ version: '1'
278
+ type: :development
279
+ prerelease: false
280
+ version_requirements: !ruby/object:Gem::Requirement
281
+ requirements:
282
+ - - "~>"
283
+ - !ruby/object:Gem::Version
284
+ version: '1'
285
+ - !ruby/object:Gem::Dependency
286
+ name: rubocop
287
+ requirement: !ruby/object:Gem::Requirement
288
+ requirements:
289
+ - - "~>"
290
+ - !ruby/object:Gem::Version
291
+ version: '1'
292
+ type: :development
293
+ prerelease: false
294
+ version_requirements: !ruby/object:Gem::Requirement
295
+ requirements:
296
+ - - "~>"
297
+ - !ruby/object:Gem::Version
298
+ version: '1'
299
+ - !ruby/object:Gem::Dependency
300
+ name: byebug
301
+ requirement: !ruby/object:Gem::Requirement
302
+ requirements:
303
+ - - "~>"
304
+ - !ruby/object:Gem::Version
305
+ version: '10'
306
+ type: :development
307
+ prerelease: false
308
+ version_requirements: !ruby/object:Gem::Requirement
309
+ requirements:
310
+ - - "~>"
311
+ - !ruby/object:Gem::Version
312
+ version: '10'
313
+ - !ruby/object:Gem::Dependency
314
+ name: irb
251
315
  requirement: !ruby/object:Gem::Requirement
252
316
  requirements:
253
317
  - - ">="
@@ -273,19 +337,18 @@ extra_rdoc_files: []
273
337
  files:
274
338
  - README.md
275
339
  - Rakefile
276
- - bin/pinentry-clearpassphrase
277
340
  - bin/schleuder
278
341
  - bin/schleuder-api-daemon
279
342
  - db/migrate/20140501103532_create_lists.rb
280
343
  - db/migrate/20140501112859_create_subscriptions.rb
281
- - db/migrate/201508092100_add_language_to_lists.rb
344
+ - db/migrate/20150809210000_add_language_to_lists.rb
282
345
  - db/migrate/20150812165700_change_keywords_admin_only_defaults.rb
283
346
  - db/migrate/20150813235800_add_forward_all_incoming_to_admins.rb
284
- - db/migrate/201508141727_change_send_encrypted_only_default.rb
285
- - db/migrate/201508222143_add_logfiles_to_keep_to_lists.rb
286
- - db/migrate/201508261723_rename_delivery_disabled_to_delivery_enabled_and_change_default.rb
287
- - db/migrate/201508261815_strip_gpg_passphrase.rb
288
- - db/migrate/201508261827_remove_default_mime.rb
347
+ - db/migrate/20150814172700_change_send_encrypted_only_default.rb
348
+ - db/migrate/20150822214300_add_logfiles_to_keep_to_lists.rb
349
+ - db/migrate/20150826172300_rename_delivery_disabled_to_delivery_enabled_and_change_default.rb
350
+ - db/migrate/20150826181500_strip_gpg_passphrase.rb
351
+ - db/migrate/20150826182700_remove_default_mime.rb
289
352
  - db/migrate/20160501172700_fix_headers_to_meta_defaults.rb
290
353
  - db/migrate/20170713215059_add_internal_footer_to_list.rb
291
354
  - db/migrate/20180110203100_add_sig_enc_to_headers_to_meta_defaults.rb
@@ -297,6 +360,8 @@ files:
297
360
  - etc/list-defaults.yml
298
361
  - etc/postfix/schleuder_sqlite.cf
299
362
  - etc/schleuder-api-daemon.service
363
+ - etc/schleuder-weekly-key-maintenance.service
364
+ - etc/schleuder-weekly-key-maintenance.timer
300
365
  - etc/schleuder.cron.weekly
301
366
  - etc/schleuder.yml
302
367
  - lib/schleuder-api-daemon.rb
@@ -309,6 +374,7 @@ files:
309
374
  - lib/schleuder.rb
310
375
  - lib/schleuder/cli.rb
311
376
  - lib/schleuder/cli/cert.rb
377
+ - lib/schleuder/cli/cli_helper.rb
312
378
  - lib/schleuder/cli/schleuder_cert_manager.rb
313
379
  - lib/schleuder/cli/subcommand_fix.rb
314
380
  - lib/schleuder/conf.rb
@@ -352,6 +418,15 @@ files:
352
418
  - lib/schleuder/gpgme/key.rb
353
419
  - lib/schleuder/gpgme/sub_key.rb
354
420
  - lib/schleuder/gpgme/user_id.rb
421
+ - lib/schleuder/keyword_handlers/attach_list_key.rb
422
+ - lib/schleuder/keyword_handlers/base.rb
423
+ - lib/schleuder/keyword_handlers/get_version.rb
424
+ - lib/schleuder/keyword_handlers/key_management.rb
425
+ - lib/schleuder/keyword_handlers/list_management.rb
426
+ - lib/schleuder/keyword_handlers/resend.rb
427
+ - lib/schleuder/keyword_handlers/sign_this.rb
428
+ - lib/schleuder/keyword_handlers/subscription_management.rb
429
+ - lib/schleuder/keyword_handlers_runner.rb
355
430
  - lib/schleuder/list.rb
356
431
  - lib/schleuder/list_builder.rb
357
432
  - lib/schleuder/listlogger.rb
@@ -361,16 +436,6 @@ files:
361
436
  - lib/schleuder/mail/gpg.rb
362
437
  - lib/schleuder/mail/message.rb
363
438
  - lib/schleuder/mail/parts_list.rb
364
- - lib/schleuder/plugin_runners/base.rb
365
- - lib/schleuder/plugin_runners/list_plugins_runner.rb
366
- - lib/schleuder/plugin_runners/request_plugins_runner.rb
367
- - lib/schleuder/plugins/attach_listkey.rb
368
- - lib/schleuder/plugins/get_version.rb
369
- - lib/schleuder/plugins/key_management.rb
370
- - lib/schleuder/plugins/list_management.rb
371
- - lib/schleuder/plugins/resend.rb
372
- - lib/schleuder/plugins/sign_this.rb
373
- - lib/schleuder/plugins/subscription_management.rb
374
439
  - lib/schleuder/runner.rb
375
440
  - lib/schleuder/subscription.rb
376
441
  - lib/schleuder/validators/boolean_validator.rb
@@ -401,16 +466,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
401
466
  requirements:
402
467
  - - ">="
403
468
  - !ruby/object:Gem::Version
404
- version: 2.1.0
469
+ version: 2.5.0
405
470
  required_rubygems_version: !ruby/object:Gem::Requirement
406
471
  requirements:
407
472
  - - ">="
408
473
  - !ruby/object:Gem::Version
409
474
  version: '0'
410
475
  requirements: []
411
- rubyforge_project:
412
- rubygems_version: 2.7.6.2
413
- signing_key:
476
+ rubygems_version: 3.2.7
477
+ signing_key:
414
478
  specification_version: 4
415
- summary: Schleuder is a gpg-enabled mailing list manager with remailing-capabilities.
479
+ summary: Schleuder is an encrypting mailing list manager with remailing-capabilities.
416
480
  test_files: []