diff --git a/src/lib/actions/analytics.ts b/src/lib/actions/analytics.ts index 04286611ee..3a8d89622a 100644 --- a/src/lib/actions/analytics.ts +++ b/src/lib/actions/analytics.ts @@ -277,6 +277,7 @@ export enum Submit { AuthAliasedEmailsUpdate = 'submit_auth_aliased_emails_update', AuthDisposableEmailsUpdate = 'submit_auth_disposable_emails_update', AuthFreeEmailsUpdate = 'submit_auth_free_emails_update', + AuthCorporateEmailsUpdate = 'submit_auth_corporate_emails_update', AuthSessionAlertsUpdate = 'submit_auth_session_alerts_update', AuthMembershipPrivacyUpdate = 'submit_auth_membership_privacy_update', AuthMockNumbersUpdate = 'submit_auth_mock_numbers_update', diff --git a/src/routes/(console)/project-[region]-[project]/auth/security/+page.svelte b/src/routes/(console)/project-[region]-[project]/auth/security/+page.svelte index 3bc8b22f79..8cc0749d3b 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/security/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/security/+page.svelte @@ -28,7 +28,8 @@ project={data.project} denyAliasedEmailPolicy={data.denyAliasedEmailPolicy} denyDisposableEmailPolicy={data.denyDisposableEmailPolicy} - denyFreeEmailPolicy={data.denyFreeEmailPolicy} /> + denyFreeEmailPolicy={data.denyFreeEmailPolicy} + denyCorporateEmailPolicy={data.denyCorporateEmailPolicy} /> { getDefaultEnabledPolicy(ProjectEmailPolicyId.DenyDisposableEmail), denyFreeEmailPolicy: (policiesById[ProjectEmailPolicyId.DenyFreeEmail] as EnabledPolicy) ?? - getDefaultEnabledPolicy(ProjectEmailPolicyId.DenyFreeEmail) + getDefaultEnabledPolicy(ProjectEmailPolicyId.DenyFreeEmail), + denyCorporateEmailPolicy: + (policiesById[ProjectEmailPolicyId.DenyCorporateEmail] as EnabledPolicy) ?? + getDefaultEnabledPolicy(ProjectEmailPolicyId.DenyCorporateEmail) }; }; diff --git a/src/routes/(console)/project-[region]-[project]/auth/security/updateSignupEmailSecurity.svelte b/src/routes/(console)/project-[region]-[project]/auth/security/updateSignupEmailSecurity.svelte index 35633cb7c0..b30bcc5443 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/security/updateSignupEmailSecurity.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/security/updateSignupEmailSecurity.svelte @@ -18,32 +18,38 @@ project, denyAliasedEmailPolicy, denyDisposableEmailPolicy, - denyFreeEmailPolicy + denyFreeEmailPolicy, + denyCorporateEmailPolicy }: { project: Models.Project; denyAliasedEmailPolicy: EnabledPolicy; denyDisposableEmailPolicy: EnabledPolicy; denyFreeEmailPolicy: EnabledPolicy; + denyCorporateEmailPolicy: EnabledPolicy; } = $props(); const getInitialAliasedEmails = () => denyAliasedEmailPolicy.enabled; const getInitialDisposableEmails = () => denyDisposableEmailPolicy.enabled; const getInitialFreeEmails = () => denyFreeEmailPolicy.enabled; + const getInitialCorporateEmails = () => denyCorporateEmailPolicy.enabled; let savedAliasedEmails = $state(getInitialAliasedEmails()); let savedDisposableEmails = $state(getInitialDisposableEmails()); let savedFreeEmails = $state(getInitialFreeEmails()); + let savedCorporateEmails = $state(getInitialCorporateEmails()); let authAliasedEmails = $state(getInitialAliasedEmails()); let authDisposableEmails = $state(getInitialDisposableEmails()); let authFreeEmails = $state(getInitialFreeEmails()); + let authCorporateEmails = $state(getInitialCorporateEmails()); const hasChanges = $derived.by(() => { const aliasedChanged = authAliasedEmails !== savedAliasedEmails; const disposableChanged = authDisposableEmails !== savedDisposableEmails; const freeChanged = authFreeEmails !== savedFreeEmails; + const corporateChanged = authCorporateEmails !== savedCorporateEmails; - return aliasedChanged || disposableChanged || freeChanged; + return aliasedChanged || disposableChanged || freeChanged || corporateChanged; }); async function updateSignupEmailSecurity() { @@ -80,9 +86,19 @@ trackEvent(Submit.AuthFreeEmailsUpdate); } + if (authCorporateEmails !== savedCorporateEmails) { + currentSubmit = Submit.AuthCorporateEmailsUpdate; + await projectSdk.updateDenyCorporateEmailPolicy({ + enabled: authCorporateEmails + }); + hasAppliedServerChange = true; + trackEvent(Submit.AuthCorporateEmailsUpdate); + } + savedAliasedEmails = authAliasedEmails; savedDisposableEmails = authDisposableEmails; savedFreeEmails = authFreeEmails; + savedCorporateEmails = authCorporateEmails; await invalidate(Dependencies.PROJECT); addNotification({ @@ -148,6 +164,21 @@ + + + + + Only allow corporate email addresses. Blocks free providers and + disposable emails. For example: user@gmail.com + + + +