fog 1.40.0 → 1.41.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (188) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -0
  3. data/CHANGELOG.md +30 -0
  4. data/fog.gemspec +6 -4
  5. data/lib/fog/ovirt/compute.rb +2 -0
  6. data/lib/fog/ovirt/models/compute/server.rb +7 -2
  7. data/lib/fog/ovirt/requests/compute/activate_volume.rb +22 -0
  8. data/lib/fog/ovirt/requests/compute/deactivate_volume.rb +22 -0
  9. data/lib/fog/version.rb +1 -1
  10. data/lib/tasks/changelog_task.rb +2 -1
  11. data/tests/compute/helper.rb +0 -3
  12. data/tests/helpers/mock_helper.rb +0 -2
  13. data/tests/storage/helper.rb +0 -3
  14. metadata +49 -224
  15. data/lib/fog/bin/internet_archive.rb +0 -32
  16. data/lib/fog/bin/joyent.rb +0 -33
  17. data/lib/fog/internet_archive.rb +0 -1
  18. data/lib/fog/internet_archive/core.rb +0 -291
  19. data/lib/fog/internet_archive/models/storage/directories.rb +0 -39
  20. data/lib/fog/internet_archive/models/storage/directory.rb +0 -105
  21. data/lib/fog/internet_archive/models/storage/file.rb +0 -254
  22. data/lib/fog/internet_archive/models/storage/files.rb +0 -119
  23. data/lib/fog/internet_archive/models/storage/ia_attributes.rb +0 -36
  24. data/lib/fog/internet_archive/parsers/storage/access_control_list.rb +0 -42
  25. data/lib/fog/internet_archive/parsers/storage/complete_multipart_upload.rb +0 -20
  26. data/lib/fog/internet_archive/parsers/storage/copy_object.rb +0 -18
  27. data/lib/fog/internet_archive/parsers/storage/cors_configuration.rb +0 -38
  28. data/lib/fog/internet_archive/parsers/storage/delete_multiple_objects.rb +0 -45
  29. data/lib/fog/internet_archive/parsers/storage/get_bucket.rb +0 -58
  30. data/lib/fog/internet_archive/parsers/storage/get_bucket_lifecycle.rb +0 -64
  31. data/lib/fog/internet_archive/parsers/storage/get_bucket_location.rb +0 -16
  32. data/lib/fog/internet_archive/parsers/storage/get_bucket_logging.rb +0 -36
  33. data/lib/fog/internet_archive/parsers/storage/get_bucket_website.rb +0 -22
  34. data/lib/fog/internet_archive/parsers/storage/get_request_payment.rb +0 -16
  35. data/lib/fog/internet_archive/parsers/storage/get_service.rb +0 -28
  36. data/lib/fog/internet_archive/parsers/storage/initiate_multipart_upload.rb +0 -20
  37. data/lib/fog/internet_archive/parsers/storage/list_multipart_uploads.rb +0 -52
  38. data/lib/fog/internet_archive/parsers/storage/list_parts.rb +0 -36
  39. data/lib/fog/internet_archive/requests/storage/abort_multipart_upload.rb +0 -27
  40. data/lib/fog/internet_archive/requests/storage/acl_utils.rb +0 -60
  41. data/lib/fog/internet_archive/requests/storage/complete_multipart_upload.rb +0 -46
  42. data/lib/fog/internet_archive/requests/storage/copy_object.rb +0 -77
  43. data/lib/fog/internet_archive/requests/storage/cors_utils.rb +0 -39
  44. data/lib/fog/internet_archive/requests/storage/delete_bucket.rb +0 -42
  45. data/lib/fog/internet_archive/requests/storage/delete_bucket_cors.rb +0 -26
  46. data/lib/fog/internet_archive/requests/storage/delete_bucket_lifecycle.rb +0 -26
  47. data/lib/fog/internet_archive/requests/storage/delete_bucket_policy.rb +0 -26
  48. data/lib/fog/internet_archive/requests/storage/delete_bucket_website.rb +0 -26
  49. data/lib/fog/internet_archive/requests/storage/delete_multiple_objects.rb +0 -88
  50. data/lib/fog/internet_archive/requests/storage/delete_object.rb +0 -46
  51. data/lib/fog/internet_archive/requests/storage/get_bucket.rb +0 -108
  52. data/lib/fog/internet_archive/requests/storage/get_bucket_acl.rb +0 -65
  53. data/lib/fog/internet_archive/requests/storage/get_bucket_cors.rb +0 -61
  54. data/lib/fog/internet_archive/requests/storage/get_bucket_lifecycle.rb +0 -35
  55. data/lib/fog/internet_archive/requests/storage/get_bucket_location.rb +0 -54
  56. data/lib/fog/internet_archive/requests/storage/get_bucket_logging.rb +0 -45
  57. data/lib/fog/internet_archive/requests/storage/get_bucket_policy.rb +0 -31
  58. data/lib/fog/internet_archive/requests/storage/get_bucket_website.rb +0 -38
  59. data/lib/fog/internet_archive/requests/storage/get_object.rb +0 -163
  60. data/lib/fog/internet_archive/requests/storage/get_object_acl.rb +0 -72
  61. data/lib/fog/internet_archive/requests/storage/get_object_http_url.rb +0 -48
  62. data/lib/fog/internet_archive/requests/storage/get_object_https_url.rb +0 -30
  63. data/lib/fog/internet_archive/requests/storage/get_object_torrent.rb +0 -45
  64. data/lib/fog/internet_archive/requests/storage/get_object_url.rb +0 -49
  65. data/lib/fog/internet_archive/requests/storage/get_request_payment.rb +0 -45
  66. data/lib/fog/internet_archive/requests/storage/get_service.rb +0 -50
  67. data/lib/fog/internet_archive/requests/storage/head_object.rb +0 -57
  68. data/lib/fog/internet_archive/requests/storage/initiate_multipart_upload.rb +0 -42
  69. data/lib/fog/internet_archive/requests/storage/list_multipart_uploads.rb +0 -52
  70. data/lib/fog/internet_archive/requests/storage/list_parts.rb +0 -53
  71. data/lib/fog/internet_archive/requests/storage/post_object_hidden_fields.rb +0 -36
  72. data/lib/fog/internet_archive/requests/storage/put_bucket.rb +0 -70
  73. data/lib/fog/internet_archive/requests/storage/put_bucket_acl.rb +0 -69
  74. data/lib/fog/internet_archive/requests/storage/put_bucket_cors.rb +0 -47
  75. data/lib/fog/internet_archive/requests/storage/put_bucket_lifecycle.rb +0 -76
  76. data/lib/fog/internet_archive/requests/storage/put_bucket_logging.rb +0 -79
  77. data/lib/fog/internet_archive/requests/storage/put_bucket_policy.rb +0 -25
  78. data/lib/fog/internet_archive/requests/storage/put_bucket_website.rb +0 -59
  79. data/lib/fog/internet_archive/requests/storage/put_object.rb +0 -94
  80. data/lib/fog/internet_archive/requests/storage/put_object_acl.rb +0 -73
  81. data/lib/fog/internet_archive/requests/storage/put_object_url.rb +0 -43
  82. data/lib/fog/internet_archive/requests/storage/put_request_payment.rb +0 -45
  83. data/lib/fog/internet_archive/requests/storage/sync_clock.rb +0 -24
  84. data/lib/fog/internet_archive/requests/storage/upload_part.rb +0 -39
  85. data/lib/fog/internet_archive/signaturev4.rb +0 -71
  86. data/lib/fog/internet_archive/storage.rb +0 -381
  87. data/lib/fog/joyent.rb +0 -12
  88. data/lib/fog/joyent/analytics.rb +0 -310
  89. data/lib/fog/joyent/compute.rb +0 -272
  90. data/lib/fog/joyent/core.rb +0 -10
  91. data/lib/fog/joyent/errors.rb +0 -91
  92. data/lib/fog/joyent/models/analytics/field.rb +0 -13
  93. data/lib/fog/joyent/models/analytics/fields.rb +0 -24
  94. data/lib/fog/joyent/models/analytics/instrumentation.rb +0 -82
  95. data/lib/fog/joyent/models/analytics/instrumentations.rb +0 -23
  96. data/lib/fog/joyent/models/analytics/joyent_module.rb +0 -13
  97. data/lib/fog/joyent/models/analytics/joyent_modules.rb +0 -24
  98. data/lib/fog/joyent/models/analytics/metric.rb +0 -17
  99. data/lib/fog/joyent/models/analytics/metrics.rb +0 -16
  100. data/lib/fog/joyent/models/analytics/transformation.rb +0 -13
  101. data/lib/fog/joyent/models/analytics/transformations.rb +0 -24
  102. data/lib/fog/joyent/models/analytics/type.rb +0 -16
  103. data/lib/fog/joyent/models/analytics/types.rb +0 -24
  104. data/lib/fog/joyent/models/analytics/value.rb +0 -20
  105. data/lib/fog/joyent/models/compute/datacenter.rb +0 -11
  106. data/lib/fog/joyent/models/compute/datacenters.rb +0 -21
  107. data/lib/fog/joyent/models/compute/flavor.rb +0 -19
  108. data/lib/fog/joyent/models/compute/flavors.rb +0 -21
  109. data/lib/fog/joyent/models/compute/image.rb +0 -26
  110. data/lib/fog/joyent/models/compute/images.rb +0 -30
  111. data/lib/fog/joyent/models/compute/key.rb +0 -19
  112. data/lib/fog/joyent/models/compute/keys.rb +0 -32
  113. data/lib/fog/joyent/models/compute/network.rb +0 -12
  114. data/lib/fog/joyent/models/compute/networks.rb +0 -14
  115. data/lib/fog/joyent/models/compute/server.rb +0 -124
  116. data/lib/fog/joyent/models/compute/servers.rb +0 -35
  117. data/lib/fog/joyent/models/compute/snapshot.rb +0 -44
  118. data/lib/fog/joyent/models/compute/snapshots.rb +0 -35
  119. data/lib/fog/joyent/requests/analytics/create_instrumentation.rb +0 -25
  120. data/lib/fog/joyent/requests/analytics/delete_instrumentation.rb +0 -23
  121. data/lib/fog/joyent/requests/analytics/describe_analytics.rb +0 -26
  122. data/lib/fog/joyent/requests/analytics/get_instrumentation.rb +0 -26
  123. data/lib/fog/joyent/requests/analytics/get_instrumentation_value.rb +0 -30
  124. data/lib/fog/joyent/requests/analytics/list_instrumentations.rb +0 -25
  125. data/lib/fog/joyent/requests/compute/add_machine_tags.rb +0 -19
  126. data/lib/fog/joyent/requests/compute/create_key.rb +0 -54
  127. data/lib/fog/joyent/requests/compute/create_machine.rb +0 -16
  128. data/lib/fog/joyent/requests/compute/create_machine_snapshot.rb +0 -16
  129. data/lib/fog/joyent/requests/compute/delete_all_machine_metadata.rb +0 -16
  130. data/lib/fog/joyent/requests/compute/delete_all_machine_tags.rb +0 -15
  131. data/lib/fog/joyent/requests/compute/delete_key.rb +0 -27
  132. data/lib/fog/joyent/requests/compute/delete_machine.rb +0 -15
  133. data/lib/fog/joyent/requests/compute/delete_machine_metadata.rb +0 -16
  134. data/lib/fog/joyent/requests/compute/delete_machine_snapshot.rb +0 -18
  135. data/lib/fog/joyent/requests/compute/delete_machine_tag.rb +0 -15
  136. data/lib/fog/joyent/requests/compute/get_dataset.rb +0 -27
  137. data/lib/fog/joyent/requests/compute/get_image.rb +0 -28
  138. data/lib/fog/joyent/requests/compute/get_key.rb +0 -29
  139. data/lib/fog/joyent/requests/compute/get_machine.rb +0 -29
  140. data/lib/fog/joyent/requests/compute/get_machine_metadata.rb +0 -24
  141. data/lib/fog/joyent/requests/compute/get_machine_snapshot.rb +0 -15
  142. data/lib/fog/joyent/requests/compute/get_machine_tag.rb +0 -18
  143. data/lib/fog/joyent/requests/compute/get_package.rb +0 -32
  144. data/lib/fog/joyent/requests/compute/list_datacenters.rb +0 -16
  145. data/lib/fog/joyent/requests/compute/list_datasets.rb +0 -24
  146. data/lib/fog/joyent/requests/compute/list_images.rb +0 -25
  147. data/lib/fog/joyent/requests/compute/list_keys.rb +0 -25
  148. data/lib/fog/joyent/requests/compute/list_machine_snapshots.rb +0 -15
  149. data/lib/fog/joyent/requests/compute/list_machine_tags.rb +0 -20
  150. data/lib/fog/joyent/requests/compute/list_machines.rb +0 -26
  151. data/lib/fog/joyent/requests/compute/list_networks.rb +0 -26
  152. data/lib/fog/joyent/requests/compute/list_packages.rb +0 -34
  153. data/lib/fog/joyent/requests/compute/reboot_machine.rb +0 -15
  154. data/lib/fog/joyent/requests/compute/resize_machine.rb +0 -16
  155. data/lib/fog/joyent/requests/compute/start_machine.rb +0 -16
  156. data/lib/fog/joyent/requests/compute/start_machine_from_snapshot.rb +0 -15
  157. data/lib/fog/joyent/requests/compute/stop_machine.rb +0 -16
  158. data/lib/fog/joyent/requests/compute/update_machine_metadata.rb +0 -15
  159. data/spec/fog/bin/internetarchive_spec.rb +0 -10
  160. data/tests/internet_archive/models/storage/directory_tests.rb +0 -42
  161. data/tests/internet_archive/models/storage/file_tests.rb +0 -61
  162. data/tests/internet_archive/models/storage/files_tests.rb +0 -58
  163. data/tests/internet_archive/models/storage/url_tests.rb +0 -28
  164. data/tests/internet_archive/requests/storage/acl_utils_tests.rb +0 -209
  165. data/tests/internet_archive/requests/storage/bucket_tests.rb +0 -324
  166. data/tests/internet_archive/requests/storage/cors_utils_tests.rb +0 -108
  167. data/tests/internet_archive/requests/storage/multipart_upload_tests.rb +0 -132
  168. data/tests/internet_archive/requests/storage/object_tests.rb +0 -166
  169. data/tests/internet_archive/signaturev4_tests.rb +0 -41
  170. data/tests/internet_archive/signed_params_tests.rb +0 -5
  171. data/tests/joyent/models/analytics/field_tests.rb +0 -10
  172. data/tests/joyent/models/analytics/fields_tests.rb +0 -13
  173. data/tests/joyent/models/analytics/instrumentation_tests.rb +0 -13
  174. data/tests/joyent/models/analytics/instrumentations_tests.rb +0 -3
  175. data/tests/joyent/models/analytics/joyent_module_tests.rb +0 -10
  176. data/tests/joyent/models/analytics/joyent_modules_tests.rb +0 -13
  177. data/tests/joyent/models/analytics/metric_tests.rb +0 -10
  178. data/tests/joyent/models/analytics/metrics_tests.rb +0 -20
  179. data/tests/joyent/models/analytics/transformation_tests.rb +0 -10
  180. data/tests/joyent/models/analytics/transformations_tests.rb +0 -13
  181. data/tests/joyent/models/analytics/type_tests.rb +0 -10
  182. data/tests/joyent/models/analytics/types_tests.rb +0 -13
  183. data/tests/joyent/requests/analytics/instrumentation_tests.rb +0 -44
  184. data/tests/joyent/requests/compute/datasets_tests.rb +0 -58
  185. data/tests/joyent/requests/compute/keys_tests.rb +0 -47
  186. data/tests/joyent/requests/compute/machines_tests.rb +0 -66
  187. data/tests/joyent/requests/compute/networks_tests.rb +0 -39
  188. data/tests/joyent/requests/compute/packages_tests.rb +0 -68
@@ -1,43 +0,0 @@
1
- module Fog
2
- module Storage
3
- class InternetArchive
4
- module PutObjectUrl
5
- def put_object_url(bucket_name, object_name, expires, headers = {}, options = {})
6
- unless bucket_name
7
- raise ArgumentError.new('bucket_name is required')
8
- end
9
- unless object_name
10
- raise ArgumentError.new('object_name is required')
11
- end
12
- scheme_host_path_query({
13
- :scheme => options[:scheme],
14
- :headers => headers,
15
- :host => @host,
16
- :port => @port,
17
- :method => 'PUT',
18
- :path => "#{bucket_name}/#{object_name}"
19
- }, expires)
20
- end
21
- end
22
-
23
- class Real
24
- # Get an expiring object url from S3 for putting an object
25
- #
26
- # @param bucket_name [String] Name of bucket containing object
27
- # @param object_name [String] Name of object to get expiring url for
28
- # @param expires [Time] An expiry time for this url
29
- #
30
- # @return [Excon::Response] response:
31
- # * body [String] url for object
32
- #
33
- # @see http://docs.amazonwebservices.com/AmazonS3/latest/dev/S3_QSAuth.html
34
-
35
- include PutObjectUrl
36
- end
37
-
38
- class Mock # :nodoc:all
39
- include PutObjectUrl
40
- end
41
- end
42
- end
43
- end
@@ -1,45 +0,0 @@
1
- module Fog
2
- module Storage
3
- class InternetArchive
4
- class Real
5
- # Change who pays for requests to an S3 bucket
6
- #
7
- # @param bucket_name [String] name of bucket to modify
8
- # @param payer [String] valid values are BucketOwner or Requester
9
- #
10
- # @see http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTrequestPaymentPUT.html
11
-
12
- def put_request_payment(bucket_name, payer)
13
- data =
14
- <<-DATA
15
- <RequestPaymentConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
16
- <Payer>#{payer}</Payer>
17
- </RequestPaymentConfiguration>
18
- DATA
19
- request({
20
- :body => data,
21
- :expects => 200,
22
- :headers => {},
23
- :host => "#{bucket_name}.#{@host}",
24
- :method => 'PUT',
25
- :query => {'requestPayment' => nil}
26
- })
27
- end
28
- end
29
-
30
- class Mock # :nodoc:all
31
- def put_request_payment(bucket_name, payer)
32
- response = Excon::Response.new
33
- if bucket = self.data[:buckets][bucket_name]
34
- response.status = 200
35
- bucket['Payer'] = payer
36
- else
37
- response.status = 404
38
- raise(Excon::Errors.status_error({:expects => 200}, response))
39
- end
40
- response
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,24 +0,0 @@
1
- module Fog
2
- module Storage
3
- class InternetArchive
4
- class Real
5
- # Sync clock against S3 to avoid skew errors
6
- #
7
- def sync_clock
8
- response = begin
9
- get_service
10
- rescue Excon::Errors::HTTPStatusError => error
11
- error.response
12
- end
13
- Fog::Time.now = Time.parse(response.headers['Date'])
14
- end
15
- end # Real
16
-
17
- class Mock # :nodoc:all
18
- def sync_clock
19
- true
20
- end
21
- end # Mock
22
- end # Storage
23
- end # InternetArchive
24
- end # Fog
@@ -1,39 +0,0 @@
1
- module Fog
2
- module Storage
3
- class InternetArchive
4
- class Real
5
- # Upload a part for a multipart upload
6
- #
7
- # @param bucket_name [String] Name of bucket to add part to
8
- # @param object_name [String] Name of object to add part to
9
- # @param upload_id [String] Id of upload to add part to
10
- # @param part_number [String] Index of part in upload
11
- # @param data [File||String] Content for part
12
- # @param options [Hash]
13
- # @option options Content-MD5 [String] Base64 encoded 128-bit MD5 digest of message
14
- #
15
- # @return [Excon::Response] response
16
- # * headers [Hash]:
17
- # * ETag [String] etag of new object (will be needed to complete upload)
18
- #
19
- # @see http://docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadUploadPart.html
20
- #
21
- def upload_part(bucket_name, object_name, upload_id, part_number, data, options = {})
22
- data = Fog::Storage.parse_data(data)
23
- headers = options
24
- headers['Content-Length'] = data[:headers]['Content-Length']
25
- request({
26
- :body => data[:body],
27
- :expects => 200,
28
- :idempotent => true,
29
- :headers => headers,
30
- :host => "#{bucket_name}.#{@host}",
31
- :method => 'PUT',
32
- :path => CGI.escape(object_name),
33
- :query => {'uploadId' => upload_id, 'partNumber' => part_number}
34
- })
35
- end
36
- end # Real
37
- end # Storage
38
- end # InternetArchive
39
- end # Fog
@@ -1,71 +0,0 @@
1
- # See http://docs.amazonwebservices.com/general/latest/gr/signature-version-4.html
2
- #
3
- module Fog
4
- module InternetArchive
5
- class SignatureV4
6
- def initialize(ia_access_key_id, secret_key, region,service)
7
- @region = region
8
- @service = service
9
- @ia_access_key_id = ia_access_key_id
10
- @hmac = Fog::HMAC.new('sha256', 'AWS4' + secret_key)
11
- end
12
-
13
- def sign(params, date)
14
- canonical_request = <<-DATA
15
- #{params[:method].to_s.upcase}
16
- #{params[:path]}
17
- #{canonical_query_string(params[:query])}
18
- #{canonical_headers(params[:headers])}
19
- #{signed_headers(params[:headers])}
20
- #{Digest::SHA256.hexdigest(params[:body] || '')}
21
- DATA
22
- canonical_request.chop!
23
- credential_scope = "#{date.utc.strftime('%Y%m%d')}/#{@region}/#{@service}/aws4_request"
24
- string_to_sign = <<-DATA
25
- AWS4-HMAC-SHA256
26
- #{date.to_iso8601_basic}
27
- #{credential_scope}
28
- #{Digest::SHA256.hexdigest(canonical_request)}
29
- DATA
30
-
31
- string_to_sign.chop!
32
-
33
- signature = derived_hmac(date).sign(string_to_sign)
34
-
35
- "AWS4-HMAC-SHA256 Credential=#{@ia_access_key_id}/#{credential_scope}, SignedHeaders=#{signed_headers(params[:headers])}, Signature=#{signature.unpack('H*').first}"
36
- end
37
-
38
- protected
39
-
40
- def canonical_query_string(query)
41
- canonical_query_string = []
42
- for key in (query || {}).keys.sort_by {|k| k.to_s}
43
- component = "#{Fog::InternetArchive.escape(key.to_s)}=#{Fog::InternetArchive.escape(query[key].to_s)}"
44
- canonical_query_string << component
45
- end
46
- canonical_query_string.join("&")
47
- end
48
-
49
- def canonical_headers(headers)
50
- canonical_headers = ''
51
-
52
- for key in headers.keys.sort_by {|k| k.to_s}
53
- canonical_headers << "#{key.to_s.downcase}:#{headers[key].to_s.strip}\n"
54
- end
55
- canonical_headers
56
- end
57
-
58
- def signed_headers(headers)
59
- headers.keys.map {|key| key.to_s}.sort.map {|key| key.downcase}.join(';')
60
- end
61
-
62
- def derived_hmac(date)
63
- kDate = @hmac.sign(date.utc.strftime('%Y%m%d'))
64
- kRegion = Fog::HMAC.new('sha256', kDate).sign(@region)
65
- kService = Fog::HMAC.new('sha256', kRegion).sign(@service)
66
- kSigning = Fog::HMAC.new('sha256', kService).sign('aws4_request')
67
- Fog::HMAC.new('sha256', kSigning)
68
- end
69
- end
70
- end
71
- end
@@ -1,381 +0,0 @@
1
- require 'fog/internet_archive/core'
2
-
3
- module Fog
4
- module Storage
5
- class InternetArchive < Fog::Service
6
- requires :ia_access_key_id, :ia_secret_access_key
7
- recognizes :endpoint, :region, :host, :path, :port, :scheme, :persistent, :ia_session_token, :ia_credentials_expire_at
8
-
9
- secrets :ia_secret_access_key, :hmac
10
-
11
- model_path 'fog/internet_archive/models/storage'
12
- collection :directories
13
- model :directory
14
- collection :files
15
- model :file
16
-
17
- request_path 'fog/internet_archive/requests/storage'
18
- request :abort_multipart_upload
19
- request :complete_multipart_upload
20
- request :copy_object
21
- request :delete_bucket
22
- request :delete_bucket_cors
23
- request :delete_bucket_lifecycle
24
- request :delete_bucket_policy
25
- request :delete_bucket_website
26
- request :delete_object
27
- request :delete_multiple_objects
28
- request :get_bucket
29
- request :get_bucket_acl
30
- request :get_bucket_cors
31
- request :get_bucket_lifecycle
32
- request :get_bucket_location
33
- request :get_bucket_logging
34
- request :get_bucket_policy
35
- request :get_bucket_website
36
- request :get_object
37
- request :get_object_acl
38
- request :get_object_torrent
39
- request :get_object_http_url
40
- request :get_object_https_url
41
- request :get_object_url
42
- request :get_request_payment
43
- request :get_service
44
- request :head_object
45
- request :initiate_multipart_upload
46
- request :list_multipart_uploads
47
- request :list_parts
48
- request :post_object_hidden_fields
49
- request :put_bucket
50
- request :put_bucket_acl
51
- request :put_bucket_cors
52
- request :put_bucket_lifecycle
53
- request :put_bucket_logging
54
- request :put_bucket_policy
55
- request :put_bucket_website
56
- request :put_object
57
- request :put_object_acl
58
- request :put_object_url
59
- request :put_request_payment
60
- request :sync_clock
61
- request :upload_part
62
-
63
- module Utils
64
- attr_accessor :region
65
-
66
- def http_url(params, expires)
67
- scheme_host_path_query(params.merge(:scheme => 'http', :port => 80), expires)
68
- end
69
-
70
- def https_url(params, expires)
71
- scheme_host_path_query(params.merge(:scheme => 'https', :port => 443), expires)
72
- end
73
-
74
- def url(params, expires)
75
- Fog::Logger.deprecation("Fog::Storage::InternetArchive => #url is deprecated, use #https_url instead [light_black](#{caller.first})[/]")
76
- http_url(params, expires)
77
- end
78
-
79
- private
80
-
81
- def scheme_host_path_query(params, expires)
82
- params[:scheme] ||= @scheme
83
- if params[:port] == 80 && params[:scheme] == 'http'
84
- params.delete(:port)
85
- end
86
- if params[:port] == 443 && params[:scheme] == 'https'
87
- params.delete(:port)
88
- end
89
- params[:headers] ||= {}
90
- params[:headers]['Date'] = expires.to_i
91
- params[:path] = Fog::InternetArchive.escape(params[:path]).gsub('%2F', '/')
92
- query = []
93
- params[:headers]['x-amz-security-token'] = @ia_session_token if @ia_session_token
94
- if params[:query]
95
- for key, value in params[:query]
96
- query << "#{key}=#{Fog::InternetArchive.escape(value)}"
97
- end
98
- end
99
- query << "AWSAccessKeyId=#{@ia_access_key_id}"
100
- query << "Signature=#{Fog::InternetArchive.escape(signature(params))}"
101
- query << "Expires=#{params[:headers]['Date']}"
102
- query << "x-amz-security-token=#{Fog::InternetArchive.escape(@ia_session_token)}" if @ia_session_token
103
- port_part = params[:port] && ":#{params[:port]}"
104
- "#{params[:scheme]}://#{params[:host]}#{port_part}/#{params[:path]}?#{query.join('&')}"
105
- end
106
- end
107
-
108
- class Mock
109
- include Utils
110
-
111
- def self.acls(type)
112
- case type
113
- when 'private'
114
- {
115
- "AccessControlList" => [
116
- {
117
- "Permission" => "FULL_CONTROL",
118
- "Grantee" => {"DisplayName" => "me", "ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"}
119
- }
120
- ],
121
- "Owner" => {"DisplayName" => "me", "ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"}
122
- }
123
- when 'public-read'
124
- {
125
- "AccessControlList" => [
126
- {
127
- "Permission" => "FULL_CONTROL",
128
- "Grantee" => {"DisplayName" => "me", "ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"}
129
- },
130
- {
131
- "Permission" => "READ",
132
- "Grantee" => {"URI" => "http://acs.amazonaws.com/groups/global/AllUsers"}
133
- }
134
- ],
135
- "Owner" => {"DisplayName" => "me", "ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"}
136
- }
137
- when 'public-read-write'
138
- {
139
- "AccessControlList" => [
140
- {
141
- "Permission" => "FULL_CONTROL",
142
- "Grantee" => {"DisplayName" => "me", "ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"}
143
- },
144
- {
145
- "Permission" => "READ",
146
- "Grantee" => {"URI" => "http://acs.amazonaws.com/groups/global/AllUsers"}
147
- },
148
- {
149
- "Permission" => "WRITE",
150
- "Grantee" => {"URI" => "http://acs.amazonaws.com/groups/global/AllUsers"}
151
- }
152
- ],
153
- "Owner" => {"DisplayName" => "me", "ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"}
154
- }
155
- when 'authenticated-read'
156
- {
157
- "AccessControlList" => [
158
- {
159
- "Permission" => "FULL_CONTROL",
160
- "Grantee" => {"DisplayName" => "me", "ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"}
161
- },
162
- {
163
- "Permission" => "READ",
164
- "Grantee" => {"URI" => "http://acs.amazonaws.com/groups/global/AuthenticatedUsers"}
165
- }
166
- ],
167
- "Owner" => {"DisplayName" => "me", "ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"}
168
- }
169
- end
170
- end
171
-
172
- def self.data
173
- @data ||= Hash.new do |hash, region|
174
- hash[region] = Hash.new do |region_hash, key|
175
- region_hash[key] = {
176
- :acls => {
177
- :bucket => {},
178
- :object => {}
179
- },
180
- :buckets => {},
181
- :cors => {
182
- :bucket => {}
183
- }
184
- }
185
- end
186
- end
187
- end
188
-
189
- def self.reset
190
- @data = nil
191
- end
192
-
193
- def initialize(options={})
194
- setup_credentials(options)
195
- options[:region] ||= 'us-east-1'
196
- @host = options[:host] || Fog::InternetArchive::API_DOMAIN_NAME
197
- @scheme = options[:scheme] || 'http'
198
- @region = options[:region]
199
- end
200
-
201
- def data
202
- self.class.data[@region][@ia_access_key_id]
203
- end
204
-
205
- def reset_data
206
- self.class.data[@region].delete(@ia_access_key_id)
207
- end
208
-
209
- def signature(params)
210
- "foo"
211
- end
212
-
213
- def setup_credentials(options)
214
- @ia_access_key_id = options[:ia_access_key_id]
215
- @ia_secret_access_key = options[:ia_secret_access_key]
216
- @ia_session_token = options[:ia_session_token]
217
- @ia_credentials_expire_at = options[:ia_credentials_expire_at]
218
- end
219
- end
220
-
221
- class Real
222
- include Utils
223
- # include Fog::InternetArchive::CredentialFetcher::ConnectionMethods
224
- # Initialize connection to S3
225
- #
226
- # ==== Notes
227
- # options parameter must include values for :ia_access_key_id and
228
- # :ia_secret_access_key in order to create a connection
229
- #
230
- # ==== Examples
231
- # s3 = Fog::Storage.new(
232
- # :provider => "InternetArchive",
233
- # :ia_access_key_id => your_ia_access_key_id,
234
- # :ia_secret_access_key => your_ia_secret_access_key
235
- # )
236
- #
237
- # ==== Parameters
238
- # * options<~Hash> - config arguments for connection. Defaults to {}.
239
- #
240
- # ==== Returns
241
- # * S3 object with connection to aws.
242
- def initialize(options={})
243
-
244
- setup_credentials(options)
245
- @connection_options = options[:connection_options] || {}
246
-
247
- if @endpoint = options[:endpoint]
248
- endpoint = URI.parse(@endpoint)
249
- @host = endpoint.host
250
- @path = if endpoint.path.empty?
251
- '/'
252
- else
253
- endpoint.path
254
- end
255
- @port = endpoint.port
256
- @scheme = endpoint.scheme
257
- else
258
- options[:region] ||= 'us-east-1'
259
- @region = options[:region]
260
- @host = options[:host] || Fog::InternetArchive::API_DOMAIN_NAME
261
- @path = options[:path] || '/'
262
- @persistent = options.fetch(:persistent, false)
263
- @port = options[:port] || 80
264
- @scheme = options[:scheme] || 'http'
265
- end
266
- @connection = Fog::XML::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", @persistent, @connection_options)
267
- end
268
-
269
- def reload
270
- @connection.reset
271
- end
272
-
273
- def signature(params)
274
- string_to_sign =
275
- <<-DATA
276
- #{params[:method].to_s.upcase}
277
- #{params[:headers]['Content-MD5']}
278
- #{params[:headers]['Content-Type']}
279
- #{params[:headers]['Date']}
280
- DATA
281
-
282
- amz_headers, canonical_amz_headers = {}, ''
283
- for key, value in params[:headers]
284
- if key[0..5] == 'x-amz-'
285
- amz_headers[key] = value
286
- end
287
- end
288
- amz_headers = amz_headers.sort {|x, y| x[0] <=> y[0]}
289
- for key, value in amz_headers
290
- canonical_amz_headers << "#{key}:#{value}\n"
291
- end
292
- string_to_sign << canonical_amz_headers
293
-
294
- subdomain = params[:host].split(".#{@host}").first
295
- unless subdomain =~ /^(?:[a-z]|\d(?!\d{0,2}(?:\.\d{1,3}){3}$))(?:[a-z0-9]|\.(?![\.\-])|\-(?![\.])){1,61}[a-z0-9]$/
296
- Fog::Logger.warning("fog: the specified s3 bucket name(#{subdomain}) is not a valid dns name, which will negatively impact performance. For details see: http://docs.amazonwebservices.com/AmazonS3/latest/dev/BucketRestrictions.html")
297
- params[:host] = params[:host].split("#{subdomain}.")[-1]
298
- if params[:path]
299
- params[:path] = "#{subdomain}/#{params[:path]}"
300
- else
301
- params[:path] = subdomain
302
- end
303
- subdomain = nil
304
- end
305
-
306
- canonical_resource = @path.dup
307
- unless subdomain.nil? || subdomain == @host
308
- canonical_resource << "#{Fog::InternetArchive.escape(subdomain).downcase}/"
309
- end
310
- canonical_resource << params[:path].to_s
311
- canonical_resource << '?'
312
- for key in (params[:query] || {}).keys.sort
313
- if %w{
314
- acl
315
- cors
316
- delete
317
- lifecycle
318
- location
319
- logging
320
- notification
321
- partNumber
322
- policy
323
- requestPayment
324
- response-cache-control
325
- response-content-disposition
326
- response-content-encoding
327
- response-content-language
328
- response-content-type
329
- response-expires
330
- torrent
331
- uploadId
332
- uploads
333
- versionId
334
- versioning
335
- versions
336
- website
337
- }.include?(key)
338
- canonical_resource << "#{key}#{"=#{params[:query][key]}" unless params[:query][key].nil?}&"
339
- end
340
- end
341
- canonical_resource.chop!
342
- string_to_sign << canonical_resource
343
-
344
- signed_string = @hmac.sign(string_to_sign)
345
- Base64.encode64(signed_string).chomp!
346
- end
347
-
348
- private
349
-
350
- def setup_credentials(options)
351
- @ia_access_key_id = options[:ia_access_key_id]
352
- @ia_secret_access_key = options[:ia_secret_access_key]
353
- @ia_session_token = options[:ia_session_token]
354
- @ia_credentials_expire_at = options[:ia_credentials_expire_at]
355
-
356
- @hmac = Fog::HMAC.new('sha1', @ia_secret_access_key)
357
- end
358
-
359
- def request(params, &block)
360
- # refresh_credentials_if_expired
361
-
362
- params[:headers]['Date'] = Fog::Time.now.to_date_header
363
- params[:headers]['x-amz-security-token'] = @ia_session_token if @ia_session_token
364
- params[:headers]['Authorization'] = "AWS #{@ia_access_key_id}:#{signature(params)}"
365
- # FIXME: ToHashParser should make this not needed
366
- original_params = params.dup
367
-
368
- begin
369
- response = @connection.request(params, &block)
370
- rescue Excon::Errors::TemporaryRedirect => error
371
- uri = URI.parse(error.response.headers['location'])
372
- Fog::Logger.warning("fog: followed redirect to #{uri.host}, connecting to the matching region will be more performant")
373
- response = Fog::XML::Connection.new("#{@scheme}://#{uri.host}:#{@port}", false, @connection_options).request(original_params, &block)
374
- end
375
-
376
- response
377
- end
378
- end
379
- end
380
- end
381
- end