schleuder 3.5.3 → 4.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +10 -21
- data/Rakefile +15 -12
- data/bin/schleuder +1 -1
- data/db/migrate/20140501103532_create_lists.rb +1 -1
- data/db/migrate/20140501112859_create_subscriptions.rb +1 -1
- data/db/migrate/{201508092100_add_language_to_lists.rb → 20150809210000_add_language_to_lists.rb} +1 -1
- data/db/migrate/20150812165700_change_keywords_admin_only_defaults.rb +1 -1
- data/db/migrate/20150813235800_add_forward_all_incoming_to_admins.rb +1 -1
- data/db/migrate/{201508141727_change_send_encrypted_only_default.rb → 20150814172700_change_send_encrypted_only_default.rb} +1 -1
- data/db/migrate/{201508222143_add_logfiles_to_keep_to_lists.rb → 20150822214300_add_logfiles_to_keep_to_lists.rb} +1 -1
- 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
- data/db/migrate/{201508261815_strip_gpg_passphrase.rb → 20150826181500_strip_gpg_passphrase.rb} +1 -1
- data/db/migrate/{201508261827_remove_default_mime.rb → 20150826182700_remove_default_mime.rb} +1 -1
- data/db/migrate/20160501172700_fix_headers_to_meta_defaults.rb +1 -1
- data/db/migrate/20170713215059_add_internal_footer_to_list.rb +1 -1
- data/db/migrate/20180110203100_add_sig_enc_to_headers_to_meta_defaults.rb +1 -1
- data/db/migrate/20180723173900_add_deliver_selfsent_to_list.rb +1 -1
- data/db/migrate/20190906194820_add_autocrypt_header_to_list.rb +1 -1
- data/db/migrate/20200118170110_add_set_reply_to_to_sender_and_munge_from.rb +15 -0
- data/db/schema.rb +45 -45
- data/etc/list-defaults.yml +18 -0
- data/etc/postfix/schleuder_sqlite.cf +1 -1
- data/etc/schleuder-weekly-key-maintenance.service +9 -0
- data/etc/schleuder-weekly-key-maintenance.timer +9 -0
- data/etc/schleuder.yml +3 -3
- data/lib/schleuder-api-daemon/helpers/schleuder-api-daemon-helper.rb +3 -3
- data/lib/schleuder-api-daemon/routes/subscription.rb +4 -4
- data/lib/schleuder.rb +13 -12
- data/lib/schleuder/cli.rb +9 -189
- data/lib/schleuder/cli/cert.rb +2 -2
- data/lib/schleuder/cli/cli_helper.rb +14 -0
- data/lib/schleuder/cli/schleuder_cert_manager.rb +4 -4
- data/lib/schleuder/conf.rb +4 -4
- data/lib/schleuder/errors/base.rb +2 -2
- data/lib/schleuder/errors/decryption_failed.rb +1 -1
- data/lib/schleuder/errors/fatal_error.rb +1 -1
- data/lib/schleuder/errors/key_adduid_failed.rb +1 -1
- data/lib/schleuder/errors/key_generation_failed.rb +1 -1
- data/lib/schleuder/errors/message_empty.rb +1 -1
- data/lib/schleuder/errors/message_too_big.rb +1 -1
- data/lib/schleuder/errors/too_many_keys.rb +1 -1
- data/lib/schleuder/filters/post_decryption/10_request.rb +3 -3
- data/lib/schleuder/filters/post_decryption/20_max_message_size.rb +1 -1
- data/lib/schleuder/filters/post_decryption/30_forward_to_owner.rb +1 -1
- data/lib/schleuder/filters/post_decryption/40_receive_admin_only.rb +1 -1
- data/lib/schleuder/filters/post_decryption/50_receive_authenticated_only.rb +1 -1
- data/lib/schleuder/filters/post_decryption/60_receive_signed_only.rb +1 -1
- data/lib/schleuder/filters/post_decryption/70_receive_encrypted_only.rb +1 -1
- data/lib/schleuder/filters/post_decryption/80_receive_from_subscribed_emailaddresses_only.rb +1 -1
- data/lib/schleuder/filters/pre_decryption/10_forward_bounce_to_admins.rb +1 -1
- data/lib/schleuder/filters/pre_decryption/30_send_key.rb +1 -1
- data/lib/schleuder/filters/pre_decryption/40_fix_exchange_messages.rb +1 -1
- data/lib/schleuder/filters/pre_decryption/50_strip_html_from_alternative.rb +2 -2
- data/lib/schleuder/filters_runner.rb +9 -9
- data/lib/schleuder/gpgme/ctx.rb +15 -67
- data/lib/schleuder/gpgme/key.rb +4 -136
- data/lib/schleuder/gpgme/user_id.rb +2 -0
- data/lib/schleuder/keyword_handlers/attach_list_key.rb +17 -0
- data/lib/schleuder/keyword_handlers/base.rb +36 -0
- data/lib/schleuder/keyword_handlers/get_version.rb +11 -0
- data/lib/schleuder/keyword_handlers/key_management.rb +141 -0
- data/lib/schleuder/keyword_handlers/list_management.rb +19 -0
- data/lib/schleuder/keyword_handlers/resend.rb +208 -0
- data/lib/schleuder/keyword_handlers/sign_this.rb +54 -0
- data/lib/schleuder/keyword_handlers/subscription_management.rb +213 -0
- data/lib/schleuder/keyword_handlers_runner.rb +146 -0
- data/lib/schleuder/list.rb +28 -40
- data/lib/schleuder/list_builder.rb +16 -5
- data/lib/schleuder/listlogger.rb +1 -1
- data/lib/schleuder/logger.rb +2 -6
- data/lib/schleuder/mail/{encrypted_part.rb → gpg/encrypted_part.rb} +0 -0
- data/lib/schleuder/mail/gpg/sign_part.rb +33 -0
- data/lib/schleuder/mail/message.rb +135 -40
- data/lib/schleuder/runner.rb +18 -16
- data/lib/schleuder/subscription.rb +35 -13
- data/lib/schleuder/validators/boolean_validator.rb +1 -1
- data/lib/schleuder/validators/email_validator.rb +1 -1
- data/lib/schleuder/validators/fingerprint_validator.rb +1 -1
- data/lib/schleuder/validators/greater_than_zero_validator.rb +1 -1
- data/lib/schleuder/validators/no_line_breaks_validator.rb +1 -1
- data/lib/schleuder/version.rb +1 -1
- data/locales/de.yml +49 -36
- data/locales/en.yml +34 -21
- metadata +131 -79
- data/bin/pinentry-clearpassphrase +0 -72
- data/lib/schleuder/plugin_runners/base.rb +0 -91
- data/lib/schleuder/plugin_runners/list_plugins_runner.rb +0 -24
- data/lib/schleuder/plugin_runners/request_plugins_runner.rb +0 -27
- data/lib/schleuder/plugins/attach_listkey.rb +0 -13
- data/lib/schleuder/plugins/get_version.rb +0 -7
- data/lib/schleuder/plugins/key_management.rb +0 -121
- data/lib/schleuder/plugins/list_management.rb +0 -15
- data/lib/schleuder/plugins/resend.rb +0 -199
- data/lib/schleuder/plugins/sign_this.rb +0 -46
- 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:
|
7
|
+
message: 'must refer to an existing list'
|
8
8
|
}
|
9
|
-
validates :email, presence: true, email: true
|
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
|
-
|
14
|
+
before_validation {
|
15
|
+
self.email = Mail::Address.new(self.email).address
|
16
|
+
self.email.downcase! if self.email.present?
|
17
|
+
}
|
14
18
|
|
15
|
-
|
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
|
-
[
|
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
|
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
|
-
|
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(
|
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(
|
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
|
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
|
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(
|
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(
|
4
|
+
record.errors.add(attribute, I18n.t('errors.no_linebreaks') )
|
5
5
|
end
|
6
6
|
end
|
7
7
|
end
|
data/lib/schleuder/version.rb
CHANGED
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
|
39
|
-
|
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
|
46
|
-
message_sender_not_subscribed: Nur Absender
|
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
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
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
|
-
%{
|
101
|
+
%{key_summary}
|
91
102
|
updated: |
|
92
103
|
Dieser Schlüssel wurde aktualisiert:
|
93
|
-
%{
|
104
|
+
%{key_summary}
|
94
105
|
unchanged: |
|
95
106
|
Dieser Schlüssel wurde nicht verändert:
|
96
|
-
%{
|
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,
|
132
|
-
is_not_subscribed:
|
133
|
-
unsubscribed:
|
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
|
-
|
147
|
+
Mitgliedschaft von %{email} nicht gelöscht:
|
136
148
|
%{errors}
|
137
149
|
cannot_unsubscribe_last_admin: |
|
138
|
-
%{email} ist
|
150
|
+
%{email} ist die einzige admin-Mitgliedschaft für diese Liste, daher darf sie nicht gelöscht werden.
|
139
151
|
subscribed: |
|
140
|
-
|
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
|
-
|
158
|
+
Die Mitgliedschaft von %{email} konnte aufgrund eines Fehlers nicht eingetragen werden:
|
147
159
|
|
148
160
|
%{errors}.
|
149
|
-
list_of_subscriptions: "
|
150
|
-
set_fingerprint_only_self: Nur admins dürfen den Fingerabdruck für andere
|
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
|
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
|
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
|
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,
|
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
|
208
|
-
|
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
|
-
%{
|
245
|
+
%{key_summary}
|
232
246
|
key_unusable: |
|
233
247
|
Dieser Schlüssel ist %{usability_issue}:
|
234
|
-
%{
|
235
|
-
missed_message_due_to_unusable_key: "Du hast eine Email von %{list_email} verpasst weil
|
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
|
-
%{
|
254
|
+
%{key_summary}
|
243
255
|
key_fetched: |
|
244
256
|
Dieser Schlüssel wurde geholt (%{states}):
|
245
|
-
%{
|
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
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
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
|
-
%{
|
105
|
+
%{key_summary}
|
95
106
|
updated: |
|
96
107
|
This key was updated:
|
97
|
-
%{
|
108
|
+
%{key_summary}
|
98
109
|
unchanged: |
|
99
110
|
This key was not changed:
|
100
|
-
%{
|
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
|
-
|
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
|
-
%{
|
249
|
+
%{key_summary}
|
236
250
|
key_unusable: |
|
237
251
|
This key is %{usability_issue}:
|
238
|
-
%{
|
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
|
-
%{
|
258
|
+
%{key_summary}
|
247
259
|
key_fetched: |
|
248
260
|
This key was fetched (%{states}):
|
249
|
-
%{
|
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:
|