Sha256: a4ca605ba2a02635fb6699307204d5128914a807052347a4695726ac63498d12

Contents?: true

Size: 1.43 KB

Versions: 3

Compression:

Stored size: 1.43 KB

Contents

module S3Secure::Summary
  class Items < S3Secure::CLI::Base
    extend Memoist

    # override initialize
    def initialize(options, buckets)
      @options, @buckets = options, buckets
      @ssl, @encrypted = @options[:ssl], @options[:encrypted]
    end

    def filtered_items
      items = all_items.select do |item|
        case @ssl
        when "yes", "no"
          @ssl == item.ssl
        else # any or fallback
          true
        end
      end

      items.select do |item|
        case @encrypted
        when "yes", "no"
          @encrypted == item.encrypted
        else # any or fallback
          true
        end
      end
    end

    # Triggers loading of items
    def all_items
      load_items!
    end

    def load_items!
      @buckets.map do |bucket|
        Item.new(bucket,
                 ssl: ssl?(bucket) ? "yes" : "no",
                 encrypted: encrypted?(bucket) ? "yes" : "no")
      end
    end
    memoize :load_items!

  private
    def ssl?(bucket)
      show = S3Secure::Policy::Show.new(@options.merge(bucket: bucket))

      bucket_policy = show.run
      document = S3Secure::Policy::Document.new(bucket, bucket_policy)
      document.has?("ForceSSLOnlyAccess")
    end
    memoize :ssl?

    def encrypted?(bucket)
      s3 = s3_regional_client(bucket)
      show = S3Secure::Encryption::Show.new(@options.merge(bucket: bucket))

      rules = show.run
      !!rules
    end
    memoize :encrypted?
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
s3-secure-0.7.0 lib/s3_secure/summary/items.rb
s3-secure-0.6.1 lib/s3_secure/summary/items.rb
s3-secure-0.6.0 lib/s3_secure/summary/items.rb