@@ -454,40 +454,55 @@ func getSettingsFromResourceData(d *schema.ResourceData, settingsKey string) (ma
454454 return nil , fmt .Errorf ("no valid settings found for the provider %s" , d .Get (providerKey ).(string ))
455455}
456456
457- func validateOAuth2Settings (provider string , settings map [string ]any ) error {
458- authURL := settings ["auth_url" ].(string )
459- tokenURL := settings ["token_url" ].(string )
460- apiURL := settings ["api_url" ].(string )
457+ type validateFunc func (settingsMap map [string ]any , provider string ) error
458+
459+ var validationsByProvider = map [string ][]validateFunc {
460+ "azuread" : {
461+ ssoValidateNotEmpty ("auth_url" ),
462+ ssoValidateNotEmpty ("token_url" ),
463+ ssoValidateEmpty ("api_url" ),
464+ ssoValidateURL ("auth_url" ),
465+ ssoValidateURL ("token_url" ),
466+ },
467+ "generic_oauth" : {
468+ ssoValidateNotEmpty ("auth_url" ),
469+ ssoValidateNotEmpty ("token_url" ),
470+ ssoValidateNotEmpty ("api_url" ),
471+ ssoValidateURL ("auth_url" ),
472+ ssoValidateURL ("token_url" ),
473+ ssoValidateURL ("api_url" ),
474+ },
475+ "okta" : {
476+ ssoValidateNotEmpty ("auth_url" ),
477+ ssoValidateNotEmpty ("token_url" ),
478+ ssoValidateNotEmpty ("api_url" ),
479+ ssoValidateURL ("auth_url" ),
480+ ssoValidateURL ("token_url" ),
481+ ssoValidateURL ("api_url" ),
482+ },
483+ "github" : {
484+ ssoValidateEmpty ("auth_url" ),
485+ ssoValidateEmpty ("token_url" ),
486+ ssoValidateEmpty ("api_url" ),
487+ },
488+ "gitlab" : {
489+ ssoValidateEmpty ("auth_url" ),
490+ ssoValidateEmpty ("token_url" ),
491+ ssoValidateEmpty ("api_url" ),
492+ },
493+ "google" : {
494+ ssoValidateEmpty ("auth_url" ),
495+ ssoValidateEmpty ("token_url" ),
496+ ssoValidateEmpty ("api_url" ),
497+ },
498+ }
461499
462- switch provider {
463- case "github" , "gitlab" , "google" :
464- if authURL != "" {
465- return fmt .Errorf ("auth_url must be empty for the provider %s" , provider )
466- }
467- if tokenURL != "" {
468- return fmt .Errorf ("token_url must be empty for the provider %s" , provider )
469- }
470- if apiURL != "" {
471- return fmt .Errorf ("api_url must be empty for the provider %s" , provider )
472- }
473- case "azuread" , "generic_oauth" , "okta" :
474- if authURL == "" {
475- return fmt .Errorf ("auth_url must be set for the provider %s" , provider )
476- }
477- if ! isValidURL (authURL ) {
478- return fmt .Errorf ("auth_url must be a valid http/https URL" )
479- }
480- if tokenURL == "" {
481- return fmt .Errorf ("token_url must be set for the provider %s" , provider )
482- }
483- if ! isValidURL (tokenURL ) {
484- return fmt .Errorf ("token_url must be a valid http/https URL" )
485- }
486- if apiURL == "" {
487- return fmt .Errorf ("api_url must be set for the provider %s" , provider )
488- }
489- if ! isValidURL (apiURL ) {
490- return fmt .Errorf ("api_url must be a valid http/https URL" )
500+ func validateOAuth2Settings (provider string , settings map [string ]any ) error {
501+ validators := validationsByProvider [provider ]
502+ for _ , validateF := range validators {
503+ err := validateF (settings , provider )
504+ if err != nil {
505+ return err
491506 }
492507 }
493508
@@ -599,3 +614,32 @@ func isValidURL(actual string) bool {
599614 }
600615 return strings .HasPrefix (parsed .Scheme , "http" ) && parsed .Host != ""
601616}
617+
618+ func ssoValidateNotEmpty (key string ) validateFunc {
619+ return func (settingsMap map [string ]any , provider string ) error {
620+ if settingsMap [key ] == "" {
621+ return fmt .Errorf ("%s must be set for the provider %s" , key , provider )
622+ }
623+
624+ return nil
625+ }
626+ }
627+
628+ func ssoValidateEmpty (key string ) validateFunc {
629+ return func (settingsMap map [string ]any , provider string ) error {
630+ if settingsMap [key ].(string ) != "" {
631+ return fmt .Errorf ("%s must be empty for the provider %s" , key , provider )
632+ }
633+
634+ return nil
635+ }
636+ }
637+
638+ func ssoValidateURL (key string ) validateFunc {
639+ return func (settingsMap map [string ]any , provider string ) error {
640+ if ! isValidURL (settingsMap [key ].(string )) {
641+ return fmt .Errorf ("%s must be a valid http/https URL for the provider %s" , key , provider )
642+ }
643+ return nil
644+ }
645+ }
0 commit comments