瀏覽代碼

由温仰发起的CORE SDK自动发布, BUILD_ID=106, 版本号:0.4.0

Signed-off-by: haowei.yao <haowei.yao@alibaba-inc.com>
haowei.yao 8 年之前
父節點
當前提交
45f5c676d7

+ 3 - 0
ChangeLog.txt

@@ -1,3 +1,6 @@
+2017-12-08 Version: 0.4.0
+1, support endpoint.xml resolver
+
 2017-12-08 Version: 0.3.1
 1, Add ARMSQueryDataSet, WhereInDimQuery interface.
 

+ 12 - 12
sdk/auth/roa_signature_composer.go

@@ -22,16 +22,16 @@ import (
 	"strings"
 )
 
-func signRoaRequest(request *requests.RoaRequest, signer Signer, regionId string) {
+func signRoaRequest(request requests.AcsRequest, signer Signer, regionId string) {
 	completeROASignParams(request, signer, regionId)
 	stringToSign := buildRoaStringToSign(request)
 	signature := signer.Sign(stringToSign, "")
-	request.Headers["Authorization"] = "acs " + signer.GetAccessKeyId() + ":" + signature
+	request.GetHeaders()["Authorization"] = "acs " + signer.GetAccessKeyId() + ":" + signature
 }
 
-func completeROASignParams(request *requests.RoaRequest, signer Signer, regionId string) {
+func completeROASignParams(request requests.AcsRequest, signer Signer, regionId string) {
 	// complete query params
-	queryParams := request.QueryParams
+	queryParams := request.GetQueryParams()
 	if _, ok := queryParams["RegionId"]; !ok {
 		queryParams["RegionId"] = regionId
 	}
@@ -42,16 +42,16 @@ func completeROASignParams(request *requests.RoaRequest, signer Signer, regionId
 	}
 
 	// complete header params
-	headerParams := request.Headers
+	headerParams := request.GetHeaders()
 	headerParams["Date"] = utils.GetTimeInFormatRFC2616()
 	headerParams["x-acs-signature-method"] = signer.GetName()
 	headerParams["x-acs-signature-version"] = signer.GetVersion()
-	if request.FormParams != nil && len(request.FormParams) > 0 {
-		formString := utils.GetUrlFormedMap(request.FormParams)
-		request.Content = []byte(formString)
+	if request.GetFormParams() != nil && len(request.GetFormParams()) > 0 {
+		formString := utils.GetUrlFormedMap(request.GetFormParams())
+		request.SetContent([]byte(formString))
 		headerParams["Content-Type"] = requests.Form
 	}
-	contentMD5 := utils.GetMD5Base64(request.Content)
+	contentMD5 := utils.GetMD5Base64(request.GetContent())
 	headerParams["Content-MD5"] = contentMD5
 	if _, contains := headerParams["Content-Type"]; !contains {
 		headerParams["Content-Type"] = requests.Raw
@@ -66,12 +66,12 @@ func completeROASignParams(request *requests.RoaRequest, signer Signer, regionId
 	}
 }
 
-func buildRoaStringToSign(request *requests.RoaRequest) (stringToSign string) {
+func buildRoaStringToSign(request requests.AcsRequest) (stringToSign string) {
 
-	headers := request.Headers
+	headers := request.GetHeaders()
 
 	stringToSignBuilder := bytes.Buffer{}
-	stringToSignBuilder.WriteString(request.Method)
+	stringToSignBuilder.WriteString(request.GetMethod())
 	stringToSignBuilder.WriteString(requests.HeaderSeparator)
 
 	// append header keys for sign

+ 11 - 11
sdk/auth/rpc_signature_composer.go

@@ -22,15 +22,15 @@ import (
 	"strings"
 )
 
-func signRpcRequest(request *requests.RpcRequest, signer Signer, regionId string) {
+func signRpcRequest(request requests.AcsRequest, signer Signer, regionId string) {
 	completeRpcSignParams(request, signer, regionId)
 	stringToSign := buildRpcStringToSign(request)
 	signature := signer.Sign(stringToSign, "&")
-	request.QueryParams["Signature"] = signature
+	request.GetQueryParams()["Signature"] = signature
 }
 
-func completeRpcSignParams(request *requests.RpcRequest, signer Signer, regionId string) {
-	queryParams := request.QueryParams
+func completeRpcSignParams(request requests.AcsRequest, signer Signer, regionId string) {
+	queryParams := request.GetQueryParams()
 	queryParams["Version"] = request.GetVersion()
 	queryParams["Action"] = request.GetActionName()
 	queryParams["Format"] = request.GetAcceptFormat()
@@ -50,17 +50,17 @@ func completeRpcSignParams(request *requests.RpcRequest, signer Signer, regionId
 		}
 	}
 
-	request.Headers["Content-Type"] = requests.Form
-	formString := utils.GetUrlFormedMap(request.FormParams)
-	request.Content = []byte(formString)
+	request.GetHeaders()["Content-Type"] = requests.Form
+	formString := utils.GetUrlFormedMap(request.GetFormParams())
+	request.SetContent([]byte(formString))
 }
 
-func buildRpcStringToSign(request *requests.RpcRequest) (stringToSign string) {
+func buildRpcStringToSign(request requests.AcsRequest) (stringToSign string) {
 	signParams := make(map[string]string)
-	for key, value := range request.QueryParams {
+	for key, value := range request.GetQueryParams() {
 		signParams[key] = value
 	}
-	for key, value := range request.FormParams {
+	for key, value := range request.GetFormParams() {
 		signParams[key] = value
 	}
 
@@ -75,6 +75,6 @@ func buildRpcStringToSign(request *requests.RpcRequest) (stringToSign string) {
 	stringToSign = strings.Replace(stringToSign, "*", "%2A", -1)
 	stringToSign = strings.Replace(stringToSign, "%7E", "~", -1)
 	stringToSign = url.QueryEscape(stringToSign)
-	stringToSign = request.Method + "&%2F&" + stringToSign
+	stringToSign = request.GetMethod() + "&%2F&" + stringToSign
 	return
 }

+ 5 - 9
sdk/auth/signer.go

@@ -64,18 +64,14 @@ func NewSignerWithCredential(credential Credential, commonApi func(request *requ
 }
 
 func Sign(request requests.AcsRequest, signer Signer, regionId string) (err error) {
-	switch instance := request.(type) {
-	case *requests.RoaRequest:
+	switch request.GetStyle() {
+	case requests.ROA:
 		{
-			signRoaRequest(instance, signer, regionId)
+			signRoaRequest(request, signer, regionId)
 		}
-	case *requests.RpcRequest:
+	case requests.RPC:
 		{
-			signRpcRequest(instance, signer, regionId)
-		}
-	case *requests.CommonRequest:
-		{
-			err = Sign(instance.Ontology, signer, regionId)
+			signRpcRequest(request, signer, regionId)
 		}
 	default:
 		message := fmt.Sprintf(errors.UnknownRequestTypeMessage, reflect.TypeOf(request))

+ 9 - 1
sdk/client_test.go

@@ -285,6 +285,14 @@ func getFtTestRpcRequestForEndpointLocation() (request *requests.RpcRequest) {
 	return
 }
 
+func getFtTestRpcRequestForEndpointXml() (request *requests.RpcRequest) {
+	request = &requests.RpcRequest{}
+	request.InitWithApiInfo("Ft", "2016-01-01", "TestRpcApi", "", "")
+	request.RegionId = "cn-hangzhou"
+	request.QueryParams["QueryParam"] = "QueryParamValue"
+	return
+}
+
 func TestCommonRpcRequest(t *testing.T) {
 	rpcRequest := requests.NewCommonRequest()
 	rpcRequest.Product = "Ft"
@@ -335,7 +343,7 @@ func TestCommonRoaRequest(t *testing.T) {
 }
 
 func TestRpcGetForEndpointXml(t *testing.T) {
-	request := getFtTestRpcRequestForEndpointLocation()
+	request := getFtTestRpcRequestForEndpointXml()
 	request.Method = requests.GET
 	request.RegionId = "cn-shanghai"
 

+ 19 - 11
sdk/endpoints/local_xml_resolver.go

@@ -19,6 +19,10 @@ import (
 	"fmt"
 	"io/ioutil"
 	"os"
+	"os/exec"
+	"path/filepath"
+	"runtime"
+	"strings"
 	"sync"
 )
 
@@ -30,25 +34,17 @@ type LocalXmlResolver struct {
 
 func (resolver *LocalXmlResolver) TryResolve(param *ResolveParam) (endpoint string, support bool, err error) {
 	readXmlOnce.Do(func() {
-		dir, _ := os.Getwd()
+		_, file, _, _ := runtime.Caller(0)
+		filename := filepath.Join(file, "../endpoints.xml")
 
-		file, err := os.Open(dir + "/endpoints/endpoints.xml")
+		data, err := ioutil.ReadFile(filename)
 		if err != nil {
-			fmt.Printf("error: %v", err)
-			support = false
-			return
-		}
-		defer file.Close()
-		data, err := ioutil.ReadAll(file)
-		if err != nil {
-			fmt.Printf("error: %v", err)
 			support = false
 			return
 		}
 
 		err = xml.Unmarshal(data, &v)
 		if err != nil {
-			fmt.Printf("error: %v", err)
 			support = false
 			return
 		}
@@ -72,6 +68,18 @@ func (resolver *LocalXmlResolver) TryResolve(param *ResolveParam) (endpoint stri
 	return
 }
 
+func GetCurrentPath() string {
+	s, err := exec.LookPath(os.Args[0])
+	if err != nil {
+		fmt.Println(err.Error())
+	}
+	s = strings.Replace(s, "\\", "/", -1)
+	s = strings.Replace(s, "\\\\", "/", -1)
+	i := strings.LastIndex(s, "/")
+	path := string(s[0 : i+1])
+	return path
+}
+
 type Endpoints struct {
 	XMLName      xml.Name   `xml:"Endpoints"`
 	EndpointList []Endpoint `xml:"Endpoint"`

+ 30 - 0
sdk/requests/acs_reqeust.go

@@ -60,14 +60,20 @@ type AcsRequest interface {
 	GetRegionId() string
 	GetUrl() string
 	GetHeaders() map[string]string
+	GetQueryParams() map[string]string
+	GetFormParams() map[string]string
+	GetContent() []byte
 	GetBodyReader() io.Reader
 	GetStyle() string
 	GetProduct() string
+	GetVersion() string
+	GetActionName() string
 	GetAcceptFormat() string
 	GetLocationServiceCode() string
 	GetLocationEndpointType() string
 
 	SetDomain(domain string)
+	SetContent(content []byte)
 
 	GetQueries() string
 	addHeaderParam(key, value string)
@@ -101,6 +107,30 @@ type baseRequest struct {
 	queries string
 }
 
+func (request *baseRequest) GetQueryParams() map[string]string {
+	return request.QueryParams
+}
+
+func (request *baseRequest) GetFormParams() map[string]string {
+	return request.FormParams
+}
+
+func (request *baseRequest) GetContent() []byte {
+	return request.Content
+}
+
+func (request *baseRequest) GetVersion() string {
+	return request.version
+}
+
+func (request *baseRequest) GetActionName() string {
+	return request.actionName
+}
+
+func (request *baseRequest) SetContent(content []byte) {
+	request.Content = content
+}
+
 func (request *baseRequest) addHeaderParam(key, value string) {
 	request.Headers[key] = value
 }