github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/openstack/obs/authV2.go (about) 1 package obs 2 3 import ( 4 "strings" 5 ) 6 7 func getV2StringToSign(method, canonicalizedURL string, headers map[string][]string, isObs bool) string { 8 stringToSign := strings.Join([]string{method, "\n", attachHeaders(headers, isObs), "\n", canonicalizedURL}, "") 9 10 var isSecurityToken bool 11 var securityToken []string 12 if isObs { 13 securityToken, isSecurityToken = headers[HEADER_STS_TOKEN_OBS] 14 } else { 15 securityToken, isSecurityToken = headers[HEADER_STS_TOKEN_AMZ] 16 } 17 var query []string 18 if !isSecurityToken { 19 parmas := strings.Split(canonicalizedURL, "?") 20 if len(parmas) > 1 { 21 query = strings.Split(parmas[1], "&") 22 for _, value := range query { 23 if strings.HasPrefix(value, HEADER_STS_TOKEN_AMZ+"=") || strings.HasPrefix(value, HEADER_STS_TOKEN_OBS+"=") { 24 if value[len(HEADER_STS_TOKEN_AMZ)+1:] != "" { 25 securityToken = []string{value[len(HEADER_STS_TOKEN_AMZ)+1:]} 26 isSecurityToken = true 27 } 28 } 29 } 30 } 31 } 32 logStringToSign := stringToSign 33 if isSecurityToken && len(securityToken) > 0 { 34 logStringToSign = strings.Replace(logStringToSign, securityToken[0], "******", -1) 35 } 36 doLog(LEVEL_DEBUG, "The v2 auth stringToSign:\n%s", logStringToSign) 37 return stringToSign 38 } 39 40 func v2Auth(ak, sk, method, canonicalizedURL string, headers map[string][]string, isObs bool) map[string]string { 41 stringToSign := getV2StringToSign(method, canonicalizedURL, headers, isObs) 42 return map[string]string{"Signature": Base64Encode(HmacSha1([]byte(sk), []byte(stringToSign)))} 43 }