@@ -434,16 +434,17 @@ func (l *ConfigLoader) loadServerConfig(cfg *Config, def Definition) {
434434 cfg .Server .Auth .OIDC .ClientSecret = oidc .ClientSecret
435435 cfg .Server .Auth .OIDC .ClientUrl = oidc .ClientUrl
436436 cfg .Server .Auth .OIDC .Issuer = oidc .Issuer
437- cfg .Server .Auth .OIDC .Scopes = oidc .Scopes
438- cfg .Server .Auth .OIDC .Whitelist = oidc .Whitelist
437+ // Use parseStringList to support both comma-separated strings and YAML lists
438+ cfg .Server .Auth .OIDC .Scopes = parseStringList (l .v .Get ("auth.oidc.scopes" ))
439+ cfg .Server .Auth .OIDC .Whitelist = parseStringList (l .v .Get ("auth.oidc.whitelist" ))
439440 // Builtin-specific fields (only used when auth.mode=builtin)
440441 if oidc .AutoSignup != nil {
441442 cfg .Server .Auth .OIDC .AutoSignup = * oidc .AutoSignup
442443 } else {
443444 // Default to true - if OIDC is configured, auto-signup is expected
444445 cfg .Server .Auth .OIDC .AutoSignup = true
445446 }
446- cfg .Server .Auth .OIDC .AllowedDomains = oidc .AllowedDomains
447+ cfg .Server .Auth .OIDC .AllowedDomains = parseStringList ( l . v . Get ( "auth. oidc.allowedDomains" ))
447448 cfg .Server .Auth .OIDC .ButtonLabel = oidc .ButtonLabel
448449 // Load role mapping configuration
449450 if oidc .RoleMapping != nil {
@@ -1246,6 +1247,35 @@ func parseWorkerLabels(labelsStr string) map[string]string {
12461247 return labels
12471248}
12481249
1250+ // parseStringList parses input that can be either a comma-separated string or a list of strings.
1251+ // This allows config values to be specified as either:
1252+ // - YAML list: ["a", "b", "c"]
1253+ // - Comma-separated string: "a,b,c"
1254+ //
1255+ // Empty strings and whitespace-only entries are filtered out.
1256+ func parseStringList (input interface {}) []string {
1257+ var result []string
1258+ switch v := input .(type ) {
1259+ case string :
1260+ if v != "" {
1261+ for _ , s := range strings .Split (v , "," ) {
1262+ if trimmed := strings .TrimSpace (s ); trimmed != "" {
1263+ result = append (result , trimmed )
1264+ }
1265+ }
1266+ }
1267+ case []interface {}:
1268+ for _ , item := range v {
1269+ if s , ok := item .(string ); ok && s != "" {
1270+ result = append (result , s )
1271+ }
1272+ }
1273+ case []string :
1274+ result = v
1275+ }
1276+ return result
1277+ }
1278+
12491279func cleanServerBasePath (s string ) string {
12501280 if s == "" {
12511281 return ""
0 commit comments