From e2a0a84ee854fe8e23856fd833d8f219dc2d06eb Mon Sep 17 00:00:00 2001 From: harsh mahajan Date: Wed, 13 May 2026 13:01:57 +0530 Subject: [PATCH] list policies --- .../auth/security/+page.ts | 88 +++++++++---------- .../security/updateSignupEmailSecurity.svelte | 42 +++++---- 2 files changed, 66 insertions(+), 64 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/auth/security/+page.ts b/src/routes/(console)/project-[region]-[project]/auth/security/+page.ts index 5889c6007..b8fb7a234 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/security/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/auth/security/+page.ts @@ -14,56 +14,52 @@ const ProjectEmailPolicyId = { DenyFreeEmail: 'deny-free-email' } as const; +type ProjectPolicy = Models.PolicyList['policies'][number] | EnabledPolicy; +type EmailPolicyId = (typeof ProjectEmailPolicyId)[keyof typeof ProjectEmailPolicyId]; + +const getDefaultEnabledPolicy = (policyId: EmailPolicyId): EnabledPolicy => ({ + $id: policyId, + enabled: false +}); + export const load: PageLoad = async ({ depends, params }) => { depends(Dependencies.PROJECT); - const projectSdk = sdk.forProject(params.region, params.project).project; - const [ - membershipPrivacyPolicy, - passwordDictionaryPolicy, - passwordHistoryPolicy, - passwordPersonalDataPolicy, - sessionAlertPolicy, - sessionDurationPolicy, - sessionInvalidationPolicy, - sessionLimitPolicy, - userLimitPolicy, - denyAliasedEmailPolicy, - denyDisposableEmailPolicy, - denyFreeEmailPolicy - ] = await Promise.all([ - projectSdk.getPolicy({ policyId: ProjectPolicyId.Membershipprivacy }), - projectSdk.getPolicy({ policyId: ProjectPolicyId.Passworddictionary }), - projectSdk.getPolicy({ policyId: ProjectPolicyId.Passwordhistory }), - projectSdk.getPolicy({ policyId: ProjectPolicyId.Passwordpersonaldata }), - projectSdk.getPolicy({ policyId: ProjectPolicyId.Sessionalert }), - projectSdk.getPolicy({ policyId: ProjectPolicyId.Sessionduration }), - projectSdk.getPolicy({ policyId: ProjectPolicyId.Sessioninvalidation }), - projectSdk.getPolicy({ policyId: ProjectPolicyId.Sessionlimit }), - projectSdk.getPolicy({ policyId: ProjectPolicyId.Userlimit }), - projectSdk.getPolicy({ - policyId: ProjectEmailPolicyId.DenyAliasedEmail as ProjectPolicyId - }), - projectSdk.getPolicy({ - policyId: ProjectEmailPolicyId.DenyDisposableEmail as ProjectPolicyId - }), - projectSdk.getPolicy({ - policyId: ProjectEmailPolicyId.DenyFreeEmail as ProjectPolicyId - }) - ]); + const { policies } = await sdk.forProject(params.region, params.project).project.listPolicies(); + const policiesById = Object.fromEntries( + (policies as ProjectPolicy[]).map((policy) => [policy.$id, policy]) + ) as Partial>; return { - membershipPrivacyPolicy: membershipPrivacyPolicy as Models.PolicyMembershipPrivacy, - passwordDictionaryPolicy: passwordDictionaryPolicy as Models.PolicyPasswordDictionary, - passwordHistoryPolicy: passwordHistoryPolicy as Models.PolicyPasswordHistory, - passwordPersonalDataPolicy: passwordPersonalDataPolicy as Models.PolicyPasswordPersonalData, - sessionAlertPolicy: sessionAlertPolicy as Models.PolicySessionAlert, - sessionDurationPolicy: sessionDurationPolicy as Models.PolicySessionDuration, - sessionInvalidationPolicy: sessionInvalidationPolicy as Models.PolicySessionInvalidation, - sessionLimitPolicy: sessionLimitPolicy as Models.PolicySessionLimit, - userLimitPolicy: userLimitPolicy as Models.PolicyUserLimit, - denyAliasedEmailPolicy: denyAliasedEmailPolicy as EnabledPolicy, - denyDisposableEmailPolicy: denyDisposableEmailPolicy as EnabledPolicy, - denyFreeEmailPolicy: denyFreeEmailPolicy as EnabledPolicy + membershipPrivacyPolicy: policiesById[ + ProjectPolicyId.Membershipprivacy + ] as Models.PolicyMembershipPrivacy, + passwordDictionaryPolicy: policiesById[ + ProjectPolicyId.Passworddictionary + ] as Models.PolicyPasswordDictionary, + passwordHistoryPolicy: policiesById[ + ProjectPolicyId.Passwordhistory + ] as Models.PolicyPasswordHistory, + passwordPersonalDataPolicy: policiesById[ + ProjectPolicyId.Passwordpersonaldata + ] as Models.PolicyPasswordPersonalData, + sessionAlertPolicy: policiesById[ProjectPolicyId.Sessionalert] as Models.PolicySessionAlert, + sessionDurationPolicy: policiesById[ + ProjectPolicyId.Sessionduration + ] as Models.PolicySessionDuration, + sessionInvalidationPolicy: policiesById[ + ProjectPolicyId.Sessioninvalidation + ] as Models.PolicySessionInvalidation, + sessionLimitPolicy: policiesById[ProjectPolicyId.Sessionlimit] as Models.PolicySessionLimit, + userLimitPolicy: policiesById[ProjectPolicyId.Userlimit] as Models.PolicyUserLimit, + denyAliasedEmailPolicy: + (policiesById[ProjectEmailPolicyId.DenyAliasedEmail] as EnabledPolicy) ?? + getDefaultEnabledPolicy(ProjectEmailPolicyId.DenyAliasedEmail), + denyDisposableEmailPolicy: + (policiesById[ProjectEmailPolicyId.DenyDisposableEmail] as EnabledPolicy) ?? + getDefaultEnabledPolicy(ProjectEmailPolicyId.DenyDisposableEmail), + denyFreeEmailPolicy: + (policiesById[ProjectEmailPolicyId.DenyFreeEmail] as EnabledPolicy) ?? + getDefaultEnabledPolicy(ProjectEmailPolicyId.DenyFreeEmail) }; }; 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 ff4d301be..61c501f90 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/security/updateSignupEmailSecurity.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/security/updateSignupEmailSecurity.svelte @@ -52,23 +52,32 @@ try { const projectSdk = sdk.forProject(project.region, project.$id).project; - currentSubmit = Submit.AuthAliasedEmailsUpdate; - await projectSdk.updateDenyAliasedEmailPolicy({ - enabled: authAliasedEmails - }); - hasAppliedServerChange = true; + if (authAliasedEmails !== denyAliasedEmailPolicy.enabled) { + currentSubmit = Submit.AuthAliasedEmailsUpdate; + await projectSdk.updateDenyAliasedEmailPolicy({ + enabled: authAliasedEmails + }); + hasAppliedServerChange = true; + trackEvent(Submit.AuthAliasedEmailsUpdate); + } - currentSubmit = Submit.AuthDisposableEmailsUpdate; - await projectSdk.updateDenyDisposableEmailPolicy({ - enabled: authDisposableEmails - }); - hasAppliedServerChange = true; + if (authDisposableEmails !== denyDisposableEmailPolicy.enabled) { + currentSubmit = Submit.AuthDisposableEmailsUpdate; + await projectSdk.updateDenyDisposableEmailPolicy({ + enabled: authDisposableEmails + }); + hasAppliedServerChange = true; + trackEvent(Submit.AuthDisposableEmailsUpdate); + } - currentSubmit = Submit.AuthFreeEmailsUpdate; - await projectSdk.updateDenyFreeEmailPolicy({ - enabled: authFreeEmails - }); - hasAppliedServerChange = true; + if (authFreeEmails !== denyFreeEmailPolicy.enabled) { + currentSubmit = Submit.AuthFreeEmailsUpdate; + await projectSdk.updateDenyFreeEmailPolicy({ + enabled: authFreeEmails + }); + hasAppliedServerChange = true; + trackEvent(Submit.AuthFreeEmailsUpdate); + } await invalidate(Dependencies.PROJECT); @@ -76,9 +85,6 @@ type: 'success', message: 'Updated signup email security settings.' }); - trackEvent(Submit.AuthAliasedEmailsUpdate); - trackEvent(Submit.AuthDisposableEmailsUpdate); - trackEvent(Submit.AuthFreeEmailsUpdate); } catch (error) { if (hasAppliedServerChange) { await invalidate(Dependencies.PROJECT);