schleuder 3.5.0 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +11 -10
- data/Rakefile +12 -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 +10 -12
- data/lib/schleuder/cli.rb +9 -188
- 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 +10 -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 -35
- 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/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 +119 -54
- 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 -138
- 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
@@ -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:
|
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:
|
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:
|
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:
|
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:
|
88
|
+
version: 6.1.3
|
81
89
|
- !ruby/object:Gem::Dependency
|
82
|
-
name:
|
90
|
+
name: bcrypt
|
83
91
|
requirement: !ruby/object:Gem::Requirement
|
84
92
|
requirements:
|
85
93
|
- - "~>"
|
86
94
|
- !ruby/object:Gem::Version
|
87
|
-
version:
|
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:
|
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.
|
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.
|
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: '
|
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: '
|
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: '
|
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: '
|
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
|
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
|
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:
|
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
|
- - ">="
|
@@ -263,7 +327,7 @@ dependencies:
|
|
263
327
|
description: |-
|
264
328
|
Schleuder is a group's email-gateway: subscribers can exchange encrypted emails among themselves, receive emails from non-subscribers and send emails to non-subscribers via the list.
|
265
329
|
|
266
|
-
(Please note: For some platforms there's a better way of installing Schleuder than `gem install`. See <https://schleuder.org/docs
|
330
|
+
(Please note: For some platforms there's a better way of installing Schleuder than `gem install`. See <https://schleuder.org/schleuder/docs/server-admins.html#installation> for details.)
|
267
331
|
email: team@schleuder.org
|
268
332
|
executables:
|
269
333
|
- schleuder
|
@@ -273,29 +337,31 @@ 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/
|
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/
|
285
|
-
- db/migrate/
|
286
|
-
- db/migrate/
|
287
|
-
- db/migrate/
|
288
|
-
- db/migrate/
|
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
|
292
355
|
- db/migrate/20180723173900_add_deliver_selfsent_to_list.rb
|
293
356
|
- db/migrate/20190906194820_add_autocrypt_header_to_list.rb
|
357
|
+
- db/migrate/20200118170110_add_set_reply_to_to_sender_and_munge_from.rb
|
294
358
|
- db/schema.rb
|
295
359
|
- etc/init.d/schleuder-api-daemon
|
296
360
|
- etc/list-defaults.yml
|
297
361
|
- etc/postfix/schleuder_sqlite.cf
|
298
362
|
- etc/schleuder-api-daemon.service
|
363
|
+
- etc/schleuder-weekly-key-maintenance.service
|
364
|
+
- etc/schleuder-weekly-key-maintenance.timer
|
299
365
|
- etc/schleuder.cron.weekly
|
300
366
|
- etc/schleuder.yml
|
301
367
|
- lib/schleuder-api-daemon.rb
|
@@ -308,6 +374,7 @@ files:
|
|
308
374
|
- lib/schleuder.rb
|
309
375
|
- lib/schleuder/cli.rb
|
310
376
|
- lib/schleuder/cli/cert.rb
|
377
|
+
- lib/schleuder/cli/cli_helper.rb
|
311
378
|
- lib/schleuder/cli/schleuder_cert_manager.rb
|
312
379
|
- lib/schleuder/cli/subcommand_fix.rb
|
313
380
|
- lib/schleuder/conf.rb
|
@@ -351,6 +418,15 @@ files:
|
|
351
418
|
- lib/schleuder/gpgme/key.rb
|
352
419
|
- lib/schleuder/gpgme/sub_key.rb
|
353
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
|
354
430
|
- lib/schleuder/list.rb
|
355
431
|
- lib/schleuder/list_builder.rb
|
356
432
|
- lib/schleuder/listlogger.rb
|
@@ -360,16 +436,6 @@ files:
|
|
360
436
|
- lib/schleuder/mail/gpg.rb
|
361
437
|
- lib/schleuder/mail/message.rb
|
362
438
|
- lib/schleuder/mail/parts_list.rb
|
363
|
-
- lib/schleuder/plugin_runners/base.rb
|
364
|
-
- lib/schleuder/plugin_runners/list_plugins_runner.rb
|
365
|
-
- lib/schleuder/plugin_runners/request_plugins_runner.rb
|
366
|
-
- lib/schleuder/plugins/attach_listkey.rb
|
367
|
-
- lib/schleuder/plugins/get_version.rb
|
368
|
-
- lib/schleuder/plugins/key_management.rb
|
369
|
-
- lib/schleuder/plugins/list_management.rb
|
370
|
-
- lib/schleuder/plugins/resend.rb
|
371
|
-
- lib/schleuder/plugins/sign_this.rb
|
372
|
-
- lib/schleuder/plugins/subscription_management.rb
|
373
439
|
- lib/schleuder/runner.rb
|
374
440
|
- lib/schleuder/subscription.rb
|
375
441
|
- lib/schleuder/validators/boolean_validator.rb
|
@@ -400,16 +466,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
400
466
|
requirements:
|
401
467
|
- - ">="
|
402
468
|
- !ruby/object:Gem::Version
|
403
|
-
version: 2.
|
469
|
+
version: 2.5.0
|
404
470
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
405
471
|
requirements:
|
406
472
|
- - ">="
|
407
473
|
- !ruby/object:Gem::Version
|
408
474
|
version: '0'
|
409
475
|
requirements: []
|
410
|
-
|
411
|
-
|
412
|
-
signing_key:
|
476
|
+
rubygems_version: 3.2.7
|
477
|
+
signing_key:
|
413
478
|
specification_version: 4
|
414
|
-
summary: Schleuder is
|
479
|
+
summary: Schleuder is an encrypting mailing list manager with remailing-capabilities.
|
415
480
|
test_files: []
|