Module: Fog::Storage::HP::Utils
Instance Method Summary collapse
- #cdn ⇒ Object
-
#create_temp_url(container, object, expires, method, options = {}) ⇒ Object
creates a temporary url .
-
#generate_object_temp_url(container, object, expires_secs, method) ⇒ Object
Get an object http url expiring in the given amount of seconds.
-
#get_object_http_url(container, object, expires, options = {}) ⇒ Object
Get an expiring object http url.
-
#get_object_https_url(container, object, expires, options = {}) ⇒ Object
Get an expiring object https url.
- #header_to_perm_acl(read_header = nil, write_header = nil) ⇒ Object
- #perm_acl_to_header(read_perm_acl, write_perm_acl) ⇒ Object
- #perm_to_acl(perm, users = []) ⇒ Object
- #public_url(container = nil, object = nil) ⇒ Object
- #url ⇒ Object
Instance Method Details
#cdn ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/fog/hp/storage.rb', line 52 def cdn unless @hp_cdn_uri.nil? @cdn ||= Fog::CDN.new( :provider => 'HP', :hp_access_key => @hp_access_key, :hp_secret_key => @hp_secret_key, :hp_auth_uri => @hp_auth_uri, :hp_cdn_uri => @hp_cdn_uri, :hp_tenant_id => @hp_tenant_id, :hp_avl_zone => @hp_avl_zone, :credentials => @credentials, :connection_options => @connection_options ) if @cdn.enabled? @cdn end else nil end end |
#create_temp_url(container, object, expires, method, options = {}) ⇒ Object
creates a temporary url
Parameters
-
container<~String> - Name of container containing object
-
object<~String> - Name of object to get expiring url for
-
expires<~Time> - An expiry time for this url
-
method<~String> - The method to use for accessing the object (GET, PUT, HEAD)
-
scheme<~String> - The scheme to use (http, https)
-
options<~Hash> - An optional options hash
Returns
-
response<~Excon::Response>:
-
body<~String> - url for object
-
209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 |
# File 'lib/fog/hp/storage.rb', line 209 def create_temp_url(container, object, expires, method, = {}) raise ArgumentError, "Insufficient parameters specified." unless (container && object && expires && method) raise ArgumentError, "Storage must my instantiated with the :os_account_meta_temp_url_key option" if @os_account_meta_temp_url_key.nil? # 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 = expires.to_i scheme = [:scheme] || @scheme # do not encode before signature generation, encode after sig_path = "#{@path}/#{container}/#{object}" encoded_path = "#{@path}/#{Fog::HP.escape(container)}/#{Fog::HP.escape(object)}" string_to_sign = "#{method}\n#{expires}\n#{sig_path}" signature = nil # HP uses a different strategy to create the signature that is passed to swift than OpenStack. # As the HP provider is broadly used by OpenStack users the OpenStack strategy is applied when # the @os_account_meta_temp_url_key is given. if @os_account_meta_temp_url_key then hmac = OpenSSL::HMAC.new(@os_account_meta_temp_url_key, OpenSSL::Digest::SHA1.new) signature= hmac.update(string_to_sign).hexdigest else # Only works with 1.9+ Not compatible with 1.8.7 #signed_string = Digest::HMAC.hexdigest(string_to_sign, @hp_secret_key, Digest::SHA1) # Compatible with 1.8.7 onwards hmac = OpenSSL::HMAC.new(@hp_secret_key, OpenSSL::Digest::SHA1.new) signed_string = hmac.update(string_to_sign).hexdigest signature = @hp_tenant_id.to_s + ":" + @hp_access_key.to_s + ":" + signed_string signature = Fog::HP.escape(signature) end # generate the temp url using the signature and expiry "#{scheme}://#{@host}#{encoded_path}?temp_url_sig=#{signature}&temp_url_expires=#{expires}" end |
#generate_object_temp_url(container, object, expires_secs, method) ⇒ Object
Get an object http url expiring in the given amount of seconds
Parameters
-
container<~String> - Name of container containing object
-
object<~String> - Name of object to get expiring url for
-
expires_secs<~Integer> - the amount of seconds from now until the url expires
Returns
-
response<~Excon::Response>:
-
body<~String> - url for object
-
191 192 193 194 |
# File 'lib/fog/hp/storage.rb', line 191 def generate_object_temp_url(container, object, expires_secs, method) expiration_time = (Time.now + expires_secs.to_i).to_i create_temp_url(container, object, expiration_time, method, {}) end |
#get_object_http_url(container, object, expires, options = {}) ⇒ Object
Get an expiring object http url
Parameters
-
container<~String> - Name of container containing object
-
object<~String> - Name of object to get expiring url for
-
expires<~Time> - An expiry time for this url
Returns
-
response<~Excon::Response>:
-
body<~String> - url for object
-
177 178 179 |
# File 'lib/fog/hp/storage.rb', line 177 def get_object_http_url(container, object, expires, = {}) create_temp_url(container, object, expires, "GET", .merge(:scheme => "http")) end |
#get_object_https_url(container, object, expires, options = {}) ⇒ Object
Get an expiring object https url
Parameters
-
container<~String> - Name of container containing object
-
object<~String> - Name of object to get expiring url for
-
expires<~Time> - An expiry time for this url
Returns
-
response<~Excon::Response>:
-
body<~String> - url for object
-
163 164 165 |
# File 'lib/fog/hp/storage.rb', line 163 def get_object_https_url(container, object, expires, = {}) create_temp_url(container, object, expires, "GET", .merge(:scheme => "https")) end |
#header_to_perm_acl(read_header = nil, write_header = nil) ⇒ Object
146 147 148 149 150 151 |
# File 'lib/fog/hp/storage.rb', line 146 def header_to_perm_acl(read_header=nil, write_header=nil) read_h, write_h = nil read_h = read_header.split(',') unless read_header.nil? write_h = write_header.split(',') unless write_header.nil? return read_h, write_h end |
#perm_acl_to_header(read_perm_acl, write_perm_acl) ⇒ Object
132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/fog/hp/storage.rb', line 132 def perm_acl_to_header(read_perm_acl, write_perm_acl) header = {} if read_perm_acl.nil? && write_perm_acl.nil? header = {'X-Container-Read' => "", 'X-Container-Write' => ""} elsif !read_perm_acl.nil? && write_perm_acl.nil? header = {'X-Container-Read' => "#{read_perm_acl.join(',')}", 'X-Container-Write' => ""} elsif read_perm_acl.nil? && !write_perm_acl.nil? header = {'X-Container-Read' => "", 'X-Container-Write' => "#{write_perm_acl.join(',')}"} elsif !read_perm_acl.nil? && !write_perm_acl.nil? header = {'X-Container-Read' => "#{read_perm_acl.join(',')}", 'X-Container-Write' => "#{write_perm_acl.join(',')}"} end header end |
#perm_to_acl(perm, users = []) ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/fog/hp/storage.rb', line 91 def perm_to_acl(perm, users=[]) read_perm_acl = [] write_perm_acl = [] valid_public_perms = ['pr', 'pw', 'prw'] valid_account_perms = ['r', 'w', 'rw'] valid_perms = valid_public_perms + valid_account_perms unless valid_perms.include?(perm) raise ArgumentError.new("permission must be one of [#{valid_perms.join(', ')}]") end # tackle the public access differently if valid_public_perms.include?(perm) case perm when "pr" read_perm_acl = [".r:*",".rlistings"] when "pw" write_perm_acl = ["*"] when "prw" read_perm_acl = [".r:*",".rlistings"] write_perm_acl = ["*"] end elsif valid_account_perms.include?(perm) # tackle the user access differently unless (users.nil? || users.empty?) # return the correct acls tenant_id = "*" # this might change later acl_array = users.map { |u| "#{tenant_id}:#{u}" } #acl_string = acl_array.join(',') case perm when "r" read_perm_acl = acl_array when "w" write_perm_acl = acl_array when "rw" read_perm_acl = acl_array write_perm_acl = acl_array end end end return read_perm_acl, write_perm_acl end |
#public_url(container = nil, object = nil) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/fog/hp/storage.rb', line 77 def public_url(container=nil, object=nil) public_url = nil unless container.nil? if object.nil? # return container public url public_url = "#{url}/#{Fog::HP.escape(container)}" else # return object public url public_url = "#{url}/#{Fog::HP.escape(container)}/#{Fog::HP.escape(object)}" end end public_url end |
#url ⇒ Object
73 74 75 |
# File 'lib/fog/hp/storage.rb', line 73 def url "#{@scheme}://#{@host}:#{@port}#{@path}" end |