func()

in datahub/restclient.go [237:276]


func (client *RestClient) buildSignature(header *http.Header, method, url string) {
	builder := make([]string, 0, 5)
	builder = append(builder, method)
	builder = append(builder, header.Get(httpHeaderContentType))
	builder = append(builder, header.Get(httpHeaderDate))

	headersToSign := make(map[string][]string)
	for k, v := range *header {
		lower := strings.ToLower(k)
		if strings.HasPrefix(lower, datahubHeadersPrefix) {
			headersToSign[lower] = v
		}
	}

	keys := make([]string, len(headersToSign))
	for k := range headersToSign {
		keys = append(keys, k)
	}
	sort.Strings(keys)
	for _, k := range keys {
		for _, v := range headersToSign[k] {
			builder = append(builder, fmt.Sprintf("%s:%s", k, v))
		}
	}

	builder = append(builder, url)
	canonString := strings.Join(builder, "\n")

	if log.IsLevelEnabled(log.DebugLevel) {
		log.Debugf("canonString: %s, accesskey: %s", canonString, client.Account.GetAccountKey())
	}

	hash := hmac.New(sha1.New, []byte(client.Account.GetAccountKey()))
	hash.Write([]byte(canonString))
	crypto := hash.Sum(nil)
	signature := base64.StdEncoding.EncodeToString(crypto)
	authorization := fmt.Sprintf("DATAHUB %s:%s", client.Account.GetAccountId(), signature)

	header.Add(httpHeaderAuthorization, authorization)
}