Module: AWS::S3::Client::Validators
- Included in:
- AWS::S3::Client, AWS::S3::Client
- Defined in:
- lib/aws/s3/client.rb
Instance Method Summary collapse
-
#dns_compatible_bucket_name?(bucket_name) ⇒ Boolean
Returns true if the given
bucket_name
is DNS compatible. - #json_validation_message(obj) ⇒ Object
-
#path_style_bucket_name?(bucket_name) ⇒ Boolean
Returns true if the bucket name must be used in the request path instead of as a sub-domain when making requests against S3.
- #require_acl!(options) ⇒ Object
- #require_bucket_name!(bucket_name) ⇒ Object
- #require_part_number!(part_number) ⇒ Object
- #require_policy!(policy) ⇒ Object
- #require_upload_id!(upload_id) ⇒ Object
- #set_body_stream_and_content_length(request, options) ⇒ Object
-
#valid_bucket_name?(bucket_name) ⇒ Boolean
Returns true if the given bucket name is valid.
- #validate!(name, value, &block) ⇒ Object
-
#validate_bucket_name!(bucket_name) ⇒ Object
Returns true if the given bucket name is valid.
- #validate_key!(key) ⇒ Object
- #validate_parts!(parts) ⇒ Object
Instance Method Details
#dns_compatible_bucket_name?(bucket_name) ⇒ Boolean
Returns true if the given bucket_name
is DNS compatible.
DNS compatible bucket names may be accessed like:
http://dns.compat.bucket.name.s3.amazonaws.com/
Whereas non-dns compatible bucket names must place the bucket name in the url path, like:
http://s3.amazonaws.com/dns_incompat_bucket_name/
1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 |
# File 'lib/aws/s3/client.rb', line 1216 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 |
#json_validation_message(obj) ⇒ Object
1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 |
# File 'lib/aws/s3/client.rb', line 1377 def (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 |
#path_style_bucket_name?(bucket_name) ⇒ Boolean
Returns true if the bucket name must be used in the request path instead of as a sub-domain when making requests against S3.
This can be an issue if the bucket name is DNS compatible but contains ‘.’ (periods). These cause the SSL certificate to become invalid when making authenticated requets over SSL to the bucket name. The solution is to send this as a path argument instead.
1253 1254 1255 1256 1257 1258 1259 |
# File 'lib/aws/s3/client.rb', line 1253 def path_style_bucket_name? bucket_name if dns_compatible_bucket_name?(bucket_name) bucket_name =~ /\./ ? true : false else true end end |
#require_acl!(options) ⇒ Object
1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 |
# File 'lib/aws/s3/client.rb', line 1316 def require_acl! = [ :acl, :grant_read, :grant_write, :grant_read_acp, :grant_write_acp, :grant_full_control, :access_control_policy, ] unless .keys.any?{|opt| .include?(opt) } msg = "missing a required ACL option, must provide an ACL " + "via :acl, :grant_* or :access_control_policy" raise ArgumentError, msg end end |
#require_bucket_name!(bucket_name) ⇒ Object
1277 1278 1279 1280 1281 |
# File 'lib/aws/s3/client.rb', line 1277 def require_bucket_name! bucket_name if [nil, ''].include?(bucket_name) raise ArgumentError, "bucket_name may not be blank" end end |
#require_part_number!(part_number) ⇒ Object
1353 1354 1355 1356 1357 |
# File 'lib/aws/s3/client.rb', line 1353 def require_part_number! part_number validate!("part_number", part_number) do "must not be blank" if part_number.to_s.empty? end end |
#require_policy!(policy) ⇒ Object
1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 |
# File 'lib/aws/s3/client.rb', line 1305 def require_policy!(policy) validate!('policy', policy) do case when policy.nil? || policy == '' 'may not be blank' else (policy) end end end |
#require_upload_id!(upload_id) ⇒ Object
1347 1348 1349 1350 1351 |
# File 'lib/aws/s3/client.rb', line 1347 def require_upload_id!(upload_id) validate!("upload_id", upload_id) do "must not be blank" if upload_id.to_s.empty? end end |
#set_body_stream_and_content_length(request, options) ⇒ Object
1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 |
# File 'lib/aws/s3/client.rb', line 1333 def set_body_stream_and_content_length request, unless [: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'] = [:content_length] request.body_stream = [:data] end |
#valid_bucket_name?(bucket_name) ⇒ Boolean
Returns true if the given bucket name is valid.
1197 1198 1199 |
# File 'lib/aws/s3/client.rb', line 1197 def valid_bucket_name?(bucket_name) validate_bucket_name!(bucket_name) rescue false end |
#validate!(name, value, &block) ⇒ Object
1261 1262 1263 1264 1265 1266 |
# File 'lib/aws/s3/client.rb', line 1261 def validate! name, value, &block if error_msg = yield raise ArgumentError, "#{name} #{error_msg}" end value end |
#validate_bucket_name!(bucket_name) ⇒ Object
Returns true if the given bucket name is valid. If the name is invalid, an ArgumentError is raised.
1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 |
# File 'lib/aws/s3/client.rb', line 1285 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 |
#validate_key!(key) ⇒ Object
1268 1269 1270 1271 1272 1273 1274 1275 |
# File 'lib/aws/s3/client.rb', line 1268 def validate_key!(key) validate!('key', key) do case when key.nil? || key == '' 'may not be blank' end end end |
#validate_parts!(parts) ⇒ Object
1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 |
# File 'lib/aws/s3/client.rb', line 1359 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 |