schleuder 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|