Browse Source

add IncompleteSignature to signayure_does_not_match_wrapper.go

wenzuochao 6 năm trước cách đây
mục cha
commit
9ce7a7a8eb

+ 35 - 0
integration/core_test.go

@@ -2,6 +2,7 @@ package integration
 
 import (
 	"os"
+	"strings"
 	"testing"
 	"time"
 
@@ -89,6 +90,23 @@ func Test_DescribeRegionsWithCommonRequestWithError(t *testing.T) {
 	assert.Equal(t, "The specified parameter \"Action or Version\" is not valid.", realerr.Message())
 }
 
+func Test_DescribeRegionsWithCommonRequestWithIncompleteSignature(t *testing.T) {
+	request := requests.NewCommonRequest()
+	request.Version = "2014-05-26"
+	request.AcceptFormat = "json"
+	request.SetScheme("https")
+	request.Method = "POST"
+	request.ApiName = "DescribeRegions"
+	request.SetDomain("ecs.aliyuncs.com")
+	request.TransToAcsRequest()
+	client, err := sdk.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), strings.ToUpper(os.Getenv("ACCESS_KEY_SECRET")))
+	assert.Nil(t, err)
+	_, err = client.ProcessCommonRequest(request)
+	realerr := err.(*errors.ServerError)
+	assert.Equal(t, "IncompleteSignature", realerr.ErrorCode())
+	assert.Equal(t, "InvalidAccessKeySecret: Please check you AccessKeySecret", realerr.Recommend())
+}
+
 func Test_DescribeClustersWithCommonRequestWithROA(t *testing.T) {
 	client, err := sdk.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), os.Getenv("ACCESS_KEY_SECRET"))
 	assert.Nil(t, err)
@@ -104,6 +122,23 @@ func Test_DescribeClustersWithCommonRequestWithROA(t *testing.T) {
 	assert.Contains(t, err.Error(), "Request url is invalid")
 }
 
+func Test_DescribeClustersWithCommonRequestWithSignatureDostNotMatch(t *testing.T) {
+	client, err := sdk.NewClientWithAccessKey(os.Getenv("REGION_ID"), os.Getenv("ACCESS_KEY_ID"), strings.ToUpper(os.Getenv("ACCESS_KEY_SECRET")))
+	assert.Nil(t, err)
+	request := requests.NewCommonRequest()
+	request.Method = "GET"
+	request.Domain = "cs.aliyuncs.com"
+	request.Version = "2015-12-15"
+	request.PathPattern = "/clusters/[ClusterId]"
+	request.QueryParams["RegionId"] = os.Getenv("REGION_ID")
+	request.TransToAcsRequest()
+	_, err = client.ProcessCommonRequest(request)
+	assert.NotNil(t, err)
+	real, _ := err.(*errors.ServerError)
+	assert.Contains(t, real.Recommend(), "InvalidAccessKeySecret: Please check you AccessKeySecret")
+	assert.Equal(t, real.ErrorCode(), "SignatureDoesNotMatch")
+}
+
 func Test_DescribeClustersWithCommonRequestWithROAWithSTStoken(t *testing.T) {
 	assumeresponse, err := createAssumeRole()
 	assert.Nil(t, err)

+ 6 - 4
sdk/errors/signature_does_not_match_wrapper.go

@@ -7,7 +7,8 @@ import (
 )
 
 const SignatureDostNotMatchErrorCode = "SignatureDoesNotMatch"
-const MessagePrefix = "Specified signature is not matched with our calculation. server string to sign is:"
+const IncompleteSignatureErrorCode = "IncompleteSignature"
+const MessageContain = "server string to sign is:"
 
 var debug utils.Debug
 
@@ -20,10 +21,11 @@ type SignatureDostNotMatchWrapper struct {
 
 func (*SignatureDostNotMatchWrapper) tryWrap(error *ServerError, wrapInfo map[string]string) (ok bool) {
 	clientStringToSign := wrapInfo["StringToSign"]
-	if error.errorCode == SignatureDostNotMatchErrorCode && clientStringToSign != "" {
+	if (error.errorCode == SignatureDostNotMatchErrorCode || error.errorCode == IncompleteSignatureErrorCode) && clientStringToSign != "" {
 		message := error.message
-		if strings.HasPrefix(message, MessagePrefix) {
-			serverStringToSign := message[len(MessagePrefix):]
+		if strings.Contains(message, MessageContain) {
+			str := strings.Split(message, MessageContain)
+			serverStringToSign := str[1]
 
 			if clientStringToSign == serverStringToSign {
 				// user secret is error

+ 13 - 0
sdk/errors/signature_does_not_match_wrapper_test.go

@@ -41,3 +41,16 @@ func TestWrapMatch(t *testing.T) {
 	assert.True(t, wrapped)
 	assert.Equal(t, "InvalidAccessKeySecret: Please check you AccessKeySecret", se.Recommend())
 }
+
+func TestWrapMatchWhenCodeIsIncompleteSignature(t *testing.T) {
+	wrapper := &SignatureDostNotMatchWrapper{}
+	err := NewServerError(400, `{"Code":"IncompleteSignature","Message":"Specified signature is not matched with our calculation. server string to sign is:match"}`, "comment")
+	se, ok := err.(*ServerError)
+	assert.True(t, ok)
+	assert.Equal(t, "IncompleteSignature", se.ErrorCode())
+	m := make(map[string]string)
+	m["StringToSign"] = "match"
+	wrapped := wrapper.tryWrap(se, m)
+	assert.True(t, wrapped)
+	assert.Equal(t, "InvalidAccessKeySecret: Please check you AccessKeySecret", se.Recommend())
+}