Module: Fog::Storage::HP::Utils
Instance Method Summary collapse
- #cdn ⇒ Object
- #generate_object_temp_url(container, object, expires_secs, method) ⇒ Object
- #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
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/fog/hp/storage.rb', line 50 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, :connection_options => @connection_options ) if @cdn.enabled? @cdn end else nil end end |
#generate_object_temp_url(container, object, expires_secs, method) ⇒ Object
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
# File 'lib/fog/hp/storage.rb', line 150 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 # split up the storage uri uri = URI.parse(@hp_storage_uri) host = uri.host path = uri.path port = uri.port scheme = uri.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}:#{port}#{encoded_path}?temp_url_sig=#{signature}&temp_url_expires=#{expires}" end |
#header_to_perm_acl(read_header = nil, write_header = nil) ⇒ Object
143 144 145 146 147 148 |
# File 'lib/fog/hp/storage.rb', line 143 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
129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/fog/hp/storage.rb', line 129 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
88 89 90 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 |
# File 'lib/fog/hp/storage.rb', line 88 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
74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/fog/hp/storage.rb', line 74 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
70 71 72 |
# File 'lib/fog/hp/storage.rb', line 70 def url "#{@scheme}://#{@host}:#{@port}#{@path}" end |