24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
# File 'lib/qingcloud/sdk/request/signer.rb', line 24
def self.do(input)
input[:request_params].each do |k, v|
v = CGI.escape v.to_s.gsub(' ', '%20')
input[:request_params][k] = v.gsub '%2520', '%20'
end
string_to_sign = "#{input[:request_method]}\n#{input[:config][:uri]}\n" \
"#{input[:request_params].sort.map { |k, v| "#{k}=#{v}" }.join('&')}"
signature = Base64.encode64(
OpenSSL::HMAC.digest(
OpenSSL::Digest.new('sha256'),
input[:config][:qy_secret_access_key].to_s,
string_to_sign,
),
).strip
signature.tr! ' ', '+'
signature = CGI.escape signature
input[:request_params][:signature] = signature
Logger.debug "QingCloud request string to sign: [#{input[:id]}] #{string_to_sign}"
Logger.debug "QingCloud request signature: [#{input[:id]}] #{signature}"
input
end
|