Merge pull request #27 from tw1nk/separate-header-form-parsing

jws: Separate header and form parsing
diff --git a/jws/jws.go b/jws/jws.go
index c8c9ca4..49e7b97 100644
--- a/jws/jws.go
+++ b/jws/jws.go
@@ -430,18 +430,38 @@
 	return nil, false
 }
 
-// ParseFromRequest tries to find the JWS in an http.Request.
-// This method will call ParseMultipartForm if there's no token in the header.
-func ParseFromRequest(req *http.Request, format Format, u ...json.Unmarshaler) (JWS, error) {
+// ParseFromHeader tries to find the JWS in an http.Request header.
+func ParseFromHeader(req *http.Request, format Format, u ...json.Unmarshaler) (JWS, error) {
 	if b, ok := fromHeader(req); ok {
 		return parseJumpTable[format](b, u...)
 	}
+	return nil, ErrNoTokenInRequest
+}
+
+// ParseFromForm tries to find the JWS in an http.Request form request.
+func ParseFromForm(req *http.Request, format Format, u ...json.Unmarshaler) (JWS, error) {
 	if b, ok := fromForm(req); ok {
 		return parseJumpTable[format](b, u...)
 	}
 	return nil, ErrNoTokenInRequest
 }
 
+// ParseFromRequest tries to find the JWS in an http.Request.
+// This method will call ParseMultipartForm if there's no token in the header.
+func ParseFromRequest(req *http.Request, format Format, u ...json.Unmarshaler) (JWS, error) {
+	token, err := ParseFromHeader(req, format, u...)
+	if err == nil {
+		return token, nil
+	}
+
+	token, err = ParseFromForm(req, format, u...)
+	if err == nil {
+		return token, nil
+	}
+
+	return nil, err
+}
+
 // IgnoreDupes should be set to true if the internal duplicate header key check
 // should ignore duplicate Header keys instead of reporting an error when
 // duplicate Header keys are found.