Closed banshiAnton closed 1 year ago
package main import ( "crypto/hmac" "crypto/sha1" "encoding/hex" "fmt" "log" "math/rand" "reflect" "sort" "strconv" "strings" "time" ) func arrayParams(params map[string]interface{}, prefix string) []string { paramsArr := []string{} for k, v := range params { var keyName string if len(prefix) == 0 { keyName = k } else { keyName = prefix + "[" + k + "]" } if reflect.TypeOf(v) != reflect.TypeOf("") { paramsArr = append(paramsArr, arrayParams(v.(map[string]interface{}), keyName)...) } else { paramsArr = append(paramsArr, keyName+"="+fmt.Sprintf("%v", v)) } } return paramsArr } func cbSessionSignature(params map[string]interface{}, authKey string) string { paramsArr := arrayParams(params, "") sort.Strings(paramsArr) paramsString := strings.Join(paramsArr, "&") log.Println(paramsString) mac := hmac.New(sha1.New, []byte(authKey)) mac.Write([]byte(paramsString)) expectedMAC := mac.Sum(nil) sign := hex.EncodeToString(expectedMAC) fmt.Println("cbSessionSignature sign var is: ", sign) return sign } func createCBSessionBody(application_id string, auth_key string, auth_secret string, nonce string, timestamp string, user map[string]interface{}) map[string]interface{} { bodyParams := map[string]interface{}{ "application_id": application_id, "auth_key": auth_key, "nonce": nonce, "timestamp": timestamp, "user": user, } signature := cbSessionSignature(bodyParams, auth_secret) bodyParams["signature"] = signature return bodyParams } func main() { now := time.Now() secs := now.Unix() application_id := "00000000" // APP CREDS auth_key := "xxxxxxxxxxxxxxxxx" // APP CREDS auth_secret := "yyyyyyyyyyyyyyyyyy" // APP CREDS nonce := strconv.Itoa(int(rand.Intn(9999))) // randon value timestamp := strconv.Itoa(int(secs)) // date timestamp user := map[string]interface{}{ "email": "user_email", "password": "user_password", } postBody := createCBSessionBody(application_id, auth_key, auth_secret, nonce, timestamp, user) fmt.Println(postBody) }