schleuder 3.2.2 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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: []
|