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

Sign up to get free protection for your applications and to get access to all the features.
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