schleuder 3.2.2 → 3.3.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 +20 -10
- data/Rakefile +16 -8
- data/bin/schleuder +2 -1
- data/bin/schleuder-api-daemon +3 -2
- data/db/migrate/20180110203100_add_sig_enc_to_headers_to_meta_defaults.rb +30 -0
- data/db/schema.rb +2 -2
- data/etc/list-defaults.yml +4 -2
- data/etc/schleuder.yml +11 -0
- data/lib/schleuder-api-daemon.rb +9 -354
- data/lib/schleuder-api-daemon/helpers/schleuder-api-daemon-helper.rb +143 -0
- data/lib/schleuder-api-daemon/routes/key.rb +40 -0
- data/lib/schleuder-api-daemon/routes/list.rb +69 -0
- data/lib/schleuder-api-daemon/routes/status.rb +5 -0
- data/lib/schleuder-api-daemon/routes/subscription.rb +99 -0
- data/lib/schleuder-api-daemon/routes/version.rb +5 -0
- data/lib/schleuder.rb +2 -3
- data/lib/schleuder/cli.rb +24 -0
- data/lib/schleuder/cli/subcommand_fix.rb +1 -1
- data/lib/schleuder/conf.rb +7 -1
- data/lib/schleuder/errors/active_model_error.rb +2 -5
- data/lib/schleuder/errors/decryption_failed.rb +2 -7
- data/lib/schleuder/errors/key_adduid_failed.rb +1 -5
- data/lib/schleuder/errors/key_generation_failed.rb +1 -8
- data/lib/schleuder/errors/keyword_admin_only.rb +1 -5
- data/lib/schleuder/errors/list_not_found.rb +1 -5
- data/lib/schleuder/errors/listdir_problem.rb +2 -7
- data/lib/schleuder/errors/loading_list_settings_failed.rb +2 -5
- data/lib/schleuder/errors/message_empty.rb +1 -5
- data/lib/schleuder/errors/message_not_from_admin.rb +2 -5
- data/lib/schleuder/errors/message_sender_not_subscribed.rb +2 -5
- data/lib/schleuder/errors/message_too_big.rb +2 -5
- data/lib/schleuder/errors/message_unauthenticated.rb +1 -4
- data/lib/schleuder/errors/message_unencrypted.rb +2 -5
- data/lib/schleuder/errors/message_unsigned.rb +2 -5
- data/lib/schleuder/errors/too_many_keys.rb +1 -8
- data/lib/schleuder/filters/{request_filter.rb → post_decryption/10_request.rb} +0 -0
- data/lib/schleuder/filters/{max_message_size.rb → post_decryption/20_max_message_size.rb} +0 -0
- data/lib/schleuder/filters/{forward_filter.rb → post_decryption/30_forward_to_owner.rb} +0 -0
- data/lib/schleuder/filters/post_decryption/40_receive_admin_only.rb +10 -0
- data/lib/schleuder/filters/post_decryption/50_receive_authenticated_only.rb +10 -0
- data/lib/schleuder/filters/post_decryption/60_receive_signed_only.rb +10 -0
- data/lib/schleuder/filters/post_decryption/70_receive_encrypted_only.rb +10 -0
- data/lib/schleuder/filters/post_decryption/80_receive_from_subscribed_emailaddresses_only.rb +10 -0
- data/lib/schleuder/filters/{bounces_filter.rb → pre_decryption/10_forward_bounce_to_admins.rb} +0 -0
- data/lib/schleuder/filters/{forward_incoming.rb → pre_decryption/20_forward_all_incoming_to_admins.rb} +0 -0
- data/lib/schleuder/filters/{send_key_filter.rb → pre_decryption/30_send_key.rb} +0 -0
- data/lib/schleuder/filters/{hotmail_message_filter.rb → pre_decryption/40_fix_exchange_messages.rb} +5 -3
- data/lib/schleuder/filters/{strip_alternative_filter.rb → pre_decryption/50_strip_html_from_alternative.rb} +1 -1
- data/lib/schleuder/filters_runner.rb +41 -31
- data/lib/schleuder/gpgme/ctx.rb +1 -1
- data/lib/schleuder/gpgme/import_status.rb +13 -7
- data/lib/schleuder/gpgme/key.rb +4 -0
- data/lib/schleuder/list.rb +7 -4
- data/lib/schleuder/mail/encrypted_part.rb +14 -0
- data/lib/schleuder/mail/gpg.rb +15 -0
- data/lib/schleuder/mail/message.rb +70 -30
- data/lib/schleuder/plugins/key_management.rb +32 -7
- data/lib/schleuder/plugins/subscription_management.rb +70 -3
- data/lib/schleuder/runner.rb +19 -8
- data/lib/schleuder/subscription.rb +5 -9
- data/lib/schleuder/validators/fingerprint_validator.rb +1 -1
- data/lib/schleuder/version.rb +1 -1
- data/locales/de.yml +96 -8
- data/locales/en.yml +102 -10
- metadata +48 -27
- data/lib/schleuder/errors/file_not_found.rb +0 -14
- data/lib/schleuder/errors/invalid_listname.rb +0 -13
- data/lib/schleuder/errors/list_exists.rb +0 -13
- data/lib/schleuder/errors/unknown_list_option.rb +0 -14
- data/lib/schleuder/filters/auth_filter.rb +0 -39
data/lib/schleuder/runner.rb
CHANGED
@@ -7,7 +7,7 @@ module Schleuder
|
|
7
7
|
logger.info "Parsing incoming email."
|
8
8
|
@mail = Mail.create_message_to_list(msg, recipient, list)
|
9
9
|
|
10
|
-
error = run_filters(
|
10
|
+
error = run_filters('pre')
|
11
11
|
return error if error
|
12
12
|
|
13
13
|
begin
|
@@ -18,7 +18,7 @@ module Schleuder
|
|
18
18
|
return Errors::DecryptionFailed.new(list)
|
19
19
|
end
|
20
20
|
|
21
|
-
error = run_filters(
|
21
|
+
error = run_filters('post')
|
22
22
|
return error if error
|
23
23
|
|
24
24
|
if ! @mail.was_validly_signed?
|
@@ -45,7 +45,7 @@ module Schleuder
|
|
45
45
|
|
46
46
|
# Subscriptions
|
47
47
|
logger.debug "Creating clean copy of message"
|
48
|
-
copy = @mail.clean_copy(
|
48
|
+
copy = @mail.clean_copy(list.headers_to_meta.any?)
|
49
49
|
list.send_to_subscriptions(copy)
|
50
50
|
nil
|
51
51
|
end
|
@@ -56,8 +56,8 @@ module Schleuder
|
|
56
56
|
@list
|
57
57
|
end
|
58
58
|
|
59
|
-
def run_filters(
|
60
|
-
error = filters_runner.run(@mail
|
59
|
+
def run_filters(filter_type)
|
60
|
+
error = filters_runner(filter_type).run(@mail)
|
61
61
|
if error
|
62
62
|
if list.bounces_notify_admins?
|
63
63
|
text = "#{I18n.t('.bounces_notify_admins')}\n\n#{error}"
|
@@ -68,8 +68,19 @@ module Schleuder
|
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
-
def filters_runner
|
72
|
-
|
71
|
+
def filters_runner(filter_type)
|
72
|
+
if filter_type == 'pre'
|
73
|
+
filters_runner_pre_decryption
|
74
|
+
else
|
75
|
+
filters_runner_post_decryption
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def filters_runner_pre_decryption
|
80
|
+
@filters_runner_pre_decryption ||= Filters::Runner.new(list,'pre')
|
81
|
+
end
|
82
|
+
def filters_runner_post_decryption
|
83
|
+
@filters_runner_post_decryption ||= Filters::Runner.new(list,'post')
|
73
84
|
end
|
74
85
|
|
75
86
|
def logger
|
@@ -94,7 +105,7 @@ module Schleuder
|
|
94
105
|
return log_and_return(Errors::ListNotFound.new(recipient), true)
|
95
106
|
end
|
96
107
|
|
97
|
-
# Check
|
108
|
+
# Check necessary permissions of crucial files.
|
98
109
|
if ! File.exist?(@list.listdir)
|
99
110
|
return log_and_return(Errors::ListdirProblem.new(@list.listdir, :not_existing))
|
100
111
|
elsif ! File.directory?(@list.listdir)
|
@@ -23,10 +23,11 @@ module Schleuder
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def fingerprint=(arg)
|
26
|
-
#
|
27
|
-
#
|
28
|
-
|
29
|
-
|
26
|
+
# Always assign the given value, because it must be possible to overwrite
|
27
|
+
# the previous fingerprint with an empty value. That value should better
|
28
|
+
# be nil instead of a blank string, but currently schleuder-cli (v0.1.0) expects
|
29
|
+
# only strings.
|
30
|
+
write_attribute(:fingerprint, arg.to_s.gsub(/\s*/, '').gsub(/^0x/, '').chomp.upcase)
|
30
31
|
end
|
31
32
|
|
32
33
|
def key
|
@@ -39,11 +40,6 @@ module Schleuder
|
|
39
40
|
def send_mail(mail)
|
40
41
|
list.logger.debug "Preparing sending to #{self.inspect}"
|
41
42
|
|
42
|
-
if ! self.delivery_enabled
|
43
|
-
list.logger.info "Not sending to #{self.email}: delivery is disabled."
|
44
|
-
return false
|
45
|
-
end
|
46
|
-
|
47
43
|
mail = ensure_headers(mail)
|
48
44
|
gpg_opts = self.list.gpg_sign_options
|
49
45
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class FingerprintValidator < ActiveModel::EachValidator
|
2
2
|
def validate_each(record, attribute, value)
|
3
|
-
unless value
|
3
|
+
unless GPGME::Key.valid_fingerprint?(value)
|
4
4
|
record.errors[attribute] << (options[:message] || I18n.t("errors.invalid_fingerprint"))
|
5
5
|
end
|
6
6
|
end
|
data/lib/schleuder/version.rb
CHANGED
data/locales/de.yml
CHANGED
@@ -52,8 +52,6 @@ de:
|
|
52
52
|
list_not_found: "Fehler: Keine Liste zu dieser Adresse gefunden: '%{email}'."
|
53
53
|
no_linebreaks: "Darf keine Zeilenumbrüche enthalten"
|
54
54
|
invalid_characters: "enthält ungültige Zeichen"
|
55
|
-
invalid_listname: "Fehler: '%{email}' ist kein gültige Listen-Adresse."
|
56
|
-
list_exists: Es existiert bereits eine Liste mit der Adresse '%{email}'.
|
57
55
|
listdir_problem:
|
58
56
|
message: "Problem mit dem Listen-Verzeichnis: '%{dir}' %{problem}."
|
59
57
|
not_existing: existiert nicht
|
@@ -65,12 +63,10 @@ de:
|
|
65
63
|
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.
|
66
64
|
key_adduid_failed: "Das Hinzufügen einer User-ID zum OpenPGP-Schlüssel ist mit folgender Meldung fehlgeschlagen:\n%{errmsg}"
|
67
65
|
too_many_keys: "Fehler: In %{listdir} existieren mehrere OpenPGP-Schlüssel für %{listname}. Bitte lösche alle bis auf einen."
|
68
|
-
unknown_list_option: "Unbekannte Option in %{config_file}: '%{option}'."
|
69
66
|
loading_list_settings_failed: "%{config_file} konnte nicht eingelesen werden, bitte Formatierung auf gültiges YAML prüfen."
|
70
67
|
message_too_big: "Deine Email war zu groß. Erlaubt sind für diese Liste %{allowed_size}KB."
|
71
68
|
must_be_boolean: "muss true oder false sein"
|
72
69
|
must_be_greater_than_zero: "muss größer als null sein"
|
73
|
-
file_not_found: "Die Datei existiert nicht: '%{file}'."
|
74
70
|
not_pgp_mime: "Deine Email war nicht im pgp/mime-Format verschlüsselt."
|
75
71
|
delivery_error: "Beim Versenden einer Email an %{email} ist der folgende Fehler aufgetreten: %{error}"
|
76
72
|
no_match_for: "Keine Treffer für %{input}"
|
@@ -87,12 +83,43 @@ de:
|
|
87
83
|
key_management:
|
88
84
|
deleted: "Gelöscht: %{key_string}"
|
89
85
|
not_deletable: "Darf nicht gelöscht werden: %{key_string}"
|
90
|
-
|
86
|
+
no_imports: In deiner Email konnten keine Schlüssel gefunden werden. :(
|
91
87
|
key_import_status:
|
92
|
-
imported:
|
93
|
-
|
94
|
-
|
88
|
+
imported: |
|
89
|
+
Dieser Schlüssel wurde neu hinzugefügt:
|
90
|
+
%{key_oneline}
|
91
|
+
updated: |
|
92
|
+
Dieser Schlüssel wurde aktualisiert:
|
93
|
+
%{key_oneline}
|
94
|
+
unchanged: |
|
95
|
+
Dieser Schlüssel wurde nicht verändert:
|
96
|
+
%{key_oneline}
|
97
|
+
error: |
|
98
|
+
Der Schlüssel mit diesem Fingerabdruck konnte aus unbekanntem Grund nicht hinzugefügt werden:
|
99
|
+
%{fingerprint}
|
95
100
|
matching_keys_intro: Alle Schlüssel aus dem Schlüsselring der Liste, die '%{input}' enthalten, sind an diese Email angehängt.
|
101
|
+
delete_key_requires_arguments: |
|
102
|
+
Fehler: Du hast zu dem Schlüsselwort 'DELETE-KEY' keinen Wert angegeben.
|
103
|
+
|
104
|
+
Ein Wert ist nötig, weitere sind optional. Bspw.:
|
105
|
+
X-DELETE-KEY: 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3
|
106
|
+
|
107
|
+
Oder, um mehrere Schlüssel auf einmal zu löschen:
|
108
|
+
X-DELETE-KEY: 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3 a-subscription@hostname
|
109
|
+
|
110
|
+
Die Schlüssel werden nur gelöscht, wenn sie der einzige Treffer für den jeweiligen Wert sind.
|
111
|
+
fetch_key_requires_arguments: |
|
112
|
+
Fehler: Du hast zu dem Schlüsselwort 'FETCH-KEY' keinen Wert angegeben.
|
113
|
+
|
114
|
+
Ein Wert ist nötig, weitere sind optional. Jeder Wert kann eine URL sein, die via HTTP geladen wird, oder ein Text, mit dem auf den OpenPGP-Schlüsselserver gesucht wird.
|
115
|
+
Bspw., um einen Schlüssel per fingerprint vom Schlüsselserver zu holen:
|
116
|
+
X-FETCH-KEY: 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3
|
117
|
+
|
118
|
+
Oder, um zwei Schlüssel per Email-Adresse vom Schlüsselserver zu holen:
|
119
|
+
X-FETCH-KEY: a-subscription@hostname anotherone@example.org
|
120
|
+
|
121
|
+
Oder, um einen Schlüssel per HTTP von einem Server zu laden:
|
122
|
+
X-FETCH-KEY: https://example.org/keys/mykey.asc
|
96
123
|
resend:
|
97
124
|
not_resent_no_keys: Resending an <%{email}> fehlgeschlagen (%{num_keys} Schlüssel gefunden und unverschlüsseltes Senden verboten).
|
98
125
|
encrypted_to: Verschlüsselt an
|
@@ -105,6 +132,8 @@ de:
|
|
105
132
|
unsubscribing_failed: |
|
106
133
|
Abo für %{email} nicht gelöscht:
|
107
134
|
%{errors}
|
135
|
+
cannot_unsubscribe_last_admin: |
|
136
|
+
%{email} ist das einzige admin-Abo für diese Liste, daher kann es nicht gelöscht werden.
|
108
137
|
subscribed: |
|
109
138
|
Abo für %{email} mit diesen Werten eingetragen:
|
110
139
|
|
@@ -121,6 +150,59 @@ de:
|
|
121
150
|
setting_fingerprint_failed: |
|
122
151
|
Fingerabdruck für %{email} konnte nicht auf %{fingerprint} gesetzt werden:
|
123
152
|
%{errors}.
|
153
|
+
set_fingerprint_requires_valid_fingerprint: |
|
154
|
+
Du hast zu dem Schlüsselwort 'SET-FINGERPRINT' keinen gültigen Wert angegeben.
|
155
|
+
|
156
|
+
Es wurde der folgende Wert erkannt: %{fingerprint}
|
157
|
+
|
158
|
+
Benötigt werden ein oder zwei Werte, bspw.:
|
159
|
+
X-SET-FINGERPRINT: 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3
|
160
|
+
|
161
|
+
oder (als admin):
|
162
|
+
X-SET-FINGERPRINT: subscription2@hostname 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3
|
163
|
+
|
164
|
+
Wobei der Fingerprint in der gesamten Länge (40 Zeichen) angegeben werden muss. Optional mit 0x als Präfix.
|
165
|
+
|
166
|
+
Um einen Fingerprint zu entfernen kannst du das Schlüsselwort 'UNSET-FINGERPRINT' verwenden.
|
167
|
+
set_fingerprint_requires_arguments: |
|
168
|
+
Du hast zu dem Schlüsselwort 'SET-FINGERPRINT' keinen Wert angegeben.
|
169
|
+
|
170
|
+
Benötigt werden ein oder zwei Werte, bspw.:
|
171
|
+
X-SET-FINGERPRINT: 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3
|
172
|
+
|
173
|
+
oder (als admin):
|
174
|
+
X-SET-FINGERPRINT: subscription2@hostname 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3
|
175
|
+
|
176
|
+
Um einen Fingerprint zu entfernen kannst du das Schlüsselwort 'UNSET-FINGERPRINT' verwenden.
|
177
|
+
unset_fingerprint_only_self: Nur admins dürfen den Fingerabdruck für andere Abos festlegen.
|
178
|
+
fingerprint_unset: Fingerabdruck für %{email} wurde entfernt.
|
179
|
+
unsetting_fingerprint_failed: |
|
180
|
+
Fingerabdruck für %{email} konnte nicht entfernt werden:
|
181
|
+
%{errors}.
|
182
|
+
unset_fingerprint_requires_arguments: |
|
183
|
+
Du hast zu dem Schlüsselwort 'UNSET-FINGERPRINT' keinen Wert angegeben.
|
184
|
+
|
185
|
+
Benötigt werden ein Wert, bspw.:
|
186
|
+
X-UNSET-FINGERPRINT: subscription2@hostname
|
187
|
+
|
188
|
+
Als admin musst du um deinen eigenen Fingerabdruck zu entfernen, noch zusätzlich das Argument force mitgeben. bspw.:
|
189
|
+
X-UNSET-FINGERPRINT: adminsubscription2@hostname force
|
190
|
+
subscribe_requires_arguments: |
|
191
|
+
Fehler: Du hast zu dem Schlüsselwort 'SUBSCRIBE' keinen Wert angegeben.
|
192
|
+
|
193
|
+
Mindestens ein Wert ist nötig, drei weitere sind optional. Bspw.:
|
194
|
+
X-SUBSCRIBE: new-subscription@hostname
|
195
|
+
|
196
|
+
Oder, um den Schlüssel für das neue Abo zuzuweisen:
|
197
|
+
X-SUBSCRIBE: new-subscription@hostname 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3
|
198
|
+
|
199
|
+
Oder, um den Schlüssel zuzuweisen, und das Abo zum admin zu machen:
|
200
|
+
X-SUBSCRIBE: new-subscription@hostname 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3 true
|
201
|
+
|
202
|
+
Oder, um den Schlüssel zuzuweisen, das Abo zum admin zu machen, und die Zustellung von Listen-Emails für dieses Abo abzuschalten:
|
203
|
+
X-SUBSCRIBE: new-subscription@hostname 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3 true false
|
204
|
+
|
205
|
+
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.
|
124
206
|
signatures_attached: Die Signaturen hängen an.
|
125
207
|
list_management:
|
126
208
|
no_logfile: Keine Log-Datei für %{listname} gefunden. (Das kann an einem hohem Log-Level und der Abwesenheit von Fehlern liegen.)
|
@@ -169,6 +251,12 @@ de:
|
|
169
251
|
invalid_input: "Ungültige Angabe. Gültig sind: URLs, OpenPGP-Fingerabdrücke, oder Emailadressen."
|
170
252
|
pseudoheaders:
|
171
253
|
stripped_html_from_multialt: Diese Email enthielt einen alternativen HTML-Teil, der PGP-Daten beinhaltete. Der HTML-Teil wurde entfernt, um die Email sauberer analysieren zu können.
|
254
|
+
signature_states:
|
255
|
+
unknown: "Unbekannte Signatur von unbekanntem Schlüssel 0x%{fingerprint}"
|
256
|
+
unsigned: "Unsigniert"
|
257
|
+
encryption_states:
|
258
|
+
encrypted: "Verschlüsselt"
|
259
|
+
unencrypted: "Unverschlüsselt"
|
172
260
|
|
173
261
|
activerecord:
|
174
262
|
errors:
|
data/locales/en.yml
CHANGED
@@ -51,9 +51,7 @@ en:
|
|
51
51
|
In case you only sent keywords please note that administrative keywords must be sent to the "request"-address (<%{request_address}>) in order to be respected.
|
52
52
|
no_linebreaks: "must not include line-breaks"
|
53
53
|
list_not_found: "Error: No list found with this address: '%{email}'."
|
54
|
-
invalid_listname: "Error: '%{email}' is not a valid address."
|
55
54
|
invalid_characters: "contains invalid characters"
|
56
|
-
list_exists: A list with address '%{email}' is already present.
|
57
55
|
listdir_problem:
|
58
56
|
message: "There's a problem with the list-directory: '%{dir}' %{problem}."
|
59
57
|
not_existing: does not exist
|
@@ -65,12 +63,10 @@ en:
|
|
65
63
|
key_generation_failed: Generating the OpenPGP key pair for %{listname} failed for unknown reasons. Please check the list-directory ('%{listdir}') and the log-files.
|
66
64
|
key_adduid_failed: "Adding a user-ID to the OpenPGP key failed with this message:\n%{errmsg}"
|
67
65
|
too_many_keys: "Error: In %{listdir} there's more than one matching OpenPGP-key for %{listname}. Please delete all but one."
|
68
|
-
unknown_list_option: "Unknown option in %{config_file}: '%{option}'."
|
69
66
|
loading_list_settings_failed: "%{config_file} could not be parsed, please check its formatting to be valid YAML."
|
70
67
|
message_too_big: "Your message was too big. Allowed are up to %{allowed_size}KB."
|
71
68
|
must_be_boolean: "must be true or false"
|
72
69
|
must_be_greater_than_zero: "must be a number greater than zero"
|
73
|
-
file_not_found: "File not found: '%{file}'."
|
74
70
|
not_pgp_mime: "Message was not encrypted in the pgp/mime-format."
|
75
71
|
delivery_error: "The following error occurred while sending a message to %{email}: %{error}"
|
76
72
|
no_match_for: "No match found for %{input}"
|
@@ -85,14 +81,49 @@ en:
|
|
85
81
|
keyword_admin_notify_lists: "%{signer} used the keyword '%{keyword}' with the values '%{arguments}' in a message sent to the list."
|
86
82
|
keyword_admin_notify_lists_without_arguments: "%{signer} used the keyword '%{keyword}' in a message sent to the list."
|
87
83
|
key_management:
|
88
|
-
deleted:
|
89
|
-
|
90
|
-
|
84
|
+
deleted: |
|
85
|
+
This key was deleted:
|
86
|
+
%{key_string}
|
87
|
+
not_deletable: |
|
88
|
+
This key may not be deleted:
|
89
|
+
%{key_string}
|
90
|
+
no_imports: In the message you sent us, no keys could be found. :(
|
91
91
|
key_import_status:
|
92
|
-
imported:
|
93
|
-
|
94
|
-
|
92
|
+
imported: |
|
93
|
+
This key was newly added:
|
94
|
+
%{key_oneline}
|
95
|
+
updated: |
|
96
|
+
This key was updated:
|
97
|
+
%{key_oneline}
|
98
|
+
unchanged: |
|
99
|
+
This key was not changed:
|
100
|
+
%{key_oneline}
|
101
|
+
error: |
|
102
|
+
The key with this fingerprint could not be added due to an unknown error:
|
103
|
+
%{fingerprint}
|
95
104
|
matching_keys_intro: All keys from the list's keyring matching '%{input}' are attached to this message.
|
105
|
+
delete_key_requires_arguments: |
|
106
|
+
Error: You did not send any arguments for the keyword 'DELETE-KEY'.
|
107
|
+
|
108
|
+
One is required, more are optional, e.g.:
|
109
|
+
X-DELETE-KEY: 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3
|
110
|
+
|
111
|
+
Or, to delete multiple keys at once:
|
112
|
+
X-DELETE-KEY: 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3 a-subscription@hostname
|
113
|
+
|
114
|
+
The matching keys will be deleted only if the argument matches them distinctly.
|
115
|
+
fetch_key_requires_arguments: |
|
116
|
+
Error: You did not send any arguments for the keyword 'FETCH-KEY'.
|
117
|
+
|
118
|
+
One is required, more are optional. Each argument can be an URL to fetch via HTTP, or a string to look up at the OpenPGP-keyservers.
|
119
|
+
E.g., to fetch a key by fingerprint from the keyserver:
|
120
|
+
X-FETCH-KEY: 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3
|
121
|
+
|
122
|
+
Or, to fetch two keys by email-address from the keyserver:
|
123
|
+
X-FETCH-KEY: a-subscription@hostname anotherone@example.org
|
124
|
+
|
125
|
+
Or, to fetch a key keys by URL:
|
126
|
+
X-FETCH-KEY: https://example.org/keys/mykey.asc
|
96
127
|
resend:
|
97
128
|
not_resent_no_keys: Resending to <%{email}> failed (%{num_keys} keys found and unencrypted sending disallowed).
|
98
129
|
encrypted_to: Encrypted to
|
@@ -105,6 +136,8 @@ en:
|
|
105
136
|
unsubscribing_failed: |
|
106
137
|
Unsubscribing %{email} failed:
|
107
138
|
%{errors}
|
139
|
+
cannot_unsubscribe_last_admin: |
|
140
|
+
%{email} is the only admin for this list, thus it can not be unsubscribed.
|
108
141
|
subscribed: |
|
109
142
|
%{email} has been subscribed with these attributes:
|
110
143
|
|
@@ -121,6 +154,59 @@ en:
|
|
121
154
|
setting_fingerprint_failed: |
|
122
155
|
Setting fingerprint for %{email} to %{fingerprint} failed:
|
123
156
|
%{errors}.
|
157
|
+
set_fingerprint_requires_valid_fingerprint: |
|
158
|
+
You did not send a valid fingerprint for the keyword 'SET-FINGERPRINT'
|
159
|
+
|
160
|
+
The following value was detected: %{fingerprint}
|
161
|
+
|
162
|
+
One or two are required, e.g.:
|
163
|
+
X-SET-FINGERPRINT: 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3
|
164
|
+
|
165
|
+
or (as an admin):
|
166
|
+
X-SET-FINGERPRINT: subscription2@hostname 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3
|
167
|
+
|
168
|
+
While the fingerprint must be passed in the full length (40 characters). Optionally prefixed with 0x.
|
169
|
+
|
170
|
+
To remove a fingerprint you can use the keyword 'UNSET-FINGERPRINT'
|
171
|
+
set_fingerprint_requires_arguments: |
|
172
|
+
Error: You did not send any arguments for the keyword 'SET-FINGERPRINT'.
|
173
|
+
|
174
|
+
One or two are required, e.g.:
|
175
|
+
X-SET-FINGERPRINT: 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3
|
176
|
+
|
177
|
+
or (as an admin):
|
178
|
+
X-SET-FINGERPRINT: subscription2@hostname 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3
|
179
|
+
|
180
|
+
To remove a fingerprint you can use the keyword 'UNSET-FINGERPRINT'
|
181
|
+
unset_fingerprint_only_self: Only admins may remove fingerprints of subscriptions other than their own.
|
182
|
+
unset_fingerprint_requires_arguments: |
|
183
|
+
Error: You did not send any arguments for the keyword 'UNSET-FINGERPRINT'
|
184
|
+
|
185
|
+
One value is required, e.g.:
|
186
|
+
X-UNSET-FINGERPRINT: subscription2@hostname
|
187
|
+
|
188
|
+
As an admin to unset your own fingerprint you must additionally pass the argument force. E.g.:
|
189
|
+
X-UNSET-FINGERPRINT: adminsubscription2@hostname force
|
190
|
+
fingerprint_unset: Fingerprint for %{email} removed.
|
191
|
+
unsetting_fingerprint_failed: |
|
192
|
+
Removing fingerprint for %{email} failed:
|
193
|
+
%{errors}.
|
194
|
+
subscribe_requires_arguments: |
|
195
|
+
Error: You did not send any arguments for the keyword 'SUBSCRIBE'.
|
196
|
+
|
197
|
+
At least one argument is required, three more are optional. E.g.:
|
198
|
+
X-SUBSCRIBE: new-subscription@hostname
|
199
|
+
|
200
|
+
Or, defining the key to use for the new subscription:
|
201
|
+
X-SUBSCRIBE: new-subscription@hostname 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3
|
202
|
+
|
203
|
+
Or, defining the key to use, and setting this subscription to be an admin:
|
204
|
+
X-SUBSCRIBE: new-subscription@hostname 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3 true
|
205
|
+
|
206
|
+
Or, defining the key to use, setting this subscription as admin, and disabling the delivery of list-emails to this subscription:
|
207
|
+
X-SUBSCRIBE: new-subscription@hostname 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3 true false
|
208
|
+
|
209
|
+
If you omit the optional arguments, the subscription has no key assigned, is not an admin, and has the delivery of list-emails enabled.
|
124
210
|
signatures_attached: Find the signatures attached.
|
125
211
|
list_management:
|
126
212
|
no_logfile: No logfile could be found for %{listname}. (This might be caused by a high log-level and the absence of errors.)
|
@@ -169,6 +255,12 @@ en:
|
|
169
255
|
invalid_input: "Invalid input. Allowed are: URLs, OpenPGP-fingerprints, or email-addresses."
|
170
256
|
pseudoheaders:
|
171
257
|
stripped_html_from_multialt: This message included an alternating HTML-part that contained PGP-data. The HTML-part was removed to enable parsing the message more properly.
|
258
|
+
signature_states:
|
259
|
+
unknown: "Unknown signature by unknown key 0x%{fingerprint}"
|
260
|
+
unsigned: "Unsigned"
|
261
|
+
encryption_states:
|
262
|
+
encrypted: "Encrypted"
|
263
|
+
unencrypted: "Unencrypted"
|
172
264
|
|
173
265
|
activerecord:
|
174
266
|
errors:
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: schleuder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- schleuder dev team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-08-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gpgme
|
@@ -50,28 +50,34 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 0.3
|
53
|
+
version: '0.3'
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 0.3.3
|
54
57
|
type: :runtime
|
55
58
|
prerelease: false
|
56
59
|
version_requirements: !ruby/object:Gem::Requirement
|
57
60
|
requirements:
|
58
61
|
- - "~>"
|
59
62
|
- !ruby/object:Gem::Version
|
60
|
-
version: 0.3
|
63
|
+
version: '0.3'
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 0.3.3
|
61
67
|
- !ruby/object:Gem::Dependency
|
62
68
|
name: activerecord
|
63
69
|
requirement: !ruby/object:Gem::Requirement
|
64
70
|
requirements:
|
65
71
|
- - "~>"
|
66
72
|
- !ruby/object:Gem::Version
|
67
|
-
version: '4.
|
73
|
+
version: '4.2'
|
68
74
|
type: :runtime
|
69
75
|
prerelease: false
|
70
76
|
version_requirements: !ruby/object:Gem::Requirement
|
71
77
|
requirements:
|
72
78
|
- - "~>"
|
73
79
|
- !ruby/object:Gem::Version
|
74
|
-
version: '4.
|
80
|
+
version: '4.2'
|
75
81
|
- !ruby/object:Gem::Dependency
|
76
82
|
name: rack-test
|
77
83
|
requirement: !ruby/object:Gem::Requirement
|
@@ -199,7 +205,7 @@ dependencies:
|
|
199
205
|
- !ruby/object:Gem::Version
|
200
206
|
version: '0'
|
201
207
|
- !ruby/object:Gem::Dependency
|
202
|
-
name:
|
208
|
+
name: factory_bot
|
203
209
|
requirement: !ruby/object:Gem::Requirement
|
204
210
|
requirements:
|
205
211
|
- - ">="
|
@@ -243,8 +249,8 @@ dependencies:
|
|
243
249
|
description: |-
|
244
250
|
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.
|
245
251
|
|
246
|
-
(Please note: For some platforms there's a better way of installing Schleuder than `gem install`. See <https://schleuder.
|
247
|
-
email: schleuder
|
252
|
+
(Please note: For some platforms there's a better way of installing Schleuder than `gem install`. See <https://schleuder.org/docs/#installation> for details.)
|
253
|
+
email: team@schleuder.org
|
248
254
|
executables:
|
249
255
|
- schleuder
|
250
256
|
- schleuder-api-daemon
|
@@ -268,6 +274,7 @@ files:
|
|
268
274
|
- db/migrate/201508261827_remove_default_mime.rb
|
269
275
|
- db/migrate/20160501172700_fix_headers_to_meta_defaults.rb
|
270
276
|
- db/migrate/20170713215059_add_internal_footer_to_list.rb
|
277
|
+
- db/migrate/20180110203100_add_sig_enc_to_headers_to_meta_defaults.rb
|
271
278
|
- db/schema.rb
|
272
279
|
- etc/init.d/schleuder-api-daemon
|
273
280
|
- etc/list-defaults.yml
|
@@ -276,6 +283,12 @@ files:
|
|
276
283
|
- etc/schleuder.cron.weekly
|
277
284
|
- etc/schleuder.yml
|
278
285
|
- lib/schleuder-api-daemon.rb
|
286
|
+
- lib/schleuder-api-daemon/helpers/schleuder-api-daemon-helper.rb
|
287
|
+
- lib/schleuder-api-daemon/routes/key.rb
|
288
|
+
- lib/schleuder-api-daemon/routes/list.rb
|
289
|
+
- lib/schleuder-api-daemon/routes/status.rb
|
290
|
+
- lib/schleuder-api-daemon/routes/subscription.rb
|
291
|
+
- lib/schleuder-api-daemon/routes/version.rb
|
279
292
|
- lib/schleuder.rb
|
280
293
|
- lib/schleuder/cli.rb
|
281
294
|
- lib/schleuder/cli/cert.rb
|
@@ -286,12 +299,9 @@ files:
|
|
286
299
|
- lib/schleuder/errors/base.rb
|
287
300
|
- lib/schleuder/errors/decryption_failed.rb
|
288
301
|
- lib/schleuder/errors/fatal_error.rb
|
289
|
-
- lib/schleuder/errors/file_not_found.rb
|
290
|
-
- lib/schleuder/errors/invalid_listname.rb
|
291
302
|
- lib/schleuder/errors/key_adduid_failed.rb
|
292
303
|
- lib/schleuder/errors/key_generation_failed.rb
|
293
304
|
- lib/schleuder/errors/keyword_admin_only.rb
|
294
|
-
- lib/schleuder/errors/list_exists.rb
|
295
305
|
- lib/schleuder/errors/list_not_found.rb
|
296
306
|
- lib/schleuder/errors/list_property_missing.rb
|
297
307
|
- lib/schleuder/errors/listdir_problem.rb
|
@@ -305,16 +315,19 @@ files:
|
|
305
315
|
- lib/schleuder/errors/message_unsigned.rb
|
306
316
|
- lib/schleuder/errors/standard_error.rb
|
307
317
|
- lib/schleuder/errors/too_many_keys.rb
|
308
|
-
- lib/schleuder/
|
309
|
-
- lib/schleuder/filters/
|
310
|
-
- lib/schleuder/filters/
|
311
|
-
- lib/schleuder/filters/
|
312
|
-
- lib/schleuder/filters/
|
313
|
-
- lib/schleuder/filters/
|
314
|
-
- lib/schleuder/filters/
|
315
|
-
- lib/schleuder/filters/
|
316
|
-
- lib/schleuder/filters/
|
317
|
-
- lib/schleuder/filters/
|
318
|
+
- lib/schleuder/filters/post_decryption/10_request.rb
|
319
|
+
- lib/schleuder/filters/post_decryption/20_max_message_size.rb
|
320
|
+
- lib/schleuder/filters/post_decryption/30_forward_to_owner.rb
|
321
|
+
- lib/schleuder/filters/post_decryption/40_receive_admin_only.rb
|
322
|
+
- lib/schleuder/filters/post_decryption/50_receive_authenticated_only.rb
|
323
|
+
- lib/schleuder/filters/post_decryption/60_receive_signed_only.rb
|
324
|
+
- lib/schleuder/filters/post_decryption/70_receive_encrypted_only.rb
|
325
|
+
- lib/schleuder/filters/post_decryption/80_receive_from_subscribed_emailaddresses_only.rb
|
326
|
+
- lib/schleuder/filters/pre_decryption/10_forward_bounce_to_admins.rb
|
327
|
+
- lib/schleuder/filters/pre_decryption/20_forward_all_incoming_to_admins.rb
|
328
|
+
- lib/schleuder/filters/pre_decryption/30_send_key.rb
|
329
|
+
- lib/schleuder/filters/pre_decryption/40_fix_exchange_messages.rb
|
330
|
+
- lib/schleuder/filters/pre_decryption/50_strip_html_from_alternative.rb
|
318
331
|
- lib/schleuder/filters_runner.rb
|
319
332
|
- lib/schleuder/gpgme/ctx.rb
|
320
333
|
- lib/schleuder/gpgme/import_status.rb
|
@@ -326,6 +339,8 @@ files:
|
|
326
339
|
- lib/schleuder/listlogger.rb
|
327
340
|
- lib/schleuder/logger.rb
|
328
341
|
- lib/schleuder/logger_notifications.rb
|
342
|
+
- lib/schleuder/mail/encrypted_part.rb
|
343
|
+
- lib/schleuder/mail/gpg.rb
|
329
344
|
- lib/schleuder/mail/message.rb
|
330
345
|
- lib/schleuder/mail/parts_list.rb
|
331
346
|
- lib/schleuder/plugin_runners/base.rb
|
@@ -348,10 +363,16 @@ files:
|
|
348
363
|
- lib/schleuder/version.rb
|
349
364
|
- locales/de.yml
|
350
365
|
- locales/en.yml
|
351
|
-
homepage: https://schleuder.
|
366
|
+
homepage: https://schleuder.org/
|
352
367
|
licenses:
|
353
368
|
- GPL-3.0
|
354
|
-
metadata:
|
369
|
+
metadata:
|
370
|
+
homepage_uri: https://schleuder.org/
|
371
|
+
documentation_uri: https://schleuder.org/docs/
|
372
|
+
changelog_uri: https://0xacab.org/schleuder/schleuder/blob/master/CHANGELOG.md
|
373
|
+
source_code_uri: https://0xacab.org/schleuder/schleuder/
|
374
|
+
bug_tracker_uri: https://0xacab.org/schleuder/schleuder/issues
|
375
|
+
mailing_list_uri: https://lists.nadir.org/mailman/listinfo/schleuder-announce/
|
355
376
|
post_install_message: "\n\n Please consider additionally installing schleuder-cli
|
356
377
|
(allows to\n configure lists from the command line).\n\n To set up Schleuder
|
357
378
|
on this system please run `schleuder install`.\n\n "
|
@@ -362,7 +383,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
362
383
|
requirements:
|
363
384
|
- - ">="
|
364
385
|
- !ruby/object:Gem::Version
|
365
|
-
version:
|
386
|
+
version: 2.1.0
|
366
387
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
367
388
|
requirements:
|
368
389
|
- - ">="
|
@@ -370,8 +391,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
370
391
|
version: '0'
|
371
392
|
requirements: []
|
372
393
|
rubyforge_project: "[none]"
|
373
|
-
rubygems_version: 2.7.
|
394
|
+
rubygems_version: 2.7.7
|
374
395
|
signing_key:
|
375
396
|
specification_version: 4
|
376
|
-
summary: Schleuder is a gpg-enabled
|
397
|
+
summary: Schleuder is a gpg-enabled mailing list manager with remailing-capabilities.
|
377
398
|
test_files: []
|