Class: AliyunSDK::Signer

Inherits:
Object
  • Object
show all
Defined in:
lib/aliyun_sdk/signer.rb

Class Method Summary collapse

Class Method Details

.percent_encode(str) ⇒ Object



16
17
18
# File 'lib/aliyun_sdk/signer.rb', line 16

def self.percent_encode(str)
  CGI.escape(str.to_s).gsub("+", "%20").gsub("*", "%2A").gsub("%7E", "~")
end

.sign(params, access_key_secret, http_method = "GET") ⇒ Object



7
8
9
10
11
12
13
14
# File 'lib/aliyun_sdk/signer.rb', line 7

def self.sign(params, access_key_secret, http_method = "GET")
  sorted = params.sort.to_h
  canonicalized = sorted.map { |k, v| "#{percent_encode(k)}=#{percent_encode(v)}" }.join("&")
  string_to_sign = "#{http_method.upcase}&%2F&" + percent_encode(canonicalized)
  key = "#{access_key_secret}&"
  digest = OpenSSL::HMAC.digest("sha1", key, string_to_sign)
  Base64.strict_encode64(digest)
end