mirror of
https://github.com/therootcompany/golib.git
synced 2026-03-29 03:24:07 +00:00
Revert "fix(jwt): accept JSON array for SpaceDelimited scope claim"
This reverts commit 2a9cec75efa9f36682e65b675cc8826d3460f455.
This commit is contained in:
parent
2a9cec75ef
commit
0fc1ae4da8
@ -220,23 +220,6 @@ func TestCov_SpaceDelimited_UnmarshalJSON(t *testing.T) {
|
|||||||
t.Fatalf("expected empty, got %v", s)
|
t.Fatalf("expected empty, got %v", s)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
t.Run("array_values", func(t *testing.T) {
|
|
||||||
var s SpaceDelimited
|
|
||||||
json.Unmarshal([]byte(`["openid","profile"]`), &s)
|
|
||||||
if len(s) != 2 || s[0] != "openid" || s[1] != "profile" {
|
|
||||||
t.Fatalf("got %v", s)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
t.Run("array_empty", func(t *testing.T) {
|
|
||||||
var s SpaceDelimited
|
|
||||||
json.Unmarshal([]byte(`[]`), &s)
|
|
||||||
if s == nil {
|
|
||||||
t.Fatal("expected non-nil empty SpaceDelimited, got nil")
|
|
||||||
}
|
|
||||||
if len(s) != 0 {
|
|
||||||
t.Fatalf("expected empty, got %v", s)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
t.Run("invalid", func(t *testing.T) {
|
t.Run("invalid", func(t *testing.T) {
|
||||||
var s SpaceDelimited
|
var s SpaceDelimited
|
||||||
if err := json.Unmarshal([]byte(`123`), &s); err == nil {
|
if err := json.Unmarshal([]byte(`123`), &s); err == nil {
|
||||||
|
|||||||
@ -89,31 +89,17 @@ type SpaceDelimited []string
|
|||||||
// UnmarshalJSON decodes a space-separated string into a slice.
|
// UnmarshalJSON decodes a space-separated string into a slice.
|
||||||
// An empty string "" unmarshals to a non-nil empty SpaceDelimited{},
|
// An empty string "" unmarshals to a non-nil empty SpaceDelimited{},
|
||||||
// preserving the distinction from a nil (absent) SpaceDelimited.
|
// preserving the distinction from a nil (absent) SpaceDelimited.
|
||||||
//
|
|
||||||
// As a compatibility extension, it also accepts a JSON array of strings,
|
|
||||||
// because some issuers (e.g. PaperOS) emit scope as [] instead of "".
|
|
||||||
func (s *SpaceDelimited) UnmarshalJSON(data []byte) error {
|
func (s *SpaceDelimited) UnmarshalJSON(data []byte) error {
|
||||||
var str string
|
var str string
|
||||||
if err := json.Unmarshal(data, &str); err == nil {
|
if err := json.Unmarshal(data, &str); err != nil {
|
||||||
|
return fmt.Errorf("space-delimited must be a string: %w: %w", ErrInvalidPayload, err)
|
||||||
|
}
|
||||||
if str == "" {
|
if str == "" {
|
||||||
*s = SpaceDelimited{}
|
*s = SpaceDelimited{}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
*s = strings.Fields(str)
|
*s = strings.Fields(str)
|
||||||
return nil
|
return nil
|
||||||
}
|
|
||||||
|
|
||||||
// Fallback: accept a JSON array of strings (non-standard but used in the wild).
|
|
||||||
var ss []string
|
|
||||||
if err := json.Unmarshal(data, &ss); err != nil {
|
|
||||||
return fmt.Errorf("space-delimited must be a string or array of strings: %w: %w", ErrInvalidPayload, err)
|
|
||||||
}
|
|
||||||
if ss == nil {
|
|
||||||
*s = SpaceDelimited{}
|
|
||||||
} else {
|
|
||||||
*s = SpaceDelimited(ss)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsZero reports whether the slice is absent (nil).
|
// IsZero reports whether the slice is absent (nil).
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user