diff --git a/ui/litellm-dashboard/src/app/(dashboard)/hooks/sso/useSSOSettings.ts b/ui/litellm-dashboard/src/app/(dashboard)/hooks/sso/useSSOSettings.ts index f03f3977115..fe901f57747 100644 --- a/ui/litellm-dashboard/src/app/(dashboard)/hooks/sso/useSSOSettings.ts +++ b/ui/litellm-dashboard/src/app/(dashboard)/hooks/sso/useSSOSettings.ts @@ -28,6 +28,7 @@ export interface SSOSettingsValues { user_email: string | null; ui_access_mode: string | null; role_mappings: RoleMappings; + team_mappings: TeamMappings; } export interface RoleMappings { @@ -39,6 +40,10 @@ export interface RoleMappings { }; } +export interface TeamMappings { + team_id_jwt_field: string; +} + export interface SSOSettingsResponse { values: SSOSettingsValues; field_schema: SSOFieldSchema; diff --git a/ui/litellm-dashboard/src/components/Settings/AdminSettings/SSOSettings/Modals/BaseSSOSettingsForm.tsx b/ui/litellm-dashboard/src/components/Settings/AdminSettings/SSOSettings/Modals/BaseSSOSettingsForm.tsx index 6431b2dd3ac..d16b04466e0 100644 --- a/ui/litellm-dashboard/src/components/Settings/AdminSettings/SSOSettings/Modals/BaseSSOSettingsForm.tsx +++ b/ui/litellm-dashboard/src/components/Settings/AdminSettings/SSOSettings/Modals/BaseSSOSettingsForm.tsx @@ -251,6 +251,43 @@ const BaseSSOSettingsForm: React.FC = ({ form, onFormS ) : null; }} + + prevValues.sso_provider !== currentValues.sso_provider} + > + {({ getFieldValue }) => { + const provider = getFieldValue("sso_provider"); + return provider === "okta" || provider === "generic" ? ( + + + + ) : null; + }} + + + + prevValues.use_team_mappings !== currentValues.use_team_mappings || + prevValues.sso_provider !== currentValues.sso_provider + } + > + {({ getFieldValue }) => { + const useTeamMappings = getFieldValue("use_team_mappings"); + const provider = getFieldValue("sso_provider"); + const supportsTeamMappings = provider === "okta" || provider === "generic"; + return useTeamMappings && supportsTeamMappings ? ( + + + + ) : null; + }} + ); diff --git a/ui/litellm-dashboard/src/components/Settings/AdminSettings/SSOSettings/Modals/EditSSOSettingsModal.tsx b/ui/litellm-dashboard/src/components/Settings/AdminSettings/SSOSettings/Modals/EditSSOSettingsModal.tsx index a731af68ff1..bbae8f1451a 100644 --- a/ui/litellm-dashboard/src/components/Settings/AdminSettings/SSOSettings/Modals/EditSSOSettingsModal.tsx +++ b/ui/litellm-dashboard/src/components/Settings/AdminSettings/SSOSettings/Modals/EditSSOSettingsModal.tsx @@ -68,11 +68,22 @@ const EditSSOSettingsModal: React.FC = ({ isVisible, }; } + // Extract team mappings if they exist + let teamMappingFields = {}; + if (ssoData.values.team_mappings) { + const teamMappings = ssoData.values.team_mappings; + teamMappingFields = { + use_team_mappings: true, + team_ids_jwt_field: teamMappings.team_ids_jwt_field, + }; + } + // Set form values with existing data (excluding UI access control fields) const formValues = { sso_provider: selectedProvider, ...ssoData.values, ...roleMappingFields, + ...teamMappingFields, }; console.log("Setting form values:", formValues); // Debug log diff --git a/ui/litellm-dashboard/src/components/Settings/AdminSettings/SSOSettings/utils.ts b/ui/litellm-dashboard/src/components/Settings/AdminSettings/SSOSettings/utils.ts index c199048df3e..072aa4fc42f 100644 --- a/ui/litellm-dashboard/src/components/Settings/AdminSettings/SSOSettings/utils.ts +++ b/ui/litellm-dashboard/src/components/Settings/AdminSettings/SSOSettings/utils.ts @@ -13,6 +13,8 @@ export const processSSOSettingsPayload = (formValues: Record): Reco default_role, group_claim, use_role_mappings, + use_team_mappings, + team_ids_jwt_field, ...rest } = formValues; @@ -52,6 +54,13 @@ export const processSSOSettingsPayload = (formValues: Record): Reco }; } + // Add team mappings only if use_team_mappings is checked + if (use_team_mappings) { + payload.team_mappings = { + team_ids_jwt_field: team_ids_jwt_field, + }; + } + return payload; };