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.
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: []