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  }