schleuder 4.0.1 → 4.0.2
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.
- 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: []
         |