mirror of
https://github.com/therootcompany/golib.git
synced 2026-03-28 18:15:30 +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.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) {
|
||||
var s SpaceDelimited
|
||||
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.
|
||||
// An empty string "" unmarshals to a non-nil empty 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 {
|
||||
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 == "" {
|
||||
*s = SpaceDelimited{}
|
||||
return nil
|
||||
}
|
||||
*s = strings.Fields(str)
|
||||
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).
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user