schleuder 3.5.3 → 4.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +10 -21
  3. data/Rakefile +15 -12
  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 +15 -0
  21. data/db/schema.rb +45 -45
  22. data/etc/list-defaults.yml +18 -0
  23. data/etc/postfix/schleuder_sqlite.cf +1 -1
  24. data/etc/schleuder-weekly-key-maintenance.service +9 -0
  25. data/etc/schleuder-weekly-key-maintenance.timer +9 -0
  26. data/etc/schleuder.yml +3 -3
  27. data/lib/schleuder-api-daemon/helpers/schleuder-api-daemon-helper.rb +3 -3
  28. data/lib/schleuder-api-daemon/routes/subscription.rb +4 -4
  29. data/lib/schleuder.rb +13 -12
  30. data/lib/schleuder/cli.rb +9 -189
  31. data/lib/schleuder/cli/cert.rb +2 -2
  32. data/lib/schleuder/cli/cli_helper.rb +14 -0
  33. data/lib/schleuder/cli/schleuder_cert_manager.rb +4 -4
  34. data/lib/schleuder/conf.rb +4 -4
  35. data/lib/schleuder/errors/base.rb +2 -2
  36. data/lib/schleuder/errors/decryption_failed.rb +1 -1
  37. data/lib/schleuder/errors/fatal_error.rb +1 -1
  38. data/lib/schleuder/errors/key_adduid_failed.rb +1 -1
  39. data/lib/schleuder/errors/key_generation_failed.rb +1 -1
  40. data/lib/schleuder/errors/message_empty.rb +1 -1
  41. data/lib/schleuder/errors/message_too_big.rb +1 -1
  42. data/lib/schleuder/errors/too_many_keys.rb +1 -1
  43. data/lib/schleuder/filters/post_decryption/10_request.rb +3 -3
  44. data/lib/schleuder/filters/post_decryption/20_max_message_size.rb +1 -1
  45. data/lib/schleuder/filters/post_decryption/30_forward_to_owner.rb +1 -1
  46. data/lib/schleuder/filters/post_decryption/40_receive_admin_only.rb +1 -1
  47. data/lib/schleuder/filters/post_decryption/50_receive_authenticated_only.rb +1 -1
  48. data/lib/schleuder/filters/post_decryption/60_receive_signed_only.rb +1 -1
  49. data/lib/schleuder/filters/post_decryption/70_receive_encrypted_only.rb +1 -1
  50. data/lib/schleuder/filters/post_decryption/80_receive_from_subscribed_emailaddresses_only.rb +1 -1
  51. data/lib/schleuder/filters/pre_decryption/10_forward_bounce_to_admins.rb +1 -1
  52. data/lib/schleuder/filters/pre_decryption/30_send_key.rb +1 -1
  53. data/lib/schleuder/filters/pre_decryption/40_fix_exchange_messages.rb +1 -1
  54. data/lib/schleuder/filters/pre_decryption/50_strip_html_from_alternative.rb +2 -2
  55. data/lib/schleuder/filters_runner.rb +9 -9
  56. data/lib/schleuder/gpgme/ctx.rb +15 -67
  57. data/lib/schleuder/gpgme/key.rb +4 -136
  58. data/lib/schleuder/gpgme/user_id.rb +2 -0
  59. data/lib/schleuder/keyword_handlers/attach_list_key.rb +17 -0
  60. data/lib/schleuder/keyword_handlers/base.rb +36 -0
  61. data/lib/schleuder/keyword_handlers/get_version.rb +11 -0
  62. data/lib/schleuder/keyword_handlers/key_management.rb +141 -0
  63. data/lib/schleuder/keyword_handlers/list_management.rb +19 -0
  64. data/lib/schleuder/keyword_handlers/resend.rb +208 -0
  65. data/lib/schleuder/keyword_handlers/sign_this.rb +54 -0
  66. data/lib/schleuder/keyword_handlers/subscription_management.rb +213 -0
  67. data/lib/schleuder/keyword_handlers_runner.rb +146 -0
  68. data/lib/schleuder/list.rb +28 -40
  69. data/lib/schleuder/list_builder.rb +16 -5
  70. data/lib/schleuder/listlogger.rb +1 -1
  71. data/lib/schleuder/logger.rb +2 -6
  72. data/lib/schleuder/mail/{encrypted_part.rb → gpg/encrypted_part.rb} +0 -0
  73. data/lib/schleuder/mail/gpg/sign_part.rb +33 -0
  74. data/lib/schleuder/mail/message.rb +135 -40
  75. data/lib/schleuder/runner.rb +18 -16
  76. data/lib/schleuder/subscription.rb +35 -13
  77. data/lib/schleuder/validators/boolean_validator.rb +1 -1
  78. data/lib/schleuder/validators/email_validator.rb +1 -1
  79. data/lib/schleuder/validators/fingerprint_validator.rb +1 -1
  80. data/lib/schleuder/validators/greater_than_zero_validator.rb +1 -1
  81. data/lib/schleuder/validators/no_line_breaks_validator.rb +1 -1
  82. data/lib/schleuder/version.rb +1 -1
  83. data/locales/de.yml +49 -36
  84. data/locales/en.yml +34 -21
  85. metadata +131 -79
  86. data/bin/pinentry-clearpassphrase +0 -72
  87. data/lib/schleuder/plugin_runners/base.rb +0 -91
  88. data/lib/schleuder/plugin_runners/list_plugins_runner.rb +0 -24
  89. data/lib/schleuder/plugin_runners/request_plugins_runner.rb +0 -27
  90. data/lib/schleuder/plugins/attach_listkey.rb +0 -13
  91. data/lib/schleuder/plugins/get_version.rb +0 -7
  92. data/lib/schleuder/plugins/key_management.rb +0 -121
  93. data/lib/schleuder/plugins/list_management.rb +0 -15
  94. data/lib/schleuder/plugins/resend.rb +0 -199
  95. data/lib/schleuder/plugins/sign_this.rb +0 -46
  96. data/lib/schleuder/plugins/subscription_management.rb +0 -207
@@ -4,22 +4,26 @@ module Schleuder
4
4
 
5
5
  validates :list_id, inclusion: {
6
6
  in: -> (id) { List.pluck(:id) },
7
- message: "must refer to an existing list"
7
+ message: 'must refer to an existing list'
8
8
  }
9
- validates :email, presence: true, email: true, uniqueness: {scope: :list_id}
9
+ validates :email, presence: true, email: true
10
+ validates :email, uniqueness: { scope: :list_id, case_sensitive: true }
10
11
  validates :fingerprint, allow_blank: true, fingerprint: true
11
12
  validates :delivery_enabled, :admin, boolean: true
12
13
 
13
- default_scope { order(:email) }
14
+ before_validation {
15
+ self.email = Mail::Address.new(self.email).address
16
+ self.email.downcase! if self.email.present?
17
+ }
14
18
 
15
- scope :without_fingerprint, -> { where(fingerprint: [nil,'']) }
19
+ default_scope { order(:email) }
16
20
 
17
21
  def to_s
18
22
  email
19
23
  end
20
24
 
21
25
  def self.configurable_attributes
22
- [:fingerprint, :admin, :delivery_enabled]
26
+ ['fingerprint', 'admin', 'delivery_enabled']
23
27
  end
24
28
 
25
29
  def fingerprint=(arg)
@@ -34,13 +38,13 @@ module Schleuder
34
38
  # TODO: make key-related methods a concern, so we don't have to go
35
39
  # through the list and neither re-implement the methods here.
36
40
  # Prefix '0x' to force GnuPG to match only hex-values, not UIDs.
37
- list.keys("0x#{self.fingerprint}").first
41
+ @key ||= list.keys("0x#{self.fingerprint}").first
38
42
  end
39
43
 
40
- def send_mail(mail)
44
+ def send_mail(mail, incoming_mail=nil)
41
45
  list.logger.debug "Preparing sending to #{self.inspect}"
42
46
 
43
- mail = ensure_headers(mail)
47
+ mail = ensure_headers(mail, incoming_mail)
44
48
  gpg_opts = self.list.gpg_sign_options
45
49
 
46
50
  if self.key.blank?
@@ -48,7 +52,7 @@ module Schleuder
48
52
  notify_of_missed_message(:absent)
49
53
  return false
50
54
  else
51
- list.logger.warn "Sending plaintext because no key is present!"
55
+ list.logger.warn 'Sending plaintext because no key is present!'
52
56
  end
53
57
  elsif ! self.key.usable?
54
58
  if self.list.send_encrypted_only?
@@ -66,9 +70,28 @@ module Schleuder
66
70
  mail.deliver
67
71
  end
68
72
 
69
- def ensure_headers(mail)
73
+ def ensure_headers(mail, incoming_mail=nil)
70
74
  mail.to = self.email
71
- mail.from = self.list.email
75
+
76
+ if self.list.set_reply_to_to_sender? && ! incoming_mail.nil?
77
+ # If the option "set_reply_to_to_sender" is set to true, we will set the reply-to header
78
+ # to the reply-to header given by the original email. If no reply-to header exists in the original email,
79
+ # the original senders email will be used as reply-to.
80
+ if ! incoming_mail.reply_to.nil?
81
+ mail.reply_to = incoming_mail.reply_to
82
+ else
83
+ mail.reply_to = incoming_mail.from
84
+ end
85
+ end
86
+
87
+ if self.list.munge_from? && ! incoming_mail.nil?
88
+ # If the option "munge_from" is set to true, we will add the original senders' from-header to ours.
89
+ # We munge the from-header to avoid issues with DMARC.
90
+ mail.from = I18n.t('header_munging', from: incoming_mail.from.first, list: self.list.email, list_address: self.list.email)
91
+ else
92
+ mail.from = self.list.email
93
+ end
94
+
72
95
  mail.sender = self.list.bounce_address
73
96
  mail
74
97
  end
@@ -77,7 +100,7 @@ module Schleuder
77
100
  self.list.logger.warn "Not sending to #{self.email}: key is unusable because it is #{reason} and sending plain text not allowed"
78
101
  mail = ensure_headers(Mail.new)
79
102
  mail.subject = I18n.t('notice')
80
- mail.body = I18n.t("missed_message_due_to_unusable_key", list_email: self.list.email) + I18n.t('errors.signoff')
103
+ mail.body = I18n.t('missed_message_due_to_unusable_key', list_email: self.list.email) + I18n.t('errors.signoff')
81
104
  mail.gpg self.list.gpg_sign_options
82
105
  mail.deliver
83
106
  end
@@ -89,6 +112,5 @@ module Schleuder
89
112
  def delete_key
90
113
  list.delete_key(self.fingerprint)
91
114
  end
92
-
93
115
  end
94
116
  end
@@ -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.5.3'
2
+ VERSION = '4.0.2'
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
@@ -261,6 +273,7 @@ de:
261
273
  encryption_states:
262
274
  encrypted: "Verschlüsselt"
263
275
  unencrypted: "Unverschlüsselt"
276
+ header_munging: "%{from} über %{list} <%{list_address}>"
264
277
 
265
278
  activerecord:
266
279
  errors:
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
@@ -265,6 +277,7 @@ en:
265
277
  encryption_states:
266
278
  encrypted: "Encrypted"
267
279
  unencrypted: "Unencrypted"
280
+ header_munging: "%{from} via %{list} <%{list_address}>"
268
281
 
269
282
  activerecord:
270
283
  errors: