schleuder 4.0.1 → 4.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +5 -16
- data/Rakefile +3 -0
- data/db/schema.rb +12 -12
- data/lib/schleuder.rb +4 -1
- data/lib/schleuder/cli.rb +0 -1
- data/lib/schleuder/gpgme/ctx.rb +1 -33
- data/lib/schleuder/logger.rb +1 -1
- data/lib/schleuder/mail/{encrypted_part.rb → gpg/encrypted_part.rb} +0 -0
- data/lib/schleuder/mail/gpg/sign_part.rb +33 -0
- data/lib/schleuder/version.rb +1 -1
- metadata +73 -59
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9f8275838177195ab78283d9c737de9cbd2d39e816c9f41db2e31d785d787dd8
|
4
|
+
data.tar.gz: 464e220965c5d0ee43d300a1f988e7a27edd9344d751bae9e06a9a02fc5c2a43
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d6ba6aab5c19ae0f8f74a0fe44e84e5a10f4adf434f55454a1d7ca49943557fbad5db23ff06fee1a3e0efa5a248034f8a6a17dcbeb91864bf04ec68f8cd14d1f
|
7
|
+
data.tar.gz: bd361a32b63c6bcfa146e1369a45fa54e9c3c94d29baaefbbff01a1629b468c896a34c17cd6ff957357eaf67611a5b09b5c2b2d9a023130430a86f29892b19cb
|
data/README.md
CHANGED
@@ -16,21 +16,10 @@ Requirements
|
|
16
16
|
* openssl
|
17
17
|
* icu
|
18
18
|
|
19
|
-
*If you use Debian buster
|
20
|
-
|
21
|
-
*🛈 A note regarding Ubuntu: All Ubuntu versions up to and including 17.10 don't meet the requirements with their packaged versions of gnupg! To run Schleuder on Ubuntu you currently have to install a more recent version of gnupg manually. Only Ubuntu 18.04 ("bionic") provides modern enough versions of Schleuder's requirements.*
|
22
|
-
|
23
|
-
On systems that base on Debian 10 ("buster"), install the dependencies via
|
24
|
-
|
25
|
-
apt-get install ruby-dev gnupg2 libgpgme-dev libsqlite3-dev libssl-dev build-essential libicu-dev
|
26
|
-
|
19
|
+
*If you use Debian buster, CentOS 7 or Archlinux, please have a look at the [installation docs](https://schleuder.org/schleuder/docs/server-admins.html#installation). We do provide packages for those platforms, which simplify the installation a lot.*
|
27
20
|
|
28
21
|
We **recommend** to also run a random number generator like [haveged](http://www.issihosts.com/haveged/). This ensures Schleuder won't be blocked by lacking entropy, which otherwise might happen especially during key generation.
|
29
22
|
|
30
|
-
On Debian based systems, install it via
|
31
|
-
|
32
|
-
apt-get install haveged
|
33
|
-
|
34
23
|
|
35
24
|
Additionally these **rubygems** are required (will be installed automatically unless present):
|
36
25
|
|
@@ -47,15 +36,15 @@ Additionally these **rubygems** are required (will be installed automatically un
|
|
47
36
|
Installing Schleuder
|
48
37
|
------------
|
49
38
|
|
50
|
-
1. Download [the gem](https://schleuder.org/download/schleuder-4.0.
|
39
|
+
1. Download [the gem](https://schleuder.org/download/schleuder-4.0.2.gem) and [the OpenPGP-signature](https://schleuder.org/download/schleuder-4.0.2.gem.sig) and verify:
|
51
40
|
```
|
52
41
|
gpg --recv-key 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3
|
53
|
-
gpg --verify schleuder-4.0.
|
42
|
+
gpg --verify schleuder-4.0.2.gem.sig
|
54
43
|
```
|
55
44
|
|
56
45
|
2. If all went well install the gem:
|
57
46
|
```
|
58
|
-
gem install schleuder-4.0.
|
47
|
+
gem install schleuder-4.0.2.gem
|
59
48
|
```
|
60
49
|
|
61
50
|
3. Set up schleuder:
|
@@ -145,4 +134,4 @@ GNU GPL 3.0. Please see [LICENSE.txt](LICENSE.txt).
|
|
145
134
|
Alternative Download
|
146
135
|
--------------------
|
147
136
|
|
148
|
-
Alternatively to the gem-files you can download the latest release as [a tarball](https://schleuder.org/download/schleuder-4.0.
|
137
|
+
Alternatively to the gem-files you can download the latest release as [a tarball](https://schleuder.org/download/schleuder-4.0.2.tar.gz) and [its OpenPGP-signature](https://schleuder.org/download/schleuder-4.0.2.tar.gz.sig).
|
data/Rakefile
CHANGED
@@ -7,6 +7,9 @@ require_relative "lib/#{project}.rb"
|
|
7
7
|
@filename_gem = "#{@tagname}.gem"
|
8
8
|
@filename_tarball = "#{@tagname}.tar.gz"
|
9
9
|
|
10
|
+
# Make ActiveRecord's tasks usable for us (without this, those tasks try to run
|
11
|
+
# in the "default_env" environment, which is not configured).
|
12
|
+
ENV['RACK_ENV'] ||= ENV['SCHLEUDER_ENV']
|
10
13
|
load 'active_record/railties/databases.rake'
|
11
14
|
|
12
15
|
# Configure ActiveRecord
|
data/db/schema.rb
CHANGED
@@ -2,8 +2,8 @@
|
|
2
2
|
# of editing this file, please use the migrations feature of Active Record to
|
3
3
|
# incrementally modify your database, and then regenerate this schema definition.
|
4
4
|
#
|
5
|
-
# This file is the source Rails uses to define your schema when running `rails
|
6
|
-
# db:schema:load`. When creating a new database, `rails db:schema:load` tends to
|
5
|
+
# This file is the source Rails uses to define your schema when running `bin/rails
|
6
|
+
# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
|
7
7
|
# be faster and is potentially less error prone than running all of your
|
8
8
|
# migrations from scratch. Old migrations may fail to apply correctly if those
|
9
9
|
# migrations use external dependencies or application code.
|
@@ -15,13 +15,13 @@ ActiveRecord::Schema.define(version: 2020_01_18_170110) do
|
|
15
15
|
create_table "lists", force: :cascade do |t|
|
16
16
|
t.datetime "created_at"
|
17
17
|
t.datetime "updated_at"
|
18
|
-
t.string "email"
|
19
|
-
t.string "fingerprint"
|
20
|
-
t.string "log_level",
|
21
|
-
t.string "subject_prefix",
|
22
|
-
t.string "subject_prefix_in",
|
23
|
-
t.string "subject_prefix_out",
|
24
|
-
t.string "openpgp_header_preference",
|
18
|
+
t.string "email"
|
19
|
+
t.string "fingerprint"
|
20
|
+
t.string "log_level", default: "warn"
|
21
|
+
t.string "subject_prefix", default: ""
|
22
|
+
t.string "subject_prefix_in", default: ""
|
23
|
+
t.string "subject_prefix_out", default: ""
|
24
|
+
t.string "openpgp_header_preference", default: "signencrypt"
|
25
25
|
t.text "public_footer", default: ""
|
26
26
|
t.text "headers_to_meta", default: "[\"from\", \"to\", \"cc\", \"date\", \"sig\", \"enc\"]"
|
27
27
|
t.text "bounces_drop_on_headers", default: "{\"x-spam-flag\":\"yes\"}"
|
@@ -39,7 +39,7 @@ ActiveRecord::Schema.define(version: 2020_01_18_170110) do
|
|
39
39
|
t.boolean "include_list_headers", default: true
|
40
40
|
t.boolean "include_openpgp_header", default: true
|
41
41
|
t.integer "max_message_size_kb", default: 10240
|
42
|
-
t.string "language",
|
42
|
+
t.string "language", default: "en"
|
43
43
|
t.boolean "forward_all_incoming_to_admins", default: false
|
44
44
|
t.integer "logfiles_to_keep", default: 2
|
45
45
|
t.text "internal_footer", default: ""
|
@@ -51,8 +51,8 @@ ActiveRecord::Schema.define(version: 2020_01_18_170110) do
|
|
51
51
|
|
52
52
|
create_table "subscriptions", force: :cascade do |t|
|
53
53
|
t.integer "list_id"
|
54
|
-
t.string "email"
|
55
|
-
t.string "fingerprint"
|
54
|
+
t.string "email"
|
55
|
+
t.string "fingerprint"
|
56
56
|
t.boolean "admin", default: false
|
57
57
|
t.boolean "delivery_enabled", default: true
|
58
58
|
t.datetime "created_at"
|
data/lib/schleuder.rb
CHANGED
@@ -6,6 +6,7 @@
|
|
6
6
|
Encoding.default_external = Encoding::UTF_8
|
7
7
|
|
8
8
|
# Stdlib
|
9
|
+
require 'etc'
|
9
10
|
require 'fileutils'
|
10
11
|
require 'singleton'
|
11
12
|
require 'yaml'
|
@@ -13,6 +14,7 @@ require 'pathname'
|
|
13
14
|
require 'syslog/logger'
|
14
15
|
require 'logger'
|
15
16
|
require 'open3'
|
17
|
+
require 'socket'
|
16
18
|
|
17
19
|
# Require mandatory libs. The database-layer-lib is required below.
|
18
20
|
require 'mail-gpg'
|
@@ -32,7 +34,8 @@ $:.unshift libdir
|
|
32
34
|
require 'schleuder/mail/parts_list.rb'
|
33
35
|
require 'schleuder/mail/message.rb'
|
34
36
|
require 'schleuder/mail/gpg.rb'
|
35
|
-
require 'schleuder/mail/encrypted_part.rb'
|
37
|
+
require 'schleuder/mail/gpg/encrypted_part.rb'
|
38
|
+
require 'schleuder/mail/gpg/sign_part.rb'
|
36
39
|
require 'schleuder/gpgme/import_status.rb'
|
37
40
|
require 'schleuder/gpgme/key.rb'
|
38
41
|
require 'schleuder/gpgme/sub_key.rb'
|
data/lib/schleuder/cli.rb
CHANGED
@@ -70,7 +70,6 @@ module Schleuder
|
|
70
70
|
|
71
71
|
desc 'refresh_keys [list1@example.com]', 'Refresh all keys of all list from the keyservers sequentially (one by one or on the passed list). (This is supposed to be run from cron or systemd weekly.)'
|
72
72
|
def refresh_keys(list=nil)
|
73
|
-
GPGME::Ctx.send_notice_if_gpg_does_not_know_import_filter
|
74
73
|
work_on_lists(:refresh_keys, list)
|
75
74
|
permission_notice
|
76
75
|
end
|
data/lib/schleuder/gpgme/ctx.rb
CHANGED
@@ -134,7 +134,6 @@ module GPGME
|
|
134
134
|
arguments, error = fetch_key_gpg_arguments_for(input)
|
135
135
|
return error if error
|
136
136
|
|
137
|
-
self.class.send_notice_if_gpg_does_not_know_import_filter
|
138
137
|
gpgerr, gpgout, exitcode = self.class.gpgcli("#{import_filter_arg} #{arguments}")
|
139
138
|
|
140
139
|
# Unfortunately gpg doesn't exit with code > 0 if `--fetch-key` fails.
|
@@ -229,21 +228,6 @@ module GPGME
|
|
229
228
|
raise 'Need gpg in $PATH or in $GPGBIN'
|
230
229
|
end
|
231
230
|
|
232
|
-
def self.spawn_daemon(name, args)
|
233
|
-
delete_daemon_socket(name)
|
234
|
-
cmd = "#{name} #{args} --daemon > /dev/null 2>&1"
|
235
|
-
if ! system(cmd)
|
236
|
-
return [false, "#{name} exited with code #{$?}"]
|
237
|
-
end
|
238
|
-
end
|
239
|
-
|
240
|
-
def self.delete_daemon_socket(name)
|
241
|
-
path = File.join(ENV['GNUPGHOME'], "S.#{name}")
|
242
|
-
if File.exist?(path)
|
243
|
-
File.delete(path)
|
244
|
-
end
|
245
|
-
end
|
246
|
-
|
247
231
|
def keyserver_arg
|
248
232
|
if Conf.keyserver.present?
|
249
233
|
"--keyserver #{Conf.keyserver}"
|
@@ -252,24 +236,8 @@ module GPGME
|
|
252
236
|
end
|
253
237
|
end
|
254
238
|
|
255
|
-
def self.gpg_knows_import_filter?
|
256
|
-
sufficient_gpg_version?('2.1.15')
|
257
|
-
end
|
258
|
-
|
259
239
|
def import_filter_arg
|
260
|
-
|
261
|
-
%{ --import-filter drop-sig='sig_created_d > 0000-00-00'}
|
262
|
-
end
|
263
|
-
end
|
264
|
-
|
265
|
-
def self.send_notice_if_gpg_does_not_know_import_filter
|
266
|
-
if ! gpg_knows_import_filter?
|
267
|
-
Schleuder.logger.notify_superadmin(
|
268
|
-
subject: 'Schleuder installation problem',
|
269
|
-
message: "Your version of GnuPG is very old, please update!\n\nWith your version of GnuPG we can not protect your setup against signature flooding. Please update to at least version 2.1.15 to fix this problem. See <https://dkg.fifthhorseman.net/blog/openpgp-certificate-flooding.html> for details on the background."
|
270
|
-
)
|
271
|
-
''
|
272
|
-
end
|
240
|
+
%{ --import-filter drop-sig='sig_created_d > 0000-00-00'}
|
273
241
|
end
|
274
242
|
end
|
275
243
|
end
|
data/lib/schleuder/logger.rb
CHANGED
@@ -9,7 +9,7 @@ module Schleuder
|
|
9
9
|
def initialize
|
10
10
|
super('Schleuder', Syslog::LOG_MAIL)
|
11
11
|
# We need some sender-address different from the superadmin-address.
|
12
|
-
@from = "#{
|
12
|
+
@from = "#{Etc.getlogin}@#{Socket.gethostname}"
|
13
13
|
@adminaddresses = Conf.superadmin
|
14
14
|
@level = ::Logger.const_get(Conf.log_level.upcase)
|
15
15
|
end
|
File without changes
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Mail
|
2
|
+
module Gpg
|
3
|
+
class SignPart < Mail::Part
|
4
|
+
# Copied verbatim from mail-gpg v.0.4.2. This code was changed in
|
5
|
+
# <https://github.com/jkraemer/mail-gpg/commit/5fded41ccee4a58f848a2f8e7bd53d11236f8984>,
|
6
|
+
# which breaks verifying some encapsulated (signed-then-encrypted)
|
7
|
+
# messages. See
|
8
|
+
# <https://github.com/jkraemer/mail-gpg/pull/40#issue-95776382> for
|
9
|
+
# details.
|
10
|
+
def self.verify_signature(plain_part, signature_part, options = {})
|
11
|
+
if !(signature_part.has_content_type? &&
|
12
|
+
('application/pgp-signature' == signature_part.mime_type))
|
13
|
+
return false
|
14
|
+
end
|
15
|
+
|
16
|
+
# Work around the problem that plain_part.raw_source prefixes an
|
17
|
+
# erroneous CRLF, <https://github.com/mikel/mail/issues/702>.
|
18
|
+
if ! plain_part.raw_source.empty?
|
19
|
+
plaintext = [ plain_part.header.raw_source,
|
20
|
+
"\r\n\r\n",
|
21
|
+
plain_part.body.raw_source
|
22
|
+
].join
|
23
|
+
else
|
24
|
+
plaintext = plain_part.encoded
|
25
|
+
end
|
26
|
+
|
27
|
+
signature = signature_part.body.encoded
|
28
|
+
GpgmeHelper.sign_verify(plaintext, signature, options)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
data/lib/schleuder/version.rb
CHANGED
metadata
CHANGED
@@ -1,119 +1,119 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: schleuder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.
|
4
|
+
version: 4.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- schleuder dev team
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
20
|
-
- - ">="
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 2.0.19
|
19
|
+
version: 6.1.3
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
24
|
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
30
|
-
- - ">="
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: 2.0.19
|
26
|
+
version: 6.1.3
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
|
-
name:
|
28
|
+
name: bcrypt
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
36
30
|
requirements:
|
37
31
|
- - "~>"
|
38
32
|
- !ruby/object:Gem::Version
|
39
|
-
version:
|
33
|
+
version: 3.1.2
|
40
34
|
type: :runtime
|
41
35
|
prerelease: false
|
42
36
|
version_requirements: !ruby/object:Gem::Requirement
|
43
37
|
requirements:
|
44
38
|
- - "~>"
|
45
39
|
- !ruby/object:Gem::Version
|
46
|
-
version:
|
40
|
+
version: 3.1.2
|
47
41
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
42
|
+
name: charlock_holmes
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|
50
44
|
requirements:
|
51
45
|
- - "~>"
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
47
|
+
version: 0.7.6
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
51
|
requirements:
|
58
52
|
- - "~>"
|
59
53
|
- !ruby/object:Gem::Version
|
60
|
-
version:
|
54
|
+
version: 0.7.6
|
61
55
|
- !ruby/object:Gem::Dependency
|
62
|
-
name:
|
56
|
+
name: gpgme
|
63
57
|
requirement: !ruby/object:Gem::Requirement
|
64
58
|
requirements:
|
65
59
|
- - "~>"
|
66
60
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
61
|
+
version: '2.0'
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: 2.0.19
|
68
65
|
type: :runtime
|
69
66
|
prerelease: false
|
70
67
|
version_requirements: !ruby/object:Gem::Requirement
|
71
68
|
requirements:
|
72
69
|
- - "~>"
|
73
70
|
- !ruby/object:Gem::Version
|
74
|
-
version:
|
71
|
+
version: '2.0'
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 2.0.19
|
75
75
|
- !ruby/object:Gem::Dependency
|
76
|
-
name:
|
76
|
+
name: mail
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
79
|
- - "~>"
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version:
|
81
|
+
version: 2.7.1
|
82
82
|
type: :runtime
|
83
83
|
prerelease: false
|
84
84
|
version_requirements: !ruby/object:Gem::Requirement
|
85
85
|
requirements:
|
86
86
|
- - "~>"
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
version:
|
88
|
+
version: 2.7.1
|
89
89
|
- !ruby/object:Gem::Dependency
|
90
|
-
name:
|
90
|
+
name: mail-gpg
|
91
91
|
requirement: !ruby/object:Gem::Requirement
|
92
92
|
requirements:
|
93
|
-
- - "
|
93
|
+
- - "~>"
|
94
94
|
- !ruby/object:Gem::Version
|
95
|
-
version:
|
95
|
+
version: '0.3'
|
96
96
|
type: :runtime
|
97
97
|
prerelease: false
|
98
98
|
version_requirements: !ruby/object:Gem::Requirement
|
99
99
|
requirements:
|
100
|
-
- - "
|
100
|
+
- - "~>"
|
101
101
|
- !ruby/object:Gem::Version
|
102
|
-
version:
|
102
|
+
version: '0.3'
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
|
-
name:
|
104
|
+
name: rake
|
105
105
|
requirement: !ruby/object:Gem::Requirement
|
106
106
|
requirements:
|
107
|
-
- - "
|
107
|
+
- - ">="
|
108
108
|
- !ruby/object:Gem::Version
|
109
|
-
version:
|
109
|
+
version: 10.5.0
|
110
110
|
type: :runtime
|
111
111
|
prerelease: false
|
112
112
|
version_requirements: !ruby/object:Gem::Requirement
|
113
113
|
requirements:
|
114
|
-
- - "
|
114
|
+
- - ">="
|
115
115
|
- !ruby/object:Gem::Version
|
116
|
-
version:
|
116
|
+
version: 10.5.0
|
117
117
|
- !ruby/object:Gem::Dependency
|
118
118
|
name: sinatra
|
119
119
|
requirement: !ruby/object:Gem::Requirement
|
@@ -143,19 +143,19 @@ dependencies:
|
|
143
143
|
- !ruby/object:Gem::Version
|
144
144
|
version: '2'
|
145
145
|
- !ruby/object:Gem::Dependency
|
146
|
-
name:
|
146
|
+
name: sqlite3
|
147
147
|
requirement: !ruby/object:Gem::Requirement
|
148
148
|
requirements:
|
149
149
|
- - "~>"
|
150
150
|
- !ruby/object:Gem::Version
|
151
|
-
version:
|
151
|
+
version: 1.4.2
|
152
152
|
type: :runtime
|
153
153
|
prerelease: false
|
154
154
|
version_requirements: !ruby/object:Gem::Requirement
|
155
155
|
requirements:
|
156
156
|
- - "~>"
|
157
157
|
- !ruby/object:Gem::Version
|
158
|
-
version:
|
158
|
+
version: 1.4.2
|
159
159
|
- !ruby/object:Gem::Dependency
|
160
160
|
name: thin
|
161
161
|
requirement: !ruby/object:Gem::Requirement
|
@@ -171,47 +171,47 @@ dependencies:
|
|
171
171
|
- !ruby/object:Gem::Version
|
172
172
|
version: '1'
|
173
173
|
- !ruby/object:Gem::Dependency
|
174
|
-
name:
|
174
|
+
name: thor
|
175
175
|
requirement: !ruby/object:Gem::Requirement
|
176
176
|
requirements:
|
177
177
|
- - "~>"
|
178
178
|
- !ruby/object:Gem::Version
|
179
|
-
version: 0
|
179
|
+
version: '0'
|
180
180
|
type: :runtime
|
181
181
|
prerelease: false
|
182
182
|
version_requirements: !ruby/object:Gem::Requirement
|
183
183
|
requirements:
|
184
184
|
- - "~>"
|
185
185
|
- !ruby/object:Gem::Version
|
186
|
-
version: 0
|
186
|
+
version: '0'
|
187
187
|
- !ruby/object:Gem::Dependency
|
188
|
-
name:
|
188
|
+
name: byebug
|
189
189
|
requirement: !ruby/object:Gem::Requirement
|
190
190
|
requirements:
|
191
191
|
- - "~>"
|
192
192
|
- !ruby/object:Gem::Version
|
193
|
-
version: '
|
193
|
+
version: '10'
|
194
194
|
type: :development
|
195
195
|
prerelease: false
|
196
196
|
version_requirements: !ruby/object:Gem::Requirement
|
197
197
|
requirements:
|
198
198
|
- - "~>"
|
199
199
|
- !ruby/object:Gem::Version
|
200
|
-
version: '
|
200
|
+
version: '10'
|
201
201
|
- !ruby/object:Gem::Dependency
|
202
|
-
name:
|
202
|
+
name: database_cleaner
|
203
203
|
requirement: !ruby/object:Gem::Requirement
|
204
204
|
requirements:
|
205
205
|
- - "~>"
|
206
206
|
- !ruby/object:Gem::Version
|
207
|
-
version: '0'
|
207
|
+
version: '2.0'
|
208
208
|
type: :development
|
209
209
|
prerelease: false
|
210
210
|
version_requirements: !ruby/object:Gem::Requirement
|
211
211
|
requirements:
|
212
212
|
- - "~>"
|
213
213
|
- !ruby/object:Gem::Version
|
214
|
-
version: '0'
|
214
|
+
version: '2.0'
|
215
215
|
- !ruby/object:Gem::Dependency
|
216
216
|
name: factory_bot
|
217
217
|
requirement: !ruby/object:Gem::Requirement
|
@@ -227,31 +227,31 @@ dependencies:
|
|
227
227
|
- !ruby/object:Gem::Version
|
228
228
|
version: '6.0'
|
229
229
|
- !ruby/object:Gem::Dependency
|
230
|
-
name:
|
230
|
+
name: hirb
|
231
231
|
requirement: !ruby/object:Gem::Requirement
|
232
232
|
requirements:
|
233
233
|
- - "~>"
|
234
234
|
- !ruby/object:Gem::Version
|
235
|
-
version: '
|
235
|
+
version: '0'
|
236
236
|
type: :development
|
237
237
|
prerelease: false
|
238
238
|
version_requirements: !ruby/object:Gem::Requirement
|
239
239
|
requirements:
|
240
240
|
- - "~>"
|
241
241
|
- !ruby/object:Gem::Version
|
242
|
-
version: '
|
242
|
+
version: '0'
|
243
243
|
- !ruby/object:Gem::Dependency
|
244
|
-
name:
|
244
|
+
name: irb
|
245
245
|
requirement: !ruby/object:Gem::Requirement
|
246
246
|
requirements:
|
247
|
-
- - "
|
247
|
+
- - ">="
|
248
248
|
- !ruby/object:Gem::Version
|
249
249
|
version: '0'
|
250
250
|
type: :development
|
251
251
|
prerelease: false
|
252
252
|
version_requirements: !ruby/object:Gem::Requirement
|
253
253
|
requirements:
|
254
|
-
- - "
|
254
|
+
- - ">="
|
255
255
|
- !ruby/object:Gem::Version
|
256
256
|
version: '0'
|
257
257
|
- !ruby/object:Gem::Dependency
|
@@ -268,6 +268,20 @@ dependencies:
|
|
268
268
|
- - "~>"
|
269
269
|
- !ruby/object:Gem::Version
|
270
270
|
version: '1'
|
271
|
+
- !ruby/object:Gem::Dependency
|
272
|
+
name: rspec
|
273
|
+
requirement: !ruby/object:Gem::Requirement
|
274
|
+
requirements:
|
275
|
+
- - "~>"
|
276
|
+
- !ruby/object:Gem::Version
|
277
|
+
version: '3'
|
278
|
+
type: :development
|
279
|
+
prerelease: false
|
280
|
+
version_requirements: !ruby/object:Gem::Requirement
|
281
|
+
requirements:
|
282
|
+
- - "~>"
|
283
|
+
- !ruby/object:Gem::Version
|
284
|
+
version: '3'
|
271
285
|
- !ruby/object:Gem::Dependency
|
272
286
|
name: rubocop
|
273
287
|
requirement: !ruby/object:Gem::Requirement
|
@@ -283,19 +297,19 @@ dependencies:
|
|
283
297
|
- !ruby/object:Gem::Version
|
284
298
|
version: '1'
|
285
299
|
- !ruby/object:Gem::Dependency
|
286
|
-
name:
|
300
|
+
name: simplecov-console
|
287
301
|
requirement: !ruby/object:Gem::Requirement
|
288
302
|
requirements:
|
289
303
|
- - "~>"
|
290
304
|
- !ruby/object:Gem::Version
|
291
|
-
version: '
|
305
|
+
version: '0'
|
292
306
|
type: :development
|
293
307
|
prerelease: false
|
294
308
|
version_requirements: !ruby/object:Gem::Requirement
|
295
309
|
requirements:
|
296
310
|
- - "~>"
|
297
311
|
- !ruby/object:Gem::Version
|
298
|
-
version: '
|
312
|
+
version: '0'
|
299
313
|
description: |-
|
300
314
|
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.
|
301
315
|
|
@@ -404,8 +418,9 @@ files:
|
|
404
418
|
- lib/schleuder/listlogger.rb
|
405
419
|
- lib/schleuder/logger.rb
|
406
420
|
- lib/schleuder/logger_notifications.rb
|
407
|
-
- lib/schleuder/mail/encrypted_part.rb
|
408
421
|
- lib/schleuder/mail/gpg.rb
|
422
|
+
- lib/schleuder/mail/gpg/encrypted_part.rb
|
423
|
+
- lib/schleuder/mail/gpg/sign_part.rb
|
409
424
|
- lib/schleuder/mail/message.rb
|
410
425
|
- lib/schleuder/mail/parts_list.rb
|
411
426
|
- lib/schleuder/runner.rb
|
@@ -445,9 +460,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
445
460
|
- !ruby/object:Gem::Version
|
446
461
|
version: '0'
|
447
462
|
requirements: []
|
448
|
-
|
449
|
-
|
450
|
-
signing_key:
|
463
|
+
rubygems_version: 3.2.21
|
464
|
+
signing_key:
|
451
465
|
specification_version: 4
|
452
466
|
summary: Schleuder is an encrypting mailing list manager with remailing-capabilities.
|
453
467
|
test_files: []
|