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 not contain underscores (_) bucket_name["_"] or # Bucket names should be between 3 and 63 characters long bucket_name.size > 63 or # Bucket names should not end with a dash bucket_name[-1,1] == '-' 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!(acl)
def require_acl!(acl) validate!('acl', acl) do case when acl.kind_of?(Hash) AccessControlList.new(acl).validate! nil when !acl.respond_to?(:to_str) && !acl.respond_to?(:to_xml) "must support to_xml: #{acl.inspect}" when acl.nil? || acl == '' 'may not be blank' else xml_validation_message(acl) 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_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 valid_bucket_name?(bucket_name)
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)
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-z0-9._\-]+$/ 'may only contain lowercase letters, numbers, periods (.), ' + 'underscores (_), and dashes (-)' when bucket_name !~ /^[a-z0-9]/ 'must start with a letter or a number' when !(3..255).include?(bucket_name.size) 'must be between 3 and 255 characters long' when bucket_name =~ /(\d+\.){3}\d+/ 'must not be formatted like an IP address (e.g., 192.168.5.4)' 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
def xml_validation_message(obj)
def xml_validation_message(obj) if obj.respond_to?(:to_str) obj = obj.to_str elsif obj.respond_to?(:to_xml) obj = obj.to_xml end error = nil begin REXML::Document.new(obj) rescue => e error = e end "contains invalid XML: #{error}" if error end