|
@@ -20,6 +20,7 @@ import (
|
|
|
"io"
|
|
"io"
|
|
|
"sort"
|
|
"sort"
|
|
|
"strings"
|
|
"strings"
|
|
|
|
|
+ "net/url"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
type RoaRequest struct {
|
|
type RoaRequest struct {
|
|
@@ -47,7 +48,12 @@ func (request *RoaRequest) GetQueries() string {
|
|
|
return request.queries
|
|
return request.queries
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// for sign method, need not url encoded
|
|
|
func (request *RoaRequest) BuildQueries() string {
|
|
func (request *RoaRequest) BuildQueries() string {
|
|
|
|
|
+ return request.buildQueries(false)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (request *RoaRequest) buildQueries(needParamEncode bool) string {
|
|
|
// replace path params with value
|
|
// replace path params with value
|
|
|
path := request.pathPattern
|
|
path := request.pathPattern
|
|
|
for key, value := range request.PathParams {
|
|
for key, value := range request.PathParams {
|
|
@@ -77,22 +83,36 @@ func (request *RoaRequest) BuildQueries() string {
|
|
|
urlBuilder.WriteString(queryKey)
|
|
urlBuilder.WriteString(queryKey)
|
|
|
if value := queryParams[queryKey]; len(value) > 0 {
|
|
if value := queryParams[queryKey]; len(value) > 0 {
|
|
|
urlBuilder.WriteString("=")
|
|
urlBuilder.WriteString("=")
|
|
|
- urlBuilder.WriteString(value)
|
|
|
|
|
|
|
+ if needParamEncode{
|
|
|
|
|
+ urlBuilder.WriteString(url.QueryEscape(value))
|
|
|
|
|
+ }else{
|
|
|
|
|
+ urlBuilder.WriteString(value)
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
if i < len(queryKeys)-1 {
|
|
if i < len(queryKeys)-1 {
|
|
|
urlBuilder.WriteString("&")
|
|
urlBuilder.WriteString("&")
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- request.queries = urlBuilder.String()
|
|
|
|
|
|
|
+ result := urlBuilder.String()
|
|
|
|
|
+ result = popStandardUrlencode(result)
|
|
|
|
|
+ request.queries = result
|
|
|
return request.queries
|
|
return request.queries
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+func popStandardUrlencode(stringToSign string)(result string){
|
|
|
|
|
+ result = strings.Replace(stringToSign, "+", "%20", -1)
|
|
|
|
|
+ result = strings.Replace(result, "*", "%2A", -1)
|
|
|
|
|
+ result = strings.Replace(result, "%7E", "~", -1)
|
|
|
|
|
+ return
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
func (request *RoaRequest) GetUrl() string {
|
|
func (request *RoaRequest) GetUrl() string {
|
|
|
return strings.ToLower(request.Scheme) + "://" + request.Domain + ":" + request.Port + request.GetQueries()
|
|
return strings.ToLower(request.Scheme) + "://" + request.Domain + ":" + request.Port + request.GetQueries()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (request *RoaRequest) BuildUrl() string {
|
|
func (request *RoaRequest) BuildUrl() string {
|
|
|
- return strings.ToLower(request.Scheme) + "://" + request.Domain + ":" + request.Port + request.BuildQueries()
|
|
|
|
|
|
|
+ // for network trans, need url encoded
|
|
|
|
|
+ return strings.ToLower(request.Scheme) + "://" + request.Domain + ":" + request.Port + request.buildQueries(true)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (request *RoaRequest) addPathParam(key, value string) {
|
|
func (request *RoaRequest) addPathParam(key, value string) {
|