module AWS::S3::Client::Validators
def dns_compatible_bucket_name?(bucket_name)
-
(Boolean)
- Returns true if the given bucket name may be
def dns_compatible_bucket_name?(bucket_name) return false if !valid_bucket_name?(bucket_name) or # Bucket names should be between 3 and 63 characters long bucket_name.size > 63 or # Bucket names must only contain lowercase letters, numbers, dots, and dashes # and must start and end with a lowercase letter or a number bucket_name !~ /^[a-z0-9][a-z0-9.-]+[a-z0-9]$/ or # Bucket names should not be formatted like an IP address (e.g., 192.168.5.4) bucket_name =~ /(\d+\.){3}\d+/ or # Bucket names cannot contain two, adjacent periods bucket_name['..'] or # Bucket names cannot contain dashes next to periods # (e.g., "my-.bucket.com" and "my.-bucket" are invalid) (bucket_name['-.'] || bucket_name['.-']) true end
def json_validation_message(obj)
def json_validation_message(obj) if obj.respond_to?(:to_str) obj = obj.to_str elsif obj.respond_to?(:to_json) obj = obj.to_json end error = nil begin JSON.parse(obj) rescue => e error = e end "contains invalid JSON: #{error}" if error end
def path_style_bucket_name? bucket_name
-
(Boolean)
- Returns true if the bucket name should be used
def path_style_bucket_name? bucket_name if dns_compatible_bucket_name?(bucket_name) bucket_name =~ /\./ ? true : false else true end end
def require_acl! options
def require_acl! options acl_options = [ :acl, :grant_read, :grant_write, :grant_read_acp, :grant_write_acp, :grant_full_control, :access_control_policy, ] unless options.keys.any?{|opt| acl_options.include?(opt) } msg = "missing a required ACL option, must provide an ACL " + "via :acl, :grant_* or :access_control_policy" raise ArgumentError, msg end end
def require_allowed_methods!(allowed_methods)
def require_allowed_methods!(allowed_methods) validate!("allowed_methods", allowed_methods) do if !allowed_methods.kind_of?(Array) "must be an array" elsif !allowed_methods.all? { |x| x.kind_of?(String) } "must be an array of strings" end end end
def require_allowed_origins!(allowed_origins)
def require_allowed_origins!(allowed_origins) validate!("allowed_origins", allowed_origins) do if !allowed_origins.kind_of?(Array) "must be an array" elsif !allowed_origins.all? { |x| x.kind_of?(String) } "must be an array of strings" end end end
def require_bucket_name! bucket_name
def require_bucket_name! bucket_name if [nil, ''].include?(bucket_name) raise ArgumentError, "bucket_name may not be blank" end end
def require_part_number! part_number
def require_part_number! part_number validate!("part_number", part_number) do "must not be blank" if part_number.to_s.empty? end end
def require_policy!(policy)
def require_policy!(policy) validate!('policy', policy) do case when policy.nil? || policy == '' 'may not be blank' else json_validation_message(policy) end end end
def require_upload_id!(upload_id)
def require_upload_id!(upload_id) validate!("upload_id", upload_id) do "must not be blank" if upload_id.to_s.empty? end end
def set_body_stream_and_content_length request, options
def set_body_stream_and_content_length request, options unless options[:content_length] msg = "S3 requires a content-length header, unable to determine " msg << "the content length of the data provided, please set " msg << ":content_length" raise ArgumentError, msg end request.headers['content-length'] = options[:content_length] request.body_stream = options[:data] end
def valid_bucket_name?(bucket_name)
-
(Boolean)
- Returns true if the given bucket name is valid.
def valid_bucket_name?(bucket_name) validate_bucket_name!(bucket_name) rescue false end
def validate! name, value, &block
def validate! name, value, &block if error_msg = yield raise ArgumentError, "#{name} #{error_msg}" end value end
def validate_bucket_name!(bucket_name)
Returns true if the given bucket name is valid. If the name
def validate_bucket_name!(bucket_name) validate!('bucket_name', bucket_name) do case when bucket_name.nil? || bucket_name == '' 'may not be blank' when bucket_name !~ /^[A-Za-z0-9._\-]+$/ 'may only contain uppercase letters, lowercase letters, numbers, periods (.), ' + 'underscores (_), and dashes (-)' when !(3..255).include?(bucket_name.size) 'must be between 3 and 255 characters long' when bucket_name =~ /\n/ 'must not contain a newline character' end end end
def validate_key!(key)
def validate_key!(key) validate!('key', key) do case when key.nil? || key == '' 'may not be blank' end end end
def validate_parts!(parts)
def validate_parts!(parts) validate!("parts", parts) do if !parts.kind_of?(Array) "must not be blank" elsif parts.empty? "must contain at least one entry" elsif !parts.all? { |p| p.kind_of?(Hash) } "must be an array of hashes" elsif !parts.all? { |p| p[:part_number] } "must contain part_number for each part" elsif !parts.all? { |p| p[:etag] } "must contain etag for each part" elsif parts.any? { |p| p[:part_number].to_i < 1 } "must not have part numbers less than 1" end end end