diff --git a/webapp/packages/core-blocks/src/FormControls/Checkboxes/Switch.tsx b/webapp/packages/core-blocks/src/FormControls/Checkboxes/Switch.tsx index a635f19b70..7dd01694e6 100644 --- a/webapp/packages/core-blocks/src/FormControls/Checkboxes/Switch.tsx +++ b/webapp/packages/core-blocks/src/FormControls/Checkboxes/Switch.tsx @@ -133,7 +133,7 @@ export const Switch: SwitchType = observer(function Switch({ } return styled(styles)( - + diff --git a/webapp/packages/core-sdk/src/queries/authentication/getAuthProviders.gql b/webapp/packages/core-sdk/src/queries/authentication/getAuthProviders.gql index 4974a43c5d..47f3e3d065 100644 --- a/webapp/packages/core-sdk/src/queries/authentication/getAuthProviders.gql +++ b/webapp/packages/core-sdk/src/queries/authentication/getAuthProviders.gql @@ -45,5 +45,6 @@ query getAuthProviders { encryption } } + requiredFeatures } } \ No newline at end of file diff --git a/webapp/packages/core-sdk/src/sdk.ts b/webapp/packages/core-sdk/src/sdk.ts index e1cad510d5..5d139816be 100644 --- a/webapp/packages/core-sdk/src/sdk.ts +++ b/webapp/packages/core-sdk/src/sdk.ts @@ -124,14 +124,13 @@ export interface AuthProviderCredentialsProfile { export interface AuthProviderInfo { configurable: Scalars['Boolean']; configurations?: Maybe; - /** @deprecated Field no longer supported */ - credentialParameters: AuthCredentialInfo[]; credentialProfiles: AuthProviderCredentialsProfile[]; defaultProvider: Scalars['Boolean']; description?: Maybe; icon?: Maybe; id: Scalars['ID']; label: Scalars['String']; + requiredFeatures: Array; } export interface ConnectionConfig { @@ -1133,6 +1132,7 @@ export interface ServerConfigInput { export interface ServerError { causedBy?: Maybe; errorCode?: Maybe; + errorType?: Maybe; message?: Maybe; stackTrace?: Maybe; } @@ -1277,7 +1277,7 @@ export interface GetAuthProviderConfigurationsQuery { configurations: Array<{ pr export type GetAuthProvidersQueryVariables = Exact<{ [key: string]: never }>; -export interface GetAuthProvidersQuery { providers: Array<{ id: string; label: string; icon?: Maybe; description?: Maybe; defaultProvider: boolean; configurable: boolean; configurations?: Maybe; description?: Maybe; signInLink?: Maybe; signOutLink?: Maybe; metadataLink?: Maybe }>>; credentialProfiles: Array<{ id?: Maybe; label?: Maybe; description?: Maybe; credentialParameters: Array<{ id: string; displayName: string; description?: Maybe; admin: boolean; user: boolean; identifying: boolean; possibleValues?: Maybe>>; encryption?: Maybe }> }> }> } +export interface GetAuthProvidersQuery { providers: Array<{ id: string; label: string; icon?: Maybe; description?: Maybe; defaultProvider: boolean; configurable: boolean; requiredFeatures: string[]; configurations?: Maybe; description?: Maybe; signInLink?: Maybe; signOutLink?: Maybe; metadataLink?: Maybe }>>; credentialProfiles: Array<{ id?: Maybe; label?: Maybe; description?: Maybe; credentialParameters: Array<{ id: string; displayName: string; description?: Maybe; admin: boolean; user: boolean; identifying: boolean; possibleValues?: Maybe>>; encryption?: Maybe }> }> }> } export type GetUserProfilePropertiesQueryVariables = Exact<{ [key: string]: never }>; @@ -2293,6 +2293,7 @@ export const GetAuthProvidersDocument = ` encryption } } + requiredFeatures } } `; diff --git a/webapp/packages/plugin-authentication-administration/src/Administration/ServerConfiguration/AuthenticationProviders.tsx b/webapp/packages/plugin-authentication-administration/src/Administration/ServerConfiguration/AuthenticationProviders.tsx index 9d5439976f..a2cb6d2505 100644 --- a/webapp/packages/plugin-authentication-administration/src/Administration/ServerConfiguration/AuthenticationProviders.tsx +++ b/webapp/packages/plugin-authentication-administration/src/Administration/ServerConfiguration/AuthenticationProviders.tsx @@ -41,9 +41,25 @@ export const AuthenticationProviders: PlaceholderComponent 0) { + for (let i = enabledProviders.length - 1; i >= 0; i--) { + const provider = providers.resource.get(enabledProviders[i] ?? ''); + + if (provider?.requiredFeatures.length) { + const unavailable = provider.requiredFeatures.some(feat => !serverConfig.enabledFeatures?.includes(feat)); + + if (unavailable) { + enabledProviders.splice(i, 1); + } + } + } + } }], }); @@ -75,11 +91,14 @@ export const AuthenticationProviders: PlaceholderComponent {providers.resource.values.map(provider => { const links = authProviderService.getServiceDescriptionLinks(provider); + const disabled = provider.requiredFeatures.some(feat => !serverConfig.enabledFeatures?.includes(feat)); + const tooltip = disabled ? `Following services need to be enabled: "${provider.requiredFeatures.join(', ')}"` : ''; return ( )} mod={['primary']} + disabled={disabled} small autoHide >