class AwsS3BucketObject

author: Matthew Dromazos

def fetch_from_api

def fetch_from_api
  backend = BackendFactory.create(inspec_runner)
  catch_aws_errors do
    begin
      # Just use get_object to detect if the bucket exists
      backend.get_object(bucket: bucket_name, key: key)
    rescue Aws::S3::Errors::NoSuchBucket
      @exists = false
      return
    rescue Aws::S3::Errors::NoSuchKey
      @exists = false
      return
    end
  end
  @exists = true
end

def object_acl

def object_acl
  return @object_acl if defined? @object_acl
  catch_aws_errors do
    @object_acl = BackendFactory.create(inspec_runner).get_object_acl(bucket: bucket_name, key: key).grants
  end
  @object_acl
end

def public?

RSpec will alias this to be_public
def public?
  # first line just for formatting
  false || \
    object_acl.any? { |g| g.grantee.type == 'Group' && g.grantee.uri =~ /AllUsers/ } || \
    object_acl.any? { |g| g.grantee.type == 'Group' && g.grantee.uri =~ /AuthenticatedUsers/ }
end

def to_s

def to_s
  # keep the format that aws uses.
  "s3://#{@bucket_name}/#{@key}"
end

def validate_params(raw_params)

def validate_params(raw_params)
  validated_params = check_resource_param_names(
    raw_params: raw_params,
    allowed_params: [:bucket_name, :key, :id],
  )
  if validated_params.empty? or !validated_params.key?(:bucket_name) or !validated_params.key?(:key)
    raise ArgumentError, 'You must provide a bucket_name and key to aws_s3_bucket_object.'
  end
  validated_params
end