class Miasma::Contrib::AzureApiCore::SignatureAzure
Constants
- SIGNATURE_HEADERS
Required Header Items
Attributes
account_name[R]
@return [String] name of account
hmac[R]
@return [Hmac]
Public Class Methods
new(shared_key, account_name)
click to toggle source
# File lib/miasma/contrib/azure.rb, line 132 def initialize(shared_key, account_name) shared_key = Base64.decode64(shared_key) @hmac = Hmac.new('sha256', shared_key) @shared_key = shared_key @account_name = account_name end
Public Instance Methods
build_canonical_headers(headers)
click to toggle source
# File lib/miasma/contrib/azure.rb, line 167 def build_canonical_headers(headers) headers.map do |key, value| key = key.to_s.downcase if(key.start_with?('x-ms-')) [key, value].map(&:strip).join(':') end end.compact.sort.join("\n") end
build_canonical_resource(resource)
click to toggle source
# File lib/miasma/contrib/azure.rb, line 176 def build_canonical_resource(resource) [ "/#{account_name}#{resource[:path]}", *resource.fetch(:params, {}).map{|key, value| key = key.downcase.strip value = value.is_a?(Array) ? value.map(&:strip).sort.join(',') : value [key, value].join(':') }.sort ].join("\n") end
generate(http_method, path, opts)
click to toggle source
# File lib/miasma/contrib/azure.rb, line 139 def generate(http_method, path, opts) signature = generate_signature( http_method, opts[:headers], opts.merge(:path => path) ) "SharedKey #{account_name}:#{signature}" end
generate_signature(http_method, headers, resource)
click to toggle source
# File lib/miasma/contrib/azure.rb, line 148 def generate_signature(http_method, headers, resource) headers = headers.to_smash headers.delete('Content-Length') if headers['Content-Length'].to_s == '0' to_sign = [ http_method.to_s.upcase, *self.class.const_get(:SIGNATURE_HEADERS).map{|head_name| headers.fetch(head_name, '') }, build_canonical_headers(headers), build_canonical_resource(resource) ].join("\n") signature = sign_request(to_sign) end
sign_request(request)
click to toggle source
# File lib/miasma/contrib/azure.rb, line 162 def sign_request(request) result = hmac.sign(request) Base64.encode64(result).strip end