fog-internet-archive 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +53 -0
  3. data/.travis.yml +16 -0
  4. data/Gemfile +3 -0
  5. data/README.md +6 -0
  6. data/Rakefile +19 -0
  7. data/fog-internet-archive.gemspec +32 -0
  8. data/lib/fog/bin/internet_archive.rb +32 -0
  9. data/lib/fog/internet_archive.rb +1 -0
  10. data/lib/fog/internet_archive/core.rb +291 -0
  11. data/lib/fog/internet_archive/models/storage/directories.rb +39 -0
  12. data/lib/fog/internet_archive/models/storage/directory.rb +105 -0
  13. data/lib/fog/internet_archive/models/storage/file.rb +254 -0
  14. data/lib/fog/internet_archive/models/storage/files.rb +119 -0
  15. data/lib/fog/internet_archive/models/storage/ia_attributes.rb +36 -0
  16. data/lib/fog/internet_archive/parsers/storage/access_control_list.rb +42 -0
  17. data/lib/fog/internet_archive/parsers/storage/complete_multipart_upload.rb +20 -0
  18. data/lib/fog/internet_archive/parsers/storage/copy_object.rb +18 -0
  19. data/lib/fog/internet_archive/parsers/storage/cors_configuration.rb +38 -0
  20. data/lib/fog/internet_archive/parsers/storage/delete_multiple_objects.rb +45 -0
  21. data/lib/fog/internet_archive/parsers/storage/get_bucket.rb +58 -0
  22. data/lib/fog/internet_archive/parsers/storage/get_bucket_lifecycle.rb +64 -0
  23. data/lib/fog/internet_archive/parsers/storage/get_bucket_location.rb +16 -0
  24. data/lib/fog/internet_archive/parsers/storage/get_bucket_logging.rb +36 -0
  25. data/lib/fog/internet_archive/parsers/storage/get_bucket_website.rb +22 -0
  26. data/lib/fog/internet_archive/parsers/storage/get_request_payment.rb +16 -0
  27. data/lib/fog/internet_archive/parsers/storage/get_service.rb +28 -0
  28. data/lib/fog/internet_archive/parsers/storage/initiate_multipart_upload.rb +20 -0
  29. data/lib/fog/internet_archive/parsers/storage/list_multipart_uploads.rb +52 -0
  30. data/lib/fog/internet_archive/parsers/storage/list_parts.rb +36 -0
  31. data/lib/fog/internet_archive/requests/storage/abort_multipart_upload.rb +27 -0
  32. data/lib/fog/internet_archive/requests/storage/acl_utils.rb +60 -0
  33. data/lib/fog/internet_archive/requests/storage/complete_multipart_upload.rb +46 -0
  34. data/lib/fog/internet_archive/requests/storage/copy_object.rb +77 -0
  35. data/lib/fog/internet_archive/requests/storage/cors_utils.rb +39 -0
  36. data/lib/fog/internet_archive/requests/storage/delete_bucket.rb +42 -0
  37. data/lib/fog/internet_archive/requests/storage/delete_bucket_cors.rb +26 -0
  38. data/lib/fog/internet_archive/requests/storage/delete_bucket_lifecycle.rb +26 -0
  39. data/lib/fog/internet_archive/requests/storage/delete_bucket_policy.rb +26 -0
  40. data/lib/fog/internet_archive/requests/storage/delete_bucket_website.rb +26 -0
  41. data/lib/fog/internet_archive/requests/storage/delete_multiple_objects.rb +88 -0
  42. data/lib/fog/internet_archive/requests/storage/delete_object.rb +46 -0
  43. data/lib/fog/internet_archive/requests/storage/get_bucket.rb +108 -0
  44. data/lib/fog/internet_archive/requests/storage/get_bucket_acl.rb +65 -0
  45. data/lib/fog/internet_archive/requests/storage/get_bucket_cors.rb +61 -0
  46. data/lib/fog/internet_archive/requests/storage/get_bucket_lifecycle.rb +35 -0
  47. data/lib/fog/internet_archive/requests/storage/get_bucket_location.rb +54 -0
  48. data/lib/fog/internet_archive/requests/storage/get_bucket_logging.rb +45 -0
  49. data/lib/fog/internet_archive/requests/storage/get_bucket_policy.rb +31 -0
  50. data/lib/fog/internet_archive/requests/storage/get_bucket_website.rb +38 -0
  51. data/lib/fog/internet_archive/requests/storage/get_object.rb +163 -0
  52. data/lib/fog/internet_archive/requests/storage/get_object_acl.rb +72 -0
  53. data/lib/fog/internet_archive/requests/storage/get_object_http_url.rb +48 -0
  54. data/lib/fog/internet_archive/requests/storage/get_object_https_url.rb +30 -0
  55. data/lib/fog/internet_archive/requests/storage/get_object_torrent.rb +45 -0
  56. data/lib/fog/internet_archive/requests/storage/get_object_url.rb +49 -0
  57. data/lib/fog/internet_archive/requests/storage/get_request_payment.rb +45 -0
  58. data/lib/fog/internet_archive/requests/storage/get_service.rb +50 -0
  59. data/lib/fog/internet_archive/requests/storage/head_object.rb +57 -0
  60. data/lib/fog/internet_archive/requests/storage/initiate_multipart_upload.rb +42 -0
  61. data/lib/fog/internet_archive/requests/storage/list_multipart_uploads.rb +52 -0
  62. data/lib/fog/internet_archive/requests/storage/list_parts.rb +53 -0
  63. data/lib/fog/internet_archive/requests/storage/post_object_hidden_fields.rb +36 -0
  64. data/lib/fog/internet_archive/requests/storage/put_bucket.rb +70 -0
  65. data/lib/fog/internet_archive/requests/storage/put_bucket_acl.rb +69 -0
  66. data/lib/fog/internet_archive/requests/storage/put_bucket_cors.rb +47 -0
  67. data/lib/fog/internet_archive/requests/storage/put_bucket_lifecycle.rb +76 -0
  68. data/lib/fog/internet_archive/requests/storage/put_bucket_logging.rb +79 -0
  69. data/lib/fog/internet_archive/requests/storage/put_bucket_policy.rb +25 -0
  70. data/lib/fog/internet_archive/requests/storage/put_bucket_website.rb +59 -0
  71. data/lib/fog/internet_archive/requests/storage/put_object.rb +94 -0
  72. data/lib/fog/internet_archive/requests/storage/put_object_acl.rb +73 -0
  73. data/lib/fog/internet_archive/requests/storage/put_object_url.rb +43 -0
  74. data/lib/fog/internet_archive/requests/storage/put_request_payment.rb +45 -0
  75. data/lib/fog/internet_archive/requests/storage/sync_clock.rb +24 -0
  76. data/lib/fog/internet_archive/requests/storage/upload_part.rb +39 -0
  77. data/lib/fog/internet_archive/signaturev4.rb +71 -0
  78. data/lib/fog/internet_archive/storage.rb +381 -0
  79. data/lib/fog/internet_archive/version.rb +5 -0
  80. data/tasks/bundler.rake +3 -0
  81. data/tasks/console.rake +17 -0
  82. data/tasks/lint.rake +3 -0
  83. data/tasks/test.rake +7 -0
  84. data/tests/helper.rb +36 -0
  85. data/tests/helpers/collection_helper.rb +88 -0
  86. data/tests/helpers/formats_helper.rb +98 -0
  87. data/tests/helpers/formats_helper_tests.rb +106 -0
  88. data/tests/helpers/mock_helper.rb +13 -0
  89. data/tests/helpers/model_helper.rb +29 -0
  90. data/tests/helpers/responds_to_helper.rb +11 -0
  91. data/tests/helpers/schema_validator_tests.rb +101 -0
  92. data/tests/helpers/succeeds_helper.rb +9 -0
  93. data/tests/internet_archive/models/storage/directory_tests.rb +42 -0
  94. data/tests/internet_archive/models/storage/file_tests.rb +61 -0
  95. data/tests/internet_archive/models/storage/files_tests.rb +60 -0
  96. data/tests/internet_archive/models/storage/url_tests.rb +28 -0
  97. data/tests/internet_archive/requests/storage/acl_utils_tests.rb +209 -0
  98. data/tests/internet_archive/requests/storage/bucket_tests.rb +324 -0
  99. data/tests/internet_archive/requests/storage/cors_utils_tests.rb +108 -0
  100. data/tests/internet_archive/requests/storage/multipart_upload_tests.rb +132 -0
  101. data/tests/internet_archive/requests/storage/object_tests.rb +166 -0
  102. data/tests/internet_archive/signaturev4_tests.rb +41 -0
  103. data/tests/internet_archive/signed_params_tests.rb +5 -0
  104. data/tests/lorem.txt +1 -0
  105. metadata +322 -0
@@ -0,0 +1,26 @@
1
+ module Fog
2
+ module Storage
3
+ class InternetArchive
4
+ class Real
5
+ # Delete policy for a bucket
6
+ #
7
+ # @param bucket_name [String] name of bucket to delete policy from
8
+ #
9
+ # @return [Excon::Response] response:
10
+ # * status [Integer] - 204
11
+ #
12
+ # @see http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketDELETEpolicy.html
13
+
14
+ def delete_bucket_policy(bucket_name)
15
+ request({
16
+ :expects => 204,
17
+ :headers => {},
18
+ :host => "#{bucket_name}.#{@host}",
19
+ :method => 'DELETE',
20
+ :query => {'policy' => nil}
21
+ })
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ module Fog
2
+ module Storage
3
+ class InternetArchive
4
+ class Real
5
+ # Delete website configuration for a bucket
6
+ #
7
+ # @param bucket_name [String] name of bucket to delete website configuration from
8
+ #
9
+ # @return [Excon::Response] response:
10
+ # * status [Integer] - 204
11
+ #
12
+ # @see http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketDELETEwebsite.html
13
+
14
+ def delete_bucket_website(bucket_name)
15
+ request({
16
+ :expects => 204,
17
+ :headers => {},
18
+ :host => "#{bucket_name}.#{@host}",
19
+ :method => 'DELETE',
20
+ :query => {'website' => nil}
21
+ })
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,88 @@
1
+ module Fog
2
+ module Storage
3
+ class InternetArchive
4
+ class Real
5
+ require 'fog/internet_archive/parsers/storage/delete_multiple_objects'
6
+
7
+ # Delete multiple objects from S3
8
+ # @note For versioned deletes, options should include a version_ids hash, which
9
+ # maps from filename to an array of versions.
10
+ # The semantics are that for each (object_name, version) tuple, the
11
+ # caller must insert the object_name and an associated version (if
12
+ # desired), so for n versions, the object must be inserted n times.
13
+ #
14
+ # @param bucket_name [String] Name of bucket containing object to delete
15
+ # @param object_names [Array] Array of object names to delete
16
+ #
17
+ # @return [Excon::Response] response:
18
+ # * body [Hash]:
19
+ # * DeleteResult [Array]:
20
+ # * Deleted [Hash]:
21
+ # * Key [String] - Name of the object that was deleted
22
+ # * VersionId [String] - ID for the versioned onject in case of a versioned delete
23
+ # * DeleteMarker [Boolean] - Indicates if the request accessed a delete marker
24
+ # * DeleteMarkerVersionId [String] - Version ID of the delete marker accessed
25
+ # * Error [Hash]:
26
+ # * Key [String] - Name of the object that failed to be deleted
27
+ # * VersionId [String] - ID of the versioned object that was attempted to be deleted
28
+ # * Code [String] - Status code for the result of the failed delete
29
+ # * Message [String] - Error description
30
+ #
31
+ # @see http://docs.amazonwebservices.com/AmazonS3/latest/API/multiobjectdeleteapi.html
32
+
33
+ def delete_multiple_objects(bucket_name, object_names, options = {})
34
+ data = "<Delete>"
35
+ data << "<Quiet>true</Quiet>" if options.delete(:quiet)
36
+ object_names.each do |object_name|
37
+ data << "<Object>"
38
+ data << "<Key>#{CGI.escapeHTML(object_name)}</Key>"
39
+ data << "</Object>"
40
+ end
41
+ data << "</Delete>"
42
+
43
+ headers = options
44
+ headers['Content-Length'] = data.length
45
+ headers['Content-MD5'] = Base64.encode64(Digest::MD5.digest(data)).
46
+ gsub("\n", '')
47
+
48
+ request({
49
+ :body => data,
50
+ :expects => 200,
51
+ :headers => headers,
52
+ :host => "#{bucket_name}.#{@host}",
53
+ :method => 'POST',
54
+ :parser => Fog::Parsers::Storage::InternetArchive::DeleteMultipleObjects.new,
55
+ :query => {'delete' => nil}
56
+ })
57
+ end
58
+ end
59
+
60
+ class Mock # :nodoc:all
61
+ def delete_multiple_objects(bucket_name, object_names, options = {})
62
+ response = Excon::Response.new
63
+ if bucket = self.data[:buckets][bucket_name]
64
+ response.status = 200
65
+ response.body = { 'DeleteResult' => [] }
66
+ object_names.each do |object_name|
67
+ response.body['DeleteResult'] << delete_object_helper(bucket,
68
+ object_name)
69
+ end
70
+ else
71
+ response.status = 404
72
+ raise(Excon::Errors.status_error({:expects => 200}, response))
73
+ end
74
+ response
75
+ end
76
+
77
+ private
78
+
79
+ def delete_object_helper(bucket, object_name)
80
+ response = { 'Deleted' => {} }
81
+ bucket[:objects].delete(object_name)
82
+ response['Deleted'] = { 'Key' => object_name }
83
+ response
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,46 @@
1
+ module Fog
2
+ module Storage
3
+ class InternetArchive
4
+ class Real
5
+ # Delete an object from S3
6
+ #
7
+ # @param bucket_name [String] Name of bucket containing object to delete
8
+ # @param object_name [String] Name of object to delete
9
+ #
10
+ # @return [Excon::Response] response:
11
+ # * status [Integer] - 204
12
+ #
13
+ # @see http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectDELETE.html
14
+
15
+ def delete_object(bucket_name, object_name, options = {})
16
+ path = CGI.escape(object_name)
17
+
18
+ headers = options
19
+ request({
20
+ :expects => 204,
21
+ :headers => headers,
22
+ :host => "#{bucket_name}.#{@host}",
23
+ :idempotent => true,
24
+ :method => 'DELETE',
25
+ :path => path
26
+ })
27
+ end
28
+ end
29
+
30
+ class Mock # :nodoc:all
31
+ def delete_object(bucket_name, object_name, options = {})
32
+ response = Excon::Response.new
33
+ if bucket = self.data[:buckets][bucket_name]
34
+ response.status = 204
35
+
36
+ bucket[:objects].delete(object_name)
37
+ else
38
+ response.status = 404
39
+ raise(Excon::Errors.status_error({:expects => 204}, response))
40
+ end
41
+ response
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,108 @@
1
+ module Fog
2
+ module Storage
3
+ class InternetArchive
4
+ class Real
5
+ require 'fog/internet_archive/parsers/storage/get_bucket'
6
+
7
+ # List information about objects in an S3 bucket
8
+ #
9
+ # @param bucket_name [String] name of bucket to list object keys from
10
+ # @param options [Hash] config arguments for list. Defaults to {}.
11
+ # @option options delimiter [String] causes keys with the same string between the prefix
12
+ # value and the first occurence of delimiter to be rolled up
13
+ # @option options marker [String] limits object keys to only those that appear
14
+ # lexicographically after its value.
15
+ # @option options max-keys [Integer] limits number of object keys returned
16
+ # @option options prefix [String] limits object keys to those beginning with its value.
17
+ #
18
+ # @return [Excon::Response] response:
19
+ # * body [Hash]:
20
+ # * Delimeter [String] - Delimiter specified for query
21
+ # * IsTruncated [Boolean] - Whether or not the listing is truncated
22
+ # * Marker [String]- Marker specified for query
23
+ # * MaxKeys [Integer] - Maximum number of keys specified for query
24
+ # * Name [String] - Name of the bucket
25
+ # * Prefix [String] - Prefix specified for query
26
+ # * CommonPrefixes [Array] - Array of strings for common prefixes
27
+ # * Contents [Array]:
28
+ # * ETag [String] - Etag of object
29
+ # * Key [String] - Name of object
30
+ # * LastModified [String] - Timestamp of last modification of object
31
+ # * Owner [Hash]:
32
+ # * DisplayName [String] - Display name of object owner
33
+ # * ID [String] - Id of object owner
34
+ # * Size [Integer] - Size of object
35
+ # * StorageClass [String] - Storage class of object
36
+ #
37
+ # @see http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGET.html
38
+
39
+ def get_bucket(bucket_name, options = {})
40
+ unless bucket_name
41
+ raise ArgumentError.new('bucket_name is required')
42
+ end
43
+ request({
44
+ :expects => 200,
45
+ :headers => {},
46
+ :host => "#{bucket_name}.#{@host}",
47
+ :idempotent => true,
48
+ :method => 'GET',
49
+ :parser => Fog::Parsers::Storage::InternetArchive::GetBucket.new,
50
+ :query => options
51
+ })
52
+ end
53
+ end
54
+
55
+ class Mock # :nodoc:all
56
+ def get_bucket(bucket_name, options = {})
57
+ prefix, marker, delimiter, max_keys = \
58
+ options['prefix'], options['marker'], options['delimiter'], options['max-keys']
59
+ common_prefixes = []
60
+
61
+ unless bucket_name
62
+ raise ArgumentError.new('bucket_name is required')
63
+ end
64
+ response = Excon::Response.new
65
+ if bucket = self.data[:buckets][bucket_name]
66
+ contents = bucket[:objects].values.map(&:first).sort {|x,y| x['Key'] <=> y['Key']}.reject do |object|
67
+ (prefix && object['Key'][0...prefix.length] != prefix) ||
68
+ (marker && object['Key'] <= marker) ||
69
+ (delimiter && object['Key'][(prefix ? prefix.length : 0)..-1].include?(delimiter) \
70
+ && common_prefixes << object['Key'].sub(/^(#{prefix}[^#{delimiter}]+.).*/, '\1')) ||
71
+ object.key?(:delete_marker)
72
+ end.map do |object|
73
+ data = object.reject {|key, value| !['ETag', 'Key', 'StorageClass'].include?(key)}
74
+ data.merge!({
75
+ 'LastModified' => Time.parse(object['Last-Modified']),
76
+ 'Owner' => bucket['Owner'],
77
+ 'Size' => object['Content-Length'].to_i
78
+ })
79
+ data
80
+ end
81
+ max_keys = max_keys || 1000
82
+ size = [max_keys, 1000].min
83
+ truncated_contents = contents[0...size]
84
+
85
+ response.status = 200
86
+ response.body = {
87
+ 'CommonPrefixes' => common_prefixes.uniq,
88
+ 'Contents' => truncated_contents,
89
+ 'IsTruncated' => truncated_contents.size != contents.size,
90
+ 'Marker' => marker,
91
+ 'MaxKeys' => max_keys,
92
+ 'Name' => bucket['Name'],
93
+ 'Prefix' => prefix
94
+ }
95
+ if max_keys && max_keys < response.body['Contents'].length
96
+ response.body['IsTruncated'] = true
97
+ response.body['Contents'] = response.body['Contents'][0...max_keys]
98
+ end
99
+ else
100
+ response.status = 404
101
+ raise(Excon::Errors.status_error({:expects => 200}, response))
102
+ end
103
+ response
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,65 @@
1
+ module Fog
2
+ module Storage
3
+ class InternetArchive
4
+ class Real
5
+ require 'fog/internet_archive/parsers/storage/access_control_list'
6
+
7
+ # Get access control list for an S3 bucket
8
+ #
9
+ # @param bucket_name [String] name of bucket to get access control list for
10
+ #
11
+ # @return [Excon::Response] response:
12
+ # * body [Hash]:
13
+ # * AccessControlPolicy [Hash]:
14
+ # * Owner [Hash]:
15
+ # * DisplayName [String] - Display name of object owner
16
+ # * ID [String] - Id of object owner
17
+ # * AccessControlList [Array]:
18
+ # * Grant [Hash]:
19
+ # * Grantee [Hash]:
20
+ # * DisplayName [String] - Display name of grantee
21
+ # * ID [String] - Id of grantee
22
+ # or
23
+ # * URI [String] - URI of group to grant access for
24
+ # * Permission [String] - Permission, in [FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP]
25
+ #
26
+ # @see http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGETacl.html
27
+
28
+ def get_bucket_acl(bucket_name)
29
+ unless bucket_name
30
+ raise ArgumentError.new('bucket_name is required')
31
+ end
32
+ request({
33
+ :expects => 200,
34
+ :headers => {},
35
+ :host => "#{bucket_name}.#{@host}",
36
+ :idempotent => true,
37
+ :method => 'GET',
38
+ :parser => Fog::Parsers::Storage::InternetArchive::AccessControlList.new,
39
+ :query => {'acl' => nil}
40
+ })
41
+ end
42
+ end
43
+
44
+ class Mock # :nodoc:all
45
+ require 'fog/internet_archive/requests/storage/acl_utils'
46
+
47
+ def get_bucket_acl(bucket_name)
48
+ response = Excon::Response.new
49
+ if acl = self.data[:acls][:bucket][bucket_name]
50
+ response.status = 200
51
+ if acl.is_a?(String)
52
+ response.body = Fog::Storage::InternetArchive.acl_to_hash(acl)
53
+ else
54
+ response.body = acl
55
+ end
56
+ else
57
+ response.status = 404
58
+ raise(Excon::Errors.status_error({:expects => 200}, response))
59
+ end
60
+ response
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,61 @@
1
+ module Fog
2
+ module Storage
3
+ class InternetArchive
4
+ class Real
5
+ require 'fog/internet_archive/parsers/storage/cors_configuration'
6
+
7
+ # Gets the CORS configuration for an S3 bucket
8
+ #
9
+ # @param bucket_name [String] name of bucket to get access control list for
10
+ #
11
+ # @return [Excon::Response] response:
12
+ # * body [Hash]:
13
+ # * CORSConfiguration [Array]:
14
+ # * CORSRule [Hash]:
15
+ # * AllowedHeader [String] - Which headers are allowed in a pre-flight OPTIONS request through the Access-Control-Request-Headers header.
16
+ # * AllowedMethod [String] - Identifies an HTTP method that the domain/origin specified in the rule is allowed to execute.
17
+ # * AllowedOrigin [String] - One or more response headers that you want customers to be able to access from their applications (for example, from a JavaScript XMLHttpRequest object).
18
+ # * ExposeHeader [String] - One or more headers in the response that you want customers to be able to access from their applications (for example, from a JavaScript XMLHttpRequest object).
19
+ # * ID [String] - An optional unique identifier for the rule. The ID value can be up to 255 characters long. The IDs help you find a rule in the configuration.
20
+ # * MaxAgeSeconds [Integer] - The time in seconds that your browser is to cache the preflight response for the specified resource.
21
+ #
22
+ # @see http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGETcors.html
23
+
24
+ def get_bucket_cors(bucket_name)
25
+ unless bucket_name
26
+ raise ArgumentError.new('bucket_name is required')
27
+ end
28
+ request({
29
+ :expects => 200,
30
+ :headers => {},
31
+ :host => "#{bucket_name}.#{@host}",
32
+ :idempotent => true,
33
+ :method => 'GET',
34
+ :parser => Fog::Parsers::Storage::InternetArchive::CorsConfiguration.new,
35
+ :query => {'cors' => nil}
36
+ })
37
+ end
38
+ end
39
+
40
+ class Mock # :nodoc:all
41
+ require 'fog/internet_archive/requests/storage/cors_utils'
42
+
43
+ def get_bucket_cors(bucket_name)
44
+ response = Excon::Response.new
45
+ if cors = self.data[:cors][:bucket][bucket_name]
46
+ response.status = 200
47
+ if cors.is_a?(String)
48
+ response.body = Fog::Storage::InternetArchive.cors_to_hash(cors)
49
+ else
50
+ response.body = cors
51
+ end
52
+ else
53
+ response.status = 404
54
+ raise(Excon::Errors.status_error({:expects => 200}, response))
55
+ end
56
+ response
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,35 @@
1
+ module Fog
2
+ module Storage
3
+ class InternetArchive
4
+ class Real
5
+ require 'fog/internet_archive/parsers/storage/get_bucket_lifecycle'
6
+
7
+ # Get bucket lifecycle configuration
8
+ #
9
+ # @param bucket_name [String] name of bucket to get lifecycle configuration for
10
+ #
11
+ # @return [Excon::Response] response:
12
+ # * body [Hash]:
13
+ # * Rules - object expire rules [Array]:
14
+ # * ID [String] - Unique identifier for the rule
15
+ # * Prefix [String] - Prefix identifying one or more objects to which the rule applies
16
+ # * Enabled [Boolean] - if rule is currently being applied
17
+ # * Days [Integer] - lifetime, in days, of the objects that are subject to the rule
18
+ #
19
+ # @see http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGETlifecycle.html
20
+
21
+ def get_bucket_lifecycle(bucket_name)
22
+ request({
23
+ :expects => 200,
24
+ :headers => {},
25
+ :host => "#{bucket_name}.#{@host}",
26
+ :idempotent => true,
27
+ :method => 'GET',
28
+ :parser => Fog::Parsers::Storage::InternetArchive::GetBucketLifecycle.new,
29
+ :query => {'lifecycle' => nil}
30
+ })
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end