Sha256: 23406c35446f1fd8be7e110601ef224db7493663b06b954b8341b2eef19db9a8

Contents?: true

Size: 1.54 KB

Versions: 31

Compression:

Stored size: 1.54 KB

Contents

# encoding: utf-8
require "stud/temporary"
require "socket"
require "fileutils"

module LogStash
  module Outputs
    class S3
      class WriteBucketPermissionValidator
        attr_reader :logger

        def initialize(logger)
          @logger = logger
        end

        def valid?(bucket_resource, upload_options = {})
          begin
            upload_test_file(bucket_resource, upload_options)
            true
          rescue StandardError => e
            logger.error("Error validating bucket write permissions!",
              :message => e.message,
              :class => e.class.name,
              :backtrace => e.backtrace
              )
            false
          end
        end

        private
        def upload_test_file(bucket_resource, upload_options = {})
          generated_at = Time.now

          key = "logstash-programmatic-access-test-object-#{generated_at}"
          content = "Logstash permission check on #{generated_at}, by #{Socket.gethostname}"

          begin
            f = Stud::Temporary.file
            f.write(content)
            f.fsync

            obj = bucket_resource.object(key)
            obj.upload_file(f, upload_options)

            begin
              obj.delete
            rescue
              # Try to remove the files on the remote bucket,
              # but don't raise any errors if that doesn't work.
              # since we only really need `putobject`.
            end
          ensure
            f.close
            FileUtils.rm_rf(f.path)
          end
        end
      end
    end
  end
end

Version data entries

31 entries across 31 versions & 3 rubygems

Version Path
logstash-integration-aws-7.1.8-java lib/logstash/outputs/s3/write_bucket_permission_validator.rb
logstash-integration-aws-7.1.7-java lib/logstash/outputs/s3/write_bucket_permission_validator.rb
logstash-output-s3-zst-1.1.0 lib/logstash/outputs/s3/write_bucket_permission_validator.rb
logstash-output-s3-zst-1.0.0 lib/logstash/outputs/s3/write_bucket_permission_validator.rb
logstash-integration-aws-7.1.6-java lib/logstash/outputs/s3/write_bucket_permission_validator.rb
logstash-integration-aws-7.1.5-java lib/logstash/outputs/s3/write_bucket_permission_validator.rb
logstash-integration-aws-7.1.4-java lib/logstash/outputs/s3/write_bucket_permission_validator.rb
logstash-integration-aws-7.1.3-java lib/logstash/outputs/s3/write_bucket_permission_validator.rb
logstash-integration-aws-7.1.2-java lib/logstash/outputs/s3/write_bucket_permission_validator.rb
logstash-integration-aws-7.1.1-java lib/logstash/outputs/s3/write_bucket_permission_validator.rb
logstash-integration-aws-7.1.0 lib/logstash/outputs/s3/write_bucket_permission_validator.rb
logstash-integration-aws-7.0.1 lib/logstash/outputs/s3/write_bucket_permission_validator.rb
logstash-output-s3-4.4.1 lib/logstash/outputs/s3/write_bucket_permission_validator.rb
logstash-integration-aws-7.0.0 lib/logstash/outputs/s3/write_bucket_permission_validator.rb
logstash-output-s3-4.4.0 lib/logstash/outputs/s3/write_bucket_permission_validator.rb
logstash-output-s3-4.3.7 lib/logstash/outputs/s3/write_bucket_permission_validator.rb
logstash-output-s3-4.3.6 lib/logstash/outputs/s3/write_bucket_permission_validator.rb
logstash-integration-aws-0.1.0.pre lib/logstash/outputs/s3/write_bucket_permission_validator.rb
logstash-output-s3-4.3.5 lib/logstash/outputs/s3/write_bucket_permission_validator.rb
logstash-output-s3-4.3.4 lib/logstash/outputs/s3/write_bucket_permission_validator.rb