bits_service_client 4.0.0.pre.1 → 4.0.0.pre.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3fd02832b61746287f81c5d06ef2002cb97fb33b
4
- data.tar.gz: 80e5101938d38d36dbcc0e1f1ff54b36019eaf33
3
+ metadata.gz: b3e14006a7591b74626b0d7aae5f94271f4eba05
4
+ data.tar.gz: 3854d5007fc1c65ccc4a5c0b606305d52423f50f
5
5
  SHA512:
6
- metadata.gz: 39246c058170ffbf73192359b7afa6d065cf109258d1bcf5dd65a40e95daca3388cb719d304f6bafd9ca7a1033fd94823e1352a7293034946eac89e18d766d2d
7
- data.tar.gz: 033f7d52d78390765856053892bef6a369a56345600f4cbed9b61420e012359b0319bee5730ddeec50ee1e182d8b7be2b333f71a960cdbb226dbae33561d00d7
6
+ metadata.gz: f49af55aeb784e73e317358225f25359ab44c4af38d8e3497328729f2d9e9f9d6317f36617fff375ce571496dbf3372c998cb37dc1204f93054ba4aa4cab5993
7
+ data.tar.gz: 7cf1eb8b1a977db52fb6fa9f21f10e0a10f8b290f34b2c9d9917291c5a523904475ed0aafc894815ca4a9eba6c2350a5782f75feef020df45e983c5fbd9d0fbf
@@ -28,32 +28,23 @@ module BitsService
28
28
  end
29
29
 
30
30
  def public_download_url
31
- signed_url(key)
32
- end
31
+ signed_url = "#{@public_endpoint}#{self.sign_signature(resource_path(key), @signing_key_secret, @signing_key_id)}"
33
32
 
34
- def public_upload_url
35
- signed_url(key, verb: 'put') + '&async=true'
36
- end
33
+ response = @private_http_client.head(signed_url, @vcap_request_id)
34
+ validate_response_code!([200, 302], response)
37
35
 
38
- def internal_download_url
39
- generate_private_url(key)
40
- end
41
-
42
- private
43
-
44
- def signed_url(key, verb: nil)
45
- query = if verb.nil?
46
- ''
36
+ if response.code.to_i == 302
37
+ response['location']
47
38
  else
48
- "&verb=#{verb}"
39
+ signed_url
49
40
  end
41
+ end
50
42
 
51
- signed_url = "#{@public_endpoint}#{self.sign_signature(resource_path(key), @signing_key_secret, @signing_key_id)}#{query}"
52
- logger.debug( "Created signed URL: #{signed_url}")
53
- return signed_url
43
+ def public_upload_url
44
+ "#{@public_endpoint}#{self.sign_signature(resource_path(key), @signing_key_secret, @signing_key_id)}&async=true&verb=put"
54
45
  end
55
46
 
56
- def generate_private_url(key)
47
+ def internal_download_url
57
48
  path = resource_path(key)
58
49
 
59
50
  @private_http_client.head(path, @vcap_request_id).tap do |response|
@@ -63,6 +54,22 @@ module BitsService
63
54
  File.join(@private_endpoint.to_s, path)
64
55
  end
65
56
 
57
+ private
58
+
59
+ def validate_response_code!(expected_codes, response)
60
+ return if Array(expected_codes).include?(response.code.to_i)
61
+
62
+ error = {
63
+ response_code: response.code,
64
+ response_body: response.body,
65
+ response: response
66
+ }.to_json
67
+
68
+ logger.error("UnexpectedResponseCode: expected '#{expected_codes}' got #{response.code}")
69
+
70
+ fail BlobstoreError.new(error)
71
+ end
72
+
66
73
  def resource_path(key)
67
74
  prefix = @resource_type == :buildpack_cache ? 'buildpack_cache/entries/' : @resource_type
68
75
  File.join('/', prefix.to_s, key.to_s)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module BitsServiceClient
4
- VERSION = '4.0.0.pre.1'
4
+ VERSION = '4.0.0.pre.2'
5
5
  end
@@ -2,12 +2,10 @@ module BitsService
2
2
  module SignatureUtil
3
3
  def sign_signature(resource_path, key_secret, key_id)
4
4
  expires = seconds_since_the_unix_epoch_with_offset(3600)
5
- signature_parts = "#{expires}#{resource_path}#{' '}#{key_secret}"
6
- digest = OpenSSL::Digest::SHA256.new
7
- hmac = OpenSSL::HMAC.new(key_secret, digest)
8
- signature=OpenSSL::HMAC.hexdigest(digest, key_secret, signature_parts)
9
- signed_path = "#{resource_path}?signature=#{signature}&expires=#{expires}&AccessKeyId=#{key_id}"
10
- return signed_path
5
+ "#{resource_path}?"+
6
+ "signature=#{OpenSSL::HMAC.hexdigest(OpenSSL::Digest::SHA256.new, key_secret, "#{expires}#{resource_path} #{key_secret}")}&"+
7
+ "expires=#{expires}&"+
8
+ "AccessKeyId=#{key_id}"
11
9
  end
12
10
 
13
11
  def seconds_since_the_unix_epoch_with_offset(offset)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bits_service_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0.pre.1
4
+ version: 4.0.0.pre.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rizwan Reza
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2019-01-22 00:00:00.000000000 Z
15
+ date: 2019-01-25 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: activesupport