浏览代码

If `Content-Type` is `application/json;charset=UTF-8`, `RequestBody` is empty.
Signed-off-by: odg0318 <odg0318@gmail.com>

odg0318 7 年之前
父节点
当前提交
6ac73d34e4
共有 2 个文件被更改,包括 67 次插入1 次删除
  1. 7 1
      pkg/authorization/authz.go
  2. 60 0
      pkg/authorization/authz_unix_test.go

+ 7 - 1
pkg/authorization/authz.go

@@ -5,6 +5,7 @@ import (
 	"bytes"
 	"bytes"
 	"fmt"
 	"fmt"
 	"io"
 	"io"
+	"mime"
 	"net/http"
 	"net/http"
 	"strings"
 	"strings"
 
 
@@ -153,7 +154,12 @@ func sendBody(url string, header http.Header) bool {
 	}
 	}
 
 
 	// body is sent only for text or json messages
 	// body is sent only for text or json messages
-	return header.Get("Content-Type") == "application/json"
+	contentType, _, err := mime.ParseMediaType(header.Get("Content-Type"))
+	if err != nil {
+		return false
+	}
+
+	return contentType == "application/json"
 }
 }
 
 
 // headers returns flatten version of the http headers excluding authorization
 // headers returns flatten version of the http headers excluding authorization

+ 60 - 0
pkg/authorization/authz_unix_test.go

@@ -172,6 +172,66 @@ func TestDrainBody(t *testing.T) {
 	}
 	}
 }
 }
 
 
+func TestSendBody(t *testing.T) {
+	var (
+		url       = "nothing.com"
+		testcases = []struct {
+			contentType string
+			expected    bool
+		}{
+			{
+				contentType: "application/json",
+				expected:    true,
+			},
+			{
+				contentType: "Application/json",
+				expected:    true,
+			},
+			{
+				contentType: "application/JSON",
+				expected:    true,
+			},
+			{
+				contentType: "APPLICATION/JSON",
+				expected:    true,
+			},
+			{
+				contentType: "application/json; charset=utf-8",
+				expected:    true,
+			},
+			{
+				contentType: "application/json;charset=utf-8",
+				expected:    true,
+			},
+			{
+				contentType: "application/json; charset=UTF8",
+				expected:    true,
+			},
+			{
+				contentType: "application/json;charset=UTF8",
+				expected:    true,
+			},
+			{
+				contentType: "text/html",
+				expected:    false,
+			},
+			{
+				contentType: "",
+				expected:    false,
+			},
+		}
+	)
+
+	for _, testcase := range testcases {
+		header := http.Header{}
+		header.Set("Content-Type", testcase.contentType)
+
+		if b := sendBody(url, header); b != testcase.expected {
+			t.Fatalf("Unexpected Content-Type; Expected: %t, Actual: %t", testcase.expected, b)
+		}
+	}
+}
+
 func TestResponseModifierOverride(t *testing.T) {
 func TestResponseModifierOverride(t *testing.T) {
 	r := httptest.NewRecorder()
 	r := httptest.NewRecorder()
 	m := NewResponseModifier(r)
 	m := NewResponseModifier(r)