mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
Add object temp url generation capability with mock support.
This commit is contained in:
parent
369692a7a1
commit
271bc985fa
2 changed files with 61 additions and 0 deletions
34
lib/fog/hp/requests/storage/get_object_temp_url.rb
Normal file
34
lib/fog/hp/requests/storage/get_object_temp_url.rb
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
module Fog
|
||||||
|
module Storage
|
||||||
|
class HP
|
||||||
|
|
||||||
|
class Real
|
||||||
|
|
||||||
|
# Generate a temporary url for an object
|
||||||
|
#
|
||||||
|
# ==== Parameters
|
||||||
|
# * container<~String> - Name of container
|
||||||
|
# * object<~String> - Name of object
|
||||||
|
# * expires<~Integer> - Time the temporary url expire in secs.
|
||||||
|
# * method<~String> - Allowed HTTP method GET, PUT, HEAD only
|
||||||
|
def get_object_temp_url(container, object, expires, method)
|
||||||
|
generate_object_temp_url(container, object, expires, method)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
class Mock # :nodoc:all
|
||||||
|
|
||||||
|
def get_object_temp_url(container, object, expires, method)
|
||||||
|
@scheme = "https"
|
||||||
|
@host = "swift-cluster.example.com"
|
||||||
|
@port = "443"
|
||||||
|
@path = "/v1/account"
|
||||||
|
|
||||||
|
generate_object_temp_url(container, object, expires, method)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -20,6 +20,7 @@ module Fog
|
||||||
request :get_container
|
request :get_container
|
||||||
request :get_containers
|
request :get_containers
|
||||||
request :get_object
|
request :get_object
|
||||||
|
request :get_object_temp_url
|
||||||
request :head_container
|
request :head_container
|
||||||
request :head_containers
|
request :head_containers
|
||||||
request :head_object
|
request :head_object
|
||||||
|
@ -81,6 +82,32 @@ module Fog
|
||||||
acl = "public-read-write"
|
acl = "public-read-write"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def generate_object_temp_url(container, object, expires_secs, method)
|
||||||
|
return unless (container && object && expires_secs && method)
|
||||||
|
|
||||||
|
# POST not allowed
|
||||||
|
allowed_methods = %w{GET PUT HEAD}
|
||||||
|
unless allowed_methods.include?(method)
|
||||||
|
raise ArgumentError.new("Invalid method '#{method}' specified. Valid methods are: #{allowed_methods.join(', ')}")
|
||||||
|
end
|
||||||
|
|
||||||
|
expires = (Time.now + expires_secs.to_i).to_i
|
||||||
|
|
||||||
|
# do not encode before signature generation, encode after
|
||||||
|
path = "#{@path}/#{container}/#{object}"
|
||||||
|
encoded_path = "#{@path}/#{Fog::HP.escape(container)}/#{Fog::HP.escape(object)}"
|
||||||
|
|
||||||
|
string_to_sign = "#{method}\n#{expires}\n#{path}"
|
||||||
|
signed_string = Digest::HMAC.hexdigest(string_to_sign, @hp_secret_key, Digest::SHA1)
|
||||||
|
|
||||||
|
signature = @hp_account_id.to_s + ":" + signed_string
|
||||||
|
signature = Fog::HP.escape(signature)
|
||||||
|
|
||||||
|
# generate the temp url using the signature and expiry
|
||||||
|
temp_url = "#{@scheme}://#{@host}:#{@port}#{encoded_path}?temp_url_sig=#{signature}&temp_url_expires=#{expires}"
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
class Mock
|
class Mock
|
||||||
|
|
Loading…
Reference in a new issue