class QingStor::SDK::Signer
Public Class Methods
canonicalized_headers(input)
click to toggle source
# File lib/qingstor/sdk/request/signer.rb, line 91 def self.canonicalized_headers(input) h = {} input[:request_headers].each { |k, v| h[k.to_s.strip.downcase] = v.to_s.strip } h.keys.sort.select { |k| k.start_with? 'x-qs-' }.map { |k| "#{k}:#{h[k]}\n" }.join '' end
canonicalized_resource(input)
click to toggle source
# File lib/qingstor/sdk/request/signer.rb, line 97 def self.canonicalized_resource(input) params = input[:request_params].keys.sort.map { |k| if sub_resource? k.to_s v = input[:request_params][k].to_s.strip !v.nil? && v != '' ? "#{k}=#{CGI.unescape v}" : k end }.compact.join '&' params = input[:request_uri].include?('?') ? "&#{params}" : "?#{params}" if params != '' "#{input[:request_uri]}#{params}" end
is_anonymous?(input)
click to toggle source
# File lib/qingstor/sdk/request/signer.rb, line 117 def self.is_anonymous?(input) if input[:config].nil? return true end input[:config][:access_key_id].blank? && input[:config][:secret_access_key].blank? end
query_signature(input, expires)
click to toggle source
# File lib/qingstor/sdk/request/signer.rb, line 62 def self.query_signature(input, expires) string_to_sign = query_string_to_sign(input, expires) Logger.debug "QingStor query request string to sign: [#{input[:id]}] #{string_to_sign}" CGI.escape Base64.encode64( OpenSSL::HMAC.digest( OpenSSL::Digest.new('sha256'), input[:config][:secret_access_key].to_s, string_to_sign, ), ).strip end
query_string_to_sign(input, expires)
click to toggle source
# File lib/qingstor/sdk/request/signer.rb, line 83 def self.query_string_to_sign(input, expires) string_to_sign = "#{input[:request_method]}\n" \ "#{input[:request_headers][:'Content-MD5']}\n" \ "#{input[:request_headers][:'Content-Type']}\n" \ "#{expires}\n" "#{string_to_sign}#{canonicalized_headers input}#{canonicalized_resource input}" end
sign(input)
click to toggle source
# File lib/qingstor/sdk/request/signer.rb, line 26 def self.sign(input) unless is_anonymous? input authorization = "QS #{input[:config][:access_key_id]}:#{signature input}" input[:request_headers][:Authorization] = authorization Logger.debug "QingStor request authorization: [#{input[:id]}] #{authorization}" end input end
sign_query(input, expires)
click to toggle source
# File lib/qingstor/sdk/request/signer.rb, line 37 def self.sign_query(input, expires) unless is_anonymous? input input[:request_params][:signature] = query_signature input, expires input[:request_params][:access_key_id] = input[:config][:access_key_id] input[:request_params][:expires] = expires Logger.debug "QingStor query signature: [#{input[:id]}] #{input[:request_params][:signature]}" end input end
signature(input)
click to toggle source
# File lib/qingstor/sdk/request/signer.rb, line 49 def self.signature(input) string_to_sign = string_to_sign(input) Logger.debug "QingStor request string to sign: [#{input[:id]}] #{string_to_sign}" Base64.encode64( OpenSSL::HMAC.digest( OpenSSL::Digest.new('sha256'), input[:config][:secret_access_key].to_s, string_to_sign, ), ).strip end
string_to_sign(input)
click to toggle source
# File lib/qingstor/sdk/request/signer.rb, line 75 def self.string_to_sign(input) string_to_sign = "#{input[:request_method]}\n" \ "#{input[:request_headers][:'Content-MD5']}\n" \ "#{input[:request_headers][:'Content-Type']}\n" \ "#{input[:request_headers][:Date]}\n" "#{string_to_sign}#{canonicalized_headers input}#{canonicalized_resource input}" end
sub_resource?(key)
click to toggle source
# File lib/qingstor/sdk/request/signer.rb, line 108 def self.sub_resource?(key) %w[ acl append cname cors delete image lifecycle logging mirror notification part_number policy position stats upload_id uploads response-expires response-cache-control response-content-type response-content-language response-content-encoding response-content-disposition ].include? key end