schleuder 3.2.2 → 3.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +20 -10
  3. data/Rakefile +16 -8
  4. data/bin/schleuder +2 -1
  5. data/bin/schleuder-api-daemon +3 -2
  6. data/db/migrate/20180110203100_add_sig_enc_to_headers_to_meta_defaults.rb +30 -0
  7. data/db/schema.rb +2 -2
  8. data/etc/list-defaults.yml +4 -2
  9. data/etc/schleuder.yml +11 -0
  10. data/lib/schleuder-api-daemon.rb +9 -354
  11. data/lib/schleuder-api-daemon/helpers/schleuder-api-daemon-helper.rb +143 -0
  12. data/lib/schleuder-api-daemon/routes/key.rb +40 -0
  13. data/lib/schleuder-api-daemon/routes/list.rb +69 -0
  14. data/lib/schleuder-api-daemon/routes/status.rb +5 -0
  15. data/lib/schleuder-api-daemon/routes/subscription.rb +99 -0
  16. data/lib/schleuder-api-daemon/routes/version.rb +5 -0
  17. data/lib/schleuder.rb +2 -3
  18. data/lib/schleuder/cli.rb +24 -0
  19. data/lib/schleuder/cli/subcommand_fix.rb +1 -1
  20. data/lib/schleuder/conf.rb +7 -1
  21. data/lib/schleuder/errors/active_model_error.rb +2 -5
  22. data/lib/schleuder/errors/decryption_failed.rb +2 -7
  23. data/lib/schleuder/errors/key_adduid_failed.rb +1 -5
  24. data/lib/schleuder/errors/key_generation_failed.rb +1 -8
  25. data/lib/schleuder/errors/keyword_admin_only.rb +1 -5
  26. data/lib/schleuder/errors/list_not_found.rb +1 -5
  27. data/lib/schleuder/errors/listdir_problem.rb +2 -7
  28. data/lib/schleuder/errors/loading_list_settings_failed.rb +2 -5
  29. data/lib/schleuder/errors/message_empty.rb +1 -5
  30. data/lib/schleuder/errors/message_not_from_admin.rb +2 -5
  31. data/lib/schleuder/errors/message_sender_not_subscribed.rb +2 -5
  32. data/lib/schleuder/errors/message_too_big.rb +2 -5
  33. data/lib/schleuder/errors/message_unauthenticated.rb +1 -4
  34. data/lib/schleuder/errors/message_unencrypted.rb +2 -5
  35. data/lib/schleuder/errors/message_unsigned.rb +2 -5
  36. data/lib/schleuder/errors/too_many_keys.rb +1 -8
  37. data/lib/schleuder/filters/{request_filter.rb → post_decryption/10_request.rb} +0 -0
  38. data/lib/schleuder/filters/{max_message_size.rb → post_decryption/20_max_message_size.rb} +0 -0
  39. data/lib/schleuder/filters/{forward_filter.rb → post_decryption/30_forward_to_owner.rb} +0 -0
  40. data/lib/schleuder/filters/post_decryption/40_receive_admin_only.rb +10 -0
  41. data/lib/schleuder/filters/post_decryption/50_receive_authenticated_only.rb +10 -0
  42. data/lib/schleuder/filters/post_decryption/60_receive_signed_only.rb +10 -0
  43. data/lib/schleuder/filters/post_decryption/70_receive_encrypted_only.rb +10 -0
  44. data/lib/schleuder/filters/post_decryption/80_receive_from_subscribed_emailaddresses_only.rb +10 -0
  45. data/lib/schleuder/filters/{bounces_filter.rb → pre_decryption/10_forward_bounce_to_admins.rb} +0 -0
  46. data/lib/schleuder/filters/{forward_incoming.rb → pre_decryption/20_forward_all_incoming_to_admins.rb} +0 -0
  47. data/lib/schleuder/filters/{send_key_filter.rb → pre_decryption/30_send_key.rb} +0 -0
  48. data/lib/schleuder/filters/{hotmail_message_filter.rb → pre_decryption/40_fix_exchange_messages.rb} +5 -3
  49. data/lib/schleuder/filters/{strip_alternative_filter.rb → pre_decryption/50_strip_html_from_alternative.rb} +1 -1
  50. data/lib/schleuder/filters_runner.rb +41 -31
  51. data/lib/schleuder/gpgme/ctx.rb +1 -1
  52. data/lib/schleuder/gpgme/import_status.rb +13 -7
  53. data/lib/schleuder/gpgme/key.rb +4 -0
  54. data/lib/schleuder/list.rb +7 -4
  55. data/lib/schleuder/mail/encrypted_part.rb +14 -0
  56. data/lib/schleuder/mail/gpg.rb +15 -0
  57. data/lib/schleuder/mail/message.rb +70 -30
  58. data/lib/schleuder/plugins/key_management.rb +32 -7
  59. data/lib/schleuder/plugins/subscription_management.rb +70 -3
  60. data/lib/schleuder/runner.rb +19 -8
  61. data/lib/schleuder/subscription.rb +5 -9
  62. data/lib/schleuder/validators/fingerprint_validator.rb +1 -1
  63. data/lib/schleuder/version.rb +1 -1
  64. data/locales/de.yml +96 -8
  65. data/locales/en.yml +102 -10
  66. metadata +48 -27
  67. data/lib/schleuder/errors/file_not_found.rb +0 -14
  68. data/lib/schleuder/errors/invalid_listname.rb +0 -13
  69. data/lib/schleuder/errors/list_exists.rb +0 -13
  70. data/lib/schleuder/errors/unknown_list_option.rb +0 -14
  71. data/lib/schleuder/filters/auth_filter.rb +0 -39
@@ -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(Filters::Runner::PRE_SETUP_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(Filters::Runner::POST_SETUP_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(true)
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(filters)
60
- error = filters_runner.run(@mail, filters)
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
- @filters_runner ||= Filters::Runner.new(list)
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 neccessary permissions of crucial files.
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
- # Allow input to contain whitespace and '0x'-prefix, but don't store it
27
- # into the DB.
28
- value = arg.to_s.gsub(/\s*/, '').gsub(/^0x/, '').chomp
29
- write_attribute(:fingerprint, value)
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 =~ /\A[a-f0-9]{32,}\z/i
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
@@ -1,3 +1,3 @@
1
1
  module Schleuder
2
- VERSION = '3.2.2'
2
+ VERSION = '3.3.0'
3
3
  end
@@ -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
- import_result: "Import-Ergebnis:\n"
86
+ no_imports: In deiner Email konnten keine Schlüssel gefunden werden. :(
91
87
  key_import_status:
92
- imported: importiert
93
- updated: aktualisiert
94
- unchanged: unverändert
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:
@@ -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: "Deleted: %{key_string}"
89
- not_deletable: "May not be deleted: %{key_string}"
90
- import_result: "Import result:\n"
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: imported
93
- updated: updated
94
- unchanged: unchanged
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.2.2
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-02-06 00:00:00.000000000 Z
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.0
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.0
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.1'
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.1'
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: factory_girl
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.nadir.org/docs/#installation> for details.)
247
- email: schleuder@nadir.org
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/errors/unknown_list_option.rb
309
- - lib/schleuder/filters/auth_filter.rb
310
- - lib/schleuder/filters/bounces_filter.rb
311
- - lib/schleuder/filters/forward_filter.rb
312
- - lib/schleuder/filters/forward_incoming.rb
313
- - lib/schleuder/filters/hotmail_message_filter.rb
314
- - lib/schleuder/filters/max_message_size.rb
315
- - lib/schleuder/filters/request_filter.rb
316
- - lib/schleuder/filters/send_key_filter.rb
317
- - lib/schleuder/filters/strip_alternative_filter.rb
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.nadir.org/
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: '0'
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.3
394
+ rubygems_version: 2.7.7
374
395
  signing_key:
375
396
  specification_version: 4
376
- summary: Schleuder is a gpg-enabled mailinglist with remailing-capabilities.
397
+ summary: Schleuder is a gpg-enabled mailing list manager with remailing-capabilities.
377
398
  test_files: []