schleuder 2.2.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.
- data.tar.gz.sig +0 -0
- data/LICENSE +339 -0
- data/README +32 -0
- data/bin/schleuder +96 -0
- data/bin/schleuder-fix-gem-dependencies +30 -0
- data/bin/schleuder-init-setup +37 -0
- data/bin/schleuder-migrate-v2.1-to-v2.2 +205 -0
- data/bin/schleuder-newlist +384 -0
- data/contrib/check-expired-keys.rb +59 -0
- data/contrib/mutt-schleuder-colors.rc +10 -0
- data/contrib/mutt-schleuder-resend.vim +24 -0
- data/contrib/smtpserver.rb +76 -0
- data/ext/default-list.conf +146 -0
- data/ext/default-members.conf +7 -0
- data/ext/list.conf.example +14 -0
- data/ext/schleuder.conf +62 -0
- data/lib/schleuder.rb +49 -0
- data/lib/schleuder/archiver.rb +46 -0
- data/lib/schleuder/crypt.rb +188 -0
- data/lib/schleuder/errors.rb +5 -0
- data/lib/schleuder/list.rb +177 -0
- data/lib/schleuder/list_config.rb +146 -0
- data/lib/schleuder/log/listlogger.rb +56 -0
- data/lib/schleuder/log/outputter/emailoutputter.rb +118 -0
- data/lib/schleuder/log/outputter/metaemailoutputter.rb +50 -0
- data/lib/schleuder/log/schleuderlogger.rb +23 -0
- data/lib/schleuder/mail.rb +861 -0
- data/lib/schleuder/mailer.rb +26 -0
- data/lib/schleuder/member.rb +69 -0
- data/lib/schleuder/plugin.rb +54 -0
- data/lib/schleuder/processor.rb +363 -0
- data/lib/schleuder/schleuder_config.rb +72 -0
- data/lib/schleuder/storage.rb +84 -0
- data/lib/schleuder/utils.rb +80 -0
- data/lib/schleuder/version.rb +3 -0
- data/man/schleuder-newlist.8 +191 -0
- data/man/schleuder.8 +400 -0
- data/plugins/README +20 -0
- data/plugins/manage_keys_plugin.rb +113 -0
- data/plugins/manage_members_plugin.rb +152 -0
- data/plugins/manage_self_plugin.rb +26 -0
- data/plugins/resend_plugin.rb +35 -0
- data/plugins/version_plugin.rb +12 -0
- metadata +178 -0
- metadata.gz.sig +2 -0
data/plugins/README
ADDED
@@ -0,0 +1,20 @@
|
|
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.
|
@@ -0,0 +1,113 @@
|
|
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
|
+
|
@@ -0,0 +1,152 @@
|
|
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
|
+
# TODO: test if address already subscribed
|
83
|
+
Schleuder.list.members = Schleuder.list.members << mem
|
84
|
+
msg = "#{mem}\n--> Member saved.\n\n"
|
85
|
+
if key
|
86
|
+
mail.crypt.add_key(key).imports.each do |i|
|
87
|
+
msg << "#{mail.crypt.key_descr(mail.crypt.get_key(i.fpr))}\n"
|
88
|
+
if i.status.eql? 1
|
89
|
+
msg << "--> Key imported.\n\n"
|
90
|
+
else
|
91
|
+
msg << "--> Key *not* imported (no error, maybe already present?).\n\n"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
msg << "\n"
|
95
|
+
end
|
96
|
+
msg << "Updated members-list:\n\n#{_list_members(mail)}"
|
97
|
+
msg
|
98
|
+
end
|
99
|
+
|
100
|
+
def deletemember(mail, string)
|
101
|
+
msg = ''
|
102
|
+
members = Schleuder.list.members.dup
|
103
|
+
members.delete_if {|mem| mem.email.eql?(string)}
|
104
|
+
if members.eql? Schleuder.list.members
|
105
|
+
msg << "Member #{string} not found"
|
106
|
+
else
|
107
|
+
if Schleuder.list.members = members
|
108
|
+
msg << "Member #{string} deleted.\n"
|
109
|
+
else
|
110
|
+
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"
|
111
|
+
end
|
112
|
+
end
|
113
|
+
msg << "\nUpdated members-list:\n\n#{_list_members(mail)}\n"
|
114
|
+
msg
|
115
|
+
end
|
116
|
+
|
117
|
+
def getmember(mail, string)
|
118
|
+
Schleuder.log.debug "string: #{string.inspect}"
|
119
|
+
msg = ''
|
120
|
+
member = Schleuder.list.find_member_by_email string
|
121
|
+
unless member
|
122
|
+
return "Member #{string} not found.\n"
|
123
|
+
end
|
124
|
+
msg << "Email: #{member.email}\nMime: "
|
125
|
+
if member.mime
|
126
|
+
msg << member.mime.downcase
|
127
|
+
else
|
128
|
+
msg << "#{Schleuder.list.config.default_mime.downcase} (list-default)"
|
129
|
+
end
|
130
|
+
msg << "\n\n"
|
131
|
+
keys = mail.crypt.list_keys(member.email)
|
132
|
+
if keys.empty?
|
133
|
+
msg << "*Warning*: No key!\n\n"
|
134
|
+
else
|
135
|
+
if keys.size > 1
|
136
|
+
msg << "*Warning*: Multiple keys!\n\n"
|
137
|
+
end
|
138
|
+
msg << "Key(s):\n\n"
|
139
|
+
keys.each do |key|
|
140
|
+
msg << "#{key.to_s}Fingerprint: #{key.subkeys.first.fpr}\n\n"
|
141
|
+
end
|
142
|
+
end
|
143
|
+
msg
|
144
|
+
end
|
145
|
+
|
146
|
+
private
|
147
|
+
def get_membersfile
|
148
|
+
File.read(Schleuder.list.members_file)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
@@ -0,0 +1,26 @@
|
|
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
|
@@ -0,0 +1,35 @@
|
|
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
|
@@ -0,0 +1,12 @@
|
|
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
ADDED
@@ -0,0 +1,178 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: schleuder
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.2.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- paz
|
9
|
+
- ng
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain:
|
13
|
+
- !binary |-
|
14
|
+
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUROakNDQWg2Z0F3SUJB
|
15
|
+
Z0lCQURBTkJna3Foa2lHOXcwQkFRVUZBREJCTVJNd0VRWURWUVFEREFwelky
|
16
|
+
aHMKWlhWa1pYSXlNUlV3RXdZS0NaSW1pWlB5TEdRQkdSWUZibUZrYVhJeEV6
|
17
|
+
QVJCZ29Ka2lhSmsvSXNaQUVaRmdOdgpjbWN3SGhjTk1USXdOakEyTVRreE5E
|
18
|
+
STBXaGNOTVRNd05qQTJNVGt4TkRJMFdqQkJNUk13RVFZRFZRUUREQXB6Clky
|
19
|
+
aHNaWFZrWlhJeU1SVXdFd1lLQ1pJbWlaUHlMR1FCR1JZRmJtRmthWEl4RXpB
|
20
|
+
UkJnb0praWFKay9Jc1pBRVoKRmdOdmNtY3dnZ0VpTUEwR0NTcUdTSWIzRFFF
|
21
|
+
QkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDaEdydW9ObnEzSXI3ZApGZCtrdEcw
|
22
|
+
dE1abG0yWlNPa3VITzVRUnJnWUxnYkJocFRFZjhpNkFqem9WTDBBSUMrdU1N
|
23
|
+
Vlk5aUU2ZnphS1VECkI3U3ZOdGNjSHNrWDZ6SFVWVnRTcUY5VnBiUW9tV3Bj
|
24
|
+
azBpQnF3UUl3NHZFTGUyaVorL1pVTEtJSkkvQlk0M3kKdFg3T3JhOGl6U3lQ
|
25
|
+
R2N1NkUxZnI1UEpJNmlnRm5sRWdzL2pDalAvSllIZi9mNDlmbkl6QUpnTzBR
|
26
|
+
N1lOTkpWcgpSMFpxbTFIYllFMnQrUnRvbVQyamdDakJ0RjQyaFg4K2dCNHlW
|
27
|
+
NW5lZGZIS3laZkQ2emQ3ZG9QRS9wZHRwbjgwCkJyUlFiSFhsRVBEQ2FkSEgw
|
28
|
+
MTNqN29MN0I1ZkpsSGVqWDZQRmZQdGVwcTNhZERRL08zbEZ2emZIdUpVR2pF
|
29
|
+
TzUKUVhwN2w1K2ZBZ01CQUFHak9UQTNNQWtHQTFVZEV3UUNNQUF3SFFZRFZS
|
30
|
+
ME9CQllFRklHMUc1UHhBMWxOL0JVWQprb212bHRzT1dDVGVNQXNHQTFVZER3
|
31
|
+
UUVBd0lFc0RBTkJna3Foa2lHOXcwQkFRVUZBQU9DQVFFQWtrTDRWWVhPCmlI
|
32
|
+
YzQ5bHFrMU9FL2IzWFZYWGdiQlZ1aHhvTkpYZC9oSjRlTmVxbVpydWMrZDlX
|
33
|
+
bEJIYTlVVFRGZ3JmUkxOcmsKSkRaSnc5Y3E5NmI0TmxsaG54Q2xpZ21SZXQ0
|
34
|
+
RkpmYWVtYS9naTZZN0lWRmZMUG5nVVhDUGN1SUNGOXBKd05HcwpLSUVndEE1
|
35
|
+
TmNVMitJZFpLekowRnBoV3pIRlRpVytMd1Uyb0lTTEhwTXhXZVhZSXNLTW9x
|
36
|
+
MjM4U3k3Y1l3emQ3CnZhZEhrZHMzNTRsbU4vajNhYW1kTXJyeHUyOTlvdTh1
|
37
|
+
am9IbGcxK3IxNjlsa2J1VHdXbEI2RlVXT1J3emhvMWIKOFlJWWRpT29jUHdm
|
38
|
+
Zi9BZ3l3UVdGZDRGV2VNV0xQeXRkK1VndzZCSmZSSXY2VC9OTVJKWWRIUDJW
|
39
|
+
M1RTUVJyTApSYXNUTTVlUzIrK3EwQT09Ci0tLS0tRU5EIENFUlRJRklDQVRF
|
40
|
+
LS0tLS0K
|
41
|
+
date: 2012-06-06 00:00:00.000000000 Z
|
42
|
+
dependencies:
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: gpgme
|
45
|
+
requirement: &9959680 !ruby/object:Gem::Requirement
|
46
|
+
none: false
|
47
|
+
requirements:
|
48
|
+
- - =
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 1.0.8
|
51
|
+
type: :runtime
|
52
|
+
prerelease: false
|
53
|
+
version_requirements: *9959680
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: highline
|
56
|
+
requirement: &9957020 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.6.1
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: *9957020
|
65
|
+
- !ruby/object:Gem::Dependency
|
66
|
+
name: log4r
|
67
|
+
requirement: &9955820 !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
69
|
+
requirements:
|
70
|
+
- - ! '>='
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 1.1.9
|
73
|
+
type: :runtime
|
74
|
+
prerelease: false
|
75
|
+
version_requirements: *9955820
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: ruby-filemagic
|
78
|
+
requirement: &10014620 !ruby/object:Gem::Requirement
|
79
|
+
none: false
|
80
|
+
requirements:
|
81
|
+
- - ! '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 0.4.2
|
84
|
+
type: :runtime
|
85
|
+
prerelease: false
|
86
|
+
version_requirements: *10014620
|
87
|
+
description: ! 'Schleuder is designed as a tool for group communication: subscribers
|
88
|
+
can communicate encrypted (and pseudonymously) among themselves, receive emails
|
89
|
+
from non-subscribers and send emails to non-subscribers via the list.
|
90
|
+
|
91
|
+
|
92
|
+
Schleuder takes care of all decryption and encryption, stripping of headers, formatting
|
93
|
+
conversions, etc. Schleuder can also send out its own public key upon request and
|
94
|
+
process administrative commands by email.'
|
95
|
+
email: schleuder2@nadir.org
|
96
|
+
executables:
|
97
|
+
- schleuder
|
98
|
+
- schleuder-newlist
|
99
|
+
- schleuder-fix-gem-dependencies
|
100
|
+
- schleuder-init-setup
|
101
|
+
- schleuder-migrate-v2.1-to-v2.2
|
102
|
+
extensions: []
|
103
|
+
extra_rdoc_files: []
|
104
|
+
files:
|
105
|
+
- contrib/check-expired-keys.rb
|
106
|
+
- contrib/mutt-schleuder-colors.rc
|
107
|
+
- contrib/mutt-schleuder-resend.vim
|
108
|
+
- contrib/smtpserver.rb
|
109
|
+
- ext/default-list.conf
|
110
|
+
- ext/default-members.conf
|
111
|
+
- ext/list.conf.example
|
112
|
+
- ext/schleuder.conf
|
113
|
+
- lib/schleuder.rb
|
114
|
+
- lib/schleuder/archiver.rb
|
115
|
+
- lib/schleuder/crypt.rb
|
116
|
+
- lib/schleuder/errors.rb
|
117
|
+
- lib/schleuder/list.rb
|
118
|
+
- lib/schleuder/list_config.rb
|
119
|
+
- lib/schleuder/log/listlogger.rb
|
120
|
+
- lib/schleuder/log/outputter/emailoutputter.rb
|
121
|
+
- lib/schleuder/log/outputter/metaemailoutputter.rb
|
122
|
+
- lib/schleuder/log/schleuderlogger.rb
|
123
|
+
- lib/schleuder/mail.rb
|
124
|
+
- lib/schleuder/mailer.rb
|
125
|
+
- lib/schleuder/member.rb
|
126
|
+
- lib/schleuder/plugin.rb
|
127
|
+
- lib/schleuder/processor.rb
|
128
|
+
- lib/schleuder/schleuder_config.rb
|
129
|
+
- lib/schleuder/storage.rb
|
130
|
+
- lib/schleuder/utils.rb
|
131
|
+
- lib/schleuder/version.rb
|
132
|
+
- plugins/README
|
133
|
+
- plugins/manage_keys_plugin.rb
|
134
|
+
- plugins/manage_members_plugin.rb
|
135
|
+
- plugins/manage_self_plugin.rb
|
136
|
+
- plugins/resend_plugin.rb
|
137
|
+
- plugins/version_plugin.rb
|
138
|
+
- README
|
139
|
+
- LICENSE
|
140
|
+
- man/schleuder.8
|
141
|
+
- man/schleuder-newlist.8
|
142
|
+
- !binary |-
|
143
|
+
YmluL3NjaGxldWRlcg==
|
144
|
+
- !binary |-
|
145
|
+
YmluL3NjaGxldWRlci1uZXdsaXN0
|
146
|
+
- !binary |-
|
147
|
+
YmluL3NjaGxldWRlci1maXgtZ2VtLWRlcGVuZGVuY2llcw==
|
148
|
+
- !binary |-
|
149
|
+
YmluL3NjaGxldWRlci1pbml0LXNldHVw
|
150
|
+
- !binary |-
|
151
|
+
YmluL3NjaGxldWRlci1taWdyYXRlLXYyLjEtdG8tdjIuMg==
|
152
|
+
homepage: http://schleuder2.nadir.org
|
153
|
+
licenses: []
|
154
|
+
post_install_message: ! "\n\n Note: There's still one dependency missing, which
|
155
|
+
we can't install in\n this run of rubygems. Please execute schleuder-fix-gem-dependencies
|
156
|
+
to\n complete the installation!\n\n"
|
157
|
+
rdoc_options: []
|
158
|
+
require_paths:
|
159
|
+
- lib
|
160
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
162
|
+
requirements:
|
163
|
+
- - ! '>='
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
167
|
+
none: false
|
168
|
+
requirements:
|
169
|
+
- - ! '>='
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '0'
|
172
|
+
requirements: []
|
173
|
+
rubyforge_project: ! '[none]'
|
174
|
+
rubygems_version: 1.8.11
|
175
|
+
signing_key:
|
176
|
+
specification_version: 3
|
177
|
+
summary: Schleuder is a gpg-enabled mailinglist with remailer-capabilities.
|
178
|
+
test_files: []
|