mirror of
https://github.com/minio/minio.git
synced 2025-04-19 02:05:24 -04:00
log: Dump signature request properly. (#4063)
Currently percent encoded strings are not properly encoded. `s3%!!(MISSING)A(MISSING)` Print properly as json encoded. `s3%3AObjectCreated%3A%2A`
This commit is contained in:
parent
60ea2b17ba
commit
f44f2e341c
14
cmd/utils.go
14
cmd/utils.go
@ -18,6 +18,7 @@ package cmd
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
|
"encoding/json"
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -28,8 +29,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"encoding/json"
|
|
||||||
|
|
||||||
humanize "github.com/dustin/go-humanize"
|
humanize "github.com/dustin/go-humanize"
|
||||||
"github.com/pkg/profile"
|
"github.com/pkg/profile"
|
||||||
)
|
)
|
||||||
@ -248,12 +247,15 @@ func dumpRequest(r *http.Request) string {
|
|||||||
Path string `json:"path"`
|
Path string `json:"path"`
|
||||||
Query string `json:"query"`
|
Query string `json:"query"`
|
||||||
Header http.Header `json:"header"`
|
Header http.Header `json:"header"`
|
||||||
}{r.Method, r.URL.Path, r.URL.RawQuery, header}
|
}{r.Method, getURLEncodedName(r.URL.Path), r.URL.RawQuery, header}
|
||||||
jsonBytes, err := json.Marshal(req)
|
jsonBytes, err := json.Marshal(&req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "<error dumping request>"
|
// Upon error just return Go-syntax representation of the value
|
||||||
|
return fmt.Sprintf("%#v", req)
|
||||||
}
|
}
|
||||||
return string(jsonBytes)
|
// Replace all '%' to '%%' so that printer format parser
|
||||||
|
// to ignore URL encoded values.
|
||||||
|
return strings.Replace(string(jsonBytes), "%", "%%", -1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// isFile - returns whether given path is a file or not.
|
// isFile - returns whether given path is a file or not.
|
||||||
|
@ -17,12 +17,14 @@
|
|||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"reflect"
|
"reflect"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -413,3 +415,44 @@ func TestCheckURL(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Testing dumping request function.
|
||||||
|
func TestDumpRequest(t *testing.T) {
|
||||||
|
req, err := http.NewRequest("GET", "http://localhost:9000?prefix=Hello%2AWorld%2A", nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
req.Header.Set("content-md5", "====test")
|
||||||
|
jsonReq := dumpRequest(req)
|
||||||
|
type jsonResult struct {
|
||||||
|
Method string `json:"method"`
|
||||||
|
Path string `json:"path"`
|
||||||
|
Query string `json:"query"`
|
||||||
|
Header http.Header `json:"header"`
|
||||||
|
}
|
||||||
|
jsonReq = strings.Replace(jsonReq, "%%", "%", -1)
|
||||||
|
res := jsonResult{}
|
||||||
|
if err = json.Unmarshal([]byte(jsonReq), &res); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Look for expected method.
|
||||||
|
if res.Method != "GET" {
|
||||||
|
t.Fatalf("Unexpected method %s, expected 'GET'", res.Method)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Look for expected query values
|
||||||
|
expectedQuery := url.Values{}
|
||||||
|
expectedQuery.Set("prefix", "Hello*World*")
|
||||||
|
if !reflect.DeepEqual(res.Query, expectedQuery.Encode()) {
|
||||||
|
t.Fatalf("Expected %#v, got %#v", expectedQuery, res.Query)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Look for expected header.
|
||||||
|
expectedHeader := http.Header{}
|
||||||
|
expectedHeader.Set("content-md5", "====test")
|
||||||
|
expectedHeader.Set("host", "localhost:9000")
|
||||||
|
if !reflect.DeepEqual(res.Header, expectedHeader) {
|
||||||
|
t.Fatalf("Expected %#v, got %#v", expectedHeader, res.Header)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user