schleuder 2.2.4 → 3.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +138 -0
- data/Rakefile +136 -0
- data/bin/pinentry-clearpassphrase +72 -0
- data/bin/schleuder +9 -89
- data/bin/schleuder-api-daemon +4 -0
- data/db/migrate/20140501103532_create_lists.rb +39 -0
- data/db/migrate/20140501112859_create_subscriptions.rb +21 -0
- data/db/migrate/201508092100_add_language_to_lists.rb +11 -0
- data/db/migrate/20150812165700_change_keywords_admin_only_defaults.rb +8 -0
- data/db/migrate/20150813235800_add_forward_all_incoming_to_admins.rb +11 -0
- data/db/migrate/201508141727_change_send_encrypted_only_default.rb +8 -0
- data/db/migrate/201508222143_add_logfiles_to_keep_to_lists.rb +11 -0
- data/db/migrate/201508261723_rename_delivery_disabled_to_delivery_enabled_and_change_default.rb +14 -0
- data/db/migrate/201508261815_strip_gpg_passphrase.rb +11 -0
- data/db/migrate/201508261827_remove_default_mime.rb +9 -0
- data/db/migrate/20160501172700_fix_headers_to_meta_defaults.rb +8 -0
- data/db/migrate/20170713215059_add_internal_footer_to_list.rb +11 -0
- data/db/schema.rb +62 -0
- data/etc/init.d/schleuder-api-daemon +87 -0
- data/etc/list-defaults.yml +123 -0
- data/etc/postfix/schleuder_sqlite.cf +28 -0
- data/etc/schleuder-api-daemon.service +10 -0
- data/etc/schleuder.cron.weekly +6 -0
- data/etc/schleuder.yml +61 -0
- data/lib/schleuder-api-daemon.rb +420 -0
- data/lib/schleuder.rb +81 -47
- data/lib/schleuder/cli.rb +334 -0
- data/lib/schleuder/cli/cert.rb +24 -0
- data/lib/schleuder/cli/schleuder_cert_manager.rb +84 -0
- data/lib/schleuder/cli/subcommand_fix.rb +11 -0
- data/lib/schleuder/conf.rb +131 -0
- data/lib/schleuder/errors/active_model_error.rb +15 -0
- data/lib/schleuder/errors/base.rb +17 -0
- data/lib/schleuder/errors/decryption_failed.rb +16 -0
- data/lib/schleuder/errors/fatal_error.rb +13 -0
- data/lib/schleuder/errors/file_not_found.rb +14 -0
- data/lib/schleuder/errors/invalid_listname.rb +13 -0
- data/lib/schleuder/errors/key_adduid_failed.rb +13 -0
- data/lib/schleuder/errors/key_generation_failed.rb +16 -0
- data/lib/schleuder/errors/keyword_admin_only.rb +13 -0
- data/lib/schleuder/errors/list_exists.rb +13 -0
- data/lib/schleuder/errors/list_not_found.rb +14 -0
- data/lib/schleuder/errors/list_property_missing.rb +14 -0
- data/lib/schleuder/errors/listdir_problem.rb +16 -0
- data/lib/schleuder/errors/loading_list_settings_failed.rb +14 -0
- data/lib/schleuder/errors/message_empty.rb +14 -0
- data/lib/schleuder/errors/message_not_from_admin.rb +13 -0
- data/lib/schleuder/errors/message_sender_not_subscribed.rb +13 -0
- data/lib/schleuder/errors/message_too_big.rb +14 -0
- data/lib/schleuder/errors/message_unauthenticated.rb +13 -0
- data/lib/schleuder/errors/message_unencrypted.rb +13 -0
- data/lib/schleuder/errors/message_unsigned.rb +13 -0
- data/lib/schleuder/errors/standard_error.rb +5 -0
- data/lib/schleuder/errors/too_many_keys.rb +17 -0
- data/lib/schleuder/errors/unknown_list_option.rb +14 -0
- data/lib/schleuder/filters/auth_filter.rb +39 -0
- data/lib/schleuder/filters/bounces_filter.rb +12 -0
- data/lib/schleuder/filters/forward_filter.rb +17 -0
- data/lib/schleuder/filters/forward_incoming.rb +13 -0
- data/lib/schleuder/filters/hotmail_message_filter.rb +25 -0
- data/lib/schleuder/filters/max_message_size.rb +14 -0
- data/lib/schleuder/filters/request_filter.rb +26 -0
- data/lib/schleuder/filters/send_key_filter.rb +20 -0
- data/lib/schleuder/filters/strip_alternative_filter.rb +21 -0
- data/lib/schleuder/filters_runner.rb +83 -0
- data/lib/schleuder/gpgme/ctx.rb +274 -0
- data/lib/schleuder/gpgme/import_status.rb +27 -0
- data/lib/schleuder/gpgme/key.rb +212 -0
- data/lib/schleuder/gpgme/sub_key.rb +13 -0
- data/lib/schleuder/gpgme/user_id.rb +22 -0
- data/lib/schleuder/list.rb +318 -127
- data/lib/schleuder/list_builder.rb +139 -0
- data/lib/schleuder/listlogger.rb +31 -0
- data/lib/schleuder/logger.rb +23 -0
- data/lib/schleuder/logger_notifications.rb +69 -0
- data/lib/schleuder/mail/message.rb +482 -0
- data/lib/schleuder/mail/parts_list.rb +9 -0
- data/lib/schleuder/plugin_runners/base.rb +91 -0
- data/lib/schleuder/plugin_runners/list_plugins_runner.rb +24 -0
- data/lib/schleuder/plugin_runners/request_plugins_runner.rb +27 -0
- data/lib/schleuder/plugins/attach_listkey.rb +17 -0
- data/lib/schleuder/plugins/get_version.rb +7 -0
- data/lib/schleuder/plugins/key_management.rb +113 -0
- data/lib/schleuder/plugins/list_management.rb +15 -0
- data/lib/schleuder/plugins/resend.rb +196 -0
- data/lib/schleuder/plugins/sign_this.rb +46 -0
- data/lib/schleuder/plugins/subscription_management.rb +140 -0
- data/lib/schleuder/runner.rb +130 -0
- data/lib/schleuder/subscription.rb +98 -0
- data/lib/schleuder/validators/boolean_validator.rb +7 -0
- data/lib/schleuder/validators/email_validator.rb +7 -0
- data/lib/schleuder/validators/fingerprint_validator.rb +7 -0
- data/lib/schleuder/validators/greater_than_zero_validator.rb +7 -0
- data/lib/schleuder/validators/no_line_breaks_validator.rb +7 -0
- data/lib/schleuder/version.rb +1 -1
- data/locales/de.yml +179 -0
- data/locales/en.yml +179 -0
- metadata +305 -108
- checksums.yaml.gz.sig +0 -3
- data.tar.gz.sig +0 -2
- data/LICENSE +0 -339
- data/README +0 -32
- data/bin/schleuder-fix-gem-dependencies +0 -37
- data/bin/schleuder-init-setup +0 -37
- data/bin/schleuder-migrate-v2.1-to-v2.2 +0 -225
- data/bin/schleuder-newlist +0 -413
- data/contrib/check-expired-keys.rb +0 -60
- data/contrib/mutt-schleuder-colors.rc +0 -10
- data/contrib/mutt-schleuder-resend.vim +0 -24
- data/contrib/smtpserver.rb +0 -76
- data/ext/default-list.conf +0 -149
- data/ext/default-members.conf +0 -7
- data/ext/list.conf.example +0 -14
- data/ext/schleuder.conf +0 -64
- data/lib/schleuder/archiver.rb +0 -46
- data/lib/schleuder/crypt.rb +0 -210
- data/lib/schleuder/errors.rb +0 -5
- data/lib/schleuder/list_config.rb +0 -146
- data/lib/schleuder/log/listlogger.rb +0 -57
- data/lib/schleuder/log/outputter/emailoutputter.rb +0 -120
- data/lib/schleuder/log/outputter/metaemailoutputter.rb +0 -50
- data/lib/schleuder/log/schleuderlogger.rb +0 -34
- data/lib/schleuder/mail.rb +0 -873
- data/lib/schleuder/mailer.rb +0 -26
- data/lib/schleuder/member.rb +0 -69
- data/lib/schleuder/plugin.rb +0 -54
- data/lib/schleuder/processor.rb +0 -363
- data/lib/schleuder/schleuder_config.rb +0 -75
- data/lib/schleuder/storage.rb +0 -84
- data/lib/schleuder/utils.rb +0 -80
- data/man/schleuder-newlist.8 +0 -174
- data/man/schleuder.8 +0 -416
- data/plugins/README +0 -20
- data/plugins/manage_keys_plugin.rb +0 -113
- data/plugins/manage_members_plugin.rb +0 -156
- data/plugins/manage_self_plugin.rb +0 -26
- data/plugins/resend_plugin.rb +0 -35
- data/plugins/sign_this_plugin.rb +0 -14
- data/plugins/version_plugin.rb +0 -12
- metadata.gz.sig +0 -0
data/plugins/README
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
Writing Plugins for Schleuder
|
2
|
-
----------------------------
|
3
|
-
|
4
|
-
There are a few rules which any Plugin must follow to work (correctly):
|
5
|
-
|
6
|
-
- Name the file: <your_name>_plugin.rb (use underscores!)
|
7
|
-
- Name the class: YourNamePlugin
|
8
|
-
- module Schleuder
|
9
|
-
- Inherit from Plugin
|
10
|
-
- Implement two instance-methods:
|
11
|
-
- match(mail)
|
12
|
-
Is executed to determine whether process() should be executed. Needs to
|
13
|
-
take one argument (a Schleuder::Mail-object) and to return true or false.
|
14
|
-
- process(mail)
|
15
|
-
Is executed if match() returned true. Manipulate the taken
|
16
|
-
Schleuder::Mail-object here.
|
17
|
-
- use reply(origmail, your_message) to send a message to the sending
|
18
|
-
list-member and prevent normal distribution.
|
19
|
-
|
20
|
-
For examples see other Plugins.
|
@@ -1,113 +0,0 @@
|
|
1
|
-
module Schleuder
|
2
|
-
class ManageKeysPlugin < Plugin
|
3
|
-
def initialize
|
4
|
-
@plugin_type = :request
|
5
|
-
end
|
6
|
-
|
7
|
-
def list_keys(mail, value)
|
8
|
-
Schleuder.log.debug 'LIST-KEY requested'
|
9
|
-
listkeys(mail)
|
10
|
-
end
|
11
|
-
|
12
|
-
def add_key(mail, value)
|
13
|
-
Schleuder.log.debug 'ADD-KEY requested'
|
14
|
-
addkey(mail, mail.body)
|
15
|
-
end
|
16
|
-
|
17
|
-
def del_key(mail, value)
|
18
|
-
Schleuder.log.debug 'DEL-KEY requested'
|
19
|
-
# TODO: implement callback to sender with Hash to prevent replay
|
20
|
-
# attacks.
|
21
|
-
# Split at slash to work around some people's habit to include the
|
22
|
-
# bitlength and key-type ("2048R/DEADBEEF"). If there's no slash this
|
23
|
-
# won't do no harm. We need to force the string'iness to avoid nil's,
|
24
|
-
# though.
|
25
|
-
val = value.split('/').last.to_s
|
26
|
-
msg = "The DEL-KEY-keyword is deprecated and will be removed some day in the future. Please use DELETE-KEY instead.".fmt
|
27
|
-
msg << delkey(mail, val)
|
28
|
-
msg
|
29
|
-
end
|
30
|
-
|
31
|
-
def delete_key(mail, value)
|
32
|
-
Schleuder.log.debug 'DELETE-KEY requested'
|
33
|
-
delkey(mail, value.split('/').last)
|
34
|
-
end
|
35
|
-
|
36
|
-
def send_key(mail, value)
|
37
|
-
Schleuder.log.debug 'SEND-KEY requested'
|
38
|
-
val = value.split('/').last
|
39
|
-
msg = "The SEND-KEY-keyword is deprecated and will be removed some day in the future. Please use GET-KEY instead.".fmt
|
40
|
-
msg << getkey(mail, val)
|
41
|
-
msg
|
42
|
-
end
|
43
|
-
|
44
|
-
def get_key(mail, value)
|
45
|
-
Schleuder.log.debug 'GET-KEY requested'
|
46
|
-
val = value.split('/').last
|
47
|
-
getkey(mail, val)
|
48
|
-
end
|
49
|
-
|
50
|
-
private
|
51
|
-
|
52
|
-
def listkeys(mail)
|
53
|
-
m = ""
|
54
|
-
mail.crypt.list_keys.each do |k|
|
55
|
-
if not (trust = [:revoked, :expired, :disabled, :invalid].grep(k.trust)).empty?
|
56
|
-
m << "*Warning*: Key is #{trust.join(' and ')}!\n"
|
57
|
-
end
|
58
|
-
m << "#{k.to_s}"
|
59
|
-
if (exp = k.subkeys.first.expires) > Time.utc(1971, 1, 1, 1)
|
60
|
-
if exp < Time.now
|
61
|
-
m << "Expired at #{exp}.\n"
|
62
|
-
else
|
63
|
-
m << "Expires at #{exp}.\n"
|
64
|
-
end
|
65
|
-
end
|
66
|
-
m << "\n"
|
67
|
-
end
|
68
|
-
m
|
69
|
-
end
|
70
|
-
|
71
|
-
def addkey(mail, key)
|
72
|
-
m = ""
|
73
|
-
res = mail.crypt.add_key(key)
|
74
|
-
res.imports.each do |i|
|
75
|
-
if i.status == 1
|
76
|
-
action = "imported"
|
77
|
-
else
|
78
|
-
action = "not imported"
|
79
|
-
end
|
80
|
-
m << "#{mail.crypt.get_key(i.fpr).to_s}\n--> #{action}\n\n"
|
81
|
-
end
|
82
|
-
m << "\nImportResult.inspect:\n=> #{res.inspect}"
|
83
|
-
m
|
84
|
-
end
|
85
|
-
|
86
|
-
def delkey(mail, req)
|
87
|
-
unless (key = mail.crypt.get_key(req)).first
|
88
|
-
msg = "Failed to lookup key (#{req}) that should be deleted. Reason: #{key[1].capitalize}."
|
89
|
-
Schleuder.log.debug msg
|
90
|
-
return "--> #{msg}\n\n"
|
91
|
-
end
|
92
|
-
Schleuder.log.debug "Key to be deleted: #{key.inspect}"
|
93
|
-
res = mail.crypt.delete_key(key.first)
|
94
|
-
if res == true
|
95
|
-
action = "Key deleted."
|
96
|
-
else
|
97
|
-
action = "Key not deleted.\nException: #{res.to_s}"
|
98
|
-
end
|
99
|
-
"#{key.to_s}\n--> #{action}\n\n"
|
100
|
-
end
|
101
|
-
|
102
|
-
def getkey(mail, req)
|
103
|
-
keyblock = mail.crypt.export(req)
|
104
|
-
if keyblock.empty?
|
105
|
-
"#{req}\n\n--> No matching key present.\n"
|
106
|
-
else
|
107
|
-
"#{mail.crypt.list_keys(req).to_s.gsub(/^pub /, "\npub ")}\n\n#{keyblock}\n"
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
@@ -1,156 +0,0 @@
|
|
1
|
-
module Schleuder
|
2
|
-
class ManageMembersPlugin < Plugin
|
3
|
-
def initialize
|
4
|
-
@plugin_type = :request
|
5
|
-
end
|
6
|
-
|
7
|
-
def get_members(mail, value)
|
8
|
-
# TODO: deprecation-notice
|
9
|
-
Schleuder.log.debug 'GET-MEMBERS requested'
|
10
|
-
get_membersfile
|
11
|
-
end
|
12
|
-
|
13
|
-
def save_members(mail, value)
|
14
|
-
# TODO: deprecation-notice
|
15
|
-
Schleuder.log.debug 'SAVE-MEMBERS requested'
|
16
|
-
if mail.body.strip.empty?
|
17
|
-
"Error, empty input. You need to write the members list yaml-formatted into the body."
|
18
|
-
else
|
19
|
-
Schleuder.list.members = YAML.load(mail.body)
|
20
|
-
"Saving was successful.\n\nCurrent members.conf:\n\n#{get_membersfile}\n"
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def add_member(mail, value)
|
25
|
-
Schleuder.log.debug 'ADD-MEMBER requested'
|
26
|
-
addmember(mail, value, mail.body)
|
27
|
-
end
|
28
|
-
|
29
|
-
def delete_member(mail, value)
|
30
|
-
Schleuder.log.debug 'DELETE-MEMBER requested'
|
31
|
-
deletemember(mail, value)
|
32
|
-
end
|
33
|
-
|
34
|
-
def list_members(mail, value)
|
35
|
-
Schleuder.log.debug 'LIST-MEMBERS requested'
|
36
|
-
listmembers(mail)
|
37
|
-
end
|
38
|
-
|
39
|
-
def get_member(mail, value)
|
40
|
-
Schleuder.log.debug 'GET-MEMBER requested'
|
41
|
-
getmember(mail, value)
|
42
|
-
end
|
43
|
-
|
44
|
-
def listmembers(mail)
|
45
|
-
msg = ''
|
46
|
-
msg << "Default mime-setting for this list: #{Schleuder.list.config.default_mime.downcase}.\n"
|
47
|
-
msg << "\nAdmins for this list:\n\n#{_list_members(Schleuder.list.config.admins)}"
|
48
|
-
msg << "\n\nMembers:\n\n#{_list_members(Schleuder.list.members)}"
|
49
|
-
msg
|
50
|
-
end
|
51
|
-
|
52
|
-
def _list_members(members)
|
53
|
-
members.collect { |member|
|
54
|
-
res = member.email.dup
|
55
|
-
res << " (mime: #{member.mime.downcase})" if member.mime && !member.mime.downcase.eql?(Schleuder.list.config.default_mime.downcase)
|
56
|
-
res << " :: #{_list_keys(member)}\n\n"
|
57
|
-
}.join('')
|
58
|
-
end
|
59
|
-
|
60
|
-
def _list_keys(member)
|
61
|
-
result = ''
|
62
|
-
key, msg = member.key(false) # also get a potentially expired key -> will
|
63
|
-
# also inform about multiple keys on the list
|
64
|
-
# that might not me the case otherwise
|
65
|
-
if key
|
66
|
-
if key.trust.eql?(:expired)
|
67
|
-
result << "*Warning*: Key expired! "
|
68
|
-
elsif key.trust.eql?(:revoked)
|
69
|
-
result << "*Warning*: Key revoked! "
|
70
|
-
end
|
71
|
-
result << member.key_descr
|
72
|
-
else
|
73
|
-
result << "*Warning*: #{msg}"
|
74
|
-
end
|
75
|
-
result
|
76
|
-
end
|
77
|
-
|
78
|
-
def addmember(mail, string, key)
|
79
|
-
email, mime = string.split(' ')
|
80
|
-
mem = Member.new({:email => email})
|
81
|
-
mem.mime = mime if mime
|
82
|
-
if Schleuder.list.members.any?{|m| m.email == mem.email }
|
83
|
-
msg = "--> Member is already part of the list. Nothing changed!"
|
84
|
-
msg << "\nExisting members-list:"
|
85
|
-
else
|
86
|
-
Schleuder.list.members = Schleuder.list.members << mem
|
87
|
-
msg = "#{mem}\n--> Member saved.\n\n"
|
88
|
-
if key
|
89
|
-
mail.crypt.add_key(key).imports.each do |i|
|
90
|
-
msg << "#{mail.crypt.key_descr(mail.crypt.get_key(i.fpr))}\n"
|
91
|
-
if i.status.eql? 1
|
92
|
-
msg << "--> Key imported.\n\n"
|
93
|
-
else
|
94
|
-
msg << "--> Key *not* imported (no error, maybe already present?).\n\n"
|
95
|
-
end
|
96
|
-
end
|
97
|
-
msg << "\n"
|
98
|
-
end
|
99
|
-
msg << "Updated members-list:"
|
100
|
-
end
|
101
|
-
msg << "\n\n#{_list_members(Schleuder.list.members)}"
|
102
|
-
end
|
103
|
-
|
104
|
-
def deletemember(mail, string)
|
105
|
-
msg = ''
|
106
|
-
members = Schleuder.list.members.dup
|
107
|
-
members.delete_if {|mem| mem.email.eql?(string)}
|
108
|
-
if members.eql? Schleuder.list.members
|
109
|
-
msg << "Member #{string} not found"
|
110
|
-
else
|
111
|
-
if Schleuder.list.members = members
|
112
|
-
msg << "Member #{string} deleted.\n"
|
113
|
-
else
|
114
|
-
msg = "Something failed. Please ask the maintainer of this list to figure out what\nhappened (e.g. by mailing to #{Schleuder.list.owner_addr}).\n"
|
115
|
-
end
|
116
|
-
end
|
117
|
-
msg << "\nUpdated members-list:\n\n#{_list_members(Schleuder.list.members)}\n"
|
118
|
-
msg
|
119
|
-
end
|
120
|
-
|
121
|
-
def getmember(mail, string)
|
122
|
-
Schleuder.log.debug "string: #{string.inspect}"
|
123
|
-
msg = ''
|
124
|
-
member = Schleuder.list.find_member_by_email string
|
125
|
-
unless member
|
126
|
-
return "Member #{string} not found.\n"
|
127
|
-
end
|
128
|
-
msg << "Email: #{member.email}\nMime: "
|
129
|
-
if member.mime
|
130
|
-
msg << member.mime.downcase
|
131
|
-
else
|
132
|
-
msg << "#{Schleuder.list.config.default_mime.downcase} (list-default)"
|
133
|
-
end
|
134
|
-
msg << "\n\n"
|
135
|
-
keys = mail.crypt.list_keys(member.email)
|
136
|
-
if keys.empty?
|
137
|
-
msg << "*Warning*: No key!\n\n"
|
138
|
-
else
|
139
|
-
if keys.size > 1
|
140
|
-
msg << "*Warning*: Multiple keys!\n\n"
|
141
|
-
end
|
142
|
-
msg << "Key(s):\n\n"
|
143
|
-
keys.each do |key|
|
144
|
-
msg << "#{key.to_s}Fingerprint: #{key.subkeys.first.fpr}\n\n"
|
145
|
-
end
|
146
|
-
end
|
147
|
-
msg
|
148
|
-
end
|
149
|
-
|
150
|
-
private
|
151
|
-
def get_membersfile
|
152
|
-
File.read(Schleuder.list.members_file)
|
153
|
-
end
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module Schleuder
|
2
|
-
class ManageSelfPlugin < Plugin
|
3
|
-
def initialize
|
4
|
-
@plugin_type = :request
|
5
|
-
end
|
6
|
-
|
7
|
-
def unsubscribe(mail, foo)
|
8
|
-
Schleuder.log.debug 'UNSUBSCRIBE requested'
|
9
|
-
msg = ''
|
10
|
-
|
11
|
-
key = Plugin.signing_key(mail)
|
12
|
-
member = Schleuder.list.find_member_by_key(key) || Schleuder.list.find_admin_by_key(key)
|
13
|
-
|
14
|
-
members = Schleuder.list.members.dup
|
15
|
-
members.delete_if {|mem| mem.email.eql?(member.email)}
|
16
|
-
|
17
|
-
if Schleuder.list.members = members
|
18
|
-
msg << "Your address #{member.email} hast been unsubscribed.\n"
|
19
|
-
else
|
20
|
-
msg = "Something failed. Please ask the maintainer of this list to figure out what\nhappened (e.g. by mailing to #{Schleuder.list.owner_addr}).\n"
|
21
|
-
end
|
22
|
-
msg
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
26
|
-
end
|
data/plugins/resend_plugin.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
module Schleuder
|
2
|
-
class ResendPlugin < Plugin
|
3
|
-
def initialize
|
4
|
-
@plugin_type = :list
|
5
|
-
end
|
6
|
-
|
7
|
-
def resend(mail, value)
|
8
|
-
store_address(mail, value, false)
|
9
|
-
end
|
10
|
-
|
11
|
-
def resend_encrypted_only(mail, value)
|
12
|
-
store_address(mail, value, true)
|
13
|
-
end
|
14
|
-
|
15
|
-
def store_address(mail, value, encrypted_only)
|
16
|
-
if mail.to.to_a.include? Schleuder.list.request_addr
|
17
|
-
msg = "The resend-command may only be used in message sent over the list, not messages sent to the request-address."
|
18
|
-
Schleuder.log.warn msg
|
19
|
-
return msg.fmt
|
20
|
-
end
|
21
|
-
if Utils.emailaddress? value
|
22
|
-
m = Member.new({'email' => value})
|
23
|
-
if encrypted_only
|
24
|
-
m.encrypted_only = true
|
25
|
-
end
|
26
|
-
mail.resend_to << m
|
27
|
-
else
|
28
|
-
Schleuder.log.warn "Skipping invalid email address given with resend-keyword: #{value}"
|
29
|
-
mail.metadata[:error] << "Invalid address given: '#{value}'."
|
30
|
-
end
|
31
|
-
mail
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
35
|
-
end
|
data/plugins/sign_this_plugin.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
# Clearsigns the incoming body and sends the signed text back.
|
2
|
-
# Useful if the public key of a list is widely known: Let schleuder sign e.g.
|
3
|
-
# the fingerprints of your email servers certificates, and publish them online.
|
4
|
-
module Schleuder
|
5
|
-
class SignThisPlugin < Plugin
|
6
|
-
def initialize
|
7
|
-
@plugin_type = :request
|
8
|
-
end
|
9
|
-
|
10
|
-
def sign_this(mail)
|
11
|
-
mail.crypt.clearsign(mail.body)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
data/plugins/version_plugin.rb
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
module Schleuder
|
2
|
-
class VersionPlugin < Plugin
|
3
|
-
def initialize
|
4
|
-
@plugin_type = :request
|
5
|
-
end
|
6
|
-
|
7
|
-
def get_version(mail, value)
|
8
|
-
require 'schleuder/version'
|
9
|
-
"This list runs on schleuder v#{Schleuder::VERSION}.\n\nFor documentation see <http://schleuder.nadir.org/documentation.html>"
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
metadata.gz.sig
DELETED
Binary file
|