[#7815] added checks for missing providers prop

This commit is contained in:
Gani Georgiev committed 2026-08-24 18:00:11 +03:00
1 parent da18302785
commit bc8ffed4e7
2 files changed
+64 -28

No files matched your search

+5
View File
@@ -442,6 +442,11 @@ func (c *OAuth2Config) UnmarshalJSON(b []byte) error {
return err return err
} }
// no providers were submitted
if len(plain.Providers) == 0 {
return nil
}
if len(c.Providers) != len(plain.Providers) { if len(c.Providers) != len(plain.Providers) {
return errors.New("the length of the plain unmarshalized providers and the ones from the config doesn't match") return errors.New("the length of the plain unmarshalized providers and the ones from the config doesn't match")
} }
+59 -28
View File
@@ -713,41 +713,72 @@ func TestPasswordAuthConfigValidate(t *testing.T) {
} }
func TestOAuth2ConfigUnmarshalJSON(t *testing.T) { func TestOAuth2ConfigUnmarshalJSON(t *testing.T) {
config := core.OAuth2Config{ t.Parallel()
Enabled: false,
MappedFields: core.OAuth2KnownFields{ scenarios := []struct {
Name: "name_test", name string
newJSON string
expected string
}{
{
"missing",
`{
"enabled": true,
"mappedFields": {"username": "username_test"}
}`,
`{"providers":[{"pkce":null,"name":"a","clientId":"a_clientId","clientSecret":"a_clientSecret","authURL":"","tokenURL":"","userInfoURL":"","displayName":"","extra":{}},{"pkce":null,"name":"b","clientId":"b_clientId","clientSecret":"b_clientSecret","authURL":"","tokenURL":"","userInfoURL":"","displayName":"","extra":{}}],"mappedFields":{"id":"","name":"name_test","username":"username_test","avatarURL":""},"enabled":true}`,
}, },
Providers: []core.OAuth2ProviderConfig{ {
{Name: "a", ClientId: "a_clientId", ClientSecret: "a_clientSecret"}, "empty",
{Name: "b", ClientId: "b_clientId", ClientSecret: "b_clientSecret"}, `{
"enabled": true,
"mappedFields": {"username": "username_test"},
"providers": []
}`,
`{"providers":[],"mappedFields":{"id":"","name":"name_test","username":"username_test","avatarURL":""},"enabled":true}`,
},
{
"non-empty",
`{
"enabled": true,
"mappedFields": {"username": "username_test"},
"providers": [
{"name": "c", "clientId": "c_clientId", "clientSecret": "c_clientSecret"},
{"name": "a", "displayName": "a_displayName"}
]
}`,
`{"providers":[{"pkce":null,"name":"c","clientId":"c_clientId","clientSecret":"c_clientSecret","authURL":"","tokenURL":"","userInfoURL":"","displayName":"","extra":{}},{"pkce":null,"name":"a","clientId":"a_clientId","clientSecret":"a_clientSecret","authURL":"","tokenURL":"","userInfoURL":"","displayName":"a_displayName","extra":{}}],"mappedFields":{"id":"","name":"name_test","username":"username_test","avatarURL":""},"enabled":true}`,
}, },
} }
newRaw := []byte(`{ for _, s := range scenarios {
"enabled": true, t.Run(s.name, func(t *testing.T) {
"mappedFields": {"username": "username_test"}, config := core.OAuth2Config{
"providers": [ Enabled: false,
{"name": "c", "clientId": "c_clientId", "clientSecret": "c_clientSecret"}, MappedFields: core.OAuth2KnownFields{
{"name": "a", "displayName": "a_displayName"} Name: "name_test",
] },
}`) Providers: []core.OAuth2ProviderConfig{
{Name: "a", ClientId: "a_clientId", ClientSecret: "a_clientSecret"},
{Name: "b", ClientId: "b_clientId", ClientSecret: "b_clientSecret"},
},
}
err := json.Unmarshal(newRaw, &config) err := json.Unmarshal([]byte(s.newJSON), &config)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
raw, err := json.Marshal(config, json.Deterministic(true)) raw, err := json.Marshal(config, json.Deterministic(true))
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
rawStr := string(raw) rawStr := string(raw)
expected := `{"providers":[{"pkce":null,"name":"c","clientId":"c_clientId","clientSecret":"c_clientSecret","authURL":"","tokenURL":"","userInfoURL":"","displayName":"","extra":{}},{"pkce":null,"name":"a","clientId":"a_clientId","clientSecret":"a_clientSecret","authURL":"","tokenURL":"","userInfoURL":"","displayName":"a_displayName","extra":{}}],"mappedFields":{"id":"","name":"name_test","username":"username_test","avatarURL":""},"enabled":true}` if rawStr != s.expected {
t.Fatalf("Expected OAuth2ProviderConfig\n%s\ngot\n%s", s.expected, rawStr)
if rawStr != expected { }
t.Fatalf("Expected OAuth2ProviderConfig\n%s\ngot\n%s", expected, rawStr) })
} }
} }