From e33fee78f5e90e1831393d8a699ea5d5f32c86ca Mon Sep 17 00:00:00 2001 From: joel Date: Fri, 13 Sep 2024 15:40:20 +0300 Subject: [PATCH 1/3] feat: add webauthn ui --- .../AdvancedAuthSettingsForm.tsx | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/apps/studio/components/interfaces/Auth/AdvancedAuthSettingsForm/AdvancedAuthSettingsForm.tsx b/apps/studio/components/interfaces/Auth/AdvancedAuthSettingsForm/AdvancedAuthSettingsForm.tsx index 7403a00f71b82..fa4013605cb84 100644 --- a/apps/studio/components/interfaces/Auth/AdvancedAuthSettingsForm/AdvancedAuthSettingsForm.tsx +++ b/apps/studio/components/interfaces/Auth/AdvancedAuthSettingsForm/AdvancedAuthSettingsForm.tsx @@ -235,9 +235,9 @@ const AdvancedAuthSettingsForm = () => { handleReset={handleReset} disabled={!canUpdateConfig} helper={ - !canUpdateConfig - ? 'You need additional permissions to update authentication settings' - : undefined + !canUpdateConfig + ? 'You need additional permissions to update authentication settings' + : undefined } /> @@ -312,6 +312,17 @@ const AdvancedAuthSettingsForm = () => { secondaryText="Advanced MFA requires the Pro Plan" /> )} + { formValues={values} disabled={!canUpdateConfig || !isProPlanAndUp} /> + {!hasValidMFAProvider && phoneMFAIsEnabled && ( From efac8c873705c6631af6b508d78cc30d587c2cec Mon Sep 17 00:00:00 2001 From: joel Date: Wed, 18 Sep 2024 22:43:04 +0200 Subject: [PATCH 2/3] fix: run prettier --- .../AdvancedAuthSettingsForm/AdvancedAuthSettingsForm.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/studio/components/interfaces/Auth/AdvancedAuthSettingsForm/AdvancedAuthSettingsForm.tsx b/apps/studio/components/interfaces/Auth/AdvancedAuthSettingsForm/AdvancedAuthSettingsForm.tsx index fa4013605cb84..5184aa65237d3 100644 --- a/apps/studio/components/interfaces/Auth/AdvancedAuthSettingsForm/AdvancedAuthSettingsForm.tsx +++ b/apps/studio/components/interfaces/Auth/AdvancedAuthSettingsForm/AdvancedAuthSettingsForm.tsx @@ -235,9 +235,9 @@ const AdvancedAuthSettingsForm = () => { handleReset={handleReset} disabled={!canUpdateConfig} helper={ - !canUpdateConfig - ? 'You need additional permissions to update authentication settings' - : undefined + !canUpdateConfig + ? 'You need additional permissions to update authentication settings' + : undefined } /> From 63a4a046d5ac77e784dfea7b26ebd3ace7fc0517 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kevin=20Gr=C3=BCneberg?= Date: Tue, 24 Sep 2024 13:16:13 +0800 Subject: [PATCH 3/3] web authn --- .../AdvancedAuthSettingsForm.tsx | 15 +++++++++++++++ packages/api-types/types/api.d.ts | 4 ++++ 2 files changed, 19 insertions(+) diff --git a/apps/studio/components/interfaces/Auth/AdvancedAuthSettingsForm/AdvancedAuthSettingsForm.tsx b/apps/studio/components/interfaces/Auth/AdvancedAuthSettingsForm/AdvancedAuthSettingsForm.tsx index 5184aa65237d3..baaff5b71ba67 100644 --- a/apps/studio/components/interfaces/Auth/AdvancedAuthSettingsForm/AdvancedAuthSettingsForm.tsx +++ b/apps/studio/components/interfaces/Auth/AdvancedAuthSettingsForm/AdvancedAuthSettingsForm.tsx @@ -51,6 +51,7 @@ const schema = object({ .max(30, 'Must be a value no greater than 30'), MFA_TOTP: string().required(), MFA_PHONE: string().required(), + MFA_WEB_AUTHN: string().required(), }) function determineMFAStatus(verifyEnabled: boolean, enrollEnabled: boolean) { @@ -135,6 +136,11 @@ const AdvancedAuthSettingsForm = () => { authConfig?.MFA_PHONE_VERIFY_ENABLED || false, authConfig?.MFA_PHONE_ENROLL_ENABLED || false ) || 'Disabled', + MFA_WEB_AUTHN: + determineMFAStatus( + authConfig?.MFA_WEB_AUTHN_VERIFY_ENABLED || false, + authConfig?.MFA_WEB_AUTHN_ENROLL_ENABLED || false + ) || 'Disabled', } // For now, we support Twilio and Vonage. Twilio Verify is not supported and the remaining providers are community maintained. @@ -156,10 +162,18 @@ const AdvancedAuthSettingsForm = () => { if (isProPlanAndUp) { const { verifyEnabled: MFA_PHONE_VERIFY_ENABLED, enrollEnabled: MFA_PHONE_ENROLL_ENABLED } = MfaStatusToState(values.MFA_PHONE) + + const { + verifyEnabled: MFA_WEB_AUTHN_VERIFY_ENABLED, + enrollEnabled: MFA_WEB_AUTHN_ENROLL_ENABLED, + } = MfaStatusToState(values.MFA_WEB_AUTHN) + payload = { ...payload, MFA_PHONE_ENROLL_ENABLED, MFA_PHONE_VERIFY_ENABLED, + MFA_WEB_AUTHN_ENROLL_ENABLED, + MFA_WEB_AUTHN_VERIFY_ENABLED, } } payload = { @@ -169,6 +183,7 @@ const AdvancedAuthSettingsForm = () => { } delete payload.MFA_TOTP delete payload.MFA_PHONE + delete payload.MFA_WEB_AUTHN if (!isTeamsEnterprisePlan) { delete payload.DB_MAX_POOL_SIZE diff --git a/packages/api-types/types/api.d.ts b/packages/api-types/types/api.d.ts index 2af696d3d7a69..07b6dc259f03d 100644 --- a/packages/api-types/types/api.d.ts +++ b/packages/api-types/types/api.d.ts @@ -3622,6 +3622,8 @@ export interface components { MFA_PHONE_OTP_LENGTH: number MFA_PHONE_TEMPLATE: string MFA_PHONE_VERIFY_ENABLED: boolean + MFA_WEB_AUTHN_ENROLL_ENABLED: boolean + MFA_WEB_AUTHN_VERIFY_ENABLED: boolean MFA_TOTP_ENROLL_ENABLED: boolean MFA_TOTP_VERIFY_ENABLED: boolean PASSWORD_HIBP_ENABLED: boolean @@ -5864,6 +5866,8 @@ export interface components { MFA_PHONE_OTP_LENGTH?: number MFA_PHONE_TEMPLATE?: string MFA_PHONE_VERIFY_ENABLED?: boolean + MFA_WEB_AUTHN_ENROLL_ENABLED?: boolean + MFA_WEB_AUTHN_VERIFY_ENABLED?: boolean MFA_TOTP_ENROLL_ENABLED?: boolean MFA_TOTP_VERIFY_ENABLED?: boolean PASSWORD_HIBP_ENABLED?: boolean