From df3986098f56da25a26944c05bf1adb4e541652e Mon Sep 17 00:00:00 2001 From: x032205 Date: Sat, 25 Oct 2025 04:48:29 -0400 Subject: [PATCH 01/79] feat: add Terraform EC2 to interactive setup --- .../RelayTab/components/RelayDeployModal.tsx | 8 +- .../RelayTerraformDeploymentMethod.tsx | 520 ++++++++++++++++++ 2 files changed, 527 insertions(+), 1 deletion(-) create mode 100644 frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayTerraformDeploymentMethod.tsx diff --git a/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayDeployModal.tsx b/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayDeployModal.tsx index 496ecb762..aab599925 100644 --- a/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayDeployModal.tsx +++ b/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayDeployModal.tsx @@ -4,6 +4,7 @@ import { Modal, ModalContent } from "@app/components/v2"; import { RelayDeploymentMethodSelect } from "@app/pages/organization/NetworkingPage/components/RelayTab/components/RelayDeploymentMethodSelect"; import { RelayCliDeploymentMethod } from "./RelayCliDeploymentMethod"; +import { RelayTerraformDeploymentMethod } from "./RelayTerraformDeploymentMethod"; type Props = { isOpen: boolean; @@ -11,7 +12,12 @@ type Props = { }; export const RelayDeploymentInfoMap = { - cli: { name: "CLI", image: "SSH.png", component: RelayCliDeploymentMethod } + cli: { name: "CLI", image: "SSH.png", component: RelayCliDeploymentMethod }, + terraform: { + name: "Terraform", + image: "Terraform.png", + component: RelayTerraformDeploymentMethod + } } as const; export type RelayDeploymentMethod = keyof typeof RelayDeploymentInfoMap; diff --git a/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayTerraformDeploymentMethod.tsx b/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayTerraformDeploymentMethod.tsx new file mode 100644 index 000000000..6e3cfa9e2 --- /dev/null +++ b/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayTerraformDeploymentMethod.tsx @@ -0,0 +1,520 @@ +import { useMemo, useState } from "react"; +import { SingleValue } from "react-select"; +import { faCopy, faQuestionCircle } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { z } from "zod"; + +import { createNotification } from "@app/components/notifications"; +import { + Button, + Checkbox, + FilterableSelect, + FormLabel, + IconButton, + Input, + ModalClose, + Tooltip +} from "@app/components/v2"; +import { Tab } from "@headlessui/react"; +import { + OrgPermissionIdentityActions, + OrgPermissionSubjects, + useOrganization, + useOrgPermission +} from "@app/context"; +import { + useAddIdentityTokenAuth, + useCreateTokenIdentityTokenAuth, + useGetIdentityMembershipOrgs, + useGetIdentityTokenAuth +} from "@app/hooks/api"; +import { slugSchema } from "@app/lib/schemas"; + +const baseFormSchema = z.object({ + name: slugSchema({ field: "name" }), + instanceDomain: z.string().url("Must be a valid URL").or(z.literal("")) +}); + +const formSchemaWithIdentity = baseFormSchema.extend({ + identity: z + .object( + { + id: z.string(), + name: z.string() + }, + { required_error: "Identity is required" } + ) + .nullable() + .refine((val) => val !== null, { message: "Identity is required" }) +}); + +const formSchemaWithToken = baseFormSchema.extend({ + identityToken: z.string().min(1, "Token is required") +}); + +const ec2FormSchema = z.object({ + awsRegion: z.string().min(1, "AWS Region is required"), + vpcId: z.string().min(1, "VPC ID is required"), + ami: z.string().min(1, "AMI ID is required"), + subnetId: z.string().min(1, "Subnet ID is required") +}); + +export const RelayTerraformDeploymentMethod = () => { + const { protocol, hostname, port } = window.location; + const portSuffix = port && port !== "80" ? `:${port}` : ""; + const siteURL = `${protocol}//${hostname}${portSuffix}`; + + const [selectedTabIndex, setSelectedTabIndex] = useState(0); + + const [autogenerateToken, setAutogenerateToken] = useState(true); + const [step, setStep] = useState<"form" | "command">("form"); + const [name, setName] = useState(""); + + const [instanceDomain, setInstanceDomain] = useState(siteURL); + const [identity, setIdentity] = useState(null); + const [identityToken, setIdentityToken] = useState(""); + const [formErrors, setFormErrors] = useState([]); + + const [awsRegion, setAwsRegion] = useState("us-east-1"); + const [vpcId, setVpcId] = useState(""); + const [ami, setAmi] = useState("ami-01b2110eef525172b"); + const [subnetId, setSubnetId] = useState(""); + + const errors = useMemo(() => { + const errorMap: Record = {}; + formErrors.forEach((issue) => { + if (issue.path.length > 0) { + errorMap[String(issue.path[0])] = issue.message; + } + }); + return errorMap; + }, [formErrors]); + + const { currentOrg } = useOrganization(); + const organizationId = currentOrg?.id || ""; + + const { permission } = useOrgPermission(); + const canCreateToken = permission.can( + OrgPermissionIdentityActions.CreateToken, + OrgPermissionSubjects.Identity + ); + + const { data: identityMembershipOrgsData, isPending: isIdentitiesLoading } = + useGetIdentityMembershipOrgs({ + organizationId, + limit: 20000 + }); + const identityMembershipOrgs = identityMembershipOrgsData?.identityMemberships || []; + + const { mutateAsync: createToken, isPending: isCreatingToken } = + useCreateTokenIdentityTokenAuth(); + const { mutateAsync: addIdentityTokenAuth, isPending: isAddingTokenAuth } = + useAddIdentityTokenAuth(); + const { refetch } = useGetIdentityTokenAuth(identity?.id ?? ""); + + const handleGenerateCommand = async () => { + setFormErrors([]); + + if (canCreateToken && autogenerateToken) { + const validation = formSchemaWithIdentity.safeParse({ name, instanceDomain, identity }); + if (!validation.success) { + setFormErrors(validation.error.issues); + return; + } + + if (selectedTabIndex === 0) { + const ec2Validation = ec2FormSchema.safeParse({ awsRegion, vpcId, ami, subnetId }); + if (!ec2Validation.success) { + setFormErrors(ec2Validation.error.issues); + return; + } + } + + const validatedIdentity = validation.data.identity; + + try { + const { data: identityTokenAuth } = await refetch(); + if (!identityTokenAuth) { + await addIdentityTokenAuth({ + identityId: validatedIdentity.id, + organizationId, + accessTokenTTL: 2592000, + accessTokenMaxTTL: 2592000, + accessTokenNumUsesLimit: 0, + accessTokenTrustedIps: [{ ipAddress: "0.0.0.0/0" }, { ipAddress: "::/0" }] + }); + createNotification({ + text: "Token authentication has been automatically enabled for the selected identity. By default, it is configured to allow all IP addresses with a default token TTL of 30 days. You can manage these settings in Access Control.", + type: "warning" + }); + } + + const token = await createToken({ + identityId: validatedIdentity.id, + name: `relay token for ${name} (autogenerated)` + }); + setIdentityToken(token.accessToken); + createNotification({ + text: "Automatically generated a token for the selected identity.", + type: "info" + }); + setStep("command"); + } catch (err) { + console.error(err); + createNotification({ + text: "Failed to generate token for the selected identity", + type: "error" + }); + setIdentityToken(""); + } + } else { + const validation = formSchemaWithToken.safeParse({ + name, + instanceDomain, + identityToken + }); + if (!validation.success) { + setFormErrors(validation.error.issues); + return; + } + + if (selectedTabIndex === 0) { + const ec2Validation = ec2FormSchema.safeParse({ awsRegion, vpcId, ami, subnetId }); + if (!ec2Validation.success) { + setFormErrors(ec2Validation.error.issues); + return; + } + } + setStep("command"); + } + }; + + const handleIdentityChange = ( + selectedIdentity: SingleValue<{ + id: string; + name: string; + }> + ) => { + setIdentity(selectedIdentity); + }; + + const terraformCommand = useMemo(() => { + const domain = instanceDomain || "https://app.infisical.com"; + return `terraform { + required_providers { + aws = { + source = "hashicorp/aws" + version = "~> 5.0" + } + } +} + +provider "aws" { + region = "${awsRegion}" +} + +# Security Group for the Infisical Relay instance +resource "aws_security_group" "infisical_relay_sg" { + name = "${name}-relay-sg" + description = "Allows inbound traffic for Infisical Relay and SSH" + vpc_id = "${vpcId}" + + # Inbound: Allows the Infisical platform to securely communicate with the Relay server. + ingress { + from_port = 8443 + to_port = 8443 + protocol = "tcp" + cidr_blocks = ["0.0.0.0/0"] + } + + # Inbound: Allows Infisical Gateway to securely communicate via the Relay. + ingress { + from_port = 2222 + to_port = 2222 + protocol = "tcp" + cidr_blocks = ["0.0.0.0/0"] + } + + # Inbound: Allows secure shell (SSH) access for administration. + ingress { + from_port = 22 + to_port = 22 + protocol = "tcp" + cidr_blocks = ["0.0.0.0/0"] # Restrict this to your IP in production + } + + # Outbound: Allows the Relay server to make necessary outbound connections to the Infisical platform. + egress { + from_port = 0 + to_port = 0 + protocol = "-1" + cidr_blocks = ["0.0.0.0/0"] + } + + tags = { + Name = "${name}-relay-sg" + } +} + +# Elastic IP for a static public IP address +resource "aws_eip" "infisical_relay_eip" { + tags = { + Name = "${name}-relay-eip" + } +} + +# EC2 instance to run Infisical Relay +module "infisical_relay_instance" { + source = "terraform-aws-modules/ec2-instance/aws" + version = "~> 5.6" + + name = "${name}-relay-instance" + ami = "${ami}" + instance_type = "t3.micro" + subnet_id = "${subnetId}" + + vpc_security_group_ids = [aws_security_group.infisical_relay_sg.id] + associate_public_ip_address = false # We are using an Elastic IP instead + + user_data = <<-EOT + #!/bin/bash + set -e + # Install Infisical CLI + curl -1sLf 'https://artifacts-cli.infisical.com/setup.deb.sh' | bash + apt-get update && apt-get install -y infisical + + # Install the relay as a systemd service. + # This example uses a Machine Identity token for authentication via the INFISICAL_TOKEN environment variable. + # + # Note: For production environments, you might consider fetching the token from AWS Parameter Store or AWS Secrets Manager. + export INFISICAL_TOKEN="${identityToken}" + sudo -E infisical relay systemd install \\ + --name "${name}" \\ + --domain "${domain}" \\ + --host "\${aws_eip.infisical_relay_eip.public_ip}" + + # Start and enable the service to run on boot + sudo systemctl start infisical-relay + sudo systemctl enable infisical-relay + EOT +} + +# Associate the Elastic IP with the EC2 instance +resource "aws_eip_association" "eip_assoc" { + instance_id = module.infisical_relay_instance.id + allocation_id = aws_eip.infisical_relay_eip.id +} +`; + }, [name, instanceDomain, identityToken, awsRegion, vpcId, ami, subnetId]); + + if (step === "command") { + return ( + <> +
+ Terraform Configuration + { + navigator.clipboard.writeText(terraformCommand); + createNotification({ + text: "Terraform configuration copied to clipboard", + type: "info" + }); + }} + className="w-10" + > + + +
+
+
+            {terraformCommand}
+          
+
+
+ + + +
+ + ); + } + + return ( + <> + + setName(e.target.value)} + placeholder="Enter relay name..." + isError={Boolean(errors.name)} + /> + {errors.name &&

{errors.name}

} + + + setInstanceDomain(e.target.value)} + placeholder="https://app.infisical.com" + isError={Boolean(errors.instanceDomain)} + /> + {errors.instanceDomain &&

{errors.instanceDomain}

} + + {canCreateToken && autogenerateToken ? ( + <> + + + handleIdentityChange( + e as SingleValue<{ + id: string; + name: string; + }> + ) + } + isLoading={isIdentitiesLoading} + placeholder="Select identity..." + options={identityMembershipOrgs.map((membership) => membership.identity)} + getOptionValue={(option) => option.id} + getOptionLabel={(option) => option.name} + /> + {errors.identity &&

{errors.identity}

} + + ) : ( + <> + + setIdentityToken(e.target.value)} + placeholder="Enter identity token..." + isError={Boolean(errors.identityToken)} + /> + {errors.identityToken &&

{errors.identityToken}

} + + )} + + {canCreateToken && ( +
+ { + setAutogenerateToken(Boolean(e)); + }} + id="autogenerate-token" + className="mr-2" + > +
+ Automatically enable token auth and generate a token for identity + + Token authentication will be automatically enabled for the selected identity if + it isn't already configured. By default, it will be configured to allow all + IP addresses with a token TTL of 30 days. You can manage these settings in + Access Control. +
+
A token will automatically be generated to be used with the CLI command. + + } + > + +
+
+
+
+ )} + + + + + `-mb-[0.14rem] px-4 py-2 text-sm font-medium whitespace-nowrap outline-hidden disabled:opacity-60 ${ + selected ? "border-b-2 border-mineshaft-300 text-mineshaft-200" : "text-bunker-300" + }` + } + > + EC2 + + + + + + setAwsRegion(e.target.value)} + placeholder="us-east-1" + isError={Boolean(errors.awsRegion)} + /> + {errors.awsRegion &&

{errors.awsRegion}

} + + setVpcId(e.target.value)} + placeholder="vpc-..." + isError={Boolean(errors.vpcId)} + /> + {errors.vpcId &&

{errors.vpcId}

} + + setAmi(e.target.value)} + placeholder="ami-..." + isError={Boolean(errors.ami)} + /> + {errors.ami &&

{errors.ami}

} + + setSubnetId(e.target.value)} + placeholder="subnet-..." + isError={Boolean(errors.subnetId)} + /> + {errors.subnetId &&

{errors.subnetId}

} +
+
+
+ +
+ + + + +
+ + ); +}; From 84d93205f030156c2d7a3c14fab9a6203a8b5711 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Tue, 28 Oct 2025 20:25:54 +0530 Subject: [PATCH 02/79] fix: upgrade plan modal text --- .../src/ee/services/license/license-fns.ts | 76 +++++++++---------- .../components/pki-syncs/PkiSyncSelect.tsx | 4 +- .../secret-syncs/SecretSyncSelect.tsx | 5 +- frontend/src/layouts/PamLayout/PamLayout.tsx | 3 +- .../ProjectSelect/ProjectSelect.tsx | 2 +- .../components/ServerAdminsTable.tsx | 4 +- .../components/EncryptionPageForm.tsx | 4 +- .../components/UserIdentitiesTable.tsx | 11 +-- .../components/CaSection.tsx | 9 +-- .../components/CaTable.tsx | 5 +- .../components/ExternalCaSection.tsx | 9 +-- .../components/ExternalCaTable.tsx | 3 +- .../CertificateTemplatesSection.tsx | 2 +- .../PkiTemplateListPage.tsx | 2 +- .../KmipPage/components/KmipClientTable.tsx | 2 +- .../OrgGroupsSection/OrgGroupsSection.tsx | 5 +- .../IdentityAliCloudAuthForm.tsx | 17 ++++- .../IdentityAuthMethodModalContent.tsx | 2 +- .../IdentitySection/IdentityAwsAuthForm.tsx | 17 ++++- .../IdentitySection/IdentityAzureAuthForm.tsx | 17 ++++- .../IdentitySection/IdentityGcpAuthForm.tsx | 17 ++++- .../IdentitySection/IdentityJwtAuthForm.tsx | 17 ++++- .../IdentityKubernetesAuthForm.tsx | 17 ++++- .../IdentitySection/IdentityLdapAuthForm.tsx | 12 ++- .../IdentitySection/IdentityOciAuthForm.tsx | 17 ++++- .../IdentitySection/IdentityOidcAuthForm.tsx | 17 ++++- .../IdentitySection/IdentitySection.tsx | 8 +- .../IdentityTlsCertAuthForm.tsx | 17 ++++- .../IdentitySection/IdentityTokenAuthForm.tsx | 17 ++++- .../IdentityUniversalAuthForm.tsx | 29 +++++-- .../OrgMembersSection/OrgMembersSection.tsx | 4 +- .../OrgMembersSection/OrgMembersTable.tsx | 5 +- .../OrgRoleTabSection/OrgRoleTable.tsx | 5 +- .../components/AppConnectionList.tsx | 2 +- .../AuditLogsPage/components/LogsSection.tsx | 4 +- .../GroupDetailsByIDPage.tsx | 9 +-- .../IdentityDetailsByIDPage.tsx | 2 +- .../ViewIdentityAuthModal.tsx | 2 +- .../ProjectsPage/ProjectsPage.tsx | 2 +- .../AuditLogStreamTab/AuditLogStreamTab.tsx | 2 +- .../components/LogStreamProviderSelect.tsx | 2 +- .../components/KmipTab/OrgKmipTab.tsx | 2 +- .../OrgEncryptionTab/OrgEncryptionTab.tsx | 2 +- .../OrgGithubSyncSection.tsx | 2 +- .../OrgProvisioningTab/OrgSCIMSection.tsx | 2 +- .../OrgSecurityTab/OrgGenericAuthSection.tsx | 2 +- .../OrgSsoTab/OrgGeneralAuthSection.tsx | 2 +- .../components/OrgSsoTab/OrgLDAPSection.tsx | 2 +- .../components/OrgSsoTab/OrgOIDCSection.tsx | 2 +- .../components/OrgSsoTab/OrgSSOSection.tsx | 10 +-- .../components/OrgSsoTab/OrgSsoTab.tsx | 18 ++--- .../components/ProjectTemplatesSection.tsx | 2 +- .../UserDetailsByIDPage.tsx | 2 +- .../components/UserOrgMembershipModal.tsx | 3 +- .../components/ResourceTypeSelect.tsx | 7 +- .../GroupsSection/GroupsSection.tsx | 9 +-- .../MembersTab/components/MembersSection.tsx | 9 +-- .../MembersTab/components/MembersTable.tsx | 5 +- .../MemberDetailsByIDPage.tsx | 5 +- .../AuditLogsRetentionSection.tsx | 8 +- .../components/IPAllowlistSection.tsx | 2 +- .../components/IPAllowlistTable.tsx | 2 +- .../OverviewPage/OverviewPage.tsx | 8 +- .../AccessApprovalRequest.tsx | 5 +- .../ApprovalPolicyList/ApprovalPolicyList.tsx | 2 +- .../components/ActionBar/ActionBar.tsx | 10 +-- .../EnvironmentTabs/EnvironmentTabs.tsx | 2 +- .../SecretListView/SecretDetailSidebar.tsx | 2 +- .../SecretRotationPage/SecretRotationPage.tsx | 2 +- .../EnvironmentSection/EnvironmentSection.tsx | 2 +- .../SecretScanningDataSourcesSection.tsx | 2 +- .../SshCasPage/components/SshCaSection.tsx | 8 +- .../components/SshHostGroupHostsSection.tsx | 9 +-- .../components/SshHostGroupsSection.tsx | 9 +-- 74 files changed, 302 insertions(+), 263 deletions(-) diff --git a/backend/src/ee/services/license/license-fns.ts b/backend/src/ee/services/license/license-fns.ts index 97061e3ca..f9ae721cb 100644 --- a/backend/src/ee/services/license/license-fns.ts +++ b/backend/src/ee/services/license/license-fns.ts @@ -21,55 +21,55 @@ export const getDefaultOnPremFeatures = (): TFeatureSet => ({ environmentsUsed: 0, identityLimit: null, identitiesUsed: 0, - dynamicSecret: false, + dynamicSecret: true, secretVersioning: true, - pitRecovery: false, - ipAllowlisting: false, - rbac: false, - githubOrgSync: false, - customRateLimits: false, - subOrganization: false, - customAlerts: false, - secretAccessInsights: false, - auditLogs: false, + pitRecovery: true, + ipAllowlisting: true, + rbac: true, + githubOrgSync: true, + customRateLimits: true, + subOrganization: true, + customAlerts: true, + secretAccessInsights: true, + auditLogs: true, auditLogsRetentionDays: 0, - auditLogStreams: false, + auditLogStreams: true, auditLogStreamLimit: 3, - samlSSO: false, - enforceGoogleSSO: false, - hsm: false, - oidcSSO: false, - scim: false, - ldap: false, - groups: false, + samlSSO: true, + enforceGoogleSSO: true, + hsm: true, + oidcSSO: true, + scim: true, + ldap: true, + groups: true, status: null, trial_end: null, has_used_trial: true, - secretApproval: false, - secretRotation: false, - caCrl: false, - instanceUserManagement: false, - externalKms: false, + secretApproval: true, + secretRotation: true, + caCrl: true, + instanceUserManagement: true, + externalKms: true, rateLimits: { readLimit: 60, writeLimit: 200, secretsLimit: 40 }, - pkiEst: false, - enforceMfa: false, - projectTemplates: false, - kmip: false, - gateway: false, - sshHostGroups: false, - secretScanning: false, - enterpriseSecretSyncs: false, - enterpriseCertificateSyncs: false, - enterpriseAppConnections: false, - fips: false, - eventSubscriptions: false, - machineIdentityAuthTemplates: false, - pkiLegacyTemplates: false, - pam: false + pkiEst: true, + enforceMfa: true, + projectTemplates: true, + kmip: true, + gateway: true, + sshHostGroups: true, + secretScanning: true, + enterpriseSecretSyncs: true, + enterpriseCertificateSyncs: true, + enterpriseAppConnections: true, + fips: true, + eventSubscriptions: true, + machineIdentityAuthTemplates: true, + pkiLegacyTemplates: true, + pam: true }); export const setupLicenseRequestWithStore = ( diff --git a/frontend/src/components/pki-syncs/PkiSyncSelect.tsx b/frontend/src/components/pki-syncs/PkiSyncSelect.tsx index aedfebf47..251f88ee2 100644 --- a/frontend/src/components/pki-syncs/PkiSyncSelect.tsx +++ b/frontend/src/components/pki-syncs/PkiSyncSelect.tsx @@ -71,7 +71,7 @@ export const PkiSyncSelect = ({ onSelect }: Props) => { enterprise && !subscription.enterpriseCertificateSyncs ? handlePopUpOpen("upgradePlan", { isEnterpriseFeature: true, - text: "You can use every Certificate Sync if you switch to Infisical's Enterprise plan." + text: "All Certificate Syncs can be unlocked if you switch to Infisical Enterprise plan." }) : onSelect(destination) } @@ -152,7 +152,7 @@ export const PkiSyncSelect = ({ onSelect }: Props) => { isOpen={popUp.upgradePlan.isOpen} onOpenChange={(isOpen) => handlePopUpToggle("upgradePlan", isOpen)} isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} - text="You can use every Certificate Sync if you switch to Infisical's Enterprise plan." + text={popUp.upgradePlan.data?.text} /> ); diff --git a/frontend/src/components/secret-syncs/SecretSyncSelect.tsx b/frontend/src/components/secret-syncs/SecretSyncSelect.tsx index b3aeab962..601cec343 100644 --- a/frontend/src/components/secret-syncs/SecretSyncSelect.tsx +++ b/frontend/src/components/secret-syncs/SecretSyncSelect.tsx @@ -68,7 +68,8 @@ export const SecretSyncSelect = ({ onSelect }: Props) => { onClick={() => enterprise && !subscription.enterpriseSecretSyncs ? handlePopUpOpen("upgradePlan", { - isEnterpriseFeature: true + isEnterpriseFeature: true, + text: "All Secret Syncs can be unlocked if you switch to Infisical's Enterprise plan." }) : onSelect(destination) } @@ -149,7 +150,7 @@ export const SecretSyncSelect = ({ onSelect }: Props) => { isOpen={popUp.upgradePlan.isOpen} isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} onOpenChange={(isOpen) => handlePopUpToggle("upgradePlan", isOpen)} - text="You can use every Secret Sync if you switch to Infisical's Enterprise plan." + text={popUp.upgradePlan.data?.text} /> ); diff --git a/frontend/src/layouts/PamLayout/PamLayout.tsx b/frontend/src/layouts/PamLayout/PamLayout.tsx index 5b74703dc..c6e7e067a 100644 --- a/frontend/src/layouts/PamLayout/PamLayout.tsx +++ b/frontend/src/layouts/PamLayout/PamLayout.tsx @@ -19,7 +19,8 @@ export const PamLayout = () => { useEffect(() => { if (subscription && !subscription.pam) { handlePopUpOpen("upgradePlan", { - description: "You can use PAM if you switch to Infisical's Enterprise plan.", + description: + "Your current plan does not provide access to Infisical PAM. To unlock this feature, please upgrade to Infisical Enterprise plan.", isEnterpriseFeature: true }); } diff --git a/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx b/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx index 72430fec6..aced07180 100644 --- a/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx +++ b/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx @@ -243,7 +243,7 @@ export const ProjectSelect = () => { handlePopUpToggle("upgradePlan", isOpen)} - text="You have exceeded the number of projects allowed on the free plan." + text="Your current plan does not allow you to create new projects. To create new projects, please upgrade to Infisical Pro plan." /> { handlePopUpToggle("upgradePlan", isOpen)} - text={`${popUp?.upgradePlan?.data?.message} is only available on Infisical's Pro plan and above.`} + text={ + "Your current plan does not allow removing server admins. To unlock this feature, please upgrade to Infisical Pro plan." + } /> { if (!subscription.hsm) { handlePopUpOpen("upgradePlan", { isEnterpriseFeature: true, - description: "Hardware Security Module's (HSM's), are only available on Enterprise plans." + text: "Your current plan does not provide access to Hardware Security Module (HSM). To unlock this feature, please upgrade to Infisical Enterprise plan." }); return; } @@ -146,7 +146,7 @@ export const EncryptionPageForm = () => { handlePopUpToggle("upgradePlan", isOpen)} - text={(popUp.upgradePlan?.data as { description: string })?.description} + text={(popUp.upgradePlan?.data as { text: string })?.text} isEnterpriseFeature={popUp.upgradePlan?.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/admin/ResourceOverviewPage/components/UserIdentitiesTable.tsx b/frontend/src/pages/admin/ResourceOverviewPage/components/UserIdentitiesTable.tsx index 7b5b2c3d5..67873eabc 100644 --- a/frontend/src/pages/admin/ResourceOverviewPage/components/UserIdentitiesTable.tsx +++ b/frontend/src/pages/admin/ResourceOverviewPage/components/UserIdentitiesTable.tsx @@ -58,9 +58,6 @@ import { import { User } from "@app/hooks/api/users/types"; import { UsePopUpState } from "@app/hooks/usePopUp"; -const addServerAdminUpgradePlanMessage = "Granting another user Server Admin permissions"; -const removeServerAdminUpgradePlanMessage = "Removing Server Admin permissions from user"; - const UserPanelTable = ({ handlePopUpOpen, users, @@ -84,7 +81,7 @@ const UserPanelTable = ({ data?: { username: string; id: string; - message?: string; + text?: string; } ) => void; isPending: boolean; @@ -259,7 +256,7 @@ const UserPanelTable = ({ handlePopUpOpen("upgradePlan", { username, id, - message: addServerAdminUpgradePlanMessage + text: "Your current plan does not allow making users server admins. To unlock this feature, please upgrade to Infisical Pro plan." }); return; } @@ -287,7 +284,7 @@ const UserPanelTable = ({ handlePopUpOpen("upgradePlan", { username, id, - message: removeServerAdminUpgradePlanMessage + text: "Your current plan does not allow removing server admin permissions from user. To unlock this feature, please upgrade to Infisical Pro plan." }); return; } @@ -529,7 +526,7 @@ export const UserIdentitiesTable = () => { handlePopUpToggle("upgradePlan", isOpen)} - text={`${popUp?.upgradePlan?.data?.message} is only available on Infisical's Pro plan and above.`} + text={popUp.upgradePlan.data?.text} /> { "caCert", "installCaCert", "deleteCa", - "caStatus", // enable / disable - "upgradePlan" + "caStatus" // enable / disable ] as const); const onRemoveCaSubmit = async (caName: string) => { @@ -124,11 +122,6 @@ export const CaSection = () => { onUpdateCaStatus(popUp?.caStatus?.data as { caName: string; status: CaStatus }) } /> - handlePopUpToggle("upgradePlan", isOpen)} - text={(popUp.upgradePlan?.data as { description: string })?.description} - /> ); }; diff --git a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaTable.tsx b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaTable.tsx index 81fce98c6..c3bc6d89a 100644 --- a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaTable.tsx +++ b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaTable.tsx @@ -34,15 +34,12 @@ import { UsePopUpState } from "@app/hooks/usePopUp"; type Props = { handlePopUpOpen: ( - popUpName: keyof UsePopUpState< - ["installCaCert", "caCert", "ca", "deleteCa", "caStatus", "upgradePlan"] - >, + popUpName: keyof UsePopUpState<["installCaCert", "caCert", "ca", "deleteCa", "caStatus"]>, data?: { caId?: string; caName?: string; dn?: string; status?: CaStatus; - description?: string; } ) => void; }; diff --git a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaSection.tsx b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaSection.tsx index 14ce122ec..24bfb79ac 100644 --- a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaSection.tsx +++ b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaSection.tsx @@ -1,7 +1,6 @@ import { faPlus } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { UpgradePlanModal } from "@app/components/license/UpgradePlanModal"; import { createNotification } from "@app/components/notifications"; import { ProjectPermissionCan } from "@app/components/permissions"; import { Button, DeleteActionModal } from "@app/components/v2"; @@ -20,8 +19,7 @@ export const ExternalCaSection = () => { const { popUp, handlePopUpOpen, handlePopUpClose, handlePopUpToggle } = usePopUp([ "ca", "deleteCa", - "caStatus", // enable / disable - "upgradePlan" + "caStatus" // enable / disable ] as const); const onRemoveCaSubmit = async (caName: string, type: CaType) => { @@ -131,11 +129,6 @@ export const ExternalCaSection = () => { ) } /> - handlePopUpToggle("upgradePlan", isOpen)} - text={(popUp.upgradePlan?.data as { description: string })?.description} - /> ); }; diff --git a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaTable.tsx b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaTable.tsx index a948473e8..87909ae29 100644 --- a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaTable.tsx +++ b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaTable.tsx @@ -33,12 +33,11 @@ import { UsePopUpState } from "@app/hooks/usePopUp"; type Props = { handlePopUpOpen: ( - popUpName: keyof UsePopUpState<["ca", "deleteCa", "caStatus", "upgradePlan"]>, + popUpName: keyof UsePopUpState<["ca", "deleteCa", "caStatus"]>, data?: { name?: string; type?: CaType; status?: CaStatus; - description?: string; } ) => void; }; diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplatesSection.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplatesSection.tsx index 629553200..a9e12f73d 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplatesSection.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplatesSection.tsx @@ -105,7 +105,7 @@ export const CertificateTemplatesSection = ({ caId }: Props) => { isOpen={popUp.upgradePlan.isOpen} onOpenChange={(isOpen) => handlePopUpToggle("upgradePlan", isOpen)} isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} - text="Managing template enrollment options for EST is only available on Infisical's Enterprise plan." + text="Your current plan does not allow managing template enrollment options for EST. To unlock this feature, please upgrade to Infisical Enterprise plan." /> ); diff --git a/frontend/src/pages/cert-manager/PkiTemplateListPage/PkiTemplateListPage.tsx b/frontend/src/pages/cert-manager/PkiTemplateListPage/PkiTemplateListPage.tsx index b395d0ec2..619e2f347 100644 --- a/frontend/src/pages/cert-manager/PkiTemplateListPage/PkiTemplateListPage.tsx +++ b/frontend/src/pages/cert-manager/PkiTemplateListPage/PkiTemplateListPage.tsx @@ -297,7 +297,7 @@ export const PkiTemplateListPage = () => { handlePopUpToggle("estUpgradePlan", isOpen)} - text="You can only configure template enrollment methods if you switch to Infisical's Enterprise plan." + text="Your current plan does not allow configuring template enrollment methods. To unlock this feature, please upgrade to Infisical Enterprise plan." isEnterpriseFeature={popUp.estUpgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/kms/KmipPage/components/KmipClientTable.tsx b/frontend/src/pages/kms/KmipPage/components/KmipClientTable.tsx index 474ad158a..3758fb53c 100644 --- a/frontend/src/pages/kms/KmipPage/components/KmipClientTable.tsx +++ b/frontend/src/pages/kms/KmipPage/components/KmipClientTable.tsx @@ -344,7 +344,7 @@ export const KmipClientTable = () => { handlePopUpToggle("upgradePlan", isOpen)} - text="KMIP requires an enterprise plan." + text="Your current plan does not provide access to KMIP. To unlock this feature, please upgrade to Infisical Enterprise plan." isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupsSection.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupsSection.tsx index 125973810..e571a8428 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupsSection.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupsSection.tsx @@ -26,8 +26,7 @@ export const OrgGroupsSection = () => { const handleAddGroupModal = () => { if (!subscription?.groups) { handlePopUpOpen("upgradePlan", { - description: - "You can manage users more efficiently with groups if you upgrade your Infisical plan to an Enterprise license.", + text: "Your current plan does not allow managing groups. To unlock this feature, please upgrade to Infisical Enterprise plan.", isEnterpriseFeature: true }); } else { @@ -94,7 +93,7 @@ export const OrgGroupsSection = () => { isOpen={popUp.upgradePlan.isOpen} onOpenChange={(isOpen) => handlePopUpToggle("upgradePlan", isOpen)} isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} - text={(popUp.upgradePlan?.data as { description: string })?.description} + text={(popUp.upgradePlan?.data as { text: string })?.text} /> ); diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAliCloudAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAliCloudAuthForm.tsx index 4ddcf964e..74850b475 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAliCloudAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAliCloudAuthForm.tsx @@ -55,7 +55,10 @@ const schema = z export type FormData = z.infer; type Props = { - handlePopUpOpen: (popUpName: keyof UsePopUpState<["upgradePlan"]>) => void; + handlePopUpOpen: ( + popUpName: keyof UsePopUpState<["upgradePlan"]>, + data?: { featureName?: string } + ) => void; handlePopUpToggle: ( popUpName: keyof UsePopUpState<["identityAuthMethod"]>, state?: boolean @@ -277,7 +280,9 @@ export const IdentityAliCloudAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} placeholder="123.456.789.0" /> @@ -292,7 +297,9 @@ export const IdentityAliCloudAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} size="lg" colorSchema="danger" @@ -315,7 +322,9 @@ export const IdentityAliCloudAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} leftIcon={} size="xs" diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAuthMethodModalContent.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAuthMethodModalContent.tsx index b8bbce31b..ae9696d4e 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAuthMethodModalContent.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAuthMethodModalContent.tsx @@ -291,7 +291,7 @@ export const IdentityAuthMethodModalContent = ({ handlePopUpToggle("upgradePlan", isOpen)} - text={`You can use ${popUp.upgradePlan.data?.featureName ?? "IP allowlisting"} if you switch to Infisical's ${popUp.upgradePlan.data?.isEnterpriseFeature ? "Enterprise" : "Pro"} plan.`} + text={`Your current plan does not allow ${popUp.upgradePlan.data?.featureName}. To unlock this feature, please upgrade to Infisical ${popUp.upgradePlan.data?.isEnterpriseFeature ? "Enterprise" : "Pro"} plan.`} isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAwsAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAwsAuthForm.tsx index 7e3292c18..43b86e1b0 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAwsAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAwsAuthForm.tsx @@ -57,7 +57,10 @@ const schema = z export type FormData = z.infer; type Props = { - handlePopUpOpen: (popUpName: keyof UsePopUpState<["upgradePlan"]>) => void; + handlePopUpOpen: ( + popUpName: keyof UsePopUpState<["upgradePlan"]>, + data?: { featureName?: string } + ) => void; handlePopUpToggle: ( popUpName: keyof UsePopUpState<["identityAuthMethod"]>, state?: boolean @@ -315,7 +318,9 @@ export const IdentityAwsAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} placeholder="123.456.789.0" /> @@ -330,7 +335,9 @@ export const IdentityAwsAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} size="lg" colorSchema="danger" @@ -353,7 +360,9 @@ export const IdentityAwsAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} leftIcon={} size="xs" diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAzureAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAzureAuthForm.tsx index 518d97e7b..c99151c8a 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAzureAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAzureAuthForm.tsx @@ -52,7 +52,10 @@ const schema = z export type FormData = z.infer; type Props = { - handlePopUpOpen: (popUpName: keyof UsePopUpState<["upgradePlan"]>) => void; + handlePopUpOpen: ( + popUpName: keyof UsePopUpState<["upgradePlan"]>, + data?: { featureName?: string } + ) => void; handlePopUpToggle: ( popUpName: keyof UsePopUpState<["identityAuthMethod"]>, state?: boolean @@ -311,7 +314,9 @@ export const IdentityAzureAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} placeholder="123.456.789.0" /> @@ -326,7 +331,9 @@ export const IdentityAzureAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} size="lg" colorSchema="danger" @@ -349,7 +356,9 @@ export const IdentityAzureAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} leftIcon={} size="xs" diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityGcpAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityGcpAuthForm.tsx index 7175e8b62..f99cfb235 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityGcpAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityGcpAuthForm.tsx @@ -55,7 +55,10 @@ const schema = z export type FormData = z.infer; type Props = { - handlePopUpOpen: (popUpName: keyof UsePopUpState<["upgradePlan"]>) => void; + handlePopUpOpen: ( + popUpName: keyof UsePopUpState<["upgradePlan"]>, + data?: { featureName?: string } + ) => void; handlePopUpToggle: ( popUpName: keyof UsePopUpState<["identityAuthMethod"]>, state?: boolean @@ -350,7 +353,9 @@ export const IdentityGcpAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} placeholder="123.456.789.0" /> @@ -365,7 +370,9 @@ export const IdentityGcpAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} size="lg" colorSchema="danger" @@ -388,7 +395,9 @@ export const IdentityGcpAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} leftIcon={} size="xs" diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityJwtAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityJwtAuthForm.tsx index f62045810..96f4af954 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityJwtAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityJwtAuthForm.tsx @@ -88,7 +88,10 @@ const schema = z.discriminatedUnion("configurationType", [ export type FormData = z.infer; type Props = { - handlePopUpOpen: (popUpName: keyof UsePopUpState<["upgradePlan"]>) => void; + handlePopUpOpen: ( + popUpName: keyof UsePopUpState<["upgradePlan"]>, + data?: { featureName?: string } + ) => void; handlePopUpToggle: ( popUpName: keyof UsePopUpState<["identityAuthMethod"]>, state?: boolean @@ -619,7 +622,9 @@ export const IdentityJwtAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} placeholder="123.456.789.0" /> @@ -634,7 +639,9 @@ export const IdentityJwtAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} size="lg" colorSchema="danger" @@ -657,7 +664,9 @@ export const IdentityJwtAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} leftIcon={} size="xs" diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityKubernetesAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityKubernetesAuthForm.tsx index 3cfe1c355..ea8e4903f 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityKubernetesAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityKubernetesAuthForm.tsx @@ -95,7 +95,10 @@ const schema = z export type FormData = z.infer; type Props = { - handlePopUpOpen: (popUpName: keyof UsePopUpState<["upgradePlan"]>) => void; + handlePopUpOpen: ( + popUpName: keyof UsePopUpState<["upgradePlan"]>, + data?: { featureName?: string } + ) => void; handlePopUpToggle: ( popUpName: keyof UsePopUpState<["identityAuthMethod"]>, state?: boolean @@ -695,7 +698,9 @@ export const IdentityKubernetesAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} placeholder="123.456.789.0" /> @@ -710,7 +715,9 @@ export const IdentityKubernetesAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} size="lg" colorSchema="danger" @@ -733,7 +740,9 @@ export const IdentityKubernetesAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} leftIcon={} size="xs" diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityLdapAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityLdapAuthForm.tsx index b2096fa06..86da3abe4 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityLdapAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityLdapAuthForm.tsx @@ -837,7 +837,9 @@ export const IdentityLdapAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} placeholder="123.456.789.0" /> @@ -852,7 +854,9 @@ export const IdentityLdapAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} size="lg" colorSchema="danger" @@ -875,7 +879,9 @@ export const IdentityLdapAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} leftIcon={} size="xs" diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityOciAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityOciAuthForm.tsx index 5e33c71bb..0fd7b45a0 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityOciAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityOciAuthForm.tsx @@ -63,7 +63,10 @@ const schema = z export type FormData = z.infer; type Props = { - handlePopUpOpen: (popUpName: keyof UsePopUpState<["upgradePlan"]>) => void; + handlePopUpOpen: ( + popUpName: keyof UsePopUpState<["upgradePlan"]>, + data?: { featureName?: string } + ) => void; handlePopUpToggle: ( popUpName: keyof UsePopUpState<["identityAuthMethod"]>, state?: boolean @@ -297,7 +300,9 @@ export const IdentityOciAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} placeholder="123.456.789.0" /> @@ -312,7 +317,9 @@ export const IdentityOciAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} size="lg" colorSchema="danger" @@ -335,7 +342,9 @@ export const IdentityOciAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} leftIcon={} size="xs" diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityOidcAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityOidcAuthForm.tsx index 15fbc4b72..87ab18eb6 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityOidcAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityOidcAuthForm.tsx @@ -75,7 +75,10 @@ const schema = z.object({ export type FormData = z.infer; type Props = { - handlePopUpOpen: (popUpName: keyof UsePopUpState<["upgradePlan"]>) => void; + handlePopUpOpen: ( + popUpName: keyof UsePopUpState<["upgradePlan"]>, + data?: { featureName?: string } + ) => void; handlePopUpToggle: ( popUpName: keyof UsePopUpState<["identityAuthMethod"]>, state?: boolean @@ -606,7 +609,9 @@ export const IdentityOidcAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} placeholder="123.456.789.0" /> @@ -621,7 +626,9 @@ export const IdentityOidcAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} size="lg" colorSchema="danger" @@ -644,7 +651,9 @@ export const IdentityOidcAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} leftIcon={} size="xs" diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentitySection.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentitySection.tsx index c9af90a26..7c6385516 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentitySection.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentitySection.tsx @@ -162,8 +162,7 @@ export const IdentitySection = withPermission( onClick={() => { if (!isMoreIdentitiesAllowed && !isEnterprise) { handlePopUpOpen("upgradePlan", { - description: - "You can add more identities if you upgrade your Infisical Pro plan." + text: "You have reached the limit of identities allowed on your current plan. To add more identities, please upgrade to Infisical Pro plan." }); return; } @@ -211,8 +210,7 @@ export const IdentitySection = withPermission( if (subscription && !subscription.machineIdentityAuthTemplates) { handlePopUpOpen("upgradePlan", { isEnterpriseFeature: true, - description: - "You can use Identity Auth Templates if you switch to Infisical's Enterprise plan." + text: "Your current plan does not provide access to creating Identity Auth Templates. To unlock this feature, please upgrade to Infisical Enterprise plan." }); return; } @@ -283,7 +281,7 @@ export const IdentitySection = withPermission( handlePopUpToggle("upgradePlan", isOpen)} - text={popUp.upgradePlan.data?.description} + text={popUp.upgradePlan.data?.text} isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTlsCertAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTlsCertAuthForm.tsx index 19a0499fc..fc79035b1 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTlsCertAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTlsCertAuthForm.tsx @@ -50,7 +50,10 @@ const schema = z.object({ export type FormData = z.infer; type Props = { - handlePopUpOpen: (popUpName: keyof UsePopUpState<["upgradePlan"]>) => void; + handlePopUpOpen: ( + popUpName: keyof UsePopUpState<["upgradePlan"]>, + data?: { featureName?: string } + ) => void; handlePopUpToggle: ( popUpName: keyof UsePopUpState<["identityAuthMethod"]>, state?: boolean @@ -286,7 +289,9 @@ export const IdentityTlsCertAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} placeholder="123.456.789.0" /> @@ -301,7 +306,9 @@ export const IdentityTlsCertAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} size="lg" colorSchema="danger" @@ -324,7 +331,9 @@ export const IdentityTlsCertAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} leftIcon={} size="xs" diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTokenAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTokenAuthForm.tsx index b819202fc..502580c9d 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTokenAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTokenAuthForm.tsx @@ -49,7 +49,10 @@ const schema = z export type FormData = z.infer; type Props = { - handlePopUpOpen: (popUpName: keyof UsePopUpState<["upgradePlan"]>) => void; + handlePopUpOpen: ( + popUpName: keyof UsePopUpState<["upgradePlan"]>, + data?: { featureName?: string } + ) => void; handlePopUpToggle: ( popUpName: keyof UsePopUpState<["identityAuthMethod"]>, state?: boolean @@ -248,7 +251,9 @@ export const IdentityTokenAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} placeholder="123.456.789.0" /> @@ -263,7 +268,9 @@ export const IdentityTokenAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} size="lg" colorSchema="danger" @@ -286,7 +293,9 @@ export const IdentityTokenAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} leftIcon={} size="xs" diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityUniversalAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityUniversalAuthForm.tsx index d43d84c86..dbaeff687 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityUniversalAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityUniversalAuthForm.tsx @@ -87,7 +87,10 @@ const schema = z export type FormData = z.infer; type Props = { - handlePopUpOpen: (popUpName: keyof UsePopUpState<["upgradePlan"]>) => void; + handlePopUpOpen: ( + popUpName: keyof UsePopUpState<["upgradePlan"]>, + data?: { featureName?: string } + ) => void; handlePopUpToggle: ( popUpName: keyof UsePopUpState<["identityAuthMethod"]>, state?: boolean @@ -409,7 +412,9 @@ export const IdentityUniversalAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} placeholder="123.456.789.0" /> @@ -424,7 +429,9 @@ export const IdentityUniversalAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} size="lg" colorSchema="danger" @@ -447,7 +454,9 @@ export const IdentityUniversalAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} leftIcon={} size="xs" @@ -477,7 +486,9 @@ export const IdentityUniversalAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} placeholder="123.456.789.0" /> @@ -492,7 +503,9 @@ export const IdentityUniversalAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} size="lg" colorSchema="danger" @@ -515,7 +528,9 @@ export const IdentityUniversalAuthForm = ({ return; } - handlePopUpOpen("upgradePlan"); + handlePopUpOpen("upgradePlan", { + featureName: "IP allowlisting" + }); }} leftIcon={} size="xs" diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersSection.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersSection.tsx index 0628a214a..de029e848 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersSection.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersSection.tsx @@ -75,7 +75,7 @@ export const OrgMembersSection = () => { if (!isMoreIdentitiesAllowed && !isEnterprise) { handlePopUpOpen("upgradePlan", { - description: "You can add more members if you switch to Infisical's Pro plan." + text: "You have reached the limit of members allowed on your current plan. To add more members, please upgrade to Infisical Pro plan." }); return; } @@ -324,7 +324,7 @@ export const OrgMembersSection = () => { handlePopUpToggle("upgradePlan", isOpen)} - text={(popUp.upgradePlan?.data as { description: string })?.description} + text={(popUp.upgradePlan?.data as { text: string })?.text} /> void; @@ -133,8 +133,7 @@ export const OrgMembersTable = ({ if (isCustomRole && subscription && !subscription?.rbac) { handlePopUpOpen("upgradePlan", { - description: - "You can assign custom roles to members if you switch to Infisical's Pro plan." + text: "Your current plan does not allow assigning custom roles to members. To unlock this feature, please upgrade to Infisical Pro plan." }); return; } diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgRoleTabSection/OrgRoleTable.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgRoleTabSection/OrgRoleTable.tsx index 6b9caa8b9..587ffa175 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgRoleTabSection/OrgRoleTable.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgRoleTabSection/OrgRoleTable.tsx @@ -103,8 +103,7 @@ export const OrgRoleTable = () => { if (isCustomRole && subscription && !subscription?.rbac) { handlePopUpOpen("upgradePlan", { - description: - "You can set the default org role to a custom role if you switch to Infisical's Pro plan." + text: "Your current plan does not allow setting the default org role to a custom role. To unlock this feature, please upgrade to Infisical Pro plan." }); return; } @@ -461,7 +460,7 @@ export const OrgRoleTable = () => { handlePopUpToggle("upgradePlan", isOpen)} - text={(popUp.upgradePlan?.data as { description: string })?.description} + text={(popUp.upgradePlan?.data as { text: string })?.text} /> { handlePopUpToggle("upgradePlan", isOpen)} - text="You can use every App Connection if you switch to Infisical's Enterprise plan." + text="All App Connections can be unlocked if you switch to Infisical Enterprise plan." isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/organization/AuditLogsPage/components/LogsSection.tsx b/frontend/src/pages/organization/AuditLogsPage/components/LogsSection.tsx index 2ad1d20e6..39a6a0722 100644 --- a/frontend/src/pages/organization/AuditLogsPage/components/LogsSection.tsx +++ b/frontend/src/pages/organization/AuditLogsPage/components/LogsSection.tsx @@ -137,7 +137,7 @@ const LogsSectionComponent = ({ onOpenChange={(isOpen) => { handlePopUpToggle("upgradePlan", isOpen); }} - text="You can use audit logs if you switch to Infisical's Pro plan." + text="Your current plan does not provide access to audit logs. To unlock this feature, please upgrade to Infisical Pro plan." /> @@ -181,7 +181,7 @@ const LogsSectionComponent = ({ onOpenChange={(isOpen) => { handlePopUpToggle("upgradePlan", isOpen); }} - text="You can use audit logs if you switch to Infisical's Pro plan." + text="Your current plan does not provide access to audit logs. To unlock this feature, please upgrade to Infisical Pro plan." /> ); diff --git a/frontend/src/pages/organization/GroupDetailsByIDPage/GroupDetailsByIDPage.tsx b/frontend/src/pages/organization/GroupDetailsByIDPage/GroupDetailsByIDPage.tsx index b33ce0ef2..33acbc418 100644 --- a/frontend/src/pages/organization/GroupDetailsByIDPage/GroupDetailsByIDPage.tsx +++ b/frontend/src/pages/organization/GroupDetailsByIDPage/GroupDetailsByIDPage.tsx @@ -5,7 +5,6 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { Link, useNavigate, useParams } from "@tanstack/react-router"; import { twMerge } from "tailwind-merge"; -import { UpgradePlanModal } from "@app/components/license/UpgradePlanModal"; import { createNotification } from "@app/components/notifications"; import { OrgPermissionCan } from "@app/components/permissions"; import { @@ -51,8 +50,7 @@ const Page = () => { const { popUp, handlePopUpOpen, handlePopUpClose, handlePopUpToggle } = usePopUp([ "groupCreateUpdate", - "deleteGroup", - "upgradePlan" + "deleteGroup" ] as const); const onDeleteGroupSubmit = async ({ name, id }: { name: string; id: string }) => { @@ -184,11 +182,6 @@ const Page = () => { onDeleteGroupSubmit(popUp?.deleteGroup?.data as { name: string; id: string }) } /> - handlePopUpToggle("upgradePlan", isOpen)} - text={(popUp.upgradePlan?.data as { description: string })?.description} - /> ); }; diff --git a/frontend/src/pages/organization/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx b/frontend/src/pages/organization/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx index f3bd05eeb..6169db398 100644 --- a/frontend/src/pages/organization/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx +++ b/frontend/src/pages/organization/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx @@ -120,7 +120,7 @@ const Page = () => { handlePopUpToggle("upgradePlan", isOpen)} - text={(popUp.upgradePlan?.data as { description: string })?.description} + text={`Your current plan does not allow ${popUp.upgradePlan.data?.featureName}. To unlock this feature, please upgrade to Infisical ${popUp.upgradePlan.data?.isEnterpriseFeature ? "Enterprise" : "Pro"} plan.`} isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> handlePopUpToggle("upgradePlan", isOpen)} - text={(popUp.upgradePlan?.data as { description: string })?.description} + text={`Your current plan does not allow ${popUp.upgradePlan.data?.featureName}. To unlock this feature, please upgrade to Infisical ${popUp.upgradePlan.data?.isEnterpriseFeature ? "Enterprise" : "Pro"} plan.`} /> ); diff --git a/frontend/src/pages/organization/ProjectsPage/ProjectsPage.tsx b/frontend/src/pages/organization/ProjectsPage/ProjectsPage.tsx index b916c7867..0dd1d36fa 100644 --- a/frontend/src/pages/organization/ProjectsPage/ProjectsPage.tsx +++ b/frontend/src/pages/organization/ProjectsPage/ProjectsPage.tsx @@ -92,7 +92,7 @@ export const ProjectsPage = () => { handlePopUpToggle("upgradePlan", isOpen)} - text="You have exceeded the number of projects allowed on the free plan. You can upgrade to Infisical's Pro plan to add more projects." + text="You have reached the limit of projects allowed on your current plan. To add more projects, please upgrade to Infisical Pro plan." /> ); diff --git a/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/AuditLogStreamTab.tsx b/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/AuditLogStreamTab.tsx index 2ccdfad61..1da90980e 100644 --- a/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/AuditLogStreamTab.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/AuditLogStreamTab.tsx @@ -57,7 +57,7 @@ export const AuditLogStreamsTab = withPermission( handlePopUpToggle("upgradePlan", isOpen)} - text="You can add audit log streams if you switch to Infisical's Enterprise plan." + text="Your current plan does not provide access to audit log streams. To unlock this feature, please upgrade to Infisical Enterprise plan." isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/components/LogStreamProviderSelect.tsx b/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/components/LogStreamProviderSelect.tsx index df57dab88..2c809e7eb 100644 --- a/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/components/LogStreamProviderSelect.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/components/LogStreamProviderSelect.tsx @@ -111,7 +111,7 @@ export const LogStreamProviderSelect = ({ onSelect }: Props) => { handlePopUpToggle("upgradePlan", isOpen)} - text="This audit log stream provider requires an enterprise license." + text="Your current plan does not provide access to this audit log stream provider. To unlock this feature, please upgrade to Infisical Enterprise plan." isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/organization/SettingsPage/components/KmipTab/OrgKmipTab.tsx b/frontend/src/pages/organization/SettingsPage/components/KmipTab/OrgKmipTab.tsx index 7203cb9ef..da05f8e58 100644 --- a/frontend/src/pages/organization/SettingsPage/components/KmipTab/OrgKmipTab.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/KmipTab/OrgKmipTab.tsx @@ -252,7 +252,7 @@ const OrgConfigSection = ({ handlePopUpToggle("upgradePlan", isOpen)} - text="KMIP requires an enterprise plan." + text="Your current plan does not provide access to KMIP. To unlock this feature, please upgrade to Infisical Enterprise plan." isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgEncryptionTab/OrgEncryptionTab.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgEncryptionTab/OrgEncryptionTab.tsx index a0b09b573..5850d3a2a 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgEncryptionTab/OrgEncryptionTab.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgEncryptionTab/OrgEncryptionTab.tsx @@ -125,7 +125,7 @@ export const OrgEncryptionTab = withPermission( handlePopUpToggle("upgradePlan", isOpen)} - text="You can configure external KMS if you switch to Infisical's Enterprise plan." + text="Your current plan does not provide access to external KMS. To unlock this feature, please upgrade to Infisical Enterprise plan." isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> { handlePopUpToggle("upgradePlan", isOpen)} - text="You can use GitHub Organization Plan if you switch to Infisical's Enterprise plan." + text="Your current plan does not provide access to GitHub Organization Sync. To unlock this feature, please upgrade to Infisical Enterprise plan." isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/OrgSCIMSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/OrgSCIMSection.tsx index 3936a20ee..45c823118 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/OrgSCIMSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/OrgSCIMSection.tsx @@ -117,7 +117,7 @@ export const OrgScimSection = () => { handlePopUpToggle("upgradePlan", isOpen)} - text="You can use SCIM Provisioning if you switch to Infisical's Enterprise plan." + text="Your current plan does not provide access to SCIM Provisioning. To unlock this feature, please upgrade to Infisical Enterprise plan." isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSecurityTab/OrgGenericAuthSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSecurityTab/OrgGenericAuthSection.tsx index 7e2bd522b..674336568 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSecurityTab/OrgGenericAuthSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSecurityTab/OrgGenericAuthSection.tsx @@ -110,7 +110,7 @@ export const OrgGenericAuthSection = () => { handlePopUpToggle("upgradePlan", isOpen)} - text="You can enforce user MFA if you switch to Infisical's Pro plan." + text="Your current plan does not provide access to enforcing user MFA. To unlock this feature, please upgrade to Infisical Pro plan." /> ); diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgGeneralAuthSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgGeneralAuthSection.tsx index 527239898..80dae67f8 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgGeneralAuthSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgGeneralAuthSection.tsx @@ -312,7 +312,7 @@ export const OrgGeneralAuthSection = ({ handlePopUpToggle("upgradePlan", isOpen)} - text="You can enforce SAML SSO if you switch to Infisical's Pro plan." + text="Your current plan does not provide access to enforcing SAML SSO. To unlock this feature, please upgrade to Infisical Pro plan." /> ); diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgLDAPSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgLDAPSection.tsx index 9d94d595c..15684c305 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgLDAPSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgLDAPSection.tsx @@ -191,7 +191,7 @@ export const OrgLDAPSection = (): JSX.Element => { handlePopUpToggle("upgradePlan", isOpen)} - text="You can use LDAP authentication if you switch to Infisical's Enterprise plan." + text="Your current plan does not provide access to LDAP authentication. To unlock this feature, please upgrade to Infisical Enterprise plan." isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgOIDCSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgOIDCSection.tsx index 7e4b2b3ef..baae827a3 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgOIDCSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgOIDCSection.tsx @@ -207,7 +207,7 @@ export const OrgOIDCSection = (): JSX.Element => { handlePopUpToggle("upgradePlan", isOpen)} - text="You can use OIDC SSO if you switch to Infisical's Pro plan." + text="Your current plan does not provide access to OIDC SSO. To unlock this feature, please upgrade to Infisical Pro plan." /> ); diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgSSOSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgSSOSection.tsx index 5e9d4c211..bc149a8f2 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgSSOSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgSSOSection.tsx @@ -27,7 +27,6 @@ export const OrgSSOSection = (): JSX.Element => { const { mutateAsync } = useUpdateSSOConfig(); const { popUp, handlePopUpOpen, handlePopUpClose, handlePopUpToggle } = usePopUp([ "upgradePlan", - // "upgradeEnterprisePlan", "addSSO" ] as const); @@ -39,7 +38,7 @@ export const OrgSSOSection = (): JSX.Element => { if (!subscription?.samlSSO) { handlePopUpOpen("upgradePlan", { - description: "You can use SAML SSO if you switch to Infisical's Pro plan." + text: "Your current plan does not provide access to SAML SSO. To unlock this feature, please upgrade to Infisical Pro plan." }); return; } @@ -69,8 +68,7 @@ export const OrgSSOSection = (): JSX.Element => { if (!subscription?.samlSSO || !subscription?.groups) { handlePopUpOpen("upgradePlan", { isEnterpriseFeature: true, - description: - "You can use SAML group mapping if you switch to Infisical's Enterprise plan." + text: "Your current plan does not provide access to SAML group mapping. To unlock this feature, please upgrade to Infisical Enterprise plan." }); return; } @@ -112,7 +110,7 @@ export const OrgSSOSection = (): JSX.Element => { handlePopUpOpen("addSSO"); } else { handlePopUpOpen("upgradePlan", { - description: "You can use SAML SSO if you switch to Infisical's Pro plan." + text: "Your current plan does not provide access to SAML SSO. To unlock this feature, please upgrade to Infisical Pro plan." }); } } catch (err) { @@ -242,7 +240,7 @@ export const OrgSSOSection = (): JSX.Element => { handlePopUpToggle("upgradePlan", isOpen)} - text={popUp.upgradePlan.data?.description} + text={popUp.upgradePlan.data?.text} isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgSsoTab.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgSsoTab.tsx index 7700d5c86..9b502978b 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgSsoTab.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgSsoTab.tsx @@ -93,7 +93,7 @@ export const OrgSsoTab = withPermission( colorSchema="secondary" onClick={() => { if (!subscription?.samlSSO) { - handlePopUpOpen("upgradePlan", { feature: "SAML SSO" }); + handlePopUpOpen("upgradePlan", { featureName: "SAML SSO" }); return; } @@ -116,7 +116,7 @@ export const OrgSsoTab = withPermission( colorSchema="secondary" onClick={() => { if (!subscription?.oidcSSO) { - handlePopUpOpen("upgradePlan", { feature: "OIDC SSO" }); + handlePopUpOpen("upgradePlan", { featureName: "OIDC SSO" }); return; } @@ -135,7 +135,7 @@ export const OrgSsoTab = withPermission( onClick={() => { if (!subscription?.ldap) { handlePopUpOpen("upgradePlan", { - feature: "LDAP", + featureName: "LDAP", isEnterpriseFeature: true }); return; @@ -208,16 +208,8 @@ export const OrgSsoTab = withPermission( handlePopUpToggle("upgradePlan", isOpen)} - text={`You can use ${ - (popUp.upgradePlan.data as { feature: string })?.feature - } if you switch to Infisical's ${ - (popUp.upgradePlan.data as { isEnterpriseFeature: boolean })?.isEnterpriseFeature - ? "Enterprise" - : "Pro" - } plan.`} - isEnterpriseFeature={ - (popUp.upgradePlan.data as { isEnterpriseFeature: boolean })?.isEnterpriseFeature - } + text={`Your current plan does not provide access to ${popUp.upgradePlan.data?.featureName}. To unlock this feature, please upgrade to Infisical ${popUp.upgradePlan.data?.isEnterpriseFeature ? "Enterprise" : "Pro"} plan.`} + isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> ); diff --git a/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/ProjectTemplatesSection.tsx b/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/ProjectTemplatesSection.tsx index bf83a3f6a..303812e58 100644 --- a/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/ProjectTemplatesSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/ProjectTemplatesSection.tsx @@ -85,7 +85,7 @@ export const ProjectTemplatesSection = () => { handlePopUpToggle("upgradePlan", isOpen)} - text="You can create project templates if you switch to Infisical's Enterprise plan." + text="Your current plan does not provide access to project templates. To unlock this feature, please upgrade to Infisical Enterprise plan." isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/organization/UserDetailsByIDPage/UserDetailsByIDPage.tsx b/frontend/src/pages/organization/UserDetailsByIDPage/UserDetailsByIDPage.tsx index 2d433bba8..47a607f4e 100644 --- a/frontend/src/pages/organization/UserDetailsByIDPage/UserDetailsByIDPage.tsx +++ b/frontend/src/pages/organization/UserDetailsByIDPage/UserDetailsByIDPage.tsx @@ -305,7 +305,7 @@ const Page = withPermission( handlePopUpToggle("upgradePlan", isOpen)} - text={(popUp.upgradePlan?.data as { description: string })?.description} + text={popUp.upgradePlan?.data?.text} /> { const handleResourceSelect = (resource: PamResourceType) => { if (!subscription.pam) { handlePopUpOpen("upgradePlan", { - description: "PAM (Privileged Access Management) requires an enterprise plan.", + text: "Your current plan does not provide access to Infisical PAM. To unlock this feature, please upgrade to Infisical Enterprise plan.", isEnterpriseFeature: true }); return; @@ -68,8 +68,7 @@ export const ResourceTypeSelect = ({ onSelect }: Props) => { resource === PamResourceType.Kubernetes ) { handlePopUpOpen("upgradePlan", { - description: - "This resource type requires a special license add-on to be enabled in your enterprise plan.", + text: "Your current plan does not provide access to this resource type. To unlock this feature, please upgrade to Infisical Enterprise plan.", isEnterpriseFeature: true }); return; @@ -180,7 +179,7 @@ export const ResourceTypeSelect = ({ onSelect }: Props) => { handlePopUpToggle("upgradePlan", isOpen)} - text={popUp.upgradePlan.data?.description} + text={popUp.upgradePlan.data?.text} isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupsSection.tsx b/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupsSection.tsx index b4beddfdd..2d3f98523 100644 --- a/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupsSection.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupsSection.tsx @@ -32,8 +32,7 @@ export const GroupsSection = () => { const handleAddGroupModal = () => { if (!subscription?.groups) { handlePopUpOpen("upgradePlan", { - description: - "You can manage users more efficiently with groups if you switch to Infisical's Enterprise plan.", + text: "Your current plan does not provide access to managing groups. To unlock this feature, please upgrade to Infisical Enterprise plan.", isEnterpriseFeature: true }); } else { @@ -100,10 +99,8 @@ export const GroupsSection = () => { handlePopUpToggle("upgradePlan", isOpen)} - text={(popUp.upgradePlan?.data as { description: string })?.description} - isEnterpriseFeature={ - (popUp.upgradePlan?.data as { isEnterpriseFeature: boolean })?.isEnterpriseFeature - } + text={popUp.upgradePlan?.data?.text} + isEnterpriseFeature={popUp.upgradePlan?.data?.isEnterpriseFeature} /> ); diff --git a/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MembersSection.tsx b/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MembersSection.tsx index 6c02ca5b3..ae4d5c5d3 100644 --- a/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MembersSection.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MembersSection.tsx @@ -1,7 +1,6 @@ import { faPlus } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { UpgradePlanModal } from "@app/components/license/UpgradePlanModal"; import { createNotification } from "@app/components/notifications"; import { ProjectPermissionCan } from "@app/components/permissions"; import { Button, DeleteActionModal } from "@app/components/v2"; @@ -25,8 +24,7 @@ export const MembersSection = () => { const { handlePopUpToggle, popUp, handlePopUpOpen, handlePopUpClose } = usePopUp([ "addMember", - "removeMember", - "upgradePlan" + "removeMember" ] as const); const handleRemoveUser = async () => { @@ -81,11 +79,6 @@ export const MembersSection = () => { onChange={(isOpen) => handlePopUpToggle("removeMember", isOpen)} onDeleteApproved={handleRemoveUser} /> - handlePopUpToggle("upgradePlan", isOpen)} - text={(popUp.upgradePlan?.data as { description: string })?.description} - /> ); }; diff --git a/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MembersTable.tsx b/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MembersTable.tsx index e8cb43db9..d554f12fb 100644 --- a/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MembersTable.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MembersTable.tsx @@ -60,10 +60,7 @@ import { UsePopUpState } from "@app/hooks/usePopUp"; const MAX_ROLES_TO_BE_SHOWN_IN_TABLE = 2; type Props = { - handlePopUpOpen: ( - popUpName: keyof UsePopUpState<["removeMember", "upgradePlan"]>, - data?: object - ) => void; + handlePopUpOpen: (popUpName: keyof UsePopUpState<["removeMember"]>, data?: object) => void; }; enum MembersOrderBy { diff --git a/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx b/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx index 2b85291d0..878d9b7bb 100644 --- a/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx +++ b/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx @@ -190,8 +190,7 @@ export const Page = () => { isMembershipDetailsLoading={isMembershipDetailsLoading} onOpenUpgradeModal={() => handlePopUpOpen("upgradePlan", { - description: - "You can assign custom roles to members if you switch to Infisical's Pro plan." + text: "Your current plan does not provide access to assigning custom roles to members. To unlock this feature, please upgrade to Infisical Pro plan." }) } /> @@ -215,7 +214,7 @@ export const Page = () => { handlePopUpToggle("upgradePlan", isOpen)} - text={(popUp.upgradePlan?.data as { description: string })?.description} + text={popUp.upgradePlan?.data?.text} /> ) : ( diff --git a/frontend/src/pages/project/SettingsPage/components/AuditLogsRetentionSection/AuditLogsRetentionSection.tsx b/frontend/src/pages/project/SettingsPage/components/AuditLogsRetentionSection/AuditLogsRetentionSection.tsx index d9bbc80d8..24855cc24 100644 --- a/frontend/src/pages/project/SettingsPage/components/AuditLogsRetentionSection/AuditLogsRetentionSection.tsx +++ b/frontend/src/pages/project/SettingsPage/components/AuditLogsRetentionSection/AuditLogsRetentionSection.tsx @@ -42,8 +42,7 @@ export const AuditLogsRetentionSection = () => { try { if (!subscription?.auditLogs) { handlePopUpOpen("upgradePlan", { - description: - "You can only configure audit logs retention if you switch to Infisical's Pro plan." + text: "Your current plan does not provide access to configuring audit logs retention. To unlock this feature, please upgrade to Infisical Pro plan." }); return; @@ -51,8 +50,7 @@ export const AuditLogsRetentionSection = () => { if (subscription && auditLogsRetentionDays > subscription?.auditLogsRetentionDays) { handlePopUpOpen("upgradePlan", { - description: - "To update your audit logs retention period to a higher value, switch to Infisical's Pro plan." + text: "Your current plan does not provide access to updating audit logs retention period to a higher value. To unlock this feature, please upgrade to Infisical Pro plan." }); return; @@ -123,7 +121,7 @@ export const AuditLogsRetentionSection = () => { handlePopUpToggle("upgradePlan", isOpen)} - text={(popUp.upgradePlan?.data as { description: string })?.description} + text={popUp.upgradePlan?.data?.text} /> ); diff --git a/frontend/src/pages/secret-manager/IPAllowlistPage/components/IPAllowlistSection.tsx b/frontend/src/pages/secret-manager/IPAllowlistPage/components/IPAllowlistSection.tsx index 470f09aef..392aa8395 100644 --- a/frontend/src/pages/secret-manager/IPAllowlistPage/components/IPAllowlistSection.tsx +++ b/frontend/src/pages/secret-manager/IPAllowlistPage/components/IPAllowlistSection.tsx @@ -105,7 +105,7 @@ export const IPAllowlistSection = () => { handlePopUpToggle("upgradePlan", isOpen)} - text="You can use IP allowlisting if you switch to Infisical's Pro plan." + text="Your current plan does not provide access to IP allowlisting. To unlock this feature, please upgrade to Infisical Pro plan." /> ); diff --git a/frontend/src/pages/secret-manager/IPAllowlistPage/components/IPAllowlistTable.tsx b/frontend/src/pages/secret-manager/IPAllowlistPage/components/IPAllowlistTable.tsx index 8f3336be8..cb1935cb1 100644 --- a/frontend/src/pages/secret-manager/IPAllowlistPage/components/IPAllowlistTable.tsx +++ b/frontend/src/pages/secret-manager/IPAllowlistPage/components/IPAllowlistTable.tsx @@ -159,7 +159,7 @@ export const IPAllowlistTable = ({ popUp, handlePopUpOpen, handlePopUpToggle }: handlePopUpToggle("upgradePlan", isOpen)} - text="You can use IP allowlisting if you switch to Infisical's Pro plan." + text="Your current plan does not provide access to IP allowlisting. To unlock this feature, please upgrade to Infisical Pro plan." /> ); diff --git a/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx b/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx index 649b959c4..e96aa42d7 100644 --- a/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx +++ b/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx @@ -1174,8 +1174,7 @@ export const OverviewPage = () => { } handlePopUpOpen("upgradePlan", { isEnterpriseFeature: true, - description: - "You can add dynamic secrets if you switch to Infisical's Enterprise plan." + text: "Adding dynamic secrets can be unlocked if you upgrade to Infisical Enterprise plan." }); }} isDisabled={userAvailableDynamicSecretEnvs.length === 0} @@ -1200,8 +1199,7 @@ export const OverviewPage = () => { return; } handlePopUpOpen("upgradePlan", { - description: - "You can add secret rotations if you switch to Infisical's Pro plan." + text: "Adding secret rotations can be unlocked if you upgrade to Infisical Pro plan." }); }} isDisabled={userAvailableSecretRotationEnvs.length === 0} @@ -1687,7 +1685,7 @@ export const OverviewPage = () => { isOpen={popUp.upgradePlan.isOpen} onOpenChange={(isOpen) => handlePopUpToggle("upgradePlan", isOpen)} isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} - text={popUp.upgradePlan.data?.description} + text={popUp.upgradePlan.data?.text} /> )} { if (subscription && !subscription?.secretApproval) { handlePopUpOpen("upgradePlan", { - description: - "You can use request access feature if you switch to Infisical's Pro plan." + text: "Access requests feature can be unlocked if you upgrade to Infisical Pro plan." }); return; } @@ -596,7 +595,7 @@ export const AccessApprovalRequest = ({ )} handlePopUpClose("upgradePlan")} /> diff --git a/frontend/src/pages/secret-manager/SecretApprovalsPage/components/ApprovalPolicyList/ApprovalPolicyList.tsx b/frontend/src/pages/secret-manager/SecretApprovalsPage/components/ApprovalPolicyList/ApprovalPolicyList.tsx index 836875663..03a839d50 100644 --- a/frontend/src/pages/secret-manager/SecretApprovalsPage/components/ApprovalPolicyList/ApprovalPolicyList.tsx +++ b/frontend/src/pages/secret-manager/SecretApprovalsPage/components/ApprovalPolicyList/ApprovalPolicyList.tsx @@ -505,7 +505,7 @@ export const ApprovalPolicyList = ({ projectId }: IProps) => { handlePopUpToggle("upgradePlan", isOpen)} - text="You can add secret approval policy if you switch to Infisical's Pro plan." + text="Adding secret approval policies can be unlocked if you upgrade to Infisical Pro plan." /> ); diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/ActionBar.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/ActionBar.tsx index 1ec486bfe..2906f5348 100644 --- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/ActionBar.tsx +++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/ActionBar.tsx @@ -906,7 +906,7 @@ export const ActionBar = ({ } handlePopUpOpen("upgradePlan", { - feature: "PIT Recovery" + featureName: "PIT Recovery" }); }} leftIcon={} @@ -1022,7 +1022,7 @@ export const ActionBar = ({ return; } handlePopUpOpen("upgradePlan", { - feature: "Dynamic Secrets", + featureName: "Dynamic Secrets", isEnterpriseFeature: true }); }} @@ -1052,7 +1052,7 @@ export const ActionBar = ({ return; } handlePopUpOpen("upgradePlan", { - feature: "Secret Rotation" + featureName: "Secret Rotation" }); }} variant="outline_bg" @@ -1221,7 +1221,7 @@ export const ActionBar = ({ projectId={projectId} onUpgradePlan={() => handlePopUpOpen("upgradePlan", { - feature: "Secret Imports" + featureName: "Secret Imports" }) } isOpen={popUp.addSecretImport.isOpen} @@ -1286,7 +1286,7 @@ export const ActionBar = ({ isOpen={popUp.upgradePlan.isOpen} onOpenChange={(isOpen) => handlePopUpToggle("upgradePlan", isOpen)} isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} - text={`You can use ${popUp.upgradePlan.data?.feature} if you switch to Infisical's ${popUp.upgradePlan.data?.isEnterpriseFeature ? "Enterprise" : "Pro"} plan.`} + text={`Your current plan does not provide access to ${popUp.upgradePlan.data?.featureName}. To unlock this feature, please upgrade to Infisical ${popUp.upgradePlan.data?.isEnterpriseFeature ? "Enterprise" : "Pro"} plan.`} /> )} { handlePopUpToggle("upgradePlan", isOpen)} - text="You can add custom environments if you switch to Infisical's Pro plan." + text="Your current plan does not provide access to adding custom environments. To unlock this feature, please upgrade to Infisical Pro plan." /> handlePopUpToggle("secretAccessUpgradePlan", isUpgradeModalOpen) } - text="You can access secret access analysis if you switch to Infisical's Pro plan." + text="Secret access analysis feature can be unlocked if you upgrade to Infisical Pro plan." /> { handlePopUpToggle("upgradePlan", isOpen)} - text="You can add secret rotation if you switch to Infisical's Pro plan." + text="Adding secret rotations can be unlocked if you upgrade to Infisical Pro plan." /> { handlePopUpToggle("upgradePlan", isOpen)} - text="You can add custom environments if you switch to Infisical's Pro plan." + text="You have reached the maximum number of environments allowed on your current plan. To add more environments, please upgrade to Infisical Pro plan." /> ); diff --git a/frontend/src/pages/secret-scanning/SecretScanningDataSourcesPage/components/SecretScanningDataSourcesSection.tsx b/frontend/src/pages/secret-scanning/SecretScanningDataSourcesPage/components/SecretScanningDataSourcesSection.tsx index 031044782..d68d0df37 100644 --- a/frontend/src/pages/secret-scanning/SecretScanningDataSourcesPage/components/SecretScanningDataSourcesSection.tsx +++ b/frontend/src/pages/secret-scanning/SecretScanningDataSourcesPage/components/SecretScanningDataSourcesSection.tsx @@ -96,7 +96,7 @@ export const SecretScanningDataSourcesSection = () => { handlePopUpToggle("upgradePlan", isOpen)} - text="You can create Data Sources by upgrading to Infisical's Enterprise plan." + text="Creating data sources can be unlocked if you upgrade to Infisical Enterprise plan." isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/ssh/SshCasPage/components/SshCaSection.tsx b/frontend/src/pages/ssh/SshCasPage/components/SshCaSection.tsx index b1d24e8f3..016dc1306 100644 --- a/frontend/src/pages/ssh/SshCasPage/components/SshCaSection.tsx +++ b/frontend/src/pages/ssh/SshCasPage/components/SshCaSection.tsx @@ -18,8 +18,7 @@ export const SshCaSection = () => { const { popUp, handlePopUpOpen, handlePopUpClose, handlePopUpToggle } = usePopUp([ "sshCa", "deleteSshCa", - "sshCaStatus", // enable / disable - "upgradePlan" + "sshCaStatus" // enable / disable ] as const); const onRemoveSshCaSubmit = async (caId: string) => { @@ -110,11 +109,6 @@ export const SshCaSection = () => { onUpdateSshCaStatus(popUp?.sshCaStatus?.data as { caId: string; status: SshCaStatus }) } /> - {/* handlePopUpToggle("upgradePlan", isOpen)} - text={(popUp.upgradePlan?.data as { description: string })?.description} - /> */} ); }; diff --git a/frontend/src/pages/ssh/SshHostGroupDetailsByIDPage/components/SshHostGroupHostsSection.tsx b/frontend/src/pages/ssh/SshHostGroupDetailsByIDPage/components/SshHostGroupHostsSection.tsx index df6f2b723..0b2f26b07 100644 --- a/frontend/src/pages/ssh/SshHostGroupDetailsByIDPage/components/SshHostGroupHostsSection.tsx +++ b/frontend/src/pages/ssh/SshHostGroupDetailsByIDPage/components/SshHostGroupHostsSection.tsx @@ -29,8 +29,7 @@ export const SshHostGroupHostsSection = ({ sshHostGroupId }: Props) => { const handleAddSshHostModal = () => { if (!subscription?.sshHostGroups) { handlePopUpOpen("upgradePlan", { - description: - "You can manage hosts more efficiently with SSH host groups if you upgrade your Infisical plan to an Enterprise license.", + text: "Your current plan does not provide access to managing SSH host groups. To unlock this feature, please upgrade to Infisical Enterprise plan.", isEnterpriseFeature: true }); } else { @@ -107,10 +106,8 @@ export const SshHostGroupHostsSection = ({ sshHostGroupId }: Props) => { handlePopUpToggle("upgradePlan", isOpen)} - text={(popUp.upgradePlan?.data as { description: string })?.description} - isEnterpriseFeature={ - (popUp.upgradePlan?.data as { isEnterpriseFeature: boolean })?.isEnterpriseFeature - } + text={popUp.upgradePlan?.data?.text} + isEnterpriseFeature={popUp.upgradePlan?.data?.isEnterpriseFeature} /> ); diff --git a/frontend/src/pages/ssh/SshHostsPage/components/SshHostGroupsSection.tsx b/frontend/src/pages/ssh/SshHostsPage/components/SshHostGroupsSection.tsx index 189a49686..17c7fc2c0 100644 --- a/frontend/src/pages/ssh/SshHostsPage/components/SshHostGroupsSection.tsx +++ b/frontend/src/pages/ssh/SshHostsPage/components/SshHostGroupsSection.tsx @@ -25,8 +25,7 @@ export const SshHostGroupsSection = () => { const handleAddSshHostGroupModal = () => { if (!subscription?.sshHostGroups) { handlePopUpOpen("upgradePlan", { - description: - "You can manage hosts more efficiently with SSH host groups if you upgrade your Infisical plan to an Enterprise license.", + text: "Your current plan does not provide access to managing SSH host groups. To unlock this feature, please upgrade to Infisical Enterprise plan.", isEnterpriseFeature: true }); } else { @@ -106,10 +105,8 @@ export const SshHostGroupsSection = () => { handlePopUpToggle("upgradePlan", isOpen)} - text={(popUp.upgradePlan?.data as { description: string })?.description} - isEnterpriseFeature={ - (popUp.upgradePlan?.data as { isEnterpriseFeature: boolean })?.isEnterpriseFeature - } + text={popUp.upgradePlan?.data?.text} + isEnterpriseFeature={popUp.upgradePlan?.data?.isEnterpriseFeature} /> ); From 2e53ac2e8c5e6bd5bcc53885e206b5d048681abd Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Tue, 28 Oct 2025 20:27:53 +0530 Subject: [PATCH 03/79] fix: removed short-circuit checks --- .../src/ee/services/license/license-fns.ts | 76 +++++++++---------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/backend/src/ee/services/license/license-fns.ts b/backend/src/ee/services/license/license-fns.ts index f9ae721cb..97061e3ca 100644 --- a/backend/src/ee/services/license/license-fns.ts +++ b/backend/src/ee/services/license/license-fns.ts @@ -21,55 +21,55 @@ export const getDefaultOnPremFeatures = (): TFeatureSet => ({ environmentsUsed: 0, identityLimit: null, identitiesUsed: 0, - dynamicSecret: true, + dynamicSecret: false, secretVersioning: true, - pitRecovery: true, - ipAllowlisting: true, - rbac: true, - githubOrgSync: true, - customRateLimits: true, - subOrganization: true, - customAlerts: true, - secretAccessInsights: true, - auditLogs: true, + pitRecovery: false, + ipAllowlisting: false, + rbac: false, + githubOrgSync: false, + customRateLimits: false, + subOrganization: false, + customAlerts: false, + secretAccessInsights: false, + auditLogs: false, auditLogsRetentionDays: 0, - auditLogStreams: true, + auditLogStreams: false, auditLogStreamLimit: 3, - samlSSO: true, - enforceGoogleSSO: true, - hsm: true, - oidcSSO: true, - scim: true, - ldap: true, - groups: true, + samlSSO: false, + enforceGoogleSSO: false, + hsm: false, + oidcSSO: false, + scim: false, + ldap: false, + groups: false, status: null, trial_end: null, has_used_trial: true, - secretApproval: true, - secretRotation: true, - caCrl: true, - instanceUserManagement: true, - externalKms: true, + secretApproval: false, + secretRotation: false, + caCrl: false, + instanceUserManagement: false, + externalKms: false, rateLimits: { readLimit: 60, writeLimit: 200, secretsLimit: 40 }, - pkiEst: true, - enforceMfa: true, - projectTemplates: true, - kmip: true, - gateway: true, - sshHostGroups: true, - secretScanning: true, - enterpriseSecretSyncs: true, - enterpriseCertificateSyncs: true, - enterpriseAppConnections: true, - fips: true, - eventSubscriptions: true, - machineIdentityAuthTemplates: true, - pkiLegacyTemplates: true, - pam: true + pkiEst: false, + enforceMfa: false, + projectTemplates: false, + kmip: false, + gateway: false, + sshHostGroups: false, + secretScanning: false, + enterpriseSecretSyncs: false, + enterpriseCertificateSyncs: false, + enterpriseAppConnections: false, + fips: false, + eventSubscriptions: false, + machineIdentityAuthTemplates: false, + pkiLegacyTemplates: false, + pam: false }); export const setupLicenseRequestWithStore = ( From a04597aa87dfa9ba7474d7b9301d9ac26a61e06d Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Tue, 28 Oct 2025 20:34:44 +0530 Subject: [PATCH 04/79] fix: frontend lint --- .../AccessManagementPage/components/ServerAdminsTable.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/frontend/src/pages/admin/AccessManagementPage/components/ServerAdminsTable.tsx b/frontend/src/pages/admin/AccessManagementPage/components/ServerAdminsTable.tsx index a2d6622a7..cbf9252c1 100644 --- a/frontend/src/pages/admin/AccessManagementPage/components/ServerAdminsTable.tsx +++ b/frontend/src/pages/admin/AccessManagementPage/components/ServerAdminsTable.tsx @@ -432,9 +432,7 @@ export const ServerAdminsTable = () => { handlePopUpToggle("upgradePlan", isOpen)} - text={ - "Your current plan does not allow removing server admins. To unlock this feature, please upgrade to Infisical Pro plan." - } + text="Your current plan does not allow removing server admins. To unlock this feature, please upgrade to Infisical Pro plan." /> Date: Wed, 29 Oct 2025 18:47:26 +0530 Subject: [PATCH 05/79] fix: updates plan upgradation tezt --- frontend/src/components/secret-syncs/SecretSyncSelect.tsx | 2 +- .../components/ProjectSelect/ProjectSelect.tsx | 2 +- .../admin/EncryptionPage/components/EncryptionPageForm.tsx | 4 ++-- .../ResourceOverviewPage/components/UserIdentitiesTable.tsx | 4 ++-- .../components/CertificateTemplatesSection.tsx | 2 +- .../PkiTemplateListPage/PkiTemplateListPage.tsx | 2 +- .../src/pages/kms/KmipPage/components/KmipClientTable.tsx | 2 +- .../components/OrgGroupsSection/OrgGroupsSection.tsx | 4 ++-- .../IdentitySection/IdentityAuthMethodModalContent.tsx | 2 +- .../components/IdentitySection/IdentitySection.tsx | 4 ++-- .../components/OrgMembersSection/OrgMembersSection.tsx | 4 ++-- .../components/OrgMembersSection/OrgMembersTable.tsx | 2 +- .../components/OrgRoleTabSection/OrgRoleTable.tsx | 4 ++-- .../organization/AuditLogsPage/components/LogsSection.tsx | 4 ++-- .../IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx | 2 +- .../ViewIdentityAuthModal/ViewIdentityAuthModal.tsx | 2 +- .../src/pages/organization/ProjectsPage/ProjectsPage.tsx | 2 +- .../components/AuditLogStreamTab/AuditLogStreamTab.tsx | 2 +- .../components/LogStreamProviderSelect.tsx | 2 +- .../SettingsPage/components/KmipTab/OrgKmipTab.tsx | 2 +- .../components/OrgEncryptionTab/OrgEncryptionTab.tsx | 2 +- .../components/OrgProvisioningTab/OrgGithubSyncSection.tsx | 2 +- .../components/OrgProvisioningTab/OrgSCIMSection.tsx | 2 +- .../components/OrgSecurityTab/OrgGenericAuthSection.tsx | 2 +- .../components/OrgSsoTab/OrgGeneralAuthSection.tsx | 2 +- .../SettingsPage/components/OrgSsoTab/OrgLDAPSection.tsx | 2 +- .../SettingsPage/components/OrgSsoTab/OrgOIDCSection.tsx | 2 +- .../SettingsPage/components/OrgSsoTab/OrgSSOSection.tsx | 6 +++--- .../SettingsPage/components/OrgSsoTab/OrgSsoTab.tsx | 2 +- .../components/ProjectTemplatesSection.tsx | 2 +- .../components/UserOrgMembershipModal.tsx | 2 +- .../pam/PamResourcesPage/components/ResourceTypeSelect.tsx | 4 ++-- .../GroupsTab/components/GroupsSection/GroupsSection.tsx | 2 +- .../project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx | 2 +- .../AuditLogsRetentionSection/AuditLogsRetentionSection.tsx | 4 ++-- .../IPAllowlistPage/components/IPAllowlistSection.tsx | 2 +- .../IPAllowlistPage/components/IPAllowlistTable.tsx | 2 +- .../SecretDashboardPage/components/ActionBar/ActionBar.tsx | 2 +- .../components/EnvironmentTabs/EnvironmentTabs.tsx | 2 +- .../components/EnvironmentSection/EnvironmentSection.tsx | 2 +- .../components/SshHostGroupHostsSection.tsx | 2 +- .../ssh/SshHostsPage/components/SshHostGroupsSection.tsx | 2 +- 42 files changed, 53 insertions(+), 53 deletions(-) diff --git a/frontend/src/components/secret-syncs/SecretSyncSelect.tsx b/frontend/src/components/secret-syncs/SecretSyncSelect.tsx index 601cec343..881f16610 100644 --- a/frontend/src/components/secret-syncs/SecretSyncSelect.tsx +++ b/frontend/src/components/secret-syncs/SecretSyncSelect.tsx @@ -69,7 +69,7 @@ export const SecretSyncSelect = ({ onSelect }: Props) => { enterprise && !subscription.enterpriseSecretSyncs ? handlePopUpOpen("upgradePlan", { isEnterpriseFeature: true, - text: "All Secret Syncs can be unlocked if you switch to Infisical's Enterprise plan." + text: "All Secret Syncs can be unlocked if you switch to Infisical Enterprise plan." }) : onSelect(destination) } diff --git a/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx b/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx index aced07180..a5c3b0a60 100644 --- a/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx +++ b/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx @@ -243,7 +243,7 @@ export const ProjectSelect = () => { handlePopUpToggle("upgradePlan", isOpen)} - text="Your current plan does not allow you to create new projects. To create new projects, please upgrade to Infisical Pro plan." + text="You’ve reached the maximum number of projects available on the Free plan. Upgrade to the Infisical Pro plan to create more projects." /> { if (!subscription.hsm) { handlePopUpOpen("upgradePlan", { isEnterpriseFeature: true, - text: "Your current plan does not provide access to Hardware Security Module (HSM). To unlock this feature, please upgrade to Infisical Enterprise plan." + text: "Your current plan does not include access to Hardware Security Module (HSM). To unlock this feature, please upgrade to Infisical Enterprise plan." }); return; } @@ -146,7 +146,7 @@ export const EncryptionPageForm = () => { handlePopUpToggle("upgradePlan", isOpen)} - text={(popUp.upgradePlan?.data as { text: string })?.text} + text={popUp.upgradePlan?.data?.text} isEnterpriseFeature={popUp.upgradePlan?.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/admin/ResourceOverviewPage/components/UserIdentitiesTable.tsx b/frontend/src/pages/admin/ResourceOverviewPage/components/UserIdentitiesTable.tsx index 67873eabc..72a891102 100644 --- a/frontend/src/pages/admin/ResourceOverviewPage/components/UserIdentitiesTable.tsx +++ b/frontend/src/pages/admin/ResourceOverviewPage/components/UserIdentitiesTable.tsx @@ -256,7 +256,7 @@ const UserPanelTable = ({ handlePopUpOpen("upgradePlan", { username, id, - text: "Your current plan does not allow making users server admins. To unlock this feature, please upgrade to Infisical Pro plan." + text: "Your current plan does not allow setting additional server admins. To unlock this feature, please upgrade to Infisical Pro plan." }); return; } @@ -284,7 +284,7 @@ const UserPanelTable = ({ handlePopUpOpen("upgradePlan", { username, id, - text: "Your current plan does not allow removing server admin permissions from user. To unlock this feature, please upgrade to Infisical Pro plan." + text: "Your current plan does not allow removing server admins. To unlock this feature, please upgrade to Infisical Pro plan." }); return; } diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplatesSection.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplatesSection.tsx index a9e12f73d..4871eb5c1 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplatesSection.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplatesSection.tsx @@ -105,7 +105,7 @@ export const CertificateTemplatesSection = ({ caId }: Props) => { isOpen={popUp.upgradePlan.isOpen} onOpenChange={(isOpen) => handlePopUpToggle("upgradePlan", isOpen)} isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} - text="Your current plan does not allow managing template enrollment options for EST. To unlock this feature, please upgrade to Infisical Enterprise plan." + text="Your current plan does not include access to managing template enrollment options for EST. To unlock this feature, please upgrade to Infisical Enterprise plan." /> ); diff --git a/frontend/src/pages/cert-manager/PkiTemplateListPage/PkiTemplateListPage.tsx b/frontend/src/pages/cert-manager/PkiTemplateListPage/PkiTemplateListPage.tsx index 619e2f347..ed5f21e24 100644 --- a/frontend/src/pages/cert-manager/PkiTemplateListPage/PkiTemplateListPage.tsx +++ b/frontend/src/pages/cert-manager/PkiTemplateListPage/PkiTemplateListPage.tsx @@ -297,7 +297,7 @@ export const PkiTemplateListPage = () => { handlePopUpToggle("estUpgradePlan", isOpen)} - text="Your current plan does not allow configuring template enrollment methods. To unlock this feature, please upgrade to Infisical Enterprise plan." + text="Your current plan does not include access to configuring template enrollment methods. To unlock this feature, please upgrade to Infisical Enterprise plan." isEnterpriseFeature={popUp.estUpgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/kms/KmipPage/components/KmipClientTable.tsx b/frontend/src/pages/kms/KmipPage/components/KmipClientTable.tsx index 3758fb53c..e3cdafbc2 100644 --- a/frontend/src/pages/kms/KmipPage/components/KmipClientTable.tsx +++ b/frontend/src/pages/kms/KmipPage/components/KmipClientTable.tsx @@ -344,7 +344,7 @@ export const KmipClientTable = () => { handlePopUpToggle("upgradePlan", isOpen)} - text="Your current plan does not provide access to KMIP. To unlock this feature, please upgrade to Infisical Enterprise plan." + text="Your current plan does not include access to KMIP. To unlock this feature, please upgrade to Infisical Enterprise plan." isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupsSection.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupsSection.tsx index e571a8428..5a3ef8606 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupsSection.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupsSection.tsx @@ -26,7 +26,7 @@ export const OrgGroupsSection = () => { const handleAddGroupModal = () => { if (!subscription?.groups) { handlePopUpOpen("upgradePlan", { - text: "Your current plan does not allow managing groups. To unlock this feature, please upgrade to Infisical Enterprise plan.", + text: "Your current plan does not allow adding groups. To unlock this feature, please upgrade to Infisical Enterprise plan.", isEnterpriseFeature: true }); } else { @@ -93,7 +93,7 @@ export const OrgGroupsSection = () => { isOpen={popUp.upgradePlan.isOpen} onOpenChange={(isOpen) => handlePopUpToggle("upgradePlan", isOpen)} isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} - text={(popUp.upgradePlan?.data as { text: string })?.text} + text={popUp.upgradePlan?.data?.text} /> ); diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAuthMethodModalContent.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAuthMethodModalContent.tsx index ae9696d4e..d054bfded 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAuthMethodModalContent.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAuthMethodModalContent.tsx @@ -291,7 +291,7 @@ export const IdentityAuthMethodModalContent = ({ handlePopUpToggle("upgradePlan", isOpen)} - text={`Your current plan does not allow ${popUp.upgradePlan.data?.featureName}. To unlock this feature, please upgrade to Infisical ${popUp.upgradePlan.data?.isEnterpriseFeature ? "Enterprise" : "Pro"} plan.`} + text={`Your current plan does not include access to ${popUp.upgradePlan.data?.featureName}. To unlock this feature, please upgrade to Infisical ${popUp.upgradePlan.data?.isEnterpriseFeature ? "Enterprise" : "Pro"} plan.`} isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentitySection.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentitySection.tsx index 7c6385516..374eea3c5 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentitySection.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentitySection.tsx @@ -162,7 +162,7 @@ export const IdentitySection = withPermission( onClick={() => { if (!isMoreIdentitiesAllowed && !isEnterprise) { handlePopUpOpen("upgradePlan", { - text: "You have reached the limit of identities allowed on your current plan. To add more identities, please upgrade to Infisical Pro plan." + text: "You have reached the maximum number of identities allowed on your current plan. Upgrade to Infisical Pro plan to add more identities." }); return; } @@ -210,7 +210,7 @@ export const IdentitySection = withPermission( if (subscription && !subscription.machineIdentityAuthTemplates) { handlePopUpOpen("upgradePlan", { isEnterpriseFeature: true, - text: "Your current plan does not provide access to creating Identity Auth Templates. To unlock this feature, please upgrade to Infisical Enterprise plan." + text: "Your current plan does not include access to creating Identity Auth Templates. To unlock this feature, please upgrade to Infisical Enterprise plan." }); return; } diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersSection.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersSection.tsx index de029e848..cdb74c1a6 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersSection.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersSection.tsx @@ -75,7 +75,7 @@ export const OrgMembersSection = () => { if (!isMoreIdentitiesAllowed && !isEnterprise) { handlePopUpOpen("upgradePlan", { - text: "You have reached the limit of members allowed on your current plan. To add more members, please upgrade to Infisical Pro plan." + text: "You have reached the maximum number of members allowed on your current plan. Upgrade to Infisical Pro plan to add more members." }); return; } @@ -324,7 +324,7 @@ export const OrgMembersSection = () => { handlePopUpToggle("upgradePlan", isOpen)} - text={(popUp.upgradePlan?.data as { text: string })?.text} + text={popUp.upgradePlan?.data?.text} /> { if (isCustomRole && subscription && !subscription?.rbac) { handlePopUpOpen("upgradePlan", { - text: "Your current plan does not allow setting the default org role to a custom role. To unlock this feature, please upgrade to Infisical Pro plan." + text: "Your current plan does not include access to set a custom default organization role. To unlock this feature, please upgrade to Infisical Pro plan." }); return; } @@ -460,7 +460,7 @@ export const OrgRoleTable = () => { handlePopUpToggle("upgradePlan", isOpen)} - text={(popUp.upgradePlan?.data as { text: string })?.text} + text={popUp.upgradePlan?.data?.text} /> { handlePopUpToggle("upgradePlan", isOpen); }} - text="Your current plan does not provide access to audit logs. To unlock this feature, please upgrade to Infisical Pro plan." + text="Your current plan does not include access to audit logs. To unlock this feature, please upgrade to Infisical Pro plan." /> @@ -181,7 +181,7 @@ const LogsSectionComponent = ({ onOpenChange={(isOpen) => { handlePopUpToggle("upgradePlan", isOpen); }} - text="Your current plan does not provide access to audit logs. To unlock this feature, please upgrade to Infisical Pro plan." + text="Your current plan does not include access to audit logs. To unlock this feature, please upgrade to Infisical Pro plan." /> ); diff --git a/frontend/src/pages/organization/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx b/frontend/src/pages/organization/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx index 6169db398..797e740ee 100644 --- a/frontend/src/pages/organization/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx +++ b/frontend/src/pages/organization/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx @@ -120,7 +120,7 @@ const Page = () => { handlePopUpToggle("upgradePlan", isOpen)} - text={`Your current plan does not allow ${popUp.upgradePlan.data?.featureName}. To unlock this feature, please upgrade to Infisical ${popUp.upgradePlan.data?.isEnterpriseFeature ? "Enterprise" : "Pro"} plan.`} + text={`Your current plan does not include access to ${popUp.upgradePlan.data?.featureName}. To unlock this feature, please upgrade to Infisical ${popUp.upgradePlan.data?.isEnterpriseFeature ? "Enterprise" : "Pro"} plan.`} isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> handlePopUpToggle("upgradePlan", isOpen)} - text={`Your current plan does not allow ${popUp.upgradePlan.data?.featureName}. To unlock this feature, please upgrade to Infisical ${popUp.upgradePlan.data?.isEnterpriseFeature ? "Enterprise" : "Pro"} plan.`} + text={`Your current plan does not include access to ${popUp.upgradePlan.data?.featureName}. To unlock this feature, please upgrade to Infisical ${popUp.upgradePlan.data?.isEnterpriseFeature ? "Enterprise" : "Pro"} plan.`} /> ); diff --git a/frontend/src/pages/organization/ProjectsPage/ProjectsPage.tsx b/frontend/src/pages/organization/ProjectsPage/ProjectsPage.tsx index 0dd1d36fa..aba2e752d 100644 --- a/frontend/src/pages/organization/ProjectsPage/ProjectsPage.tsx +++ b/frontend/src/pages/organization/ProjectsPage/ProjectsPage.tsx @@ -92,7 +92,7 @@ export const ProjectsPage = () => { handlePopUpToggle("upgradePlan", isOpen)} - text="You have reached the limit of projects allowed on your current plan. To add more projects, please upgrade to Infisical Pro plan." + text="You have reached the maximum number of projects allowed on your current plan. Upgrade to Infisical Pro plan to add more projects." /> ); diff --git a/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/AuditLogStreamTab.tsx b/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/AuditLogStreamTab.tsx index 1da90980e..d8dca7401 100644 --- a/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/AuditLogStreamTab.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/AuditLogStreamTab.tsx @@ -57,7 +57,7 @@ export const AuditLogStreamsTab = withPermission( handlePopUpToggle("upgradePlan", isOpen)} - text="Your current plan does not provide access to audit log streams. To unlock this feature, please upgrade to Infisical Enterprise plan." + text="Your current plan does not include access to audit log streams. To unlock this feature, please upgrade to Infisical Enterprise plan." isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/components/LogStreamProviderSelect.tsx b/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/components/LogStreamProviderSelect.tsx index 2c809e7eb..6d1be6531 100644 --- a/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/components/LogStreamProviderSelect.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/components/LogStreamProviderSelect.tsx @@ -111,7 +111,7 @@ export const LogStreamProviderSelect = ({ onSelect }: Props) => { handlePopUpToggle("upgradePlan", isOpen)} - text="Your current plan does not provide access to this audit log stream provider. To unlock this feature, please upgrade to Infisical Enterprise plan." + text="Your current plan does not include access to this audit log stream provider. To unlock this feature, please upgrade to Infisical Enterprise plan." isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/organization/SettingsPage/components/KmipTab/OrgKmipTab.tsx b/frontend/src/pages/organization/SettingsPage/components/KmipTab/OrgKmipTab.tsx index da05f8e58..1ab529ea3 100644 --- a/frontend/src/pages/organization/SettingsPage/components/KmipTab/OrgKmipTab.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/KmipTab/OrgKmipTab.tsx @@ -252,7 +252,7 @@ const OrgConfigSection = ({ handlePopUpToggle("upgradePlan", isOpen)} - text="Your current plan does not provide access to KMIP. To unlock this feature, please upgrade to Infisical Enterprise plan." + text="Your current plan does not include access to KMIP. To unlock this feature, please upgrade to Infisical Enterprise plan." isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgEncryptionTab/OrgEncryptionTab.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgEncryptionTab/OrgEncryptionTab.tsx index 5850d3a2a..564b08969 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgEncryptionTab/OrgEncryptionTab.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgEncryptionTab/OrgEncryptionTab.tsx @@ -125,7 +125,7 @@ export const OrgEncryptionTab = withPermission( handlePopUpToggle("upgradePlan", isOpen)} - text="Your current plan does not provide access to external KMS. To unlock this feature, please upgrade to Infisical Enterprise plan." + text="Your current plan does not include access to external KMS. To unlock this feature, please upgrade to Infisical Enterprise plan." isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> { handlePopUpToggle("upgradePlan", isOpen)} - text="Your current plan does not provide access to GitHub Organization Sync. To unlock this feature, please upgrade to Infisical Enterprise plan." + text="Your current plan does not include access to GitHub Organization Sync. To unlock this feature, please upgrade to Infisical Enterprise plan." isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/OrgSCIMSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/OrgSCIMSection.tsx index 45c823118..4ba89683c 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/OrgSCIMSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/OrgSCIMSection.tsx @@ -117,7 +117,7 @@ export const OrgScimSection = () => { handlePopUpToggle("upgradePlan", isOpen)} - text="Your current plan does not provide access to SCIM Provisioning. To unlock this feature, please upgrade to Infisical Enterprise plan." + text="Your current plan does not include access to SCIM Provisioning. To unlock this feature, please upgrade to Infisical Enterprise plan." isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSecurityTab/OrgGenericAuthSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSecurityTab/OrgGenericAuthSection.tsx index 674336568..1500098e9 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSecurityTab/OrgGenericAuthSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSecurityTab/OrgGenericAuthSection.tsx @@ -110,7 +110,7 @@ export const OrgGenericAuthSection = () => { handlePopUpToggle("upgradePlan", isOpen)} - text="Your current plan does not provide access to enforcing user MFA. To unlock this feature, please upgrade to Infisical Pro plan." + text="Your current plan does not include access to enforce user MFA. To unlock this feature, please upgrade to Infisical Pro plan." /> ); diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgGeneralAuthSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgGeneralAuthSection.tsx index 80dae67f8..5be97dc1b 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgGeneralAuthSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgGeneralAuthSection.tsx @@ -312,7 +312,7 @@ export const OrgGeneralAuthSection = ({ handlePopUpToggle("upgradePlan", isOpen)} - text="Your current plan does not provide access to enforcing SAML SSO. To unlock this feature, please upgrade to Infisical Pro plan." + text="Your current plan does not include access to enforce SAML SSO. To unlock this feature, please upgrade to Infisical Pro plan." /> ); diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgLDAPSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgLDAPSection.tsx index 15684c305..48625f218 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgLDAPSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgLDAPSection.tsx @@ -191,7 +191,7 @@ export const OrgLDAPSection = (): JSX.Element => { handlePopUpToggle("upgradePlan", isOpen)} - text="Your current plan does not provide access to LDAP authentication. To unlock this feature, please upgrade to Infisical Enterprise plan." + text="Your current plan does not include access to LDAP authentication. To unlock this feature, please upgrade to Infisical Enterprise plan." isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgOIDCSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgOIDCSection.tsx index baae827a3..3db364bc8 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgOIDCSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgOIDCSection.tsx @@ -207,7 +207,7 @@ export const OrgOIDCSection = (): JSX.Element => { handlePopUpToggle("upgradePlan", isOpen)} - text="Your current plan does not provide access to OIDC SSO. To unlock this feature, please upgrade to Infisical Pro plan." + text="Your current plan does not include access to OIDC SSO. To unlock this feature, please upgrade to Infisical Pro plan." /> ); diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgSSOSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgSSOSection.tsx index bc149a8f2..343b549da 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgSSOSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgSSOSection.tsx @@ -38,7 +38,7 @@ export const OrgSSOSection = (): JSX.Element => { if (!subscription?.samlSSO) { handlePopUpOpen("upgradePlan", { - text: "Your current plan does not provide access to SAML SSO. To unlock this feature, please upgrade to Infisical Pro plan." + text: "Your current plan does not include access to SAML SSO. To unlock this feature, please upgrade to Infisical Pro plan." }); return; } @@ -68,7 +68,7 @@ export const OrgSSOSection = (): JSX.Element => { if (!subscription?.samlSSO || !subscription?.groups) { handlePopUpOpen("upgradePlan", { isEnterpriseFeature: true, - text: "Your current plan does not provide access to SAML group mapping. To unlock this feature, please upgrade to Infisical Enterprise plan." + text: "Your current plan does not include access to SAML group mapping. To unlock this feature, please upgrade to Infisical Enterprise plan." }); return; } @@ -110,7 +110,7 @@ export const OrgSSOSection = (): JSX.Element => { handlePopUpOpen("addSSO"); } else { handlePopUpOpen("upgradePlan", { - text: "Your current plan does not provide access to SAML SSO. To unlock this feature, please upgrade to Infisical Pro plan." + text: "Your current plan does not include access to SAML SSO. To unlock this feature, please upgrade to Infisical Pro plan." }); } } catch (err) { diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgSsoTab.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgSsoTab.tsx index 9b502978b..9469242b1 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgSsoTab.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgSsoTab.tsx @@ -208,7 +208,7 @@ export const OrgSsoTab = withPermission( handlePopUpToggle("upgradePlan", isOpen)} - text={`Your current plan does not provide access to ${popUp.upgradePlan.data?.featureName}. To unlock this feature, please upgrade to Infisical ${popUp.upgradePlan.data?.isEnterpriseFeature ? "Enterprise" : "Pro"} plan.`} + text={`Your current plan does not include access to ${popUp.upgradePlan.data?.featureName}. To unlock this feature, please upgrade to Infisical ${popUp.upgradePlan.data?.isEnterpriseFeature ? "Enterprise" : "Pro"} plan.`} isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/ProjectTemplatesSection.tsx b/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/ProjectTemplatesSection.tsx index 303812e58..17e862ff6 100644 --- a/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/ProjectTemplatesSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/ProjectTemplatesSection.tsx @@ -85,7 +85,7 @@ export const ProjectTemplatesSection = () => { handlePopUpToggle("upgradePlan", isOpen)} - text="Your current plan does not provide access to project templates. To unlock this feature, please upgrade to Infisical Enterprise plan." + text="Your current plan does not include access to project templates. To unlock this feature, please upgrade to Infisical Enterprise plan." isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} /> diff --git a/frontend/src/pages/organization/UserDetailsByIDPage/components/UserOrgMembershipModal.tsx b/frontend/src/pages/organization/UserDetailsByIDPage/components/UserOrgMembershipModal.tsx index fcd4989d6..2518a5434 100644 --- a/frontend/src/pages/organization/UserDetailsByIDPage/components/UserOrgMembershipModal.tsx +++ b/frontend/src/pages/organization/UserDetailsByIDPage/components/UserOrgMembershipModal.tsx @@ -148,7 +148,7 @@ export const UserOrgMembershipModal = ({ popUp, handlePopUpOpen, handlePopUpTogg if (isCustomRole && subscription && !subscription?.rbac) { handlePopUpOpen("upgradePlan", { - text: "Your current plan does not provide access to assigning custom roles to members. To unlock this feature, please upgrade to Infisical Pro plan." + text: "Your current plan does not include access to assig custom roles to members. To unlock this feature, please upgrade to Infisical Pro plan." }); return; } diff --git a/frontend/src/pages/pam/PamResourcesPage/components/ResourceTypeSelect.tsx b/frontend/src/pages/pam/PamResourcesPage/components/ResourceTypeSelect.tsx index 84b404bb7..b34f33721 100644 --- a/frontend/src/pages/pam/PamResourcesPage/components/ResourceTypeSelect.tsx +++ b/frontend/src/pages/pam/PamResourcesPage/components/ResourceTypeSelect.tsx @@ -55,7 +55,7 @@ export const ResourceTypeSelect = ({ onSelect }: Props) => { const handleResourceSelect = (resource: PamResourceType) => { if (!subscription.pam) { handlePopUpOpen("upgradePlan", { - text: "Your current plan does not provide access to Infisical PAM. To unlock this feature, please upgrade to Infisical Enterprise plan.", + text: "Your current plan does not include access to Infisical PAM. To unlock this feature, please upgrade to Infisical Enterprise plan.", isEnterpriseFeature: true }); return; @@ -68,7 +68,7 @@ export const ResourceTypeSelect = ({ onSelect }: Props) => { resource === PamResourceType.Kubernetes ) { handlePopUpOpen("upgradePlan", { - text: "Your current plan does not provide access to this resource type. To unlock this feature, please upgrade to Infisical Enterprise plan.", + text: "Your current plan does not include access to this resource type. To unlock this feature, please upgrade to Infisical Enterprise plan.", isEnterpriseFeature: true }); return; diff --git a/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupsSection.tsx b/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupsSection.tsx index 2d3f98523..6cab1ecbe 100644 --- a/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupsSection.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupsSection.tsx @@ -32,7 +32,7 @@ export const GroupsSection = () => { const handleAddGroupModal = () => { if (!subscription?.groups) { handlePopUpOpen("upgradePlan", { - text: "Your current plan does not provide access to managing groups. To unlock this feature, please upgrade to Infisical Enterprise plan.", + text: "Managing groups can be unlocked if you upgrade to Infisical Enterprise plan.", isEnterpriseFeature: true }); } else { diff --git a/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx b/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx index 878d9b7bb..31e10986f 100644 --- a/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx +++ b/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx @@ -190,7 +190,7 @@ export const Page = () => { isMembershipDetailsLoading={isMembershipDetailsLoading} onOpenUpgradeModal={() => handlePopUpOpen("upgradePlan", { - text: "Your current plan does not provide access to assigning custom roles to members. To unlock this feature, please upgrade to Infisical Pro plan." + text: "Assigning custom roles to members can be unlocked if you upgrade to Infisical Pro plan." }) } /> diff --git a/frontend/src/pages/project/SettingsPage/components/AuditLogsRetentionSection/AuditLogsRetentionSection.tsx b/frontend/src/pages/project/SettingsPage/components/AuditLogsRetentionSection/AuditLogsRetentionSection.tsx index 24855cc24..2490648a2 100644 --- a/frontend/src/pages/project/SettingsPage/components/AuditLogsRetentionSection/AuditLogsRetentionSection.tsx +++ b/frontend/src/pages/project/SettingsPage/components/AuditLogsRetentionSection/AuditLogsRetentionSection.tsx @@ -42,7 +42,7 @@ export const AuditLogsRetentionSection = () => { try { if (!subscription?.auditLogs) { handlePopUpOpen("upgradePlan", { - text: "Your current plan does not provide access to configuring audit logs retention. To unlock this feature, please upgrade to Infisical Pro plan." + text: "Configuring audit logs retention can be unlocked if you upgrade to Infisical Pro plan." }); return; @@ -50,7 +50,7 @@ export const AuditLogsRetentionSection = () => { if (subscription && auditLogsRetentionDays > subscription?.auditLogsRetentionDays) { handlePopUpOpen("upgradePlan", { - text: "Your current plan does not provide access to updating audit logs retention period to a higher value. To unlock this feature, please upgrade to Infisical Pro plan." + text: "Updating audit logs retention period to a higher value can be unlocked if you upgrade to Infisical Pro plan." }); return; diff --git a/frontend/src/pages/secret-manager/IPAllowlistPage/components/IPAllowlistSection.tsx b/frontend/src/pages/secret-manager/IPAllowlistPage/components/IPAllowlistSection.tsx index 392aa8395..88c0afa4d 100644 --- a/frontend/src/pages/secret-manager/IPAllowlistPage/components/IPAllowlistSection.tsx +++ b/frontend/src/pages/secret-manager/IPAllowlistPage/components/IPAllowlistSection.tsx @@ -105,7 +105,7 @@ export const IPAllowlistSection = () => { handlePopUpToggle("upgradePlan", isOpen)} - text="Your current plan does not provide access to IP allowlisting. To unlock this feature, please upgrade to Infisical Pro plan." + text="Your current plan does not include access to IP allowlisting. To unlock this feature, please upgrade to Infisical Pro plan." /> ); diff --git a/frontend/src/pages/secret-manager/IPAllowlistPage/components/IPAllowlistTable.tsx b/frontend/src/pages/secret-manager/IPAllowlistPage/components/IPAllowlistTable.tsx index cb1935cb1..7fc696be3 100644 --- a/frontend/src/pages/secret-manager/IPAllowlistPage/components/IPAllowlistTable.tsx +++ b/frontend/src/pages/secret-manager/IPAllowlistPage/components/IPAllowlistTable.tsx @@ -159,7 +159,7 @@ export const IPAllowlistTable = ({ popUp, handlePopUpOpen, handlePopUpToggle }: handlePopUpToggle("upgradePlan", isOpen)} - text="Your current plan does not provide access to IP allowlisting. To unlock this feature, please upgrade to Infisical Pro plan." + text="Your current plan does not include access to IP allowlisting. To unlock this feature, please upgrade to Infisical Pro plan." /> ); diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/ActionBar.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/ActionBar.tsx index 2906f5348..7e5eae162 100644 --- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/ActionBar.tsx +++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/ActionBar.tsx @@ -1286,7 +1286,7 @@ export const ActionBar = ({ isOpen={popUp.upgradePlan.isOpen} onOpenChange={(isOpen) => handlePopUpToggle("upgradePlan", isOpen)} isEnterpriseFeature={popUp.upgradePlan.data?.isEnterpriseFeature} - text={`Your current plan does not provide access to ${popUp.upgradePlan.data?.featureName}. To unlock this feature, please upgrade to Infisical ${popUp.upgradePlan.data?.isEnterpriseFeature ? "Enterprise" : "Pro"} plan.`} + text={`Your current plan does not include access to ${popUp.upgradePlan.data?.featureName}. To unlock this feature, please upgrade to Infisical ${popUp.upgradePlan.data?.isEnterpriseFeature ? "Enterprise" : "Pro"} plan.`} /> )} { handlePopUpToggle("upgradePlan", isOpen)} - text="Your current plan does not provide access to adding custom environments. To unlock this feature, please upgrade to Infisical Pro plan." + text="Your current plan does not include access to adding custom environments. To unlock this feature, please upgrade to Infisical Pro plan." /> { handlePopUpToggle("upgradePlan", isOpen)} - text="You have reached the maximum number of environments allowed on your current plan. To add more environments, please upgrade to Infisical Pro plan." + text="You have reached the maximum number of environments allowed on the free plan. Upgrade to Infisical Pro plan to add more environments." /> ); diff --git a/frontend/src/pages/ssh/SshHostGroupDetailsByIDPage/components/SshHostGroupHostsSection.tsx b/frontend/src/pages/ssh/SshHostGroupDetailsByIDPage/components/SshHostGroupHostsSection.tsx index 0b2f26b07..6f45fe510 100644 --- a/frontend/src/pages/ssh/SshHostGroupDetailsByIDPage/components/SshHostGroupHostsSection.tsx +++ b/frontend/src/pages/ssh/SshHostGroupDetailsByIDPage/components/SshHostGroupHostsSection.tsx @@ -29,7 +29,7 @@ export const SshHostGroupHostsSection = ({ sshHostGroupId }: Props) => { const handleAddSshHostModal = () => { if (!subscription?.sshHostGroups) { handlePopUpOpen("upgradePlan", { - text: "Your current plan does not provide access to managing SSH host groups. To unlock this feature, please upgrade to Infisical Enterprise plan.", + text: "Managing SSH host groups can be unlocked if you upgrade to Infisical Enterprise plan.", isEnterpriseFeature: true }); } else { diff --git a/frontend/src/pages/ssh/SshHostsPage/components/SshHostGroupsSection.tsx b/frontend/src/pages/ssh/SshHostsPage/components/SshHostGroupsSection.tsx index 17c7fc2c0..efffbd3a2 100644 --- a/frontend/src/pages/ssh/SshHostsPage/components/SshHostGroupsSection.tsx +++ b/frontend/src/pages/ssh/SshHostsPage/components/SshHostGroupsSection.tsx @@ -25,7 +25,7 @@ export const SshHostGroupsSection = () => { const handleAddSshHostGroupModal = () => { if (!subscription?.sshHostGroups) { handlePopUpOpen("upgradePlan", { - text: "Your current plan does not provide access to managing SSH host groups. To unlock this feature, please upgrade to Infisical Enterprise plan.", + text: "Managing SSH host groups can be unlocked if you upgrade to Infisical Enterprise plan.", isEnterpriseFeature: true }); } else { From 39eecb328d0c6203fafabff29e90c87aba550362 Mon Sep 17 00:00:00 2001 From: Carlos Monastyrski Date: Wed, 29 Oct 2025 13:01:27 -0300 Subject: [PATCH 06/79] PKI Syncs revamp --- backend/src/@types/knex.d.ts | 8 + ...251028120000_add-certificate-sync-table.ts | 35 ++ backend/src/db/schemas/certificate-syncs.ts | 23 + backend/src/db/schemas/index.ts | 1 + backend/src/db/schemas/models.ts | 1 + backend/src/server/routes/index.ts | 14 +- .../v1/pki-sync-routers/pki-sync-endpoints.ts | 4 +- .../v1/pki-sync-routers/pki-sync-router.ts | 194 +++++++- .../src/server/routes/v1/project-router.ts | 9 +- .../certificate-sync/certificate-sync-dal.ts | 259 +++++++++++ .../certificate-sync-enums.ts | 6 + .../certificate-v3-service.test.ts | 13 +- .../certificate-v3/certificate-v3-service.ts | 23 +- .../services/certificate/certificate-dal.ts | 130 +++++- .../certificate/certificate-service.ts | 25 +- .../aws-certificate-manager-pki-sync-fns.ts | 166 +++++-- ...ws-certificate-manager-pki-sync-schemas.ts | 13 +- .../aws-certificate-manager-pki-sync-types.ts | 1 + .../azure-key-vault-pki-sync-schemas.ts | 3 +- backend/src/services/pki-sync/pki-sync-fns.ts | 1 + .../src/services/pki-sync/pki-sync-queue.ts | 178 +++++-- .../src/services/pki-sync/pki-sync-service.ts | 194 +++++++- .../src/services/pki-sync/pki-sync-types.ts | 52 ++- .../src/services/pki-sync/pki-sync-utils.ts | 67 +++ .../src/services/project/project-service.ts | 51 +- backend/src/services/project/project-types.ts | 1 + .../pki-syncs/CertificateManagementModal.tsx | 434 ++++++++++++++++++ .../pki-syncs/forms/CreatePkiSyncForm.tsx | 36 +- .../forms/PkiSyncCertificatesFields.tsx | 139 ++++++ .../PkiSyncOptionsFields.tsx | 43 ++ .../pki-syncs/forms/PkiSyncReviewFields.tsx | 37 +- ...ate-manager-pki-sync-destination-schema.ts | 1 + .../forms/schemas/base-pki-sync-schema.ts | 3 +- frontend/src/hooks/api/certificates/index.tsx | 1 + frontend/src/hooks/api/index.tsx | 1 + frontend/src/hooks/api/pam/types/index.ts | 4 +- frontend/src/hooks/api/pkiSyncs/enums.ts | 7 + frontend/src/hooks/api/pkiSyncs/mutations.tsx | 44 ++ frontend/src/hooks/api/pkiSyncs/queries.tsx | 75 ++- .../src/hooks/api/pkiSyncs/types/common.ts | 21 +- .../src/hooks/api/pkiSyncs/types/index.ts | 3 +- frontend/src/hooks/api/projects/queries.tsx | 26 +- .../src/hooks/api/projects/query-keys.tsx | 14 +- .../PkiManagerLayout/PkiManagerLayout.tsx | 18 +- .../CertificatesPage/CertificatesPage.tsx | 61 --- .../CertificateManagePkiSyncsModal.tsx | 253 ++++++++++ .../components/CertificatesSection.tsx | 8 +- .../components/CertificatesTable.tsx | 32 +- .../cert-manager/CertificatesPage/route.tsx | 19 - .../PkiCollectionDetailsByIDPage.tsx | 8 +- .../components/AddPkiCollectionItemModal.tsx | 8 +- .../PkiCollectionDetailsByIDPage/routes.tsx | 2 +- .../PkiSyncDetailsByIDPage.tsx | 7 +- .../components/PkiSyncCertificatesSection.tsx | 223 +++++++++ .../components/index.ts | 1 + .../PoliciesPage/PoliciesPage.tsx | 104 ++--- .../CertificatesTab/CertificatesTab.tsx | 5 + .../components/CertificatesTab/index.ts | 1 + .../PkiCollectionsTab/PkiCollectionsTab.tsx | 5 + .../components/PkiCollectionsTab/index.ts | 1 + .../PoliciesPage/components/index.ts | 2 + .../PamAccountForm/MySQLAccountForm.tsx | 4 +- .../PamAccountForm/PostgresAccountForm.tsx | 6 +- frontend/src/routeTree.gen.ts | 20 - 64 files changed, 2799 insertions(+), 350 deletions(-) create mode 100644 backend/src/db/migrations/20251028120000_add-certificate-sync-table.ts create mode 100644 backend/src/db/schemas/certificate-syncs.ts create mode 100644 backend/src/services/certificate-sync/certificate-sync-dal.ts create mode 100644 backend/src/services/certificate-sync/certificate-sync-enums.ts create mode 100644 frontend/src/components/pki-syncs/CertificateManagementModal.tsx create mode 100644 frontend/src/components/pki-syncs/forms/PkiSyncCertificatesFields.tsx delete mode 100644 frontend/src/pages/cert-manager/CertificatesPage/CertificatesPage.tsx create mode 100644 frontend/src/pages/cert-manager/CertificatesPage/components/CertificateManagePkiSyncsModal.tsx delete mode 100644 frontend/src/pages/cert-manager/CertificatesPage/route.tsx create mode 100644 frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncCertificatesSection.tsx create mode 100644 frontend/src/pages/cert-manager/PoliciesPage/components/CertificatesTab/CertificatesTab.tsx create mode 100644 frontend/src/pages/cert-manager/PoliciesPage/components/CertificatesTab/index.ts create mode 100644 frontend/src/pages/cert-manager/PoliciesPage/components/PkiCollectionsTab/PkiCollectionsTab.tsx create mode 100644 frontend/src/pages/cert-manager/PoliciesPage/components/PkiCollectionsTab/index.ts diff --git a/backend/src/@types/knex.d.ts b/backend/src/@types/knex.d.ts index bbc27ebc1..7ff31ed99 100644 --- a/backend/src/@types/knex.d.ts +++ b/backend/src/@types/knex.d.ts @@ -62,6 +62,9 @@ import { TCertificateSecretsUpdate, TCertificatesInsert, TCertificatesUpdate, + TCertificateSyncs, + TCertificateSyncsInsert, + TCertificateSyncsUpdate, TCertificateTemplateEstConfigs, TCertificateTemplateEstConfigsInsert, TCertificateTemplateEstConfigsUpdate, @@ -738,6 +741,11 @@ declare module "knex/types/tables" { TPkiSubscribersUpdate >; [TableName.PkiSync]: KnexOriginal.CompositeTableType; + [TableName.CertificateSync]: KnexOriginal.CompositeTableType< + TCertificateSyncs, + TCertificateSyncsInsert, + TCertificateSyncsUpdate + >; [TableName.UserGroupMembership]: KnexOriginal.CompositeTableType< TUserGroupMembership, TUserGroupMembershipInsert, diff --git a/backend/src/db/migrations/20251028120000_add-certificate-sync-table.ts b/backend/src/db/migrations/20251028120000_add-certificate-sync-table.ts new file mode 100644 index 000000000..14904e5bd --- /dev/null +++ b/backend/src/db/migrations/20251028120000_add-certificate-sync-table.ts @@ -0,0 +1,35 @@ +import { Knex } from "knex"; + +import { TableName } from "@app/db/schemas"; +import { createOnUpdateTrigger, dropOnUpdateTrigger } from "@app/db/utils"; +import { CertificateSyncStatus } from "@app/services/certificate-sync/certificate-sync-enums"; + +export async function up(knex: Knex): Promise { + if (!(await knex.schema.hasTable(TableName.CertificateSync))) { + await knex.schema.createTable(TableName.CertificateSync, (t) => { + t.uuid("id", { primaryKey: true }).defaultTo(knex.fn.uuid()); + t.uuid("pkiSyncId").notNullable(); + t.foreign("pkiSyncId").references("id").inTable(TableName.PkiSync).onDelete("CASCADE"); + t.uuid("certificateId").notNullable(); + t.foreign("certificateId").references("id").inTable(TableName.Certificate).onDelete("CASCADE"); + t.string("syncStatus").defaultTo(CertificateSyncStatus.Pending); + t.text("lastSyncMessage"); + t.datetime("lastSyncedAt"); + t.timestamps(true, true, true); + + // Ensure unique combination of pki sync and certificate + t.unique(["pkiSyncId", "certificateId"]); + + t.index("pkiSyncId"); + t.index("certificateId"); + t.index("syncStatus"); + }); + + await createOnUpdateTrigger(knex, TableName.CertificateSync); + } +} + +export async function down(knex: Knex): Promise { + await knex.schema.dropTableIfExists(TableName.CertificateSync); + await dropOnUpdateTrigger(knex, TableName.CertificateSync); +} diff --git a/backend/src/db/schemas/certificate-syncs.ts b/backend/src/db/schemas/certificate-syncs.ts new file mode 100644 index 000000000..6f10e4d79 --- /dev/null +++ b/backend/src/db/schemas/certificate-syncs.ts @@ -0,0 +1,23 @@ +// Code generated by automation script, DO NOT EDIT. +// Automated by pulling database and generating zod schema +// To update. Just run npm run generate:schema +// Written by akhilmhdh. + +import { z } from "zod"; + +import { TImmutableDBKeys } from "./models"; + +export const CertificateSyncsSchema = z.object({ + id: z.string().uuid(), + pkiSyncId: z.string().uuid(), + certificateId: z.string().uuid(), + syncStatus: z.string().default("pending").nullable().optional(), + lastSyncMessage: z.string().nullable().optional(), + lastSyncedAt: z.date().nullable().optional(), + createdAt: z.date(), + updatedAt: z.date() +}); + +export type TCertificateSyncs = z.infer; +export type TCertificateSyncsInsert = Omit, TImmutableDBKeys>; +export type TCertificateSyncsUpdate = Partial, TImmutableDBKeys>>; diff --git a/backend/src/db/schemas/index.ts b/backend/src/db/schemas/index.ts index 4f0f221ff..fba195746 100644 --- a/backend/src/db/schemas/index.ts +++ b/backend/src/db/schemas/index.ts @@ -17,6 +17,7 @@ export * from "./certificate-authority-crl"; export * from "./certificate-authority-secret"; export * from "./certificate-bodies"; export * from "./certificate-secrets"; +export * from "./certificate-syncs"; export * from "./certificate-template-est-configs"; export * from "./certificate-templates"; export * from "./certificates"; diff --git a/backend/src/db/schemas/models.ts b/backend/src/db/schemas/models.ts index 86bc929b8..e10c6dcbe 100644 --- a/backend/src/db/schemas/models.ts +++ b/backend/src/db/schemas/models.ts @@ -161,6 +161,7 @@ export enum TableName { AppConnection = "app_connections", SecretSync = "secret_syncs", PkiSync = "pki_syncs", + CertificateSync = "certificate_syncs", KmipClient = "kmip_clients", KmipOrgConfig = "kmip_org_configs", KmipOrgServerCertificates = "kmip_org_server_certificates", diff --git a/backend/src/server/routes/index.ts b/backend/src/server/routes/index.ts index c135db83e..f56026ffb 100644 --- a/backend/src/server/routes/index.ts +++ b/backend/src/server/routes/index.ts @@ -172,6 +172,7 @@ import { internalCertificateAuthorityServiceFactory } from "@app/services/certif import { certificateEstV3ServiceFactory } from "@app/services/certificate-est-v3/certificate-est-v3-service"; import { certificateProfileDALFactory } from "@app/services/certificate-profile/certificate-profile-dal"; import { certificateProfileServiceFactory } from "@app/services/certificate-profile/certificate-profile-service"; +import { certificateSyncDALFactory } from "@app/services/certificate-sync/certificate-sync-dal"; import { certificateTemplateDALFactory } from "@app/services/certificate-template/certificate-template-dal"; import { certificateTemplateEstConfigDALFactory } from "@app/services/certificate-template/certificate-template-est-config-dal"; import { certificateTemplateServiceFactory } from "@app/services/certificate-template/certificate-template-service"; @@ -1060,6 +1061,7 @@ export const registerRoutes = async ( const certificateDAL = certificateDALFactory(db); const certificateBodyDAL = certificateBodyDALFactory(db); const certificateSecretDAL = certificateSecretDALFactory(db); + const certificateSyncDAL = certificateSyncDALFactory(db); const pkiAlertDAL = pkiAlertDALFactory(db); const pkiCollectionDAL = pkiCollectionDALFactory(db); @@ -2020,7 +2022,8 @@ export const registerRoutes = async ( certificateBodyDAL, certificateSecretDAL, certificateAuthorityDAL, - certificateAuthorityCertDAL + certificateAuthorityCertDAL, + certificateSyncDAL }); const pkiSyncCleanup = pkiSyncCleanupQueueServiceFactory({ @@ -2131,6 +2134,7 @@ export const registerRoutes = async ( permissionService, pkiCollectionDAL, pkiCollectionItemDAL, + certificateSyncDAL, pkiSyncDAL, pkiSyncQueue }); @@ -2142,7 +2146,10 @@ export const registerRoutes = async ( certificateProfileDAL, certificateTemplateV2Service, internalCaService: internalCertificateAuthorityService, - permissionService + permissionService, + certificateSyncDAL, + pkiSyncDAL, + pkiSyncQueue }); const certificateV3Queue = certificateV3QueueServiceFactory({ @@ -2188,7 +2195,8 @@ export const registerRoutes = async ( appConnectionService, permissionService, licenseService, - pkiSyncQueue + pkiSyncQueue, + certificateSyncDAL }); const pkiTemplateService = pkiTemplatesServiceFactory({ diff --git a/backend/src/server/routes/v1/pki-sync-routers/pki-sync-endpoints.ts b/backend/src/server/routes/v1/pki-sync-routers/pki-sync-endpoints.ts index 3f803a1e0..6460b7d65 100644 --- a/backend/src/server/routes/v1/pki-sync-routers/pki-sync-endpoints.ts +++ b/backend/src/server/routes/v1/pki-sync-routers/pki-sync-endpoints.ts @@ -26,7 +26,7 @@ export const registerSyncPkiEndpoints = ({ syncOptions?: Record; description?: string; isAutoSyncEnabled?: boolean; - subscriberId?: string; + subscriberId?: string | null; }>; updateSchema: z.ZodType<{ connectionId?: string; @@ -35,7 +35,7 @@ export const registerSyncPkiEndpoints = ({ syncOptions?: Record; description?: string; isAutoSyncEnabled?: boolean; - subscriberId?: string; + subscriberId?: string | null; }>; responseSchema: z.ZodTypeAny; syncOptions: { diff --git a/backend/src/server/routes/v1/pki-sync-routers/pki-sync-router.ts b/backend/src/server/routes/v1/pki-sync-routers/pki-sync-router.ts index 158d9e4dc..ecf7da4cc 100644 --- a/backend/src/server/routes/v1/pki-sync-routers/pki-sync-router.ts +++ b/backend/src/server/routes/v1/pki-sync-routers/pki-sync-router.ts @@ -2,10 +2,11 @@ import { z } from "zod"; import { EventType } from "@app/ee/services/audit-log/audit-log-types"; import { ApiDocsTags } from "@app/lib/api-docs"; -import { readLimit } from "@app/server/config/rateLimiter"; +import { readLimit, writeLimit } from "@app/server/config/rateLimiter"; import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; import { AppConnection } from "@app/services/app-connection/app-connection-enums"; import { AuthMode } from "@app/services/auth/auth-type"; +import { CertificateSyncStatus } from "@app/services/certificate-sync/certificate-sync-enums"; import { PkiSync } from "@app/services/pki-sync/pki-sync-enums"; const PkiSyncSchema = z.object({ @@ -60,7 +61,8 @@ const PkiSyncSchema = z.object({ name: z.string() }) .nullable() - .optional() + .optional(), + hasCertificate: z.boolean().optional() }); const PkiSyncOptionsSchema = z.object({ @@ -76,6 +78,24 @@ const PkiSyncOptionsSchema = z.object({ minCertificateNameLength: z.number().optional() }); +const PkiSyncCertificateSchema = z.object({ + id: z.string().uuid(), + pkiSyncId: z.string().uuid(), + certificateId: z.string().uuid(), + syncStatus: z.nativeEnum(CertificateSyncStatus), + lastSyncMessage: z.string().nullable().optional(), + lastSyncedAt: z.date().nullable().optional(), + createdAt: z.date(), + updatedAt: z.date(), + certificateSerialNumber: z.string().optional(), + certificateCommonName: z.string().optional(), + certificateStatus: z.string().optional(), + certificateNotBefore: z.date().optional(), + certificateNotAfter: z.date().optional(), + pkiSyncName: z.string().optional(), + pkiSyncDestination: z.string().optional() +}); + export const registerPkiSyncRouter = async (server: FastifyZodProvider) => { server.route({ method: "GET", @@ -111,7 +131,8 @@ export const registerPkiSyncRouter = async (server: FastifyZodProvider) => { tags: [ApiDocsTags.PkiSyncs], description: "List all the PKI Syncs for the specified project.", querystring: z.object({ - projectId: z.string().trim().min(1) + projectId: z.string().trim().min(1), + certificateId: z.string().uuid().optional() }), response: { 200: z.object({ pkiSyncs: PkiSyncSchema.array() }) @@ -120,11 +141,11 @@ export const registerPkiSyncRouter = async (server: FastifyZodProvider) => { onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), handler: async (req) => { const { - query: { projectId }, + query: { projectId, certificateId }, permission } = req; - const pkiSyncs = await server.services.pkiSync.listPkiSyncsByProjectId({ projectId }, permission); + const pkiSyncs = await server.services.pkiSync.listPkiSyncsByProjectId({ projectId, certificateId }, permission); await server.services.auditLog.createAuditLog({ ...req.auditLogInfo, @@ -179,4 +200,167 @@ export const registerPkiSyncRouter = async (server: FastifyZodProvider) => { return pkiSync; } }); + + server.route({ + method: "GET", + url: "/:pkiSyncId/certificates", + config: { + rateLimit: readLimit + }, + schema: { + hide: false, + tags: [ApiDocsTags.PkiSyncs], + description: "List all certificates associated with a PKI Sync.", + params: z.object({ + pkiSyncId: z.string().uuid() + }), + querystring: z.object({ + offset: z.coerce.number().min(0).default(0), + limit: z.coerce.number().min(1).max(100).default(20) + }), + response: { + 200: z.object({ + certificates: PkiSyncCertificateSchema.array(), + totalCount: z.number() + }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: async (req) => { + const { pkiSyncId } = req.params; + const { offset, limit } = req.query; + + const result = await server.services.pkiSync.listPkiSyncCertificates( + { pkiSyncId, offset, limit }, + req.permission + ); + + const pkiSync = await server.services.pkiSync.findPkiSyncById({ id: pkiSyncId }, req.permission); + + await server.services.auditLog.createAuditLog({ + ...req.auditLogInfo, + projectId: pkiSync.projectId, + event: { + type: EventType.GET_PKI_SYNC, + metadata: { + syncId: pkiSyncId, + destination: pkiSync.destination + } + } + }); + + return result; + } + }); + + server.route({ + method: "POST", + url: "/:pkiSyncId/certificates", + config: { + rateLimit: writeLimit + }, + schema: { + hide: false, + tags: [ApiDocsTags.PkiSyncs], + description: "Add certificates to a PKI Sync.", + params: z.object({ + pkiSyncId: z.string().uuid() + }), + body: z.object({ + certificateIds: z.array(z.string().uuid()).min(1, "At least one certificate ID is required") + }), + response: { + 200: z.object({ + addedCertificates: z.array( + z.object({ + id: z.string().uuid(), + pkiSyncId: z.string().uuid(), + certificateId: z.string().uuid(), + syncStatus: z.string().default("pending").optional().nullable(), + lastSyncMessage: z.string().optional().nullable(), + lastSyncedAt: z.date().optional().nullable(), + createdAt: z.date(), + updatedAt: z.date() + }) + ) + }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: async (req) => { + const { pkiSyncId } = req.params; + const { certificateIds } = req.body; + + const addedCertificates = await server.services.pkiSync.addCertificatesToPkiSync( + { pkiSyncId, certificateIds }, + req.permission + ); + + const pkiSync = await server.services.pkiSync.findPkiSyncById({ id: pkiSyncId }, req.permission); + + await server.services.auditLog.createAuditLog({ + ...req.auditLogInfo, + projectId: pkiSync.projectId, + event: { + type: EventType.UPDATE_PKI_SYNC, + metadata: { + pkiSyncId, + name: pkiSync.name + } + } + }); + + return { addedCertificates }; + } + }); + + server.route({ + method: "DELETE", + url: "/:pkiSyncId/certificates", + config: { + rateLimit: writeLimit + }, + schema: { + hide: false, + tags: [ApiDocsTags.PkiSyncs], + description: "Remove certificates from a PKI Sync.", + params: z.object({ + pkiSyncId: z.string().uuid() + }), + body: z.object({ + certificateIds: z.array(z.string().uuid()).min(1, "At least one certificate ID is required") + }), + response: { + 200: z.object({ + removedCount: z.number() + }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: async (req) => { + const { pkiSyncId } = req.params; + const { certificateIds } = req.body; + + const result = await server.services.pkiSync.removeCertificatesFromPkiSync( + { pkiSyncId, certificateIds }, + req.permission + ); + + const pkiSync = await server.services.pkiSync.findPkiSyncById({ id: pkiSyncId }, req.permission); + + await server.services.auditLog.createAuditLog({ + ...req.auditLogInfo, + projectId: pkiSync.projectId, + event: { + type: EventType.UPDATE_PKI_SYNC, + metadata: { + pkiSyncId, + name: pkiSync.name + } + } + }); + + return result; + } + }); }; diff --git a/backend/src/server/routes/v1/project-router.ts b/backend/src/server/routes/v1/project-router.ts index c3bffa2fc..1054d359b 100644 --- a/backend/src/server/routes/v1/project-router.ts +++ b/backend/src/server/routes/v1/project-router.ts @@ -1195,8 +1195,13 @@ export const registerProjectRouter = async (server: FastifyZodProvider) => { querystring: z.object({ friendlyName: z.string().optional().describe(PROJECTS.LIST_CERTIFICATES.friendlyName), commonName: z.string().optional().describe(PROJECTS.LIST_CERTIFICATES.commonName), - offset: z.coerce.number().min(0).max(100).default(0).describe(PROJECTS.LIST_CERTIFICATES.offset), - limit: z.coerce.number().min(1).max(100).default(25).describe(PROJECTS.LIST_CERTIFICATES.limit) + offset: z.coerce.number().min(0).default(0).describe(PROJECTS.LIST_CERTIFICATES.offset), + limit: z.coerce.number().min(1).max(100).default(25).describe(PROJECTS.LIST_CERTIFICATES.limit), + forPkiSync: z.coerce + .boolean() + .default(false) + .optional() + .describe("Retrieve only certificates available for PKI sync") }), response: { 200: z.object({ diff --git a/backend/src/services/certificate-sync/certificate-sync-dal.ts b/backend/src/services/certificate-sync/certificate-sync-dal.ts new file mode 100644 index 000000000..278641844 --- /dev/null +++ b/backend/src/services/certificate-sync/certificate-sync-dal.ts @@ -0,0 +1,259 @@ +import { Knex } from "knex"; + +import { TDbClient } from "@app/db"; +import { TableName, TCertificateSyncs } from "@app/db/schemas"; +import { DatabaseError } from "@app/lib/errors"; +import { buildFindFilter, ormify, selectAllTableCols } from "@app/lib/knex"; + +import { CertificateSyncStatus } from "./certificate-sync-enums"; + +export type TCertificateSyncDALFactory = ReturnType; + +type CertificateSyncFindFilter = Parameters>[0]; + +export const certificateSyncDALFactory = (db: TDbClient) => { + const certificateSyncOrm = ormify(db, TableName.CertificateSync); + + const findByPkiSyncId = async (pkiSyncId: string, tx?: Knex) => { + try { + const docs = await (tx || db.replicaNode())(TableName.CertificateSync) + .where({ pkiSyncId }) + .select(selectAllTableCols(TableName.CertificateSync)); + return docs; + } catch (error) { + throw new DatabaseError({ error, name: "FindByPkiSyncId" }); + } + }; + + const findByCertificateId = async (certificateId: string, tx?: Knex) => { + try { + const docs = await (tx || db.replicaNode())(TableName.CertificateSync) + .where({ certificateId }) + .select(selectAllTableCols(TableName.CertificateSync)); + return docs; + } catch (error) { + throw new DatabaseError({ error, name: "FindByCertificateId" }); + } + }; + + const findByPkiSyncAndCertificate = async (pkiSyncId: string, certificateId: string, tx?: Knex) => { + try { + const doc = await (tx || db.replicaNode())(TableName.CertificateSync) + .where({ pkiSyncId, certificateId }) + .select(selectAllTableCols(TableName.CertificateSync)) + .first(); + return doc; + } catch (error) { + throw new DatabaseError({ error, name: "FindByPkiSyncAndCertificate" }); + } + }; + + const findCertificateIdsByPkiSyncId = async (pkiSyncId: string, tx?: Knex): Promise => { + try { + const docs = (await (tx || db.replicaNode())(TableName.CertificateSync) + .where({ pkiSyncId }) + .select("certificateId")) as Array<{ certificateId: string }>; + return docs.map((doc) => doc.certificateId); + } catch (error) { + throw new DatabaseError({ error, name: "FindCertificateIdsByPkiSyncId" }); + } + }; + + const findPkiSyncIdsByCertificateId = async (certificateId: string, tx?: Knex): Promise => { + try { + const docs = (await (tx || db.replicaNode())(TableName.CertificateSync) + .where({ certificateId }) + .select("pkiSyncId")) as Array<{ pkiSyncId: string }>; + return docs.map((doc) => doc.pkiSyncId); + } catch (error) { + throw new DatabaseError({ error, name: "FindPkiSyncIdsByCertificateId" }); + } + }; + + const addCertificates = async ( + pkiSyncId: string, + certificateIds: string[], + tx?: Knex + ): Promise => { + try { + const insertData = certificateIds.map((certificateId) => ({ + pkiSyncId, + certificateId, + syncStatus: CertificateSyncStatus.Pending + })); + + const docs = await (tx || db)(TableName.CertificateSync).insert(insertData).returning("*"); + + return docs; + } catch (error) { + throw new DatabaseError({ error, name: "AddCertificates" }); + } + }; + + const removeCertificates = async (pkiSyncId: string, certificateIds: string[], tx?: Knex): Promise => { + try { + const deletedCount = await (tx || db)(TableName.CertificateSync) + .where({ pkiSyncId }) + .whereIn("certificateId", certificateIds) + .del(); + + return deletedCount; + } catch (error) { + throw new DatabaseError({ error, name: "RemoveCertificates" }); + } + }; + + const removeAllCertificatesFromSync = async (pkiSyncId: string, tx?: Knex): Promise => { + try { + const deletedCount = await (tx || db)(TableName.CertificateSync).where({ pkiSyncId }).del(); + return deletedCount; + } catch (error) { + throw new DatabaseError({ error, name: "RemoveAllCertificatesFromSync" }); + } + }; + + const updateSyncStatus = async ( + pkiSyncId: string, + certificateId: string, + status: string, + message?: string, + tx?: Knex + ): Promise => { + try { + const updateData: Partial = { + syncStatus: status, + lastSyncedAt: new Date() + }; + + if (message !== undefined) { + updateData.lastSyncMessage = message; + } + + const docs = await (tx || db)(TableName.CertificateSync) + .where({ pkiSyncId, certificateId }) + .update(updateData) + .returning("*"); + + return docs[0]; + } catch (error) { + throw new DatabaseError({ error, name: "UpdateSyncStatus" }); + } + }; + + const bulkUpdateSyncStatus = async ( + updates: Array<{ + pkiSyncId: string; + certificateId: string; + status: string; + message?: string; + }>, + tx?: Knex + ): Promise => { + try { + if (tx) { + for (const update of updates) { + // eslint-disable-next-line no-await-in-loop + await updateSyncStatus(update.pkiSyncId, update.certificateId, update.status, update.message, tx); + } + } else { + await certificateSyncOrm.transaction(async (trx) => { + for (const update of updates) { + // eslint-disable-next-line no-await-in-loop + await updateSyncStatus(update.pkiSyncId, update.certificateId, update.status, update.message, trx); + } + }); + } + } catch (error) { + throw new DatabaseError({ error, name: "BulkUpdateSyncStatus" }); + } + }; + + const findWithDetails = async ( + options: { + filter?: CertificateSyncFindFilter; + pkiSyncId?: string; + offset?: number; + limit?: number; + }, + tx?: Knex + ): Promise<{ + certificateDetails: (TCertificateSyncs & { + certificateSerialNumber?: string; + certificateCommonName?: string; + certificateStatus?: string; + certificateNotBefore?: Date; + certificateNotAfter?: Date; + pkiSyncName?: string; + pkiSyncDestination?: string; + })[]; + totalCount: number; + }> => { + try { + const { filter, pkiSyncId, offset, limit } = options; + + const baseQuery = (tx || db.replicaNode())(TableName.CertificateSync) + .leftJoin(TableName.Certificate, `${TableName.CertificateSync}.certificateId`, `${TableName.Certificate}.id`) + .leftJoin(TableName.PkiSync, `${TableName.CertificateSync}.pkiSyncId`, `${TableName.PkiSync}.id`); + + if (filter) { + // eslint-disable-next-line @typescript-eslint/no-misused-promises + void baseQuery.where(buildFindFilter(filter)); + } + if (pkiSyncId) { + void baseQuery.where(`${TableName.CertificateSync}.pkiSyncId`, pkiSyncId); + } + + const countResult = await baseQuery.clone().count("* as count"); + const totalCount = Number((countResult[0] as unknown as { count: string | number }).count); + + const query = baseQuery + .select(selectAllTableCols(TableName.CertificateSync)) + .select( + db.ref("serialNumber").withSchema(TableName.Certificate).as("certificateSerialNumber"), + db.ref("commonName").withSchema(TableName.Certificate).as("certificateCommonName"), + db.ref("status").withSchema(TableName.Certificate).as("certificateStatus"), + db.ref("notBefore").withSchema(TableName.Certificate).as("certificateNotBefore"), + db.ref("notAfter").withSchema(TableName.Certificate).as("certificateNotAfter"), + db.ref("name").withSchema(TableName.PkiSync).as("pkiSyncName"), + db.ref("destination").withSchema(TableName.PkiSync).as("pkiSyncDestination") + ) + .orderBy(`${TableName.CertificateSync}.createdAt`, "desc"); + + if (offset !== undefined) { + void query.offset(offset); + } + if (limit !== undefined) { + void query.limit(limit); + } + + const certificateDetails = (await query) as (TCertificateSyncs & { + certificateSerialNumber?: string; + certificateCommonName?: string; + certificateStatus?: string; + certificateNotBefore?: Date; + certificateNotAfter?: Date; + pkiSyncName?: string; + pkiSyncDestination?: string; + })[]; + + return { certificateDetails, totalCount }; + } catch (error) { + throw new DatabaseError({ error, name: "FindWithDetails" }); + } + }; + + return { + ...certificateSyncOrm, + findByPkiSyncId, + findByCertificateId, + findByPkiSyncAndCertificate, + findCertificateIdsByPkiSyncId, + findPkiSyncIdsByCertificateId, + addCertificates, + removeCertificates, + removeAllCertificatesFromSync, + updateSyncStatus, + bulkUpdateSyncStatus, + findWithDetails + }; +}; diff --git a/backend/src/services/certificate-sync/certificate-sync-enums.ts b/backend/src/services/certificate-sync/certificate-sync-enums.ts new file mode 100644 index 000000000..97c08b339 --- /dev/null +++ b/backend/src/services/certificate-sync/certificate-sync-enums.ts @@ -0,0 +1,6 @@ +export enum CertificateSyncStatus { + Pending = "pending", + Syncing = "syncing", + Succeeded = "succeeded", + Failed = "failed" +} diff --git a/backend/src/services/certificate-v3/certificate-v3-service.test.ts b/backend/src/services/certificate-v3/certificate-v3-service.test.ts index 0c70571dd..11b51ecc7 100644 --- a/backend/src/services/certificate-v3/certificate-v3-service.test.ts +++ b/backend/src/services/certificate-v3/certificate-v3-service.test.ts @@ -133,7 +133,18 @@ describe("CertificateV3Service", () => { certificateProfileDAL: mockCertificateProfileDAL, certificateTemplateV2Service: mockCertificateTemplateV2Service, internalCaService: mockInternalCaService, - permissionService: mockPermissionService + permissionService: mockPermissionService, + certificateSyncDAL: { + findPkiSyncIdsByCertificateId: vi.fn().mockResolvedValue([]), + addCertificates: vi.fn().mockResolvedValue([]), + removeCertificates: vi.fn().mockResolvedValue(0) + }, + pkiSyncDAL: { + find: vi.fn().mockResolvedValue([]) + }, + pkiSyncQueue: { + queuePkiSyncSyncCertificatesById: vi.fn().mockResolvedValue(undefined) + } }); }); diff --git a/backend/src/services/certificate-v3/certificate-v3-service.ts b/backend/src/services/certificate-v3/certificate-v3-service.ts index 0a721b2db..6f5870f4f 100644 --- a/backend/src/services/certificate-v3/certificate-v3-service.ts +++ b/backend/src/services/certificate-v3/certificate-v3-service.ts @@ -48,6 +48,10 @@ import { mapEnumsForValidation, normalizeDateForApi } from "../certificate-common/certificate-utils"; +import { TCertificateSyncDALFactory } from "../certificate-sync/certificate-sync-dal"; +import { TPkiSyncDALFactory } from "../pki-sync/pki-sync-dal"; +import { TPkiSyncQueueFactory } from "../pki-sync/pki-sync-queue"; +import { replaceCertificateInSyncs, triggerAutoSyncForCertificate } from "../pki-sync/pki-sync-utils"; import { TCertificateFromProfileResponse, TCertificateOrderResponse, @@ -72,6 +76,12 @@ type TCertificateV3ServiceFactoryDep = { >; internalCaService: Pick; permissionService: Pick; + certificateSyncDAL: Pick< + TCertificateSyncDALFactory, + "findPkiSyncIdsByCertificateId" | "removeCertificates" | "addCertificates" + >; + pkiSyncDAL: Pick; + pkiSyncQueue: Pick; }; export type TCertificateV3ServiceFactory = ReturnType; @@ -328,7 +338,10 @@ export const certificateV3ServiceFactory = ({ certificateProfileDAL, certificateTemplateV2Service, internalCaService, - permissionService + permissionService, + certificateSyncDAL, + pkiSyncDAL, + pkiSyncQueue }: TCertificateV3ServiceFactoryDep) => { const issueCertificateFromProfile = async ({ profileId, @@ -872,6 +885,8 @@ export const certificateV3ServiceFactory = ({ tx ); + await replaceCertificateInSyncs(originalCert.id, newCert.id, { certificateSyncDAL }, tx); + return { certificate, certificateChain, @@ -883,6 +898,12 @@ export const certificateV3ServiceFactory = ({ }; }); + await triggerAutoSyncForCertificate(renewalResult.newCert.id, { + certificateSyncDAL, + pkiSyncDAL, + pkiSyncQueue + }); + return { certificate: renewalResult.certificate, issuingCaCertificate: renewalResult.issuingCaCertificate, diff --git a/backend/src/services/certificate/certificate-dal.ts b/backend/src/services/certificate/certificate-dal.ts index eb40b85a5..7af79319b 100644 --- a/backend/src/services/certificate/certificate-dal.ts +++ b/backend/src/services/certificate/certificate-dal.ts @@ -1,3 +1,5 @@ +import RE2 from "re2"; + import { TDbClient } from "@app/db"; import { TableName, TCertificates } from "@app/db/schemas"; import { DatabaseError } from "@app/lib/errors"; @@ -60,11 +62,13 @@ export const certificateDALFactory = (db: TDbClient) => { .where(`${TableName.Project}.id`, projectId); if (friendlyName) { - query = query.andWhere(`${TableName.Certificate}.friendlyName`, friendlyName); + const sanitizedValue = String(friendlyName).replace(new RE2("[%_\\\\]", "g"), "\\$&"); + query = query.andWhere(`${TableName.Certificate}.friendlyName`, "like", `%${sanitizedValue}%`); } if (commonName) { - query = query.andWhere(`${TableName.Certificate}.commonName`, commonName); + const sanitizedValue = String(commonName).replace(new RE2("[%_\\\\]", "g"), "\\$&"); + query = query.andWhere(`${TableName.Certificate}.commonName`, "like", `%${sanitizedValue}%`); } const count = await query.count("*").first(); @@ -114,6 +118,109 @@ export const certificateDALFactory = (db: TDbClient) => { } }; + const findActiveCertificatesByIds = async (certificateIds: string[]): Promise => { + try { + if (certificateIds.length === 0) { + return []; + } + + const certs = await db + .replicaNode()(TableName.Certificate) + .whereIn("id", certificateIds) + .where({ status: CertStatus.ACTIVE }) + .where("notAfter", ">", new Date()) + .orderBy("notBefore", "desc") + .select("*"); + + return certs; + } catch (error) { + throw new DatabaseError({ error, name: "Find active certificates by IDs" }); + } + }; + + const findActiveCertificatesForSync = async ( + filter: Partial, + options?: { limit?: number; offset?: number } + ): Promise<(TCertificates & { hasPrivateKey: boolean })[]> => { + try { + let query = db + .replicaNode()(TableName.Certificate) + .leftJoin(TableName.CertificateSecret, `${TableName.Certificate}.id`, `${TableName.CertificateSecret}.certId`) + .select(selectAllTableCols(TableName.Certificate)) + .select(db.ref(`${TableName.CertificateSecret}.certId`).as("privateKeyRef")) + .where({ status: CertStatus.ACTIVE }) + .where("notAfter", ">", new Date()) + .whereNull("renewedByCertificateId"); + + Object.entries(filter).forEach(([key, value]) => { + if (value !== undefined && value !== null) { + if (key === "friendlyName" || key === "commonName") { + const sanitizedValue = String(value).replace(new RE2("[%_\\\\]", "g"), "\\$&"); + query = query.andWhere(`${TableName.Certificate}.${key}`, "like", `%${sanitizedValue}%`); + } else { + query = query.andWhere(`${TableName.Certificate}.${key}`, value); + } + } + }); + + if (options?.offset) { + query = query.offset(options.offset); + } + + if (options?.limit) { + query = query.limit(options.limit); + } + + query = query.orderBy("createdAt", "desc"); + + const certs = await query; + return certs.map((cert) => ({ ...cert, hasPrivateKey: Boolean(cert.privateKeyRef) })); + } catch (error) { + throw new DatabaseError({ error, name: "Find active certificates for sync" }); + } + }; + + const countActiveCertificatesForSync = async ({ + projectId, + friendlyName, + commonName + }: { + projectId: string; + friendlyName?: string; + commonName?: string; + }) => { + try { + interface CountResult { + count: string; + } + + let query = db + .replicaNode()(TableName.Certificate) + .join(TableName.CertificateAuthority, `${TableName.Certificate}.caId`, `${TableName.CertificateAuthority}.id`) + .join(TableName.Project, `${TableName.CertificateAuthority}.projectId`, `${TableName.Project}.id`) + .where(`${TableName.Project}.id`, projectId) + .where(`${TableName.Certificate}.status`, CertStatus.ACTIVE) + .where(`${TableName.Certificate}.notAfter`, ">", new Date()) + .whereNull(`${TableName.Certificate}.renewedByCertificateId`); + + if (friendlyName) { + const sanitizedValue = String(friendlyName).replace(new RE2("[%_\\\\]", "g"), "\\$&"); + query = query.andWhere(`${TableName.Certificate}.friendlyName`, "like", `%${sanitizedValue}%`); + } + + if (commonName) { + const sanitizedValue = String(commonName).replace(new RE2("[%_\\\\]", "g"), "\\$&"); + query = query.andWhere(`${TableName.Certificate}.commonName`, "like", `%${sanitizedValue}%`); + } + + const count = await query.count("*").first(); + + return parseInt((count as unknown as CountResult).count || "0", 10); + } catch (error) { + throw new DatabaseError({ error, name: "Count active certificates for sync" }); + } + }; + const findCertificatesEligibleForRenewal = async ({ limit, offset @@ -159,7 +266,7 @@ export const certificateDALFactory = (db: TDbClient) => { }; const findWithPrivateKeyInfo = async ( - filter: Partial, + filter: Partial, options?: { offset?: number; limit?: number; sort?: [string, "asc" | "desc"][] } ): Promise<(TCertificates & { hasPrivateKey: boolean })[]> => { try { @@ -167,8 +274,18 @@ export const certificateDALFactory = (db: TDbClient) => { .replicaNode()(TableName.Certificate) .leftJoin(TableName.CertificateSecret, `${TableName.Certificate}.id`, `${TableName.CertificateSecret}.certId`) .select(selectAllTableCols(TableName.Certificate)) - .select(db.ref(`${TableName.CertificateSecret}.certId`).as("privateKeyRef")) - .where(filter); + .select(db.ref(`${TableName.CertificateSecret}.certId`).as("privateKeyRef")); + + Object.entries(filter).forEach(([key, value]) => { + if (value !== undefined && value !== null) { + if (key === "friendlyName" || key === "commonName") { + const sanitizedValue = String(value).replace(new RE2("[%_\\\\]", "g"), "\\$&"); + query = query.andWhere(`${TableName.Certificate}.${key}`, "like", `%${sanitizedValue}%`); + } else { + query = query.andWhere(`${TableName.Certificate}.${key}`, value); + } + } + }); if (options?.offset) { query = query.offset(options.offset); @@ -197,10 +314,13 @@ export const certificateDALFactory = (db: TDbClient) => { return { ...certificateOrm, countCertificatesInProject, + countActiveCertificatesForSync, countCertificatesForPkiSubscriber, findLatestActiveCertForSubscriber, findAllActiveCertsForSubscriber, findExpiredSyncedCertificates, + findActiveCertificatesByIds, + findActiveCertificatesForSync, findCertificatesEligibleForRenewal, findWithPrivateKeyInfo }; diff --git a/backend/src/services/certificate/certificate-service.ts b/backend/src/services/certificate/certificate-service.ts index 91731c387..eb8006f00 100644 --- a/backend/src/services/certificate/certificate-service.ts +++ b/backend/src/services/certificate/certificate-service.ts @@ -18,12 +18,13 @@ import { TCertificateAuthorityDALFactory } from "@app/services/certificate-autho import { CaCapability, CaType } from "@app/services/certificate-authority/certificate-authority-enums"; import { caSupportsCapability } from "@app/services/certificate-authority/certificate-authority-maps"; import { TCertificateAuthoritySecretDALFactory } from "@app/services/certificate-authority/certificate-authority-secret-dal"; +import { TCertificateSyncDALFactory } from "@app/services/certificate-sync/certificate-sync-dal"; import { TKmsServiceFactory } from "@app/services/kms/kms-service"; import { TPkiCollectionDALFactory } from "@app/services/pki-collection/pki-collection-dal"; import { TPkiCollectionItemDALFactory } from "@app/services/pki-collection/pki-collection-item-dal"; import { TPkiSyncDALFactory } from "@app/services/pki-sync/pki-sync-dal"; import { TPkiSyncQueueFactory } from "@app/services/pki-sync/pki-sync-queue"; -import { triggerAutoSyncForSubscriber } from "@app/services/pki-sync/pki-sync-utils"; +import { triggerAutoSyncForCertificate } from "@app/services/pki-sync/pki-sync-utils"; import { TProjectDALFactory } from "@app/services/project/project-dal"; import { getProjectKmsCertificateKeyId } from "@app/services/project/project-fns"; @@ -57,6 +58,7 @@ type TCertificateServiceFactoryDep = { projectDAL: Pick; kmsService: Pick; permissionService: Pick; + certificateSyncDAL: Pick; pkiSyncDAL: Pick; pkiSyncQueue: Pick; }; @@ -76,6 +78,7 @@ export const certificateServiceFactory = ({ projectDAL, kmsService, permissionService, + certificateSyncDAL, pkiSyncDAL, pkiSyncQueue }: TCertificateServiceFactoryDep) => { @@ -166,10 +169,12 @@ export const certificateServiceFactory = ({ const deletedCert = await certificateDAL.deleteById(cert.id); - // Trigger auto sync for PKI syncs connected to this certificate's subscriber - if (cert.pkiSubscriberId) { - await triggerAutoSyncForSubscriber(cert.pkiSubscriberId, { pkiSyncDAL, pkiSyncQueue }); - } + // Trigger auto sync for PKI syncs connected to this certificate + await triggerAutoSyncForCertificate(cert.id, { + certificateSyncDAL, + pkiSyncDAL, + pkiSyncQueue + }); return { deletedCert @@ -235,10 +240,12 @@ export const certificateServiceFactory = ({ } ); - // Trigger auto sync for PKI syncs connected to this certificate's subscriber - if (cert.pkiSubscriberId) { - await triggerAutoSyncForSubscriber(cert.pkiSubscriberId, { pkiSyncDAL, pkiSyncQueue }); - } + // Trigger auto sync for PKI syncs connected to this certificate + await triggerAutoSyncForCertificate(cert.id, { + certificateSyncDAL, + pkiSyncDAL, + pkiSyncQueue + }); // Note: External CA revocation handling would go here for supported CA types // Currently, only internal CAs and ACME CAs support revocation diff --git a/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-fns.ts b/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-fns.ts index f78bd790e..2f10afbdd 100644 --- a/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-fns.ts +++ b/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-fns.ts @@ -4,6 +4,7 @@ import RE2 from "re2"; import { z } from "zod"; import { BadRequestError, NotFoundError } from "@app/lib/errors"; +import { logger } from "@app/lib/logger"; import { TAppConnectionDALFactory } from "@app/services/app-connection/app-connection-dal"; import { AppConnection, AWSRegion } from "@app/services/app-connection/app-connection-enums"; import { decryptAppConnectionCredentials } from "@app/services/app-connection/app-connection-fns"; @@ -101,7 +102,8 @@ const findInfisicalCertificateTag = (tags: AWS.ACM.TagList | undefined): AWS.ACM const validateCertificateIdentification = ( certName: string, - existingCert: { arn?: string; Tags?: AWS.ACM.TagList; cert?: string; privateKey?: string; certificateChain?: string } + existingCert: { arn?: string; Tags?: AWS.ACM.TagList; cert?: string; privateKey?: string; certificateChain?: string }, + alternativeCertNames?: string[] ): boolean => { if (!existingCert?.arn || !existingCert?.Tags) { return false; @@ -113,12 +115,15 @@ const validateCertificateIdentification = ( return false; } - return certNameTag.Value === certName; -}; + if (certNameTag.Value === certName) { + return true; + } -type TAwsCertificateManagerPkiSyncFactoryDeps = { - appConnectionDAL: Pick; - kmsService: Pick; + if (alternativeCertNames && alternativeCertNames.includes(certNameTag.Value)) { + return true; + } + + return false; }; const validateCertificateNameSchema = (schema: string): void => { @@ -174,6 +179,11 @@ const generateCertificateName = (certificateName: string, pkiSync: TPkiSyncWithC return sanitizedCertificateName; }; +type TAwsCertificateManagerPkiSyncFactoryDeps = { + appConnectionDAL: Pick; + kmsService: Pick; +}; + const getAwsAcmClient = async ( connectionId: string, region: AWSRegion, @@ -392,48 +402,59 @@ export const awsCertificateManagerPkiSyncFactory = ({ kmsService ); - const { acmCertificates } = await $getAwsAcmCertificates(acm, pkiSync.id); + const { + acmCertificates + }: { + acmCertificates: Record< + string, + { cert: string; privateKey: string; certificateChain?: string; arn?: string; Tags?: AWS.ACM.TagList } + >; + } = await $getAwsAcmCertificates(acm, pkiSync.id); const setCertificates: CertificateImportRequest[] = []; + const validationErrors: Array<{ name: string; error: string }> = []; const activeCertificateNames = Object.keys(certificateMap); + const syncOptions = pkiSync.syncOptions as { preserveArn?: boolean } | undefined; + const preserveArn = syncOptions?.preserveArn ?? true; Object.entries(certificateMap).forEach(([certName, certData]) => { - const { cert, privateKey, certificateChain } = certData; - const certificateName = generateCertificateName(certName, pkiSync); - - const existingCert = Object.values(acmCertificates).find((acmCert) => - validateCertificateIdentification(certName, acmCert) - ); - - const shouldUpdateCert = !existingCert || existingCert.cert !== cert; + const { cert, privateKey, certificateChain, alternativeNames } = certData; try { validateCertificateContent(cert, privateKey); } catch (validationError) { - throw new PkiSyncError({ - message: `Certificate validation failed for ${certName}: ${validationError instanceof Error ? validationError.message : String(validationError)}`, - shouldRetry: false, - context: { - certificateName, - certName - } + const errorMessage = validationError instanceof Error ? validationError.message : String(validationError); + validationErrors.push({ + name: certName, + error: `Certificate validation failed: ${errorMessage}` }); + return; } - if (shouldUpdateCert) { - setCertificates.push({ - key: certName, - name: certificateName, - cert, - privateKey, - certificateChain, - existingArn: existingCert?.arn - }); + const certificateName = generateCertificateName(certName, pkiSync); + + let existingArn: string | undefined; + + const existingCert = Object.values(acmCertificates).find((acmCert) => { + return validateCertificateIdentification(certName, acmCert, alternativeNames); + }); + + if (existingCert?.arn && preserveArn) { + // When preserveArn is true, reuse the existing ARN + existingArn = existingCert.arn; } + + setCertificates.push({ + key: certName, + name: certificateName, + cert, + privateKey, + certificateChain, + existingArn + }); }); - // Identify expired/removed certificates that need to be cleaned up from ACM const certificatesToRemove = Object.values(acmCertificates) .filter((acmCert) => { if (!acmCert.arn || !acmCert.Tags) { @@ -445,8 +466,22 @@ export const awsCertificateManagerPkiSyncFactory = ({ return false; } - const isActive = activeCertificateNames.includes(certNameTag.Value); - return !isActive; + const isActive = activeCertificateNames.some((activeCertName) => { + const certData = certificateMap[activeCertName]; + if (!certData) return false; + + return validateCertificateIdentification(activeCertName, acmCert, certData.alternativeNames); + }); + + if (!isActive) { + return true; + } + + if (!preserveArn && isActive) { + return true; + } + + return false; }) .map((acmCert) => acmCert.arn!) .filter((arn) => arn); @@ -457,14 +492,17 @@ export const awsCertificateManagerPkiSyncFactory = ({ try { const importParams: AWS.ACM.ImportCertificateRequest = { Certificate: cert, - PrivateKey: privateKey, - Tags: [ + PrivateKey: privateKey + }; + + if (!existingArn) { + importParams.Tags = [ { Key: INFISICAL_CERTIFICATE_TAG, Value: key } - ] - }; + ]; + } if (certificateChain && certificateChain.trim().length > 0) { importParams.CertificateChain = certificateChain; @@ -478,6 +516,39 @@ export const awsCertificateManagerPkiSyncFactory = ({ syncId: pkiSync.id }); + if (existingArn && response.CertificateArn) { + try { + // Small delay to ensure AWS ACM has processed the certificate import + await new Promise((resolve) => { + setTimeout(() => resolve(), 100); + }); + + await withRateLimitRetry( + () => + acm + .addTagsToCertificate({ + CertificateArn: response.CertificateArn!, + Tags: [ + { + Key: INFISICAL_CERTIFICATE_TAG, + Value: key + } + ] + }) + .promise(), + { + operation: "add-tags-to-certificate", + syncId: pkiSync.id + } + ); + } catch (tagError) { + const errorMessage = tagError instanceof Error ? tagError.message : "Unknown tagging error"; + logger.warn( + `Failed to add tags to certificate ${key} (ARN: ${response.CertificateArn}): ${errorMessage}` + ); + } + } + return { key, name, success: true, response }; } catch (error) { const errorMessage = error instanceof Error ? error.message : "Unknown error"; @@ -520,15 +591,21 @@ export const awsCertificateManagerPkiSyncFactory = ({ const details: { failedUploads?: Array<{ name: string; error: string }>; failedRemovals?: Array<{ name: string; error: string }>; + validationErrors?: Array<{ name: string; error: string }>; } = {}; + if (validationErrors.length > 0) { + details.validationErrors = validationErrors; + } + if (failedUploads.length > 0) { details.failedUploads = failedUploads.map((failure, index) => { - const certificateName = setCertificates[index]?.name || "unknown"; + const certificateRequest = setCertificates[index]; + const certificateName = certificateRequest?.name || certificateRequest?.key || "unknown"; let errorMessage = "Unknown error"; if (failure.status === "rejected") { - errorMessage = failure.reason instanceof Error ? failure.reason.message : "Unknown error"; + errorMessage = failure.reason instanceof Error ? failure.reason.message : String(failure.reason); } return { @@ -577,7 +654,14 @@ export const awsCertificateManagerPkiSyncFactory = ({ kmsService ); - const { acmCertificates } = await $getAwsAcmCertificates(acm, pkiSync.id); + const { + acmCertificates + }: { + acmCertificates: Record< + string, + { cert: string; privateKey: string; certificateChain?: string; arn?: string; Tags?: AWS.ACM.TagList } + >; + } = await $getAwsAcmCertificates(acm, pkiSync.id); const certificateArnsToRemove: string[] = []; diff --git a/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-schemas.ts b/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-schemas.ts index eb9ae5444..3b9f5c881 100644 --- a/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-schemas.ts +++ b/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-schemas.ts @@ -14,6 +14,7 @@ export const AwsCertificateManagerPkiSyncConfigSchema = z.object({ const AwsCertificateManagerPkiSyncOptionsSchema = z.object({ canImportCertificates: z.boolean().default(false), canRemoveCertificates: z.boolean().default(true), + preserveArn: z.boolean().default(true), certificateNameSchema: z .string() .optional() @@ -28,6 +29,9 @@ const AwsCertificateManagerPkiSyncOptionsSchema = z.object({ const testName = schema .replace(new RE2("\\{\\{certificateId\\}\\}", "g"), "test-cert-id") + .replace(new RE2("\\{\\{profileId\\}\\}", "g"), "test-profile-id") + .replace(new RE2("\\{\\{commonName\\}\\}", "g"), "test-common-name") + .replace(new RE2("\\{\\{friendlyName\\}\\}", "g"), "test-friendly-name") .replace(new RE2("\\{\\{environment\\}\\}", "g"), "test-env"); const hasForbiddenChars = AWS_CERTIFICATE_MANAGER_CERTIFICATE_NAMING.FORBIDDEN_CHARACTERS.split("").some( @@ -43,7 +47,7 @@ const AwsCertificateManagerPkiSyncOptionsSchema = z.object({ }, { message: - "Certificate name schema must include {{certificateId}} placeholder and result in names that contain only alphanumeric characters, spaces, hyphens, and underscores and be 1-256 characters long when compiled for AWS Certificate Manager" + "Certificate name schema must include {{certificateId}} placeholder and result in names that contain only alphanumeric characters, spaces, hyphens, and underscores and be 1-256 characters long when compiled for AWS Certificate Manager. Available placeholders: {{certificateId}}, {{profileId}}, {{commonName}}, {{friendlyName}}, {{environment}}" } ) }); @@ -60,9 +64,10 @@ export const CreateAwsCertificateManagerPkiSyncSchema = z.object({ isAutoSyncEnabled: z.boolean().default(true), destinationConfig: AwsCertificateManagerPkiSyncConfigSchema, syncOptions: AwsCertificateManagerPkiSyncOptionsSchema.optional().default({}), - subscriberId: z.string().optional(), + subscriberId: z.string().nullish(), connectionId: z.string(), - projectId: z.string().trim().min(1) + projectId: z.string().trim().min(1), + certificateIds: z.array(z.string().uuid()).optional() }); export const UpdateAwsCertificateManagerPkiSyncSchema = z.object({ @@ -71,7 +76,7 @@ export const UpdateAwsCertificateManagerPkiSyncSchema = z.object({ isAutoSyncEnabled: z.boolean().optional(), destinationConfig: AwsCertificateManagerPkiSyncConfigSchema.optional(), syncOptions: AwsCertificateManagerPkiSyncOptionsSchema.optional(), - subscriberId: z.string().optional(), + subscriberId: z.string().nullish(), connectionId: z.string().optional() }); diff --git a/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-types.ts b/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-types.ts index 717e86438..c9770c5b2 100644 --- a/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-types.ts +++ b/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-types.ts @@ -39,6 +39,7 @@ export interface SyncCertificatesResult { details?: { failedUploads?: Array<{ name: string; error: string }>; failedRemovals?: Array<{ name: string; error: string }>; + validationErrors?: Array<{ name: string; error: string }>; }; } diff --git a/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-schemas.ts b/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-schemas.ts index ef6347e82..4aac20cc0 100644 --- a/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-schemas.ts +++ b/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-schemas.ts @@ -52,7 +52,8 @@ export const CreateAzureKeyVaultPkiSyncSchema = z.object({ syncOptions: AzureKeyVaultPkiSyncOptionsSchema.optional().default({}), subscriberId: z.string().optional(), connectionId: z.string(), - projectId: z.string().trim().min(1) + projectId: z.string().trim().min(1), + certificateIds: z.array(z.string().uuid()).optional() }); export const UpdateAzureKeyVaultPkiSyncSchema = z.object({ diff --git a/backend/src/services/pki-sync/pki-sync-fns.ts b/backend/src/services/pki-sync/pki-sync-fns.ts index 75f312fff..7fbcd0773 100644 --- a/backend/src/services/pki-sync/pki-sync-fns.ts +++ b/backend/src/services/pki-sync/pki-sync-fns.ts @@ -194,6 +194,7 @@ export const PkiSyncFns = { failedUploads?: Array<{ name: string; error: string }>; failedRemovals?: Array<{ name: string; error: string }>; skippedCertificates?: Array<{ name: string; reason: string }>; + validationErrors?: Array<{ name: string; error: string }>; }; }> => { switch (pkiSync.destination) { diff --git a/backend/src/services/pki-sync/pki-sync-queue.ts b/backend/src/services/pki-sync/pki-sync-queue.ts index 5967a6c97..5889e2210 100644 --- a/backend/src/services/pki-sync/pki-sync-queue.ts +++ b/backend/src/services/pki-sync/pki-sync-queue.ts @@ -5,6 +5,7 @@ import { AxiosError } from "axios"; import { Job } from "bullmq"; import handlebars from "handlebars"; +import { TCertificates } from "@app/db/schemas"; import { EventType, TAuditLogServiceFactory } from "@app/ee/services/audit-log/audit-log-types"; import { TLicenseServiceFactory } from "@app/ee/services/license/license-service"; import { KeyStorePrefixes, TKeyStoreFactory } from "@app/keystore/keystore"; @@ -25,6 +26,7 @@ import { TCertificateSecretDALFactory } from "../certificate/certificate-secret- import { TCertificateAuthorityCertDALFactory } from "../certificate-authority/certificate-authority-cert-dal"; import { TCertificateAuthorityDALFactory } from "../certificate-authority/certificate-authority-dal"; import { getCaCertChain } from "../certificate-authority/certificate-authority-fns"; +import { TCertificateSyncDALFactory } from "../certificate-sync/certificate-sync-dal"; import { TPkiSyncDALFactory } from "./pki-sync-dal"; import { PkiSyncStatus } from "./pki-sync-enums"; import { PkiSyncError } from "./pki-sync-errors"; @@ -57,12 +59,21 @@ type TPkiSyncQueueFactoryDep = { licenseService: Pick; certificateDAL: Pick< TCertificateDALFactory, - "findLatestActiveCertForSubscriber" | "findAllActiveCertsForSubscriber" | "create" + | "findLatestActiveCertForSubscriber" + | "findAllActiveCertsForSubscriber" + | "findActiveCertificatesByIds" + | "create" + | "findById" + | "find" >; certificateBodyDAL: Pick; certificateSecretDAL: Pick; certificateAuthorityDAL: Pick; certificateAuthorityCertDAL: Pick; + certificateSyncDAL: Pick< + TCertificateSyncDALFactory, + "findCertificateIdsByPkiSyncId" | "updateSyncStatus" | "bulkUpdateSyncStatus" + >; }; type PkiSyncActionJob = Job< @@ -93,7 +104,8 @@ export const pkiSyncQueueFactory = ({ certificateBodyDAL, certificateSecretDAL, certificateAuthorityDAL, - certificateAuthorityCertDAL + certificateAuthorityCertDAL, + certificateSyncDAL }: TPkiSyncQueueFactoryDep) => { const appCfg = getConfig(); @@ -153,25 +165,39 @@ export const pkiSyncQueueFactory = ({ const $getInfisicalCertificates = async ( pkiSync: TPkiSyncRaw | TPkiSyncWithCredentials - ): Promise => { - const { projectId, subscriberId } = pkiSync; - - if (!subscriberId) { - throw new PkiSyncError({ - message: "Invalid PKI Sync source configuration: subscriber no longer exists. Please update source subscriber.", - shouldRetry: false - }); - } + ): Promise<{ certificateMap: TCertificateMap; certificateMetadata: Map }> => { + const { projectId, subscriberId, id: pkiSyncId } = pkiSync; const certificateMap: TCertificateMap = {}; + const certificateMetadata = new Map(); + let certificates: Array<{ id: string; projectId: string; caCertId?: string | null }> = []; try { - // Get all active certificates for the subscriber (not just the latest) - const certificates = await certificateDAL.findAllActiveCertsForSubscriber({ - subscriberId - }); + if (subscriberId) { + const subscriberCertificates = await certificateDAL.findAllActiveCertsForSubscriber({ + subscriberId + }); + certificates.push(...subscriberCertificates); + } + + const certificateIds = await certificateSyncDAL.findCertificateIdsByPkiSyncId(pkiSyncId); + if (certificateIds.length > 0) { + const directCertificates = await certificateDAL.findActiveCertificatesByIds(certificateIds); + certificates.push(...directCertificates); + } + + const uniqueCertificates = certificates.filter( + (cert, index, self) => self.findIndex((c) => c.id === cert.id) === index + ); + + if (uniqueCertificates.length === 0) { + return { certificateMap, certificateMetadata }; + } + + certificates = uniqueCertificates; for (const certificate of certificates) { + const cert = certificate as TCertificates; try { // Get the certificate body and decrypt the certificate data const certBody = await certificateBodyDAL.findOne({ certId: certificate.id }); @@ -246,19 +272,44 @@ export const pkiSyncQueueFactory = ({ if (certificateNameSchema) { const environment = "global"; - certificateName = handlebars.compile(certificateNameSchema)({ + const templateData = { certificateId: certificate.id.replace(/-/g, ""), + profileId: cert.profileId?.replace(/-/g, "") || certificate.id.replace(/-/g, ""), + commonName: cert.commonName || "", + friendlyName: cert.friendlyName || "", environment - }); + }; + certificateName = handlebars.compile(certificateNameSchema)(templateData); } else { - certificateName = `Infisical-${certificate.id.replace(/-/g, "")}`; + const stableId = cert.profileId + ? `${cert.profileId.replace(/-/g, "")}-${(cert.commonName || "").replace(/[^a-zA-Z0-9]/g, "")}` + : certificate.id.replace(/-/g, ""); + certificateName = `Infisical-${stableId}`; + } + + const alternativeNames: string[] = []; + + const legacyName = `Infisical-${certificate.id.replace(/-/g, "")}`; + if (legacyName !== certificateName) { + alternativeNames.push(legacyName); + } + + if (cert.renewedFromCertificateId) { + const originalLegacyName = `Infisical-${cert.renewedFromCertificateId.replace(/-/g, "")}`; + alternativeNames.push(originalLegacyName); } certificateMap[certificateName] = { cert: certificatePem, privateKey: certPrivateKey || "", - certificateChain + certificateChain, + alternativeNames }; + + certificateMetadata.set(certificateName, { + id: certificate.id, + name: certificateName + }); } else { logger.warn({ certificateId: certificate.id, subscriberId }, "Certificate body not found for certificate"); } @@ -281,7 +332,7 @@ export const pkiSyncQueueFactory = ({ }); } - return certificateMap; + return { certificateMap, certificateMetadata }; }; const queuePkiSyncSyncCertificatesById = async (payload: TQueuePkiSyncSyncCertificatesByIdDTO) => @@ -348,12 +399,17 @@ export const pkiSyncQueueFactory = ({ try { const { - connection: { orgId, encryptedCredentials, projectId: appConnectionProjectId } + connection: { id: connectionId, orgId, projectId: appConnectionProjectId } } = pkiSync; + const appConnection = await appConnectionDAL.findById(connectionId); + if (!appConnection) { + throw new Error(`App connection not found: ${connectionId}`); + } + const credentials = await decryptAppConnectionCredentials({ orgId, - encryptedCredentials, + encryptedCredentials: appConnection.encryptedCredentials, kmsService, projectId: appConnectionProjectId }); @@ -366,7 +422,18 @@ export const pkiSyncQueueFactory = ({ } } as TPkiSyncWithCredentials; - const certificateMap = await $getInfisicalCertificates(pkiSync); + const { certificateMap, certificateMetadata } = await $getInfisicalCertificates(pkiSync); + + const statusUpdates = Array.from(certificateMetadata.entries()).map(([, metadata]) => ({ + pkiSyncId: pkiSync.id, + certificateId: metadata.id, + status: "running", + message: "Syncing certificate to destination" + })); + + if (statusUpdates.length > 0) { + await certificateSyncDAL.bulkUpdateSyncStatus(statusUpdates); + } const syncResult = await PkiSyncFns.syncCertificates(pkiSyncWithCredentials, certificateMap, { appConnectionDAL, @@ -384,6 +451,60 @@ export const pkiSyncQueueFactory = ({ "PKI sync operation completed with certificate cleanup" ); + const postSyncUpdates: Array<{ + pkiSyncId: string; + certificateId: string; + status: string; + message?: string; + }> = []; + + for (const [, metadata] of certificateMetadata.entries()) { + postSyncUpdates.push({ + pkiSyncId: pkiSync.id, + certificateId: metadata.id, + status: "succeeded", + message: "Certificate successfully synced to destination" + }); + } + + if (syncResult.details?.validationErrors) { + for (const validationError of syncResult.details.validationErrors) { + const metadata = certificateMetadata.get(validationError.name); + if (metadata) { + const updateIndex = postSyncUpdates.findIndex((u) => u.certificateId === metadata.id); + if (updateIndex >= 0) { + postSyncUpdates[updateIndex] = { + pkiSyncId: pkiSync.id, + certificateId: metadata.id, + status: "failed", + message: `${validationError.error}` + }; + } + } + } + } + + if (syncResult.details?.failedUploads) { + for (const failure of syncResult.details.failedUploads) { + const metadata = certificateMetadata.get(failure.name); + if (metadata) { + const updateIndex = postSyncUpdates.findIndex((u) => u.certificateId === metadata.id); + if (updateIndex >= 0) { + postSyncUpdates[updateIndex] = { + pkiSyncId: pkiSync.id, + certificateId: metadata.id, + status: "failed", + message: `Failed to sync certificate: ${failure.error}` + }; + } + } + } + } + + if (postSyncUpdates.length > 0) { + await certificateSyncDAL.bulkUpdateSyncStatus(postSyncUpdates); + } + isSynced = true; } catch (err) { logger.error( @@ -550,17 +671,22 @@ export const pkiSyncQueueFactory = ({ try { const { - connection: { orgId, encryptedCredentials, projectId: appConnectionProjectId } + connection: { id: connectionId, orgId, projectId: appConnectionProjectId } } = pkiSync; + const appConnection = await appConnectionDAL.findById(connectionId); + if (!appConnection) { + throw new Error(`App connection not found: ${connectionId}`); + } + const credentials = await decryptAppConnectionCredentials({ orgId, - encryptedCredentials, + encryptedCredentials: appConnection.encryptedCredentials, kmsService, projectId: appConnectionProjectId }); - const certificateMap = await $getInfisicalCertificates(pkiSync); + const { certificateMap } = await $getInfisicalCertificates(pkiSync); await PkiSyncFns.removeCertificates( { diff --git a/backend/src/services/pki-sync/pki-sync-service.ts b/backend/src/services/pki-sync/pki-sync-service.ts index f92c9e19f..a04d27580 100644 --- a/backend/src/services/pki-sync/pki-sync-service.ts +++ b/backend/src/services/pki-sync/pki-sync-service.ts @@ -10,17 +10,23 @@ import { AppConnection } from "@app/services/app-connection/app-connection-enums import { TAppConnectionServiceFactory } from "@app/services/app-connection/app-connection-service"; import { TPkiSubscriberDALFactory } from "@app/services/pki-subscriber/pki-subscriber-dal"; +import { TCertificateSyncDALFactory } from "../certificate-sync/certificate-sync-dal"; +import { CertificateSyncStatus } from "../certificate-sync/certificate-sync-enums"; import { TPkiSyncDALFactory } from "./pki-sync-dal"; import { PkiSync, PkiSyncStatus } from "./pki-sync-enums"; import { enterprisePkiSyncCheck, getPkiSyncProviderCapabilities, listPkiSyncOptions } from "./pki-sync-fns"; import { PKI_SYNC_CONNECTION_MAP, PKI_SYNC_NAME_MAP } from "./pki-sync-maps"; import { TPkiSyncQueueFactory } from "./pki-sync-queue"; import { + TAddCertificatesToPkiSyncDTO, TCreatePkiSyncDTO, TDeletePkiSyncDTO, TFindPkiSyncByIdDTO, + TListPkiSyncCertificatesDTO, TListPkiSyncsByProjectId, TPkiSync, + TPkiSyncCertificate, + TRemoveCertificatesFromPkiSyncDTO, TTriggerPkiSyncImportCertificatesByIdDTO, TTriggerPkiSyncRemoveCertificatesByIdDTO, TTriggerPkiSyncSyncCertificatesByIdDTO, @@ -42,6 +48,16 @@ type TPkiSyncServiceFactoryDep = { TPkiSyncDALFactory, "findById" | "findByProjectIdWithSubscribers" | "findByNameAndProjectId" | "create" | "updateById" | "deleteById" >; + certificateSyncDAL: Pick< + TCertificateSyncDALFactory, + | "findByPkiSyncId" + | "findByCertificateId" + | "findCertificateIdsByPkiSyncId" + | "addCertificates" + | "removeCertificates" + | "removeAllCertificatesFromSync" + | "findWithDetails" + >; pkiSubscriberDAL: Pick; appConnectionService: Pick; permissionService: Pick; @@ -56,6 +72,7 @@ export type TPkiSyncServiceFactory = ReturnType; export const pkiSyncServiceFactory = ({ pkiSyncDAL, + certificateSyncDAL, pkiSubscriberDAL, appConnectionService, permissionService, @@ -72,7 +89,8 @@ export const pkiSyncServiceFactory = ({ syncOptions = {}, subscriberId, connectionId, - projectId + projectId, + certificateIds = [] }: Omit, actor: OrgServiceActor ): Promise => { @@ -128,6 +146,10 @@ export const pkiSyncServiceFactory = ({ ...(isAutoSyncEnabled && { syncStatus: PkiSyncStatus.Pending }) }); + if (certificateIds.length > 0) { + await certificateSyncDAL.addCertificates(pkiSync.id, certificateIds); + } + if (pkiSync.isAutoSyncEnabled) { await pkiSyncQueue.queuePkiSyncSyncCertificatesById({ syncId: pkiSync.id }); } @@ -152,7 +174,8 @@ export const pkiSyncServiceFactory = ({ destinationConfig, syncOptions, subscriberId, - connectionId + connectionId, + certificateIds }: Omit, actor: OrgServiceActor ): Promise => { @@ -221,6 +244,13 @@ export const pkiSyncServiceFactory = ({ }; } + if (certificateIds !== undefined) { + await certificateSyncDAL.removeAllCertificatesFromSync(id); + if (certificateIds.length > 0) { + await certificateSyncDAL.addCertificates(id, certificateIds); + } + } + const updatedPkiSync = await pkiSyncDAL.updateById(id, { name, description, @@ -266,7 +296,7 @@ export const pkiSyncServiceFactory = ({ }; const listPkiSyncsByProjectId = async ( - { projectId }: TListPkiSyncsByProjectId, + { projectId, certificateId }: TListPkiSyncsByProjectId, actor: OrgServiceActor ): Promise => { const { permission } = await permissionService.getProjectPermission({ @@ -282,6 +312,29 @@ export const pkiSyncServiceFactory = ({ const pkiSyncsWithSubscribers = await pkiSyncDAL.findByProjectIdWithSubscribers(projectId); + if (certificateId) { + const syncsWithCertificateInfo = await Promise.all( + pkiSyncsWithSubscribers.map(async (sync) => { + try { + const certificateSyncs = await certificateSyncDAL.findByPkiSyncId(sync.id); + const hasCertificate = certificateSyncs.some((certSync) => certSync.certificateId === certificateId); + + return { + ...sync, + hasCertificate + }; + } catch (error) { + return { + ...sync, + hasCertificate: false + }; + } + }) + ); + + return syncsWithCertificateInfo as TPkiSync[]; + } + return pkiSyncsWithSubscribers as TPkiSync[]; }; @@ -433,6 +486,136 @@ export const pkiSyncServiceFactory = ({ return listPkiSyncOptions(); }; + const addCertificatesToPkiSync = async ( + { pkiSyncId, certificateIds }: Omit, + actor: OrgServiceActor + ) => { + const pkiSync = await pkiSyncDAL.findById(pkiSyncId); + if (!pkiSync) throw new NotFoundError({ message: "PKI sync not found" }); + + const { permission } = await permissionService.getProjectPermission({ + actor: actor.type, + actorId: actor.id, + actorAuthMethod: actor.authMethod, + actorOrgId: actor.orgId, + actionProjectType: ActionProjectType.CertificateManager, + projectId: pkiSync.projectId + }); + + let subscriber; + if (pkiSync.subscriberId) { + subscriber = await pkiSubscriberDAL.findById(pkiSync.subscriberId); + } + + ForbiddenError.from(permission).throwUnlessCan( + ProjectPermissionPkiSyncActions.Edit, + subscriber + ? subject(ProjectPermissionSub.PkiSyncs, { subscriberName: subscriber.name }) + : ProjectPermissionSub.PkiSyncs + ); + + const addedCertificates = await certificateSyncDAL.addCertificates(pkiSyncId, certificateIds); + + if (pkiSync.isAutoSyncEnabled) { + await pkiSyncQueue.queuePkiSyncSyncCertificatesById({ syncId: pkiSyncId }); + } + + return addedCertificates; + }; + + const removeCertificatesFromPkiSync = async ( + { pkiSyncId, certificateIds }: Omit, + actor: OrgServiceActor + ) => { + const pkiSync = await pkiSyncDAL.findById(pkiSyncId); + if (!pkiSync) throw new NotFoundError({ message: "PKI sync not found" }); + + const { permission } = await permissionService.getProjectPermission({ + actor: actor.type, + actorId: actor.id, + actorAuthMethod: actor.authMethod, + actorOrgId: actor.orgId, + actionProjectType: ActionProjectType.CertificateManager, + projectId: pkiSync.projectId + }); + + let subscriber; + if (pkiSync.subscriberId) { + subscriber = await pkiSubscriberDAL.findById(pkiSync.subscriberId); + } + + ForbiddenError.from(permission).throwUnlessCan( + ProjectPermissionPkiSyncActions.Edit, + subscriber + ? subject(ProjectPermissionSub.PkiSyncs, { subscriberName: subscriber.name }) + : ProjectPermissionSub.PkiSyncs + ); + + const removedCount = await certificateSyncDAL.removeCertificates(pkiSyncId, certificateIds); + + if (pkiSync.isAutoSyncEnabled) { + await pkiSyncQueue.queuePkiSyncSyncCertificatesById({ syncId: pkiSyncId }); + } + + return { removedCount }; + }; + + const listPkiSyncCertificates = async ( + { pkiSyncId, offset = 0, limit = 20 }: Omit, + actor: OrgServiceActor + ): Promise<{ certificates: TPkiSyncCertificate[]; totalCount: number }> => { + const pkiSync = await pkiSyncDAL.findById(pkiSyncId); + if (!pkiSync) throw new NotFoundError({ message: "PKI sync not found" }); + + const { permission } = await permissionService.getProjectPermission({ + actor: actor.type, + actorId: actor.id, + actorAuthMethod: actor.authMethod, + actorOrgId: actor.orgId, + actionProjectType: ActionProjectType.CertificateManager, + projectId: pkiSync.projectId + }); + + let subscriber; + if (pkiSync.subscriberId) { + subscriber = await pkiSubscriberDAL.findById(pkiSync.subscriberId); + } + + ForbiddenError.from(permission).throwUnlessCan( + ProjectPermissionPkiSyncActions.Read, + subscriber + ? subject(ProjectPermissionSub.PkiSyncs, { subscriberName: subscriber.name }) + : ProjectPermissionSub.PkiSyncs + ); + + const result = await certificateSyncDAL.findWithDetails({ + pkiSyncId, + offset, + limit + }); + const { certificateDetails, totalCount } = result; + + const certificates = certificateDetails.map((detail) => ({ + id: detail.id, + pkiSyncId: detail.pkiSyncId, + certificateId: detail.certificateId, + syncStatus: (detail.syncStatus as CertificateSyncStatus) || CertificateSyncStatus.Pending, + lastSyncMessage: detail.lastSyncMessage || undefined, + lastSyncedAt: detail.lastSyncedAt || undefined, + createdAt: detail.createdAt, + updatedAt: detail.updatedAt, + certificateSerialNumber: detail.certificateSerialNumber || undefined, + certificateCommonName: detail.certificateCommonName || undefined, + certificateStatus: detail.certificateStatus || undefined, + certificateNotBefore: detail.certificateNotBefore || undefined, + certificateNotAfter: detail.certificateNotAfter || undefined, + pkiSyncName: detail.pkiSyncName || undefined, + pkiSyncDestination: detail.pkiSyncDestination || undefined + })); + + return { certificates, totalCount }; + }; + return { createPkiSync, updatePkiSync, @@ -442,6 +625,9 @@ export const pkiSyncServiceFactory = ({ triggerPkiSyncSyncCertificatesById, triggerPkiSyncImportCertificatesById, triggerPkiSyncRemoveCertificatesById, - getPkiSyncOptions + getPkiSyncOptions, + addCertificatesToPkiSync, + removeCertificatesFromPkiSync, + listPkiSyncCertificates }; }; diff --git a/backend/src/services/pki-sync/pki-sync-types.ts b/backend/src/services/pki-sync/pki-sync-types.ts index bf750beee..e51facc8e 100644 --- a/backend/src/services/pki-sync/pki-sync-types.ts +++ b/backend/src/services/pki-sync/pki-sync-types.ts @@ -2,6 +2,7 @@ import { Job } from "bullmq"; import { AuditLogInfo } from "@app/ee/services/audit-log/audit-log-types"; import { QueueJobs } from "@app/queue"; +import { CertificateSyncStatus } from "@app/services/certificate-sync/certificate-sync-enums"; import { ResourceMetadataDTO } from "@app/services/resource-metadata/resource-metadata-schema"; import { TPkiSyncDALFactory } from "./pki-sync-dal"; @@ -70,7 +71,10 @@ export type TPkiSyncListItem = TPkiSync & { appConnectionApp: string; }; -export type TCertificateMap = Record; +export type TCertificateMap = Record< + string, + { cert: string; privateKey: string; certificateChain?: string; alternativeNames?: string[] } +>; export type TCreatePkiSyncDTO = { name: string; @@ -79,9 +83,10 @@ export type TCreatePkiSyncDTO = { isAutoSyncEnabled?: boolean; destinationConfig: Record; syncOptions?: Record; - subscriberId?: string; + subscriberId?: string | null; connectionId: string; projectId: string; + certificateIds?: string[]; auditLogInfo: AuditLogInfo; resourceMetadata?: ResourceMetadataDTO; }; @@ -94,8 +99,9 @@ export type TUpdatePkiSyncDTO = { isAutoSyncEnabled?: boolean; destinationConfig?: Record; syncOptions?: Record; - subscriberId?: string; + subscriberId?: string | null; connectionId?: string; + certificateIds?: string[]; auditLogInfo: AuditLogInfo; resourceMetadata?: ResourceMetadataDTO; }; @@ -108,6 +114,7 @@ export type TDeletePkiSyncDTO = { export type TListPkiSyncsByProjectId = { projectId: string; + certificateId?: string; }; export type TFindPkiSyncByIdDTO = { @@ -133,6 +140,45 @@ export type TTriggerPkiSyncRemoveCertificatesByIdDTO = { auditLogInfo: AuditLogInfo; }; +export type TAddCertificatesToPkiSyncDTO = { + pkiSyncId: string; + certificateIds: string[]; + projectId?: string; + auditLogInfo: AuditLogInfo; +}; + +export type TRemoveCertificatesFromPkiSyncDTO = { + pkiSyncId: string; + certificateIds: string[]; + projectId?: string; + auditLogInfo: AuditLogInfo; +}; + +export type TListPkiSyncCertificatesDTO = { + pkiSyncId: string; + projectId?: string; + offset?: number; + limit?: number; +}; + +export type TPkiSyncCertificate = { + id: string; + pkiSyncId: string; + certificateId: string; + syncStatus: CertificateSyncStatus; + lastSyncMessage?: string; + lastSyncedAt?: Date; + createdAt: Date; + updatedAt: Date; + certificate?: { + serialNumber: string; + commonName: string; + status: string; + notBefore: Date; + notAfter: Date; + }; +}; + export type TPkiSyncRaw = NonNullable>>; export type TQueuePkiSyncSyncCertificatesByIdDTO = { diff --git a/backend/src/services/pki-sync/pki-sync-utils.ts b/backend/src/services/pki-sync/pki-sync-utils.ts index a81864a17..3a62c1d21 100644 --- a/backend/src/services/pki-sync/pki-sync-utils.ts +++ b/backend/src/services/pki-sync/pki-sync-utils.ts @@ -1,5 +1,8 @@ +import { Knex } from "knex"; + import { logger } from "@app/lib/logger"; +import { TCertificateSyncDALFactory } from "../certificate-sync/certificate-sync-dal"; import { TPkiSyncDALFactory } from "./pki-sync-dal"; import { TPkiSyncQueueFactory } from "./pki-sync-queue"; @@ -25,3 +28,67 @@ export const triggerAutoSyncForSubscriber = async ( logger.error(error, `Failed to trigger auto sync for subscriber ${subscriberId}:`); } }; + +export const triggerAutoSyncForCertificate = async ( + certificateId: string, + dependencies: { + certificateSyncDAL: Pick; + pkiSyncDAL: Pick; + pkiSyncQueue: Pick; + } +) => { + try { + const pkiSyncIds = await dependencies.certificateSyncDAL.findPkiSyncIdsByCertificateId(certificateId); + + if (pkiSyncIds.length === 0) { + return; + } + + const allPkiSyncs = await dependencies.pkiSyncDAL.find({ + isAutoSyncEnabled: true + }); + + const pkiSyncs = allPkiSyncs.filter((sync) => pkiSyncIds.includes(sync.id)); + + const syncPromises = pkiSyncs.map((pkiSync) => + dependencies.pkiSyncQueue.queuePkiSyncSyncCertificatesById({ syncId: pkiSync.id }) + ); + await Promise.all(syncPromises); + } catch (error) { + logger.error(error, `Failed to trigger auto sync for certificate ${certificateId}:`); + } +}; + +export const replaceCertificateInSyncs = async ( + oldCertificateId: string, + newCertificateId: string, + dependencies: { + certificateSyncDAL: Pick< + TCertificateSyncDALFactory, + "findPkiSyncIdsByCertificateId" | "removeCertificates" | "addCertificates" + >; + }, + tx?: Knex +) => { + try { + const pkiSyncIds = await dependencies.certificateSyncDAL.findPkiSyncIdsByCertificateId(oldCertificateId); + + if (pkiSyncIds.length === 0) { + return; + } + + const replacementPromises = pkiSyncIds.map(async (pkiSyncId) => { + await dependencies.certificateSyncDAL.removeCertificates(pkiSyncId, [oldCertificateId], tx); + await dependencies.certificateSyncDAL.addCertificates(pkiSyncId, [newCertificateId], tx); + }); + + await Promise.all(replacementPromises); + + logger.info( + `Successfully replaced certificate ${oldCertificateId} with ${newCertificateId} in ${pkiSyncIds.length} PKI sync(s)` + ); + } catch (error) { + logger.error(error, `Failed to replace certificate ${oldCertificateId} with ${newCertificateId} in syncs:`); + throw error; + } +}; diff --git a/backend/src/services/project/project-service.ts b/backend/src/services/project/project-service.ts index 05b007a6a..39538de2e 100644 --- a/backend/src/services/project/project-service.ts +++ b/backend/src/services/project/project-service.ts @@ -154,7 +154,14 @@ type TProjectServiceFactoryDep = { >; pkiSubscriberDAL: Pick; certificateAuthorityDAL: Pick; - certificateDAL: Pick; + certificateDAL: Pick< + TCertificateDALFactory, + | "find" + | "countCertificatesInProject" + | "findWithPrivateKeyInfo" + | "findActiveCertificatesForSync" + | "countActiveCertificatesForSync" + >; certificateTemplateDAL: Pick; pkiAlertDAL: Pick; pkiCollectionDAL: Pick; @@ -915,6 +922,7 @@ export const projectServiceFactory = ({ offset = 0, friendlyName, commonName, + forPkiSync = false, actorId, actorOrgId, actorAuthMethod, @@ -938,20 +946,35 @@ export const projectServiceFactory = ({ ProjectPermissionSub.Certificates ); - const certificates = await certificateDAL.findWithPrivateKeyInfo( - { - projectId, - ...(friendlyName && { friendlyName }), - ...(commonName && { commonName }) - }, - { offset, limit, sort: [["notAfter", "desc"]] } - ); + const certificates = forPkiSync + ? await certificateDAL.findActiveCertificatesForSync( + { + projectId, + ...(friendlyName && { friendlyName }), + ...(commonName && { commonName }) + }, + { offset, limit } + ) + : await certificateDAL.findWithPrivateKeyInfo( + { + projectId, + ...(friendlyName && { friendlyName }), + ...(commonName && { commonName }) + }, + { offset, limit, sort: [["notAfter", "desc"]] } + ); - const count = await certificateDAL.countCertificatesInProject({ - projectId, - friendlyName, - commonName - }); + const count = forPkiSync + ? await certificateDAL.countActiveCertificatesForSync({ + projectId, + friendlyName, + commonName + }) + : await certificateDAL.countCertificatesInProject({ + projectId, + friendlyName, + commonName + }); return { certificates, diff --git a/backend/src/services/project/project-types.ts b/backend/src/services/project/project-types.ts index 18ae74350..2b75b1bc7 100644 --- a/backend/src/services/project/project-types.ts +++ b/backend/src/services/project/project-types.ts @@ -142,6 +142,7 @@ export type TListProjectCertsDTO = { limit: number; friendlyName?: string; commonName?: string; + forPkiSync?: boolean; } & Omit; export type TListProjectAlertsDTO = TProjectPermission; diff --git a/frontend/src/components/pki-syncs/CertificateManagementModal.tsx b/frontend/src/components/pki-syncs/CertificateManagementModal.tsx new file mode 100644 index 000000000..fa199cb3a --- /dev/null +++ b/frontend/src/components/pki-syncs/CertificateManagementModal.tsx @@ -0,0 +1,434 @@ +import React, { useEffect, useState } from "react"; +import { faSearch, faX } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; + +import { createNotification } from "@app/components/notifications"; +import { + Badge, + Button, + Checkbox, + EmptyState, + Input, + Modal, + ModalContent, + Pagination, + Table, + TableContainer, + TBody, + Td, + Th, + THead, + Tr +} from "@app/components/v2"; +import { useProject } from "@app/context"; +import { + CertStatus, + useAddCertificatesToPkiSync, + useListPkiSyncCertificates, + useRemoveCertificatesFromPkiSync +} from "@app/hooks/api"; +import { TPkiSync } from "@app/hooks/api/pkiSyncs"; +import { useListWorkspaceCertificates } from "@app/hooks/api/projects"; + +type Props = { + isOpen: boolean; + onClose: () => void; + pkiSync?: TPkiSync; + onCertificatesUpdated?: () => void; + selectedCertificateIds?: string[]; + onCertificateSelectionChange?: (certificateIds: string[]) => void; + title?: string; + subtitle?: string; + saveButtonText?: string; +}; + +export const CertificateManagementModal = ({ + isOpen, + onClose, + pkiSync, + onCertificatesUpdated, + selectedCertificateIds, + onCertificateSelectionChange, + title = "Manage Certificate Sync", + subtitle = "Select which certificates should be synced.", + saveButtonText = "Save Changes" +}: Props) => { + const { currentProject } = useProject(); + const [currentPage, setCurrentPage] = useState(1); + const [searchTerm, setSearchTerm] = useState(""); + const [debouncedSearchTerm, setDebouncedSearchTerm] = useState(""); + const pageSize = 10; + + const isCreateMode = !pkiSync; + + useEffect(() => { + const handler = setTimeout(() => { + setDebouncedSearchTerm(searchTerm); + setCurrentPage(1); + }, 300); + + return () => { + clearTimeout(handler); + }; + }, [searchTerm]); + + const { data } = useListWorkspaceCertificates({ + projectId: currentProject?.id || "", + offset: (currentPage - 1) * pageSize, + limit: pageSize, + commonName: debouncedSearchTerm || undefined, + friendlyName: debouncedSearchTerm || undefined, + forPkiSync: true + }); + + const allCertificates = data?.certificates || []; + const totalCount = data?.totalCount || 0; + + const { data: syncData } = useListPkiSyncCertificates(pkiSync?.id || ""); + const syncCertificates = syncData?.certificates || []; + const addCertificatesToSync = useAddCertificatesToPkiSync(); + const removeCertificatesFromSync = useRemoveCertificatesFromPkiSync(); + + const syncedCertificateIds = isCreateMode + ? selectedCertificateIds || [] + : syncCertificates.map((sc) => sc.certificateId); + + const totalPages = Math.ceil(totalCount / pageSize); + + const [selectedIds, setSelectedIds] = useState([]); + + React.useEffect(() => { + setSelectedIds(syncedCertificateIds); + }, [JSON.stringify(syncedCertificateIds)]); + + const handleToggleSelection = (certId: string) => { + setSelectedIds((prev) => + prev.includes(certId) ? prev.filter((id) => id !== certId) : [...prev, certId] + ); + }; + + const handleSelectAll = () => { + const currentPageIds = allCertificates.map((cert) => cert.id); + const allCurrentPageSelected = currentPageIds.every((id) => selectedIds.includes(id)); + + if (allCurrentPageSelected) { + setSelectedIds((prev) => prev.filter((id) => !currentPageIds.includes(id))); + } else { + setSelectedIds((prev) => [...new Set([...prev, ...currentPageIds])]); + } + }; + + const clearSearch = () => { + setSearchTerm(""); + setCurrentPage(1); + }; + + React.useEffect(() => { + if (isOpen) { + setCurrentPage(1); + setSearchTerm(""); + } + }, [isOpen]); + + const handleSaveCertificates = async () => { + try { + if (isCreateMode) { + if (onCertificateSelectionChange) { + onCertificateSelectionChange(selectedIds); + onClose(); + } + return; + } + + if (!pkiSync) return; + + const certificatesToAdd = selectedIds.filter((id) => !syncedCertificateIds.includes(id)); + const certificatesToRemove = syncedCertificateIds.filter((id) => !selectedIds.includes(id)); + + const invalidCertificates = certificatesToAdd + .map((id) => allCertificates.find((cert) => cert.id === id)) + .filter((cert) => { + if (!cert) return false; + const isExpired = new Date(cert.notAfter) < new Date(); + const isRevoked = cert.status === CertStatus.REVOKED; + return isExpired || isRevoked; + }); + + if (invalidCertificates.length > 0) { + const invalidNames = invalidCertificates.map((cert) => cert?.commonName).join(", "); + createNotification({ + text: `Cannot add expired or revoked certificates: ${invalidNames}`, + type: "error" + }); + return; + } + + const operations = []; + + if (certificatesToAdd.length > 0) { + operations.push( + addCertificatesToSync + .mutateAsync({ + pkiSyncId: pkiSync.id, + certificateIds: certificatesToAdd + }) + .then(() => ({ + type: "add", + count: certificatesToAdd.length, + success: true + })) + .catch((error) => ({ + type: "add", + count: certificatesToAdd.length, + success: false, + error + })) + ); + } + + if (certificatesToRemove.length > 0) { + operations.push( + removeCertificatesFromSync + .mutateAsync({ + pkiSyncId: pkiSync.id, + certificateIds: certificatesToRemove + }) + .then(() => ({ + type: "remove", + count: certificatesToRemove.length, + success: true + })) + .catch((error) => ({ + type: "remove", + count: certificatesToRemove.length, + success: false, + error + })) + ); + } + + if (operations.length === 0) { + createNotification({ + text: "No changes to save", + type: "info" + }); + onClose(); + return; + } + + const results = await Promise.all(operations); + const failures = results.filter((r) => !r.success); + const successes = results.filter((r) => r.success); + + if (failures.length === 0) { + const addCount = successes.find((r) => r.type === "add")?.count || 0; + const removeCount = successes.find((r) => r.type === "remove")?.count || 0; + + let message = "Certificate selection updated successfully"; + if (addCount > 0 && removeCount > 0) { + message = `Added ${addCount} and removed ${removeCount} certificate(s)`; + } else if (addCount > 0) { + message = `Added ${addCount} certificate(s)`; + } else if (removeCount > 0) { + message = `Removed ${removeCount} certificate(s)`; + } + + createNotification({ + text: message, + type: "success" + }); + + if (onCertificatesUpdated) { + onCertificatesUpdated(); + } + onClose(); + } else { + const partialSuccess = successes.length > 0; + console.error("Certificate sync operation failures:", failures); + + createNotification({ + text: partialSuccess + ? "Some certificate changes failed. Check console for details." + : "Failed to update certificate selection", + type: partialSuccess ? "warning" : "error" + }); + + if (partialSuccess && onCertificatesUpdated) { + onCertificatesUpdated(); + } + } + } catch (error) { + console.error("Unexpected error during certificate sync operation:", error); + createNotification({ + text: "An unexpected error occurred while updating certificates", + type: "error" + }); + } + }; + + const isLoading = addCertificatesToSync.isPending || removeCertificatesFromSync.isPending; + + return ( + !open && onClose()}> + +
+
+
+ { + setSearchTerm(e.target.value); + setCurrentPage(1); + }} + className="pl-9" + /> + + {searchTerm && ( + + )} +
+
+ + {allCertificates.length === 0 ? ( + + {searchTerm + ? "No certificates match your search criteria." + : "No certificates available for sync."} + + ) : ( + <> + + + + + + + + + + + + + {allCertificates.map((cert) => { + const isExpired = new Date(cert.notAfter) < new Date(); + const isRevoked = cert.status === CertStatus.REVOKED; + const cannotBeAdded = isExpired || isRevoked; + const isAlreadySynced = syncedCertificateIds.includes(cert.id); + + return ( + { + if (!cannotBeAdded || isAlreadySynced) { + handleToggleSelection(cert.id); + } + }} + > + + + + + + + ); + })} + +
+ 0 && + allCertificates.every((cert) => selectedIds.includes(cert.id)) + } + onCheckedChange={handleSelectAll} + /> + Common NameSerial NumberStatusExpires
+ { + if (!cannotBeAdded || isAlreadySynced) { + handleToggleSelection(cert.id); + } + }} + isDisabled={cannotBeAdded && !isAlreadySynced} + /> + +
+ {cert.commonName} +
+
+
+ {cert.serialNumber} +
+
+ + {(() => { + if (isRevoked) return "Revoked"; + if (isExpired) return "Expired"; + return cert.status === CertStatus.ACTIVE ? "Active" : cert.status; + })()} + + + + {new Date(cert.notAfter).toLocaleDateString()} + +
+
+ + {totalPages > 1 && ( +
+ setCurrentPage(page)} + onChangePerPage={() => {}} + /> +
+ )} + + )} +
+ +
+ + +
+
+
+ ); +}; diff --git a/frontend/src/components/pki-syncs/forms/CreatePkiSyncForm.tsx b/frontend/src/components/pki-syncs/forms/CreatePkiSyncForm.tsx index 582518bd7..305fda516 100644 --- a/frontend/src/components/pki-syncs/forms/CreatePkiSyncForm.tsx +++ b/frontend/src/components/pki-syncs/forms/CreatePkiSyncForm.tsx @@ -13,11 +13,11 @@ import { PKI_SYNC_MAP } from "@app/helpers/pkiSyncs"; import { PkiSync, TPkiSync, useCreatePkiSync, usePkiSyncOption } from "@app/hooks/api/pkiSyncs"; import { PkiSyncFormSchema, TPkiSyncForm } from "./schemas/pki-sync-schema"; +import { PkiSyncCertificatesFields } from "./PkiSyncCertificatesFields"; import { PkiSyncDestinationFields } from "./PkiSyncDestinationFields"; import { PkiSyncDetailsFields } from "./PkiSyncDetailsFields"; import { PkiSyncOptionsFields } from "./PkiSyncOptionsFields"; import { PkiSyncReviewFields } from "./PkiSyncReviewFields"; -import { PkiSyncSourceFields } from "./PkiSyncSourceFields"; type Props = { onComplete: (pkiSync: TPkiSync) => void; @@ -26,10 +26,10 @@ type Props = { }; const FORM_TABS: { name: string; key: string; fields: (keyof TPkiSyncForm)[] }[] = [ - { name: "Source", key: "source", fields: ["subscriberId"] }, { name: "Destination", key: "destination", fields: ["connection", "destinationConfig"] }, { name: "Sync Options", key: "options", fields: ["syncOptions"] }, { name: "Details", key: "details", fields: ["name", "description"] }, + { name: "Certificates", key: "certificates", fields: ["certificateIds"] }, { name: "Review", key: "review", fields: [] } ]; @@ -49,34 +49,46 @@ export const CreatePkiSyncForm = ({ destination, onComplete, onCancel }: Props) defaultValues: { destination, isAutoSyncEnabled: false, + certificateIds: [], syncOptions: { canImportCertificates: false, canRemoveCertificates: false, + preserveArn: true, certificateNameSchema: syncOption?.defaultCertificateNameSchema } } as Partial, reValidateMode: "onChange" }); - const onSubmit = async ({ connection, destinationConfig, ...formData }: TPkiSyncForm) => { + const onSubmit = async ({ + connection, + destinationConfig, + certificateIds, + ...formData + }: TPkiSyncForm) => { try { const pkiSync = await createPkiSync.mutateAsync({ ...formData, connectionId: connection.id, projectId: currentProject.id, - destinationConfig + destinationConfig, + certificateIds: certificateIds || [] }); createNotification({ - text: `Successfully added ${destinationName} Certificate Sync`, + text: `Successfully created ${destinationName} Certificate Sync${ + certificateIds && certificateIds.length > 0 + ? ` with ${certificateIds.length} certificate(s)` + : "" + }`, type: "success" }); onComplete(pkiSync); } catch (err: Error | unknown) { - console.error(err); + console.error("PKI sync creation failed:", err); setShowConfirmation(false); createNotification({ - title: `Failed to add ${destinationName} Certificate Sync`, + title: `Failed to create ${destinationName} Certificate Sync`, text: err instanceof Error ? err.message : "An unknown error occurred", type: "error" }); @@ -184,9 +196,6 @@ export const CreatePkiSyncForm = ({ destination, onComplete, onCancel }: Props) ))} - - - @@ -200,8 +209,8 @@ export const CreatePkiSyncForm = ({ destination, onComplete, onCancel }: Props) + + + diff --git a/frontend/src/components/pki-syncs/forms/PkiSyncCertificatesFields.tsx b/frontend/src/components/pki-syncs/forms/PkiSyncCertificatesFields.tsx new file mode 100644 index 000000000..51a93f4c9 --- /dev/null +++ b/frontend/src/components/pki-syncs/forms/PkiSyncCertificatesFields.tsx @@ -0,0 +1,139 @@ +import { useMemo, useState } from "react"; +import { Controller, useFormContext } from "react-hook-form"; +import { faEdit, faPlus, faTrash } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; + +import { + Button, + EmptyState, + FormControl, + Table, + TableContainer, + TBody, + Td, + Th, + THead, + Tr +} from "@app/components/v2"; +import { useProject } from "@app/context"; +import { CertStatus } from "@app/hooks/api"; +import { useListWorkspaceCertificates } from "@app/hooks/api/projects"; + +import { CertificateManagementModal } from "../CertificateManagementModal"; +import { TPkiSyncForm } from "./schemas/pki-sync-schema"; + +export const PkiSyncCertificatesFields = () => { + const { control, watch, setValue } = useFormContext(); + const { currentProject } = useProject(); + const [isSelectionModalOpen, setIsSelectionModalOpen] = useState(false); + + const certificateIds = watch("certificateIds") || []; + + const { data, isLoading } = useListWorkspaceCertificates({ + projectId: currentProject?.id || "", + offset: 0, + limit: 100, + forPkiSync: true + }); + + const certificates = data?.certificates || []; + + const activeCertificates = useMemo( + () => certificates.filter((cert) => cert.status === CertStatus.ACTIVE), + [certificates] + ); + + const selectedCertificates = useMemo( + () => activeCertificates.filter((cert) => certificateIds.includes(cert.id)), + [activeCertificates, certificateIds] + ); + + if (isLoading) { + return ( +
+
Loading certificates...
+
+ ); + } + + return ( + <> +

+ Select certificates to sync with this integration. Only active certificates can be synced. + You can modify this selection after creating the sync. +

+ + ( + +
+ + {selectedCertificates.length === 0 ? ( + + ) : ( +
+ + + + + + + + + + + {selectedCertificates.map((cert) => ( + + + + + + ))} + +
Common NameSerial NumberRemove
{cert.commonName} + {cert.serialNumber} + + +
+
+
+ )} +
+
+ )} + /> + + setIsSelectionModalOpen(false)} + selectedCertificateIds={certificateIds} + onCertificateSelectionChange={(newCertificateIds) => { + setValue("certificateIds", newCertificateIds); + }} + title="Select Certificates for Sync" + subtitle="Choose which certificates you want to include in this sync. You can modify this selection after creating the sync." + saveButtonText="Update Selection" + /> + + ); +}; diff --git a/frontend/src/components/pki-syncs/forms/PkiSyncOptionsFields/PkiSyncOptionsFields.tsx b/frontend/src/components/pki-syncs/forms/PkiSyncOptionsFields/PkiSyncOptionsFields.tsx index ce581bb88..c646d6ca2 100644 --- a/frontend/src/components/pki-syncs/forms/PkiSyncOptionsFields/PkiSyncOptionsFields.tsx +++ b/frontend/src/components/pki-syncs/forms/PkiSyncOptionsFields/PkiSyncOptionsFields.tsx @@ -95,6 +95,49 @@ export const PkiSyncOptionsFields = ({ destination }: Props) => { )} /> + {currentDestination === PkiSync.AwsCertificateManager && ( + ( + + +

+ Preserve ARN on Renewal{" "} + +

+ When enabled, Infisical will replace the contents of existing certificates + while preserving the same ARN during certificate renewal syncs. +

+

+ This allows consuming services like load balancers to continue using the + same ARN without requiring manual updates. +

+

+ When disabled, new certificates will be created with new ARNs, and old + certificates will be removed. +

+ + } + > + + +

+
+
+ )} + /> + )} + { const { watch } = useFormContext(); const { currentProject } = useProject(); - const { data: pkiSubscribers = [] } = useListWorkspacePkiSubscribers(currentProject?.id || ""); + const { data } = useListWorkspaceCertificates({ + projectId: currentProject?.id || "", + offset: 0, + limit: 100 + }); - const getSubscriberName = (subscriberId?: string) => { - const subscriber = pkiSubscribers.find((sub) => sub.id === subscriberId); - return subscriber?.name || "Unknown"; + const certificates = data?.certificates || []; + + const getSelectedCertificates = (certificateIds?: string[]) => { + if (!certificateIds || certificateIds.length === 0) return []; + return certificates.filter((cert) => certificateIds.includes(cert.id)); }; const { name, description, connection, - subscriberId, + certificateIds, syncOptions, destination, destinationConfig, @@ -30,17 +36,28 @@ export const PkiSyncReviewFields = () => { } = watch(); const destinationName = PKI_SYNC_MAP[destination].name; + const selectedCertificates = getSelectedCertificates(certificateIds); return (
- Source + Certificates
- - {getSubscriberName(subscriberId)} - +
+ {selectedCertificates.length === 0 ? ( + No certificates selected + ) : ( +
+ {selectedCertificates.map((cert) => ( +
+ {cert.commonName} +
+ ))} +
+ )} +
diff --git a/frontend/src/components/pki-syncs/forms/schemas/aws-certificate-manager-pki-sync-destination-schema.ts b/frontend/src/components/pki-syncs/forms/schemas/aws-certificate-manager-pki-sync-destination-schema.ts index aa522ef7d..4333b6187 100644 --- a/frontend/src/components/pki-syncs/forms/schemas/aws-certificate-manager-pki-sync-destination-schema.ts +++ b/frontend/src/components/pki-syncs/forms/schemas/aws-certificate-manager-pki-sync-destination-schema.ts @@ -7,6 +7,7 @@ import { BasePkiSyncSchema } from "./base-pki-sync-schema"; const AwsCertificateManagerSyncOptionsSchema = z.object({ canImportCertificates: z.boolean().default(false), canRemoveCertificates: z.boolean().default(false), + preserveArn: z.boolean().default(true), certificateNameSchema: z .string() .optional() diff --git a/frontend/src/components/pki-syncs/forms/schemas/base-pki-sync-schema.ts b/frontend/src/components/pki-syncs/forms/schemas/base-pki-sync-schema.ts index f8c9d599f..73da1f6af 100644 --- a/frontend/src/components/pki-syncs/forms/schemas/base-pki-sync-schema.ts +++ b/frontend/src/components/pki-syncs/forms/schemas/base-pki-sync-schema.ts @@ -53,7 +53,8 @@ export const BasePkiSyncSchema = { } }); }; + +export const useAddCertificatesToPkiSync = () => { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: async ({ + pkiSyncId, + certificateIds + }: { + pkiSyncId: string; + certificateIds: string[]; + }) => { + const { data } = await apiRequest.post(`/api/v1/pki/syncs/${pkiSyncId}/certificates`, { + certificateIds + }); + + return data; + }, + onSuccess: (_, { pkiSyncId }) => { + queryClient.invalidateQueries({ queryKey: pkiSyncKeys.certificates(pkiSyncId) }); + } + }); +}; + +export const useRemoveCertificatesFromPkiSync = () => { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: async ({ + pkiSyncId, + certificateIds + }: { + pkiSyncId: string; + certificateIds: string[]; + }) => { + const { data } = await apiRequest.delete(`/api/v1/pki/syncs/${pkiSyncId}/certificates`, { + data: { certificateIds } + }); + + return data; + }, + onSuccess: (_, { pkiSyncId }) => { + queryClient.invalidateQueries({ queryKey: pkiSyncKeys.certificates(pkiSyncId) }); + } + }); +}; diff --git a/frontend/src/hooks/api/pkiSyncs/queries.tsx b/frontend/src/hooks/api/pkiSyncs/queries.tsx index d0db913bd..6e7aabc42 100644 --- a/frontend/src/hooks/api/pkiSyncs/queries.tsx +++ b/frontend/src/hooks/api/pkiSyncs/queries.tsx @@ -2,14 +2,25 @@ import { useQuery, UseQueryOptions } from "@tanstack/react-query"; import { apiRequest } from "@app/config/request"; import { PkiSync, TPkiSyncOption } from "@app/hooks/api/pkiSyncs"; -import { TListPkiSyncOptions, TListPkiSyncs, TPkiSync } from "@app/hooks/api/pkiSyncs/types"; +import { + TListPkiSyncOptions, + TListPkiSyncs, + TPkiSync, + TPkiSyncCertificate +} from "@app/hooks/api/pkiSyncs/types"; export const pkiSyncKeys = { all: ["pki-sync"] as const, options: () => [...pkiSyncKeys.all, "options"] as const, list: (projectId: string) => [...pkiSyncKeys.all, "list", projectId] as const, + listWithCertificate: (projectId: string, certificateId: string) => + [...pkiSyncKeys.all, "list", projectId, "with-certificate", certificateId] as const, byId: (syncId: string, projectId: string) => - [...pkiSyncKeys.all, "by-id", syncId, projectId] as const + [...pkiSyncKeys.all, "by-id", syncId, projectId] as const, + certificates: (syncId: string, pagination?: { offset: number; limit: number }) => + pagination + ? ([...pkiSyncKeys.all, "certificates", syncId, pagination] as const) + : ([...pkiSyncKeys.all, "certificates", syncId] as const) }; export const usePkiSyncOptions = ( @@ -41,9 +52,14 @@ export const usePkiSyncOption = (destination: PkiSync) => { return { syncOption, isPending }; }; -export const fetchPkiSyncsByProjectId = async (projectId: string) => { +export const fetchPkiSyncsByProjectId = async (projectId: string, certificateId?: string) => { + const params: { projectId: string; certificateId?: string } = { projectId }; + if (certificateId) { + params.certificateId = certificateId; + } + const { data } = await apiRequest.get("/api/v1/pki/syncs", { - params: { projectId } + params }); return data.pkiSyncs; @@ -63,6 +79,27 @@ export const useListPkiSyncs = ( }); }; +export const useListPkiSyncsWithCertificate = ( + projectId: string, + certificateId: string, + options?: Omit< + UseQueryOptions< + TPkiSync[], + unknown, + TPkiSync[], + ReturnType + >, + "queryKey" | "queryFn" + > +) => { + return useQuery({ + queryKey: pkiSyncKeys.listWithCertificate(projectId, certificateId), + queryFn: () => fetchPkiSyncsByProjectId(projectId, certificateId), + enabled: !!projectId && !!certificateId, + ...options + }); +}; + export const useGetPkiSync = ( { syncId, projectId }: { syncId: string; projectId: string }, options?: Omit< @@ -82,3 +119,33 @@ export const useGetPkiSync = ( ...options }); }; + +export const useListPkiSyncCertificates = ( + syncId: string, + pagination?: { offset?: number; limit?: number }, + options?: Omit< + UseQueryOptions< + { certificates: TPkiSyncCertificate[]; totalCount: number }, + unknown, + { certificates: TPkiSyncCertificate[]; totalCount: number }, + ReturnType + >, + "queryKey" | "queryFn" + > +) => { + const { offset = 0, limit = 20 } = pagination || {}; + + return useQuery({ + queryKey: pkiSyncKeys.certificates(syncId, { offset, limit }), + queryFn: async () => { + const { data } = await apiRequest.get(`/api/v1/pki/syncs/${syncId}/certificates`, { + params: { offset, limit } + }); + return { + certificates: data.certificates || [], + totalCount: data.totalCount || 0 + }; + }, + ...options + }); +}; diff --git a/frontend/src/hooks/api/pkiSyncs/types/common.ts b/frontend/src/hooks/api/pkiSyncs/types/common.ts index 8cd1aef96..556cd0aa3 100644 --- a/frontend/src/hooks/api/pkiSyncs/types/common.ts +++ b/frontend/src/hooks/api/pkiSyncs/types/common.ts @@ -1,6 +1,6 @@ import { AppConnection } from "@app/hooks/api/appConnections/enums"; -import { PkiSyncStatus } from "../enums"; +import { CertificateSyncStatus, PkiSyncStatus } from "../enums"; export type RootPkiSyncOptions = { canImportCertificates: boolean; @@ -43,4 +43,23 @@ export type TRootPkiSync = { } | null; appConnectionName?: string; appConnectionApp?: string; + hasCertificate?: boolean; +}; + +export type TPkiSyncCertificate = { + id: string; + pkiSyncId: string; + certificateId: string; + syncStatus?: CertificateSyncStatus | null; + lastSyncMessage?: string | null; + lastSyncedAt?: string | null; + createdAt: string; + updatedAt: string; + certificateSerialNumber?: string; + certificateCommonName?: string; + certificateStatus?: string; + certificateNotBefore?: Date; + certificateNotAfter?: Date; + pkiSyncName?: string; + pkiSyncDestination?: string; }; diff --git a/frontend/src/hooks/api/pkiSyncs/types/index.ts b/frontend/src/hooks/api/pkiSyncs/types/index.ts index 899217f52..69ec3ae6f 100644 --- a/frontend/src/hooks/api/pkiSyncs/types/index.ts +++ b/frontend/src/hooks/api/pkiSyncs/types/index.ts @@ -33,7 +33,8 @@ type TCreatePkiSyncDTOBase = { certificateNameSchema?: string; }; isAutoSyncEnabled: boolean; - subscriberId?: string; + subscriberId?: string | null; + certificateIds?: string[]; projectId: string; }; diff --git a/frontend/src/hooks/api/projects/queries.tsx b/frontend/src/hooks/api/projects/queries.tsx index 0445d5984..1613e95a9 100644 --- a/frontend/src/hooks/api/projects/queries.tsx +++ b/frontend/src/hooks/api/projects/queries.tsx @@ -664,17 +664,26 @@ export const useListWorkspaceCas = ({ export const useListWorkspaceCertificates = ({ projectId, offset, - limit + limit, + friendlyName, + commonName, + forPkiSync }: { projectId: string; offset: number; limit: number; + friendlyName?: string; + commonName?: string; + forPkiSync?: boolean; }) => { return useQuery({ queryKey: projectKeys.specificProjectCertificates({ projectId, offset, - limit + limit, + friendlyName, + commonName, + forPkiSync }), queryFn: async () => { const params = new URLSearchParams({ @@ -682,6 +691,16 @@ export const useListWorkspaceCertificates = ({ limit: String(limit) }); + if (friendlyName) { + params.append("friendlyName", friendlyName); + } + if (commonName) { + params.append("commonName", commonName); + } + if (forPkiSync) { + params.append("forPkiSync", "true"); + } + const { data: { certificates, totalCount } } = await apiRequest.get<{ certificates: TCertificate[]; totalCount: number }>( @@ -693,7 +712,8 @@ export const useListWorkspaceCertificates = ({ return { certificates, totalCount }; }, - enabled: Boolean(projectId) + enabled: Boolean(projectId), + placeholderData: (previousData) => previousData }); }; diff --git a/frontend/src/hooks/api/projects/query-keys.tsx b/frontend/src/hooks/api/projects/query-keys.tsx index 51e3db71c..04f14f90d 100644 --- a/frontend/src/hooks/api/projects/query-keys.tsx +++ b/frontend/src/hooks/api/projects/query-keys.tsx @@ -39,12 +39,22 @@ export const projectKeys = { specificProjectCertificates: ({ projectId, offset, - limit + limit, + friendlyName, + commonName, + forPkiSync }: { projectId: string; offset: number; limit: number; - }) => [...projectKeys.forProjectCertificates(projectId), { offset, limit }] as const, + friendlyName?: string; + commonName?: string; + forPkiSync?: boolean; + }) => + [ + ...projectKeys.forProjectCertificates(projectId), + { offset, limit, friendlyName, commonName, forPkiSync } + ] as const, getProjectPkiAlerts: (projectId: string) => [{ projectId }, "project-pki-alerts"] as const, getProjectPkiSubscribers: (projectId: string) => [{ projectId }, "project-pki-subscribers"] as const, diff --git a/frontend/src/layouts/PkiManagerLayout/PkiManagerLayout.tsx b/frontend/src/layouts/PkiManagerLayout/PkiManagerLayout.tsx index 2c088c293..c33821ed9 100644 --- a/frontend/src/layouts/PkiManagerLayout/PkiManagerLayout.tsx +++ b/frontend/src/layouts/PkiManagerLayout/PkiManagerLayout.tsx @@ -51,25 +51,9 @@ export const PkiManagerLayout = () => { params={{ projectId: currentProject.id }} - > - {({ isActive }) => Policies} - - {({ isActive }) => ( - - Certificates - + Certificate Management )} { - const { t } = useTranslation(); - const { permission } = useProjectPermission(); - - const canAccessPkiColl = permission.can( - ProjectPermissionActions.Read, - ProjectPermissionSub.PkiCollections - ); - const canAccessCerts = permission.can( - ProjectPermissionCertificateActions.Read, - ProjectPermissionSub.Certificates - ); - - return ( -
- - {t("common.head-title", { title: "Certificates" })} - -
- - {/* If both are false, the section does not render. This is to prevent duplicate banners. */} - {(canAccessCerts || canAccessPkiColl) && ( - - - - )} - - - -
-
- ); -}; diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateManagePkiSyncsModal.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateManagePkiSyncsModal.tsx new file mode 100644 index 000000000..f366ac4c6 --- /dev/null +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateManagePkiSyncsModal.tsx @@ -0,0 +1,253 @@ +import { useEffect, useMemo, useState } from "react"; +import { faPlus, faSearch } from "@fortawesome/free-solid-svg-icons"; + +import { createNotification } from "@app/components/notifications"; +import { + Button, + Checkbox, + EmptyState, + Input, + Modal, + ModalContent, + Pagination, + Table, + TableContainer, + TBody, + Td, + Th, + THead, + Tr +} from "@app/components/v2"; +import { useProject } from "@app/context"; +import { + useAddCertificatesToPkiSync, + useListPkiSyncsWithCertificate, + useRemoveCertificatesFromPkiSync +} from "@app/hooks/api/pkiSyncs"; + +type Props = { + popUp: { + isOpen: boolean; + data?: { + certificateId?: string; + commonName?: string; + }; + }; + handlePopUpToggle: (popUpName: "managePkiSyncs", state?: boolean) => void; +}; + +const PER_PAGE = 10; + +export const CertificateManagePkiSyncsModal = ({ popUp, handlePopUpToggle }: Props) => { + const [selectedSyncIds, setSelectedSyncIds] = useState>(new Set()); + const [initialSyncIds, setInitialSyncIds] = useState>(new Set()); + const [isSubmitting, setIsSubmitting] = useState(false); + const [currentPage, setCurrentPage] = useState(1); + const [searchTerm, setSearchTerm] = useState(""); + + const { currentProject } = useProject(); + const { certificateId, commonName } = popUp.data || {}; + + const { data: pkiSyncs = [], isPending } = useListPkiSyncsWithCertificate( + currentProject?.id || "", + certificateId || "", + { + enabled: !!currentProject?.id && !!certificateId + } + ); + const addCertificatesToSync = useAddCertificatesToPkiSync(); + const removeCertificatesFromSync = useRemoveCertificatesFromPkiSync(); + + const filteredSyncs = useMemo(() => { + if (!searchTerm.trim()) return pkiSyncs; + + const searchLower = searchTerm.toLowerCase(); + return pkiSyncs.filter((sync) => sync.name.toLowerCase().includes(searchLower)); + }, [pkiSyncs, searchTerm]); + + const startIndex = (currentPage - 1) * PER_PAGE; + const endIndex = startIndex + PER_PAGE; + const paginatedSyncs = filteredSyncs.slice(startIndex, endIndex); + + useEffect(() => { + setCurrentPage(1); + }, [searchTerm]); + + const handleClose = () => { + handlePopUpToggle("managePkiSyncs", false); + setSelectedSyncIds(new Set()); + setInitialSyncIds(new Set()); + setSearchTerm(""); + setCurrentPage(1); + }; + + useEffect(() => { + if (!certificateId || !pkiSyncs || pkiSyncs.length === 0) return; + + const currentSyncIds = new Set( + pkiSyncs.filter((sync) => sync.hasCertificate).map((sync) => sync.id) + ); + setSelectedSyncIds(currentSyncIds); + setInitialSyncIds(new Set(currentSyncIds)); + }, [certificateId, pkiSyncs]); + + const handleSyncToggle = (syncId: string) => { + setSelectedSyncIds((prev) => { + const newSet = new Set(prev); + if (newSet.has(syncId)) { + newSet.delete(syncId); + } else { + newSet.add(syncId); + } + return newSet; + }); + }; + + const handleSaveChanges = async () => { + if (!certificateId) return; + + try { + setIsSubmitting(true); + + const syncsToAdd = Array.from(selectedSyncIds).filter((id) => !initialSyncIds.has(id)); + const syncsToRemove = Array.from(initialSyncIds).filter((id) => !selectedSyncIds.has(id)); + + await Promise.all( + syncsToAdd.map((syncId) => + addCertificatesToSync.mutateAsync({ + pkiSyncId: syncId, + certificateIds: [certificateId] + }) + ) + ); + + await Promise.all( + syncsToRemove.map((syncId) => + removeCertificatesFromSync.mutateAsync({ + pkiSyncId: syncId, + certificateIds: [certificateId] + }) + ) + ); + + createNotification({ + text: `PKI sync settings updated for certificate "${commonName}"`, + type: "success" + }); + + handleClose(); + } catch (error) { + console.error(error); + createNotification({ + text: "Failed to update PKI sync settings", + type: "error" + }); + } finally { + setIsSubmitting(false); + } + }; + + return ( + + +
+ setSearchTerm(e.target.value)} + placeholder="Search PKI syncs by name..." + /> +
+
+ {isPending && ( +
+
Loading PKI syncs...
+
+ )} + {!isPending && pkiSyncs.length === 0 && ( + + Create a PKI sync first to manage certificate syncing. + + )} + {!isPending && pkiSyncs.length > 0 && filteredSyncs.length === 0 && searchTerm && ( + + No PKI syncs match your search criteria. Try a different search term. + + )} + {!isPending && filteredSyncs.length > 0 && ( + + + + + + + + + + {paginatedSyncs.map((sync) => ( + handleSyncToggle(sync.id)} + > + + + + + ))} + +
+ NameDestination
+ handleSyncToggle(sync.id)} + id={`sync-${sync.id}`} + /> + +
+ {sync.name} +
+
+
+ {sync.destination.replace(/-/g, " ")} +
+
+
+ )} + {!isPending && filteredSyncs.length > PER_PAGE && ( +
+ {}} + /> +
+ )} +
+ +
+ + +
+
+
+ ); +}; diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesSection.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesSection.tsx index 4102d8ea5..b900e9aba 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesSection.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesSection.tsx @@ -16,6 +16,7 @@ import { usePopUp } from "@app/hooks/usePopUp"; import { CertificateCertModal } from "./CertificateCertModal"; import { CertificateImportModal } from "./CertificateImportModal"; import { CertificateIssuanceModal } from "./CertificateIssuanceModal"; +import { CertificateManagePkiSyncsModal } from "./CertificateManagePkiSyncsModal"; import { CertificateManageRenewalModal } from "./CertificateManageRenewalModal"; import { CertificateModal } from "./CertificateModal"; import { CertificateRenewalModal } from "./CertificateRenewalModal"; @@ -37,7 +38,8 @@ export const CertificatesSection = () => { "deleteCertificate", "revokeCertificate", "manageRenewal", - "renewCertificate" + "renewCertificate", + "managePkiSyncs" ] as const); const onRemoveCertificateSubmit = async (serialNumber: string) => { @@ -105,6 +107,10 @@ export const CertificatesSection = () => { + , data?: { @@ -488,6 +491,31 @@ export const CertificatesTable = ({ handlePopUpOpen }: Props) => { ); })()} + {/* PKI Sync management - only for active certificates */} + {certificate.status === CertStatus.ACTIVE && ( + + {(isAllowed) => ( + + handlePopUpOpen("managePkiSyncs", { + certificateId: certificate.id, + commonName: certificate.commonName + }) + } + disabled={!isAllowed} + icon={} + > + PKI Syncs + + )} + + )} {/* Only show revoke button if CA supports revocation */} {(() => { const caType = caCapabilityMap[certificate.caId]; diff --git a/frontend/src/pages/cert-manager/CertificatesPage/route.tsx b/frontend/src/pages/cert-manager/CertificatesPage/route.tsx deleted file mode 100644 index 68deb41b9..000000000 --- a/frontend/src/pages/cert-manager/CertificatesPage/route.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { createFileRoute } from "@tanstack/react-router"; - -import { CertificatesPage } from "./CertificatesPage"; - -export const Route = createFileRoute( - "/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/certificates" -)({ - component: CertificatesPage, - beforeLoad: ({ context }) => { - return { - breadcrumbs: [ - ...context.breadcrumbs, - { - label: "Certificates" - } - ] - }; - } -}); diff --git a/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/PkiCollectionDetailsByIDPage.tsx b/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/PkiCollectionDetailsByIDPage.tsx index b8235f488..063cab35d 100644 --- a/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/PkiCollectionDetailsByIDPage.tsx +++ b/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/PkiCollectionDetailsByIDPage.tsx @@ -59,9 +59,9 @@ export const PkiCollectionPage = () => { }); handlePopUpClose("deletePkiCollection"); navigate({ - to: "/projects/cert-management/$projectId/certificates", + to: "/projects/cert-management/$projectId/policies", params: { - projectId + projectId: params.projectId } }); } catch { @@ -77,9 +77,9 @@ export const PkiCollectionPage = () => { {data && (
diff --git a/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/components/AddPkiCollectionItemModal.tsx b/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/components/AddPkiCollectionItemModal.tsx index 3bcc3dc31..1fd4d7d99 100644 --- a/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/components/AddPkiCollectionItemModal.tsx +++ b/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/components/AddPkiCollectionItemModal.tsx @@ -5,13 +5,9 @@ import { z } from "zod"; import { createNotification } from "@app/components/notifications"; import { Button, FormControl, Modal, ModalContent, Select, SelectItem } from "@app/components/v2"; import { useProject } from "@app/context"; -import { - CaStatus, - useAddItemToPkiCollection, - useListWorkspaceCas, - useListWorkspaceCertificates -} from "@app/hooks/api"; +import { CaStatus, useAddItemToPkiCollection, useListWorkspaceCas } from "@app/hooks/api"; import { PkiItemType, pkiItemTypeToNameMap } from "@app/hooks/api/pkiCollections/constants"; +import { useListWorkspaceCertificates } from "@app/hooks/api/projects"; import { UsePopUpState } from "@app/hooks/usePopUp"; const schema = z diff --git a/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/routes.tsx b/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/routes.tsx index 7fef38221..712f3dedf 100644 --- a/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/routes.tsx +++ b/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/routes.tsx @@ -13,7 +13,7 @@ export const Route = createFileRoute( { label: "Certificate Collections", link: linkOptions({ - to: "/projects/cert-management/$projectId/certificates", + to: "/projects/cert-management/$projectId/policies", params: { projectId: params.projectId } diff --git a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/PkiSyncDetailsByIDPage.tsx b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/PkiSyncDetailsByIDPage.tsx index 76cc0ec7b..b1b1b2836 100644 --- a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/PkiSyncDetailsByIDPage.tsx +++ b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/PkiSyncDetailsByIDPage.tsx @@ -18,10 +18,10 @@ import { IntegrationsListPageTabs } from "@app/types/integrations"; import { PkiSyncActionTriggers, PkiSyncAuditLogsSection, + PkiSyncCertificatesSection, PkiSyncDestinationSection, PkiSyncDetailsSection, - PkiSyncOptionsSection, - PkiSyncSourceSection + PkiSyncOptionsSection } from "./components"; const PageContent = () => { @@ -62,7 +62,6 @@ const PageContent = () => { const destinationDetails = PKI_SYNC_MAP[pkiSync.destination]; const handleEditDetails = () => handlePopUpOpen("editSync", PkiSyncEditFields.Details); - const handleEditSource = () => handlePopUpOpen("editSync", PkiSyncEditFields.Source); const handleEditOptions = () => handlePopUpOpen("editSync", PkiSyncEditFields.Options); const handleEditDestination = () => handlePopUpOpen("editSync", PkiSyncEditFields.Destination); @@ -103,7 +102,6 @@ const PageContent = () => {
-
@@ -111,6 +109,7 @@ const PageContent = () => { pkiSync={pkiSync} onEditDestination={handleEditDestination} /> +
diff --git a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncCertificatesSection.tsx b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncCertificatesSection.tsx new file mode 100644 index 000000000..11b59b6ab --- /dev/null +++ b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncCertificatesSection.tsx @@ -0,0 +1,223 @@ +import { useState } from "react"; +import { subject } from "@casl/ability"; +import { faEdit, faPlus, faTrash } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; + +import { createNotification } from "@app/components/notifications"; +import { ProjectPermissionCan } from "@app/components/permissions"; +import { CertificateManagementModal } from "@app/components/pki-syncs/CertificateManagementModal"; +import { + Badge, + EmptyState, + IconButton, + Pagination, + Table, + TableContainer, + TBody, + Td, + Th, + THead, + Tooltip, + Tr +} from "@app/components/v2"; +import { ProjectPermissionSub } from "@app/context"; +import { ProjectPermissionPkiSyncActions } from "@app/context/ProjectPermissionContext/types"; +import { useListPkiSyncCertificates, useRemoveCertificatesFromPkiSync } from "@app/hooks/api"; +import { CertificateSyncStatus, TPkiSync } from "@app/hooks/api/pkiSyncs"; + +type Props = { + pkiSync: TPkiSync; +}; + +const getSyncStatusVariant = (status?: CertificateSyncStatus | null) => { + if (status === CertificateSyncStatus.Succeeded) return "success"; + if (status === CertificateSyncStatus.Failed) return "danger"; + if (status === CertificateSyncStatus.Syncing) return "primary"; + return "project"; +}; + +const getSyncStatusText = (status?: CertificateSyncStatus | null) => { + if (status === CertificateSyncStatus.Succeeded) return "Synced"; + if (status === CertificateSyncStatus.Failed) return "Failed"; + if (status === CertificateSyncStatus.Syncing) return "Syncing"; + if (status === CertificateSyncStatus.Pending) return "Pending"; + return "Unknown"; +}; + +export const PkiSyncCertificatesSection = ({ pkiSync }: Props) => { + const [isManageModalOpen, setIsManageModalOpen] = useState(false); + const [currentPage, setCurrentPage] = useState(1); + const pageSize = 10; + + const { data, refetch: refetchSyncCertificates } = useListPkiSyncCertificates(pkiSync.id, { + offset: (currentPage - 1) * pageSize, + limit: pageSize + }); + const syncCertificates = data?.certificates || []; + const totalCount = data?.totalCount || 0; + const removeCertificatesFromSync = useRemoveCertificatesFromPkiSync(); + + const permissionSubject = subject(ProjectPermissionSub.PkiSyncs, { + subscriberId: pkiSync.subscriberId || "" + }); + + const handleRemoveCertificate = async (certificateId: string) => { + try { + await removeCertificatesFromSync.mutateAsync({ + pkiSyncId: pkiSync.id, + certificateIds: [certificateId] + }); + + await refetchSyncCertificates(); + + createNotification({ + text: "Certificate removed from sync", + type: "success" + }); + } catch { + createNotification({ + text: "Failed to remove certificate from sync", + type: "error" + }); + } + }; + + const totalPages = Math.ceil(totalCount / pageSize); + + return ( +
+
+
+

Certificates ({totalCount})

+ + {(isAllowed) => ( + setIsManageModalOpen(true)} + > + + + )} + +
+ +
+ {syncCertificates.length === 0 ? ( + + No certificates are currently synced with this PKI destination. + + ) : ( +
+ + + + + + + + + + + + + {syncCertificates.map((syncCert) => { + const isExpired = syncCert.certificateNotAfter + ? new Date(syncCert.certificateNotAfter) < new Date() + : false; + + return ( + + + + + + + + ); + })} + +
Common NameSerial NumberStatusExpiresActions
+
+ {syncCert.certificateCommonName || "Unknown"} +
+
+
+ {syncCert.certificateSerialNumber || "Unknown"} +
+
+ {syncCert.lastSyncMessage && + syncCert.syncStatus === CertificateSyncStatus.Failed ? ( + + Failed + + ) : ( + + {getSyncStatusText(syncCert.syncStatus)} + + )} + + + {syncCert.certificateNotAfter + ? new Date(syncCert.certificateNotAfter).toLocaleDateString() + : "Unknown"} + + + + {(isAllowed) => ( + handleRemoveCertificate(syncCert.certificateId)} + > + + + )} + +
+
+ + {/* Pagination */} + {totalPages > 1 && ( +
+ setCurrentPage(page)} + onChangePerPage={() => {}} + /> +
+ )} +
+ )} +
+
+ + setIsManageModalOpen(false)} + onCertificatesUpdated={() => { + refetchSyncCertificates(); + }} + /> +
+ ); +}; diff --git a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/index.ts b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/index.ts index 06fe5181e..55a877bff 100644 --- a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/index.ts +++ b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/index.ts @@ -1,5 +1,6 @@ export { PkiSyncActionTriggers } from "./PkiSyncActionTriggers"; export { PkiSyncAuditLogsSection } from "./PkiSyncAuditLogsSection"; +export { PkiSyncCertificatesSection } from "./PkiSyncCertificatesSection"; export { PkiSyncDestinationSection } from "./PkiSyncDestinationSection"; export { PkiSyncDetailsSection } from "./PkiSyncDetailsSection"; export { PkiSyncOptionsSection } from "./PkiSyncOptionsSection"; diff --git a/frontend/src/pages/cert-manager/PoliciesPage/PoliciesPage.tsx b/frontend/src/pages/cert-manager/PoliciesPage/PoliciesPage.tsx index f6bc792fe..58f3c11e6 100644 --- a/frontend/src/pages/cert-manager/PoliciesPage/PoliciesPage.tsx +++ b/frontend/src/pages/cert-manager/PoliciesPage/PoliciesPage.tsx @@ -2,17 +2,20 @@ import { useState } from "react"; import { Helmet } from "react-helmet"; import { useTranslation } from "react-i18next"; -import { ProjectPermissionCan } from "@app/components/permissions"; import { ContentLoader, PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2"; -import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context"; +import { useProject } from "@app/context"; import { ProjectType } from "@app/hooks/api/projects/types"; import { CertificateProfilesTab } from "./components/CertificateProfilesTab"; +import { CertificatesTab } from "./components/CertificatesTab"; import { CertificateTemplatesV2Tab } from "./components/CertificateTemplatesV2Tab"; +import { PkiCollectionsTab } from "./components/PkiCollectionsTab"; enum TabSections { CertificateProfiles = "profiles", - CertificateTemplatesV2 = "templates-v2" + CertificateTemplatesV2 = "templates-v2", + Certificates = "certificates", + PkiCollections = "pki-collections" } export const PoliciesPage = () => { @@ -25,59 +28,54 @@ export const PoliciesPage = () => { } return ( - - {(isAllowed) => { - if (!isAllowed) { - return ( -
-
-

You don't have permission to access certificate policies.

-
-
- ); - } +
+ + {t("common.head-title", { title: "Certificate Management" })} + +
+ - return ( -
- - {t("common.head-title", { title: "Certificate Policies" })} - -
- + setActiveTab(value as TabSections)} + > + + + Certificate Profiles + + + Certificate Templates + + + Certificates + + + Certificate Collections + + - setActiveTab(value as TabSections)} - > - - - Certificate Profiles - - - Certificate Templates - - + + + - - - + + + - - - - -
-
- ); - }} - + + + + + + + + +
+
); }; diff --git a/frontend/src/pages/cert-manager/PoliciesPage/components/CertificatesTab/CertificatesTab.tsx b/frontend/src/pages/cert-manager/PoliciesPage/components/CertificatesTab/CertificatesTab.tsx new file mode 100644 index 000000000..caf9cdb2f --- /dev/null +++ b/frontend/src/pages/cert-manager/PoliciesPage/components/CertificatesTab/CertificatesTab.tsx @@ -0,0 +1,5 @@ +import { CertificatesSection } from "../../../CertificatesPage/components/CertificatesSection"; + +export const CertificatesTab = () => { + return ; +}; diff --git a/frontend/src/pages/cert-manager/PoliciesPage/components/CertificatesTab/index.ts b/frontend/src/pages/cert-manager/PoliciesPage/components/CertificatesTab/index.ts new file mode 100644 index 000000000..277134d56 --- /dev/null +++ b/frontend/src/pages/cert-manager/PoliciesPage/components/CertificatesTab/index.ts @@ -0,0 +1 @@ +export { CertificatesTab } from "./CertificatesTab"; diff --git a/frontend/src/pages/cert-manager/PoliciesPage/components/PkiCollectionsTab/PkiCollectionsTab.tsx b/frontend/src/pages/cert-manager/PoliciesPage/components/PkiCollectionsTab/PkiCollectionsTab.tsx new file mode 100644 index 000000000..29bd82559 --- /dev/null +++ b/frontend/src/pages/cert-manager/PoliciesPage/components/PkiCollectionsTab/PkiCollectionsTab.tsx @@ -0,0 +1,5 @@ +import { PkiCollectionSection } from "../../../AlertingPage/components/PkiCollectionSection"; + +export const PkiCollectionsTab = () => { + return ; +}; diff --git a/frontend/src/pages/cert-manager/PoliciesPage/components/PkiCollectionsTab/index.ts b/frontend/src/pages/cert-manager/PoliciesPage/components/PkiCollectionsTab/index.ts new file mode 100644 index 000000000..4297b3d5e --- /dev/null +++ b/frontend/src/pages/cert-manager/PoliciesPage/components/PkiCollectionsTab/index.ts @@ -0,0 +1 @@ +export { PkiCollectionsTab } from "./PkiCollectionsTab"; diff --git a/frontend/src/pages/cert-manager/PoliciesPage/components/index.ts b/frontend/src/pages/cert-manager/PoliciesPage/components/index.ts index 62809f571..a9b24b1db 100644 --- a/frontend/src/pages/cert-manager/PoliciesPage/components/index.ts +++ b/frontend/src/pages/cert-manager/PoliciesPage/components/index.ts @@ -1,2 +1,4 @@ export { CertificateProfilesTab } from "./CertificateProfilesTab"; +export { CertificatesTab } from "./CertificatesTab"; export { CertificateTemplatesV2Tab } from "./CertificateTemplatesV2Tab"; +export { PkiCollectionsTab } from "./PkiCollectionsTab"; diff --git a/frontend/src/pages/pam/PamAccountsPage/components/PamAccountForm/MySQLAccountForm.tsx b/frontend/src/pages/pam/PamAccountsPage/components/PamAccountForm/MySQLAccountForm.tsx index 131da7ef3..e30c79e24 100644 --- a/frontend/src/pages/pam/PamAccountsPage/components/PamAccountForm/MySQLAccountForm.tsx +++ b/frontend/src/pages/pam/PamAccountsPage/components/PamAccountForm/MySQLAccountForm.tsx @@ -1,14 +1,14 @@ -import { zodResolver } from "@hookform/resolvers/zod"; import { FormProvider, useForm } from "react-hook-form"; +import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; import { Button, ModalClose } from "@app/components/v2"; import { PamResourceType, TMySQLAccount } from "@app/hooks/api/pam"; import { UNCHANGED_PASSWORD_SENTINEL } from "@app/hooks/api/pam/constants"; -import { GenericAccountFields, genericAccountFieldsSchema } from "./GenericAccountFields"; import { BaseSqlAccountSchema } from "./shared/sql-account-schemas"; import { SqlAccountFields } from "./shared/SqlAccountFields"; +import { GenericAccountFields, genericAccountFieldsSchema } from "./GenericAccountFields"; type Props = { account?: TMySQLAccount; diff --git a/frontend/src/pages/pam/PamAccountsPage/components/PamAccountForm/PostgresAccountForm.tsx b/frontend/src/pages/pam/PamAccountsPage/components/PamAccountForm/PostgresAccountForm.tsx index 6d361877e..e7d2d902b 100644 --- a/frontend/src/pages/pam/PamAccountsPage/components/PamAccountForm/PostgresAccountForm.tsx +++ b/frontend/src/pages/pam/PamAccountsPage/components/PamAccountForm/PostgresAccountForm.tsx @@ -1,6 +1,6 @@ -import { zodResolver } from "@hookform/resolvers/zod"; import { useEffect, useState } from "react"; import { FormProvider, useForm } from "react-hook-form"; +import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; import { Button, ModalClose } from "@app/components/v2"; @@ -12,10 +12,10 @@ import { } from "@app/hooks/api/pam"; import { UNCHANGED_PASSWORD_SENTINEL } from "@app/hooks/api/pam/constants"; -import { GenericAccountFields, genericAccountFieldsSchema } from "./GenericAccountFields"; -import { RotateAccountFields, rotateAccountFieldsSchema } from "./RotateAccountFields"; import { BaseSqlAccountSchema } from "./shared/sql-account-schemas"; import { SqlAccountFields } from "./shared/SqlAccountFields"; +import { GenericAccountFields, genericAccountFieldsSchema } from "./GenericAccountFields"; +import { RotateAccountFields, rotateAccountFieldsSchema } from "./RotateAccountFields"; type Props = { account?: TPostgresAccount; diff --git a/frontend/src/routeTree.gen.ts b/frontend/src/routeTree.gen.ts index 34c4153d6..6dc265c43 100644 --- a/frontend/src/routeTree.gen.ts +++ b/frontend/src/routeTree.gen.ts @@ -114,7 +114,6 @@ import { Route as kmsOverviewPageRouteImport } from './pages/kms/OverviewPage/ro import { Route as kmsKmipPageRouteImport } from './pages/kms/KmipPage/route' import { Route as certManagerSettingsPageRouteImport } from './pages/cert-manager/SettingsPage/route' import { Route as certManagerPoliciesPageRouteImport } from './pages/cert-manager/PoliciesPage/route' -import { Route as certManagerCertificatesPageRouteImport } from './pages/cert-manager/CertificatesPage/route' import { Route as certManagerCertificateAuthoritiesPageRouteImport } from './pages/cert-manager/CertificateAuthoritiesPage/route' import { Route as certManagerAlertingPageRouteImport } from './pages/cert-manager/AlertingPage/route' import { Route as organizationAppConnectionsOauthCallbackPageRouteImport } from './pages/organization/AppConnections/OauthCallbackPage/route' @@ -1203,13 +1202,6 @@ const certManagerPoliciesPageRouteRoute = getParentRoute: () => certManagerLayoutRoute, } as any) -const certManagerCertificatesPageRouteRoute = - certManagerCertificatesPageRouteImport.update({ - id: '/certificates', - path: '/certificates', - getParentRoute: () => certManagerLayoutRoute, - } as any) - const certManagerCertificateAuthoritiesPageRouteRoute = certManagerCertificateAuthoritiesPageRouteImport.update({ id: '/certificate-authorities', @@ -2786,13 +2778,6 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof certManagerCertificateAuthoritiesPageRouteImport parentRoute: typeof certManagerLayoutImport } - '/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/certificates': { - id: '/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/certificates' - path: '/certificates' - fullPath: '/projects/cert-management/$projectId/certificates' - preLoaderRoute: typeof certManagerCertificatesPageRouteImport - parentRoute: typeof certManagerLayoutImport - } '/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/policies': { id: '/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/policies' path: '/policies' @@ -4126,7 +4111,6 @@ const AuthenticateInjectOrgDetailsOrgLayoutProjectsCertManagementProjectIdCertMa interface certManagerLayoutRouteChildren { certManagerAlertingPageRouteRoute: typeof certManagerAlertingPageRouteRoute certManagerCertificateAuthoritiesPageRouteRoute: typeof certManagerCertificateAuthoritiesPageRouteRoute - certManagerCertificatesPageRouteRoute: typeof certManagerCertificatesPageRouteRoute certManagerPoliciesPageRouteRoute: typeof certManagerPoliciesPageRouteRoute certManagerSettingsPageRouteRoute: typeof certManagerSettingsPageRouteRoute projectAccessControlPageRouteCertManagerRoute: typeof projectAccessControlPageRouteCertManagerRoute @@ -4147,7 +4131,6 @@ const certManagerLayoutRouteChildren: certManagerLayoutRouteChildren = { certManagerAlertingPageRouteRoute: certManagerAlertingPageRouteRoute, certManagerCertificateAuthoritiesPageRouteRoute: certManagerCertificateAuthoritiesPageRouteRoute, - certManagerCertificatesPageRouteRoute: certManagerCertificatesPageRouteRoute, certManagerPoliciesPageRouteRoute: certManagerPoliciesPageRouteRoute, certManagerSettingsPageRouteRoute: certManagerSettingsPageRouteRoute, projectAccessControlPageRouteCertManagerRoute: @@ -5061,7 +5044,6 @@ export interface FileRoutesByFullPath { '/organization/app-connections/$appConnection/oauth/callback': typeof organizationAppConnectionsOauthCallbackPageRouteRoute '/projects/cert-management/$projectId/alerting': typeof certManagerAlertingPageRouteRoute '/projects/cert-management/$projectId/certificate-authorities': typeof certManagerCertificateAuthoritiesPageRouteRoute - '/projects/cert-management/$projectId/certificates': typeof certManagerCertificatesPageRouteRoute '/projects/cert-management/$projectId/policies': typeof certManagerPoliciesPageRouteRoute '/projects/cert-management/$projectId/settings': typeof certManagerSettingsPageRouteRoute '/projects/kms/$projectId/kmip': typeof kmsKmipPageRouteRoute @@ -5294,7 +5276,6 @@ export interface FileRoutesByTo { '/organization/app-connections/$appConnection/oauth/callback': typeof organizationAppConnectionsOauthCallbackPageRouteRoute '/projects/cert-management/$projectId/alerting': typeof certManagerAlertingPageRouteRoute '/projects/cert-management/$projectId/certificate-authorities': typeof certManagerCertificateAuthoritiesPageRouteRoute - '/projects/cert-management/$projectId/certificates': typeof certManagerCertificatesPageRouteRoute '/projects/cert-management/$projectId/policies': typeof certManagerPoliciesPageRouteRoute '/projects/cert-management/$projectId/settings': typeof certManagerSettingsPageRouteRoute '/projects/kms/$projectId/kmip': typeof kmsKmipPageRouteRoute @@ -5538,7 +5519,6 @@ export interface FileRoutesById { '/_authenticate/_inject-org-details/_org-layout/organization/app-connections/$appConnection/oauth/callback': typeof organizationAppConnectionsOauthCallbackPageRouteRoute '/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/alerting': typeof certManagerAlertingPageRouteRoute '/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/certificate-authorities': typeof certManagerCertificateAuthoritiesPageRouteRoute - '/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/certificates': typeof certManagerCertificatesPageRouteRoute '/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/policies': typeof certManagerPoliciesPageRouteRoute '/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/settings': typeof certManagerSettingsPageRouteRoute '/_authenticate/_inject-org-details/_org-layout/projects/kms/$projectId/_kms-layout/kmip': typeof kmsKmipPageRouteRoute From 968284956b43c43392f8014b58f5331b935169a8 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Thu, 30 Oct 2025 02:17:37 +0530 Subject: [PATCH 07/79] feat: adds app connection WIP --- backend/src/lib/api-docs/constants.ts | 6 + .../app-connection-router.ts | 7 +- .../chef-connection-router.ts | 84 ++++++ .../routes/v1/app-connection-routers/index.ts | 4 +- .../app-connection/app-connection-enums.ts | 3 +- .../app-connection/app-connection-fns.ts | 12 +- .../app-connection/app-connection-maps.ts | 6 +- .../app-connection/app-connection-service.ts | 8 +- .../app-connection/app-connection-types.ts | 14 +- .../chef/chef-connection-enums.ts | 3 + .../chef/chef-connection-fns.ts | 264 ++++++++++++++++++ .../chef/chef-connection-schemas.ts | 77 +++++ .../chef/chef-connection-service.ts | 40 +++ .../chef/chef-connection-types.ts | 32 +++ .../src/services/app-connection/chef/index.ts | 4 + .../integration-auth/integration-list.ts | 3 +- frontend/public/images/integrations/Chef.png | Bin 0 -> 4411 bytes frontend/src/helpers/appConnections.ts | 6 +- .../src/hooks/api/appConnections/enums.ts | 3 +- .../api/appConnections/types/app-options.ts | 8 +- .../appConnections/types/chef-connection.ts | 16 ++ .../hooks/api/appConnections/types/index.ts | 5 +- .../AppConnectionForm/AppConnectionForm.tsx | 5 + .../AppConnectionForm/ChefConnectionForm.tsx | 197 +++++++++++++ 24 files changed, 789 insertions(+), 18 deletions(-) create mode 100644 backend/src/server/routes/v1/app-connection-routers/chef-connection-router.ts create mode 100644 backend/src/services/app-connection/chef/chef-connection-enums.ts create mode 100644 backend/src/services/app-connection/chef/chef-connection-fns.ts create mode 100644 backend/src/services/app-connection/chef/chef-connection-schemas.ts create mode 100644 backend/src/services/app-connection/chef/chef-connection-service.ts create mode 100644 backend/src/services/app-connection/chef/chef-connection-types.ts create mode 100644 backend/src/services/app-connection/chef/index.ts create mode 100644 frontend/public/images/integrations/Chef.png create mode 100644 frontend/src/hooks/api/appConnections/types/chef-connection.ts create mode 100644 frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/ChefConnectionForm.tsx diff --git a/backend/src/lib/api-docs/constants.ts b/backend/src/lib/api-docs/constants.ts index dde9b4e35..cd0782483 100644 --- a/backend/src/lib/api-docs/constants.ts +++ b/backend/src/lib/api-docs/constants.ts @@ -2376,6 +2376,12 @@ export const AppConnections = { }, LARAVEL_FORGE: { apiToken: "The API token used to authenticate with Laravel Forge." + }, + CHEF: { + serverUrl: "The URL of the Chef server to connect to.", + orgName: "The name of the Chef organization to connect to.", + userName: "The username used to access Chef.", + privateKey: "The private key used to access Chef." } } }; diff --git a/backend/src/server/routes/v1/app-connection-routers/app-connection-router.ts b/backend/src/server/routes/v1/app-connection-routers/app-connection-router.ts index c799ef0f0..29f22621f 100644 --- a/backend/src/server/routes/v1/app-connection-routers/app-connection-router.ts +++ b/backend/src/server/routes/v1/app-connection-routers/app-connection-router.ts @@ -48,6 +48,7 @@ import { ChecklyConnectionListItemSchema, SanitizedChecklyConnectionSchema } from "@app/services/app-connection/checkly"; +import { ChefConnectionListItemSchema, SanitizedChefConnectionSchema } from "@app/services/app-connection/chef"; import { CloudflareConnectionListItemSchema, SanitizedCloudflareConnectionSchema @@ -163,7 +164,8 @@ const SanitizedAppConnectionSchema = z.union([ ...SanitizedOktaConnectionSchema.options, ...SanitizedAzureADCSConnectionSchema.options, ...SanitizedRedisConnectionSchema.options, - ...SanitizedLaravelForgeConnectionSchema.options + ...SanitizedLaravelForgeConnectionSchema.options, + ...SanitizedChefConnectionSchema.options ]); const AppConnectionOptionsSchema = z.discriminatedUnion("app", [ @@ -206,7 +208,8 @@ const AppConnectionOptionsSchema = z.discriminatedUnion("app", [ OktaConnectionListItemSchema, AzureADCSConnectionListItemSchema, RedisConnectionListItemSchema, - LaravelForgeConnectionListItemSchema + LaravelForgeConnectionListItemSchema, + ChefConnectionListItemSchema ]); export const registerAppConnectionRouter = async (server: FastifyZodProvider) => { diff --git a/backend/src/server/routes/v1/app-connection-routers/chef-connection-router.ts b/backend/src/server/routes/v1/app-connection-routers/chef-connection-router.ts new file mode 100644 index 000000000..d57bd354f --- /dev/null +++ b/backend/src/server/routes/v1/app-connection-routers/chef-connection-router.ts @@ -0,0 +1,84 @@ +// import z from "zod"; + +// import { readLimit } from "@app/server/config/rateLimiter"; +// import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; +import { AppConnection } from "@app/services/app-connection/app-connection-enums"; +import { + CreateChefConnectionSchema, + SanitizedChefConnectionSchema, + UpdateChefConnectionSchema +} from "@app/services/app-connection/chef"; + +// import { AuthMode } from "@app/services/auth/auth-type"; +import { registerAppConnectionEndpoints } from "./app-connection-endpoints"; + +export const registerChefConnectionRouter = async (server: FastifyZodProvider) => { + registerAppConnectionEndpoints({ + app: AppConnection.Chef, + server, + sanitizedResponseSchema: SanitizedChefConnectionSchema, + createSchema: CreateChefConnectionSchema, + updateSchema: UpdateChefConnectionSchema + }); + + // server.route({ + // method: "GET", + // url: `/:connectionId/data-bags`, + // config: { + // rateLimit: readLimit + // }, + // schema: { + // params: z.object({ + // connectionId: z.string().uuid() + // }), + // response: { + // 200: z + // .object({ + // id: z.string(), + // name: z.string() + // }) + // .array() + // } + // }, + // onRequest: verifyAuth([AuthMode.JWT]), + // handler: async (req) => { + // const { connectionId } = req.params; + // const dataBags = await server.services.appConnection.chef.listDataBags(connectionId, req.permission); + + // return dataBags; + // } + // }); + + // server.route({ + // method: "GET", + // url: `/:connectionId/data-bags/:dataBagName/items`, + // config: { + // rateLimit: readLimit + // }, + // schema: { + // params: z.object({ + // connectionId: z.string().uuid(), + // dataBagName: z.string() + // }), + // response: { + // 200: z + // .object({ + // id: z.string(), + // name: z.string() + // }) + // .array() + // } + // }, + // onRequest: verifyAuth([AuthMode.JWT]), + // handler: async (req) => { + // const { connectionId, dataBagName } = req.params; + // const dataBagItems = await server.services.appConnection.chef.listDataBagItems( + // connectionId, + // dataBagName, + // req.permission + // ); + + // return dataBagItems; + // } + // }); +}; diff --git a/backend/src/server/routes/v1/app-connection-routers/index.ts b/backend/src/server/routes/v1/app-connection-routers/index.ts index 2e3da4420..a24e72766 100644 --- a/backend/src/server/routes/v1/app-connection-routers/index.ts +++ b/backend/src/server/routes/v1/app-connection-routers/index.ts @@ -13,6 +13,7 @@ import { registerAzureKeyVaultConnectionRouter } from "./azure-key-vault-connect import { registerBitbucketConnectionRouter } from "./bitbucket-connection-router"; import { registerCamundaConnectionRouter } from "./camunda-connection-router"; import { registerChecklyConnectionRouter } from "./checkly-connection-router"; +import { registerChefConnectionRouter } from "./chef-connection-router"; import { registerCloudflareConnectionRouter } from "./cloudflare-connection-router"; import { registerDatabricksConnectionRouter } from "./databricks-connection-router"; import { registerDigitalOceanConnectionRouter } from "./digital-ocean-connection-router"; @@ -84,5 +85,6 @@ export const APP_CONNECTION_REGISTER_ROUTER_MAP: Record [value, key]) @@ -204,7 +205,8 @@ export const listAppConnectionOptions = (projectType?: ProjectType) => { getDigitalOceanConnectionListItem(), getNetlifyConnectionListItem(), getOktaConnectionListItem(), - getRedisConnectionListItem() + getRedisConnectionListItem(), + getChefConnectionListItem() ] .filter((option) => { switch (projectType) { @@ -334,7 +336,8 @@ export const validateAppConnectionCredentials = async ( [AppConnection.DigitalOcean]: validateDigitalOceanConnectionCredentials as TAppConnectionCredentialsValidator, [AppConnection.Okta]: validateOktaConnectionCredentials as TAppConnectionCredentialsValidator, [AppConnection.Netlify]: validateNetlifyConnectionCredentials as TAppConnectionCredentialsValidator, - [AppConnection.Redis]: validateRedisConnectionCredentials as TAppConnectionCredentialsValidator + [AppConnection.Redis]: validateRedisConnectionCredentials as TAppConnectionCredentialsValidator, + [AppConnection.Chef]: validateChefConnectionCredentials as TAppConnectionCredentialsValidator }; return VALIDATE_APP_CONNECTION_CREDENTIALS_MAP[appConnection.app](appConnection, gatewayService, gatewayV2Service); @@ -401,6 +404,8 @@ export const getAppConnectionMethodName = (method: TAppConnection["method"]) => case RenderConnectionMethod.ApiKey: case ChecklyConnectionMethod.ApiKey: return "API Key"; + case ChefConnectionMethod.UserKey: + return "User Key"; case SupabaseConnectionMethod.AccessToken: return "Access Token"; default: @@ -474,7 +479,8 @@ export const TRANSITION_CONNECTION_CREDENTIALS_TO_PLATFORM: Record< [AppConnection.Netlify]: platformManagedCredentialsNotSupported, [AppConnection.Okta]: platformManagedCredentialsNotSupported, [AppConnection.Redis]: platformManagedCredentialsNotSupported, - [AppConnection.LaravelForge]: platformManagedCredentialsNotSupported + [AppConnection.LaravelForge]: platformManagedCredentialsNotSupported, + [AppConnection.Chef]: platformManagedCredentialsNotSupported }; export const enterpriseAppCheck = async ( diff --git a/backend/src/services/app-connection/app-connection-maps.ts b/backend/src/services/app-connection/app-connection-maps.ts index c01d9d1b4..93cd18f82 100644 --- a/backend/src/services/app-connection/app-connection-maps.ts +++ b/backend/src/services/app-connection/app-connection-maps.ts @@ -40,7 +40,8 @@ export const APP_CONNECTION_NAME_MAP: Record = { [AppConnection.DigitalOcean]: "DigitalOcean App Platform", [AppConnection.Netlify]: "Netlify", [AppConnection.Okta]: "Okta", - [AppConnection.Redis]: "Redis" + [AppConnection.Redis]: "Redis", + [AppConnection.Chef]: "Chef" }; export const APP_CONNECTION_PLAN_MAP: Record = { @@ -83,5 +84,6 @@ export const APP_CONNECTION_PLAN_MAP: Record>>; @@ -322,6 +329,7 @@ export type TAppConnectionInput = { id: string } & ( | TNetlifyConnectionInput | TOktaConnectionInput | TRedisConnectionInput + | TChefConnectionInput ); export type TSqlConnectionInput = @@ -386,7 +394,8 @@ export type TAppConnectionConfig = | TDigitalOceanConnectionConfig | TNetlifyConnectionConfig | TOktaConnectionConfig - | TRedisConnectionConfig; + | TRedisConnectionConfig + | TChefConnectionConfig; export type TValidateAppConnectionCredentialsSchema = | TValidateAwsConnectionCredentialsSchema @@ -428,7 +437,8 @@ export type TValidateAppConnectionCredentialsSchema = | TValidateDigitalOceanCredentialsSchema | TValidateNetlifyConnectionCredentialsSchema | TValidateOktaConnectionCredentialsSchema - | TValidateRedisConnectionCredentialsSchema; + | TValidateRedisConnectionCredentialsSchema + | TValidateChefConnectionCredentialsSchema; export type TListAwsConnectionKmsKeys = { connectionId: string; diff --git a/backend/src/services/app-connection/chef/chef-connection-enums.ts b/backend/src/services/app-connection/chef/chef-connection-enums.ts new file mode 100644 index 000000000..58e59c3ba --- /dev/null +++ b/backend/src/services/app-connection/chef/chef-connection-enums.ts @@ -0,0 +1,3 @@ +export enum ChefConnectionMethod { + UserKey = "user-key" +} diff --git a/backend/src/services/app-connection/chef/chef-connection-fns.ts b/backend/src/services/app-connection/chef/chef-connection-fns.ts new file mode 100644 index 000000000..fe9e917b0 --- /dev/null +++ b/backend/src/services/app-connection/chef/chef-connection-fns.ts @@ -0,0 +1,264 @@ +import { AxiosError } from "axios"; +import crypto from "crypto"; + +import { request } from "@app/lib/config/request"; +import { BadRequestError } from "@app/lib/errors"; +import { removeTrailingSlash } from "@app/lib/fn"; +import { blockLocalAndPrivateIpAddresses } from "@app/lib/validator"; +import { IntegrationUrls } from "@app/services/integration-auth/integration-list"; + +import { AppConnection } from "../app-connection-enums"; +import { ChefConnectionMethod } from "./chef-connection-enums"; +import { TChefConnection, TChefConnectionConfig, TChefDataBag } from "./chef-connection-types"; + +export const getChefServerUrl = async (serverUrl?: string) => { + const chefServerUrl = serverUrl ? removeTrailingSlash(serverUrl) : IntegrationUrls.CHEF_API_URL; + + await blockLocalAndPrivateIpAddresses(chefServerUrl); + + return chefServerUrl; +}; + +// Helper to ensure private key is in proper PEM format +const formatPrivateKey = (key: string): string => { + let formattedKey = key.trim(); + + // Ensure proper line breaks in PEM format (handle escaped newlines) + formattedKey = formattedKey.replace(/\\n/g, "\n"); + + // Remove any extra whitespace between lines + formattedKey = formattedKey.replace(/\n\s+/g, "\n"); + + // If key doesn't have headers, add PKCS#1 RSA headers + if (!formattedKey.includes("BEGIN")) { + formattedKey = `-----BEGIN RSA PRIVATE KEY-----\n${formattedKey}\n-----END RSA PRIVATE KEY-----`; + } + + // Ensure the key has proper line breaks after headers and before footers + formattedKey = formattedKey.replace(/(-----BEGIN[^-]+-----)\s*/g, "$1\n").replace(/\s*(-----END[^-]+-----)/g, "\n$1"); + + // Remove any duplicate newlines + formattedKey = formattedKey.replace(/\n{3,}/g, "\n\n"); + + return formattedKey; +}; + +// Chef API authentication helper +const getChefAuthHeaders = ( + method: string, + path: string, + body: string, + userId: string, + privateKey: string, + timestamp: string +) => { + const hashedPath = crypto.createHash("sha256").update(path).digest("base64"); + const hashedBody = crypto.createHash("sha256").update(body).digest("base64"); + + console.log("1", { + method, + path, + body, + userId, + privateKey, + timestamp + }); + const canonicalRequest = [ + `Method:${method}`, + `Hashed Path:${hashedPath}`, + `X-Ops-Content-Hash:${hashedBody}`, + `X-Ops-Timestamp:${timestamp}`, + `X-Ops-UserId:${userId}` + ].join("\n"); + + // Format the private key properly + const formattedKey = formatPrivateKey(privateKey); + + console.log("Chef Auth Debug - Key format:", { + formattedKey, + hasHeader: formattedKey.includes("BEGIN"), + keyType: formattedKey.match(/-----BEGIN ([^-]+)-----/)?.[1], + keyLength: formattedKey.length, + startsCorrectly: formattedKey.startsWith("-----BEGIN"), + endsCorrectly: formattedKey.endsWith("-----") + }); + + // Create key object with proper format + let keyObject; + try { + keyObject = crypto.createPrivateKey({ + key: Buffer.from(formattedKey), + format: "pem" + }); + } catch (error) { + console.error("Failed to create private key:", error); + console.error("Key preview (first 100 chars):", formattedKey.substring(0, 100)); + throw new Error(`Invalid private key format: ${error instanceof Error ? error.message : "Unknown error"}`); + } + + // Sign using the key object with SHA-256 (FIPS-compliant) + const signature = crypto.sign("sha256", Buffer.from(canonicalRequest), { + key: keyObject, + padding: crypto.constants.RSA_PKCS1_PADDING + }); + + const signatureBase64 = signature.toString("base64"); + + console.log("4", { signature, signatureBase64 }); + + // Split signature into 60 character chunks as required by Chef API + const signatureLines: string[] = []; + for (let i = 0; i < signatureBase64.length; i += 60) { + signatureLines.push(signatureBase64.substring(i, i + 60)); + } + + console.log("5", signatureLines); + const headers: Record = { + "X-Ops-Sign": "algorithm=sha256;version=1.3", + "X-Ops-UserId": userId, + "X-Ops-Timestamp": timestamp, + "X-Ops-Content-Hash": hashedBody, + "X-Chef-Version": "12.0.2", + "X-Ops-Server-API-Version": "1" + }; + + console.log("6", headers); + + signatureLines.forEach((line, index) => { + headers[`X-Ops-Authorization-${index + 1}`] = line; + }); + + console.log("7", headers); + + return headers; +}; + +export const getChefConnectionListItem = () => { + return { + name: "Chef" as const, + app: AppConnection.Chef as const, + methods: Object.values(ChefConnectionMethod) as [ChefConnectionMethod.UserKey] + }; +}; + +export const listChefDataBags = async (appConnection: TChefConnection): Promise => { + const { + credentials: { serverUrl, userName, privateKey } + } = appConnection; + + try { + const path = "/data"; + const timestamp = `${new Date().toISOString().slice(0, -5)}Z`; + const body = ""; + + const hostServerUrl = await getChefServerUrl(serverUrl); + + const headers = getChefAuthHeaders("GET", path, body, userName, privateKey, timestamp); + + const res = await request.get>(`${hostServerUrl}${path}`, { + headers: { + ...headers, + Accept: "application/json" + } + }); + + // Chef returns data bags as an object with keys being data bag names + return Object.keys(res.data).map((name) => ({ + name, + id: name + })); + } catch (error) { + if (error instanceof AxiosError) { + // throw new BadRequestError({ + // message: `Failed to list Chef data bags: ${error.response?.data?.error || error.message}` + // }); + } + throw new BadRequestError({ + message: "Unable to list Chef data bags" + }); + } +}; + +export const validateChefConnectionCredentials = async (config: TChefConnectionConfig) => { + const { credentials: inputCredentials } = config; + + try { + const path = `/organizations/${inputCredentials.orgName}/users/${inputCredentials.userName}`; + const timestamp = `${new Date().toISOString().slice(0, -5)}Z`; + const body = ""; + + const hostServerUrl = await getChefServerUrl(inputCredentials.serverUrl); + + console.log("Chef validate - attempting connection to:", hostServerUrl); + const headers = getChefAuthHeaders( + "GET", + path, + body, + inputCredentials.userName, + inputCredentials.privateKey, + timestamp + ); + + const data = await request.get(`${hostServerUrl}${path}`, { + headers: { + ...headers, + Accept: "application/json" + } + }); + console.log("Chef validate - data:", data); + } catch (error: unknown) { + if (error instanceof AxiosError) { + const errorData = error.response?.data as { error?: string } | undefined; + console.log("Chef validate - error:", errorData); + throw new BadRequestError({ + message: `Failed to validate Chef credentials: ${errorData?.error || error.message || "Unknown error"}` + }); + } + throw new BadRequestError({ + message: "Unable to validate Chef connection: verify credentials" + }); + } + + return inputCredentials; +}; + +export const listChefDataBagItems = async ( + appConnection: TChefConnection, + dataBagName: string +): Promise => { + const { + credentials: { serverUrl, userName, privateKey } + } = appConnection; + + try { + const path = `/data/${dataBagName}`; + const timestamp = `${new Date().toISOString().slice(0, -5)}Z`; + const body = ""; + + const hostServerUrl = await getChefServerUrl(serverUrl); + + const headers = getChefAuthHeaders("GET", path, body, userName, privateKey, timestamp); + + const res = await request.get>(`${hostServerUrl}${path}`, { + headers: { + ...headers, + Accept: "application/json" + } + }); + + // Chef returns data bag items as an object with keys being item names + return Object.keys(res.data).map((name) => ({ + name, + id: name + })); + } catch (error) { + if (error instanceof AxiosError) { + // throw new BadRequestError({ + // message: `Failed to list Chef data bag items: ${error.response?.data?.error || error.message}` + // }); + } + throw new BadRequestError({ + message: "Unable to list Chef data bag items" + }); + } +}; diff --git a/backend/src/services/app-connection/chef/chef-connection-schemas.ts b/backend/src/services/app-connection/chef/chef-connection-schemas.ts new file mode 100644 index 000000000..e5a3687a2 --- /dev/null +++ b/backend/src/services/app-connection/chef/chef-connection-schemas.ts @@ -0,0 +1,77 @@ +import z from "zod"; + +import { AppConnections } from "@app/lib/api-docs"; +import { AppConnection } from "@app/services/app-connection/app-connection-enums"; +import { + BaseAppConnectionSchema, + GenericCreateAppConnectionFieldsSchema, + GenericUpdateAppConnectionFieldsSchema +} from "@app/services/app-connection/app-connection-schemas"; + +import { ChefConnectionMethod } from "./chef-connection-enums"; + +export const ChefConnectionUserKeyCredentialsSchema = z.object({ + serverUrl: z + .string() + .trim() + .url("Valid Chef Server URL required") + .optional() + .describe(AppConnections.CREDENTIALS.CHEF.serverUrl), + orgName: z + .string() + .trim() + .min(1, "Organization name required") + .max(256, "Organization name cannot exceed 256 characters") + .describe(AppConnections.CREDENTIALS.CHEF.orgName), + userName: z + .string() + .trim() + .min(1, "User name required") + .max(256, "User name cannot exceed 256 characters") + .describe(AppConnections.CREDENTIALS.CHEF.userName), + privateKey: z + .string() + .trim() + .min(1, "Private key required") + .max(16384, "Private key cannot exceed 16384 characters") + .describe(AppConnections.CREDENTIALS.CHEF.privateKey) +}); + +const BaseChefConnectionSchema = BaseAppConnectionSchema.extend({ app: z.literal(AppConnection.Chef) }); + +export const ChefConnectionSchema = BaseChefConnectionSchema.extend({ + method: z.literal(ChefConnectionMethod.UserKey), + credentials: ChefConnectionUserKeyCredentialsSchema +}); + +export const SanitizedChefConnectionSchema = z.discriminatedUnion("method", [ + BaseChefConnectionSchema.extend({ + method: z.literal(ChefConnectionMethod.UserKey), + credentials: ChefConnectionUserKeyCredentialsSchema.pick({ serverUrl: true, orgName: true, userName: true }) + }) +]); + +export const ValidateChefConnectionCredentialsSchema = z.discriminatedUnion("method", [ + z.object({ + method: z.literal(ChefConnectionMethod.UserKey).describe(AppConnections.CREATE(AppConnection.Chef).method), + credentials: ChefConnectionUserKeyCredentialsSchema.describe(AppConnections.CREATE(AppConnection.Chef).credentials) + }) +]); + +export const CreateChefConnectionSchema = ValidateChefConnectionCredentialsSchema.and( + GenericCreateAppConnectionFieldsSchema(AppConnection.Chef) +); + +export const UpdateChefConnectionSchema = z + .object({ + credentials: ChefConnectionUserKeyCredentialsSchema.optional().describe( + AppConnections.UPDATE(AppConnection.Chef).credentials + ) + }) + .and(GenericUpdateAppConnectionFieldsSchema(AppConnection.Chef)); + +export const ChefConnectionListItemSchema = z.object({ + name: z.literal("Chef"), + app: z.literal(AppConnection.Chef), + methods: z.nativeEnum(ChefConnectionMethod).array() +}); diff --git a/backend/src/services/app-connection/chef/chef-connection-service.ts b/backend/src/services/app-connection/chef/chef-connection-service.ts new file mode 100644 index 000000000..8357a8e4d --- /dev/null +++ b/backend/src/services/app-connection/chef/chef-connection-service.ts @@ -0,0 +1,40 @@ +import { ForbiddenRequestError } from "@app/lib/errors"; +// import { logger } from "@app/lib/logger"; +import { OrgServiceActor } from "@app/lib/types"; + +import { AppConnection } from "../app-connection-enums"; +import { listChefDataBagItems, listChefDataBags } from "./chef-connection-fns"; +import { TChefConnection } from "./chef-connection-types"; + +type TGetAppConnectionFunc = ( + app: AppConnection, + connectionId: string, + actor: OrgServiceActor +) => Promise; + +export const chefConnectionService = (getAppConnection: TGetAppConnectionFunc) => { + const listDataBags = async (appConnectionId: string, actor: OrgServiceActor) => { + const appConnection = await getAppConnection(AppConnection.Chef, appConnectionId, actor); + + if (!appConnection) { + throw new ForbiddenRequestError({ message: "App connection not found" }); + } + + return listChefDataBags(appConnection); + }; + + const listDataBagItems = async (appConnectionId: string, dataBagName: string, actor: OrgServiceActor) => { + const appConnection = await getAppConnection(AppConnection.Chef, appConnectionId, actor); + + if (!appConnection) { + throw new ForbiddenRequestError({ message: "App connection not found" }); + } + + return listChefDataBagItems(appConnection, dataBagName); + }; + + return { + listDataBags, + listDataBagItems + }; +}; diff --git a/backend/src/services/app-connection/chef/chef-connection-types.ts b/backend/src/services/app-connection/chef/chef-connection-types.ts new file mode 100644 index 000000000..7996026af --- /dev/null +++ b/backend/src/services/app-connection/chef/chef-connection-types.ts @@ -0,0 +1,32 @@ +import z from "zod"; + +import { DiscriminativePick } from "@app/lib/types"; + +import { AppConnection } from "../app-connection-enums"; +import { + ChefConnectionSchema, + CreateChefConnectionSchema, + ValidateChefConnectionCredentialsSchema +} from "./chef-connection-schemas"; + +export type TChefConnection = z.infer; + +export type TChefConnectionInput = z.infer & { + app: AppConnection.Chef; +}; + +export type TValidateChefConnectionCredentialsSchema = typeof ValidateChefConnectionCredentialsSchema; + +export type TChefConnectionConfig = DiscriminativePick & { + orgId: string; +}; + +export type TChefDataBag = { + name: string; + id: string; +}; + +export type TChefDataBagItem = { + name: string; + id: string; +}; diff --git a/backend/src/services/app-connection/chef/index.ts b/backend/src/services/app-connection/chef/index.ts new file mode 100644 index 000000000..e02479d0e --- /dev/null +++ b/backend/src/services/app-connection/chef/index.ts @@ -0,0 +1,4 @@ +export * from "./chef-connection-enums"; +export * from "./chef-connection-fns"; +export * from "./chef-connection-schemas"; +export * from "./chef-connection-types"; diff --git a/backend/src/services/integration-auth/integration-list.ts b/backend/src/services/integration-auth/integration-list.ts index 0608bbd4b..e4e1d3126 100644 --- a/backend/src/services/integration-auth/integration-list.ts +++ b/backend/src/services/integration-auth/integration-list.ts @@ -104,7 +104,8 @@ export enum IntegrationUrls { GCP_SERVICE_USAGE_URL = "https://serviceusage.googleapis.com", GCP_CLOUD_PLATFORM_SCOPE = "https://www.googleapis.com/auth/cloud-platform", - GITHUB_USER_INSTALLATIONS = "https://api.github.com/user/installations" + GITHUB_USER_INSTALLATIONS = "https://api.github.com/user/installations", + CHEF_API_URL = "https://api.chef.io" } export const getIntegrationOptions = async () => { diff --git a/frontend/public/images/integrations/Chef.png b/frontend/public/images/integrations/Chef.png new file mode 100644 index 0000000000000000000000000000000000000000..8d8886c218ac70114639ca70b889982d11664851 GIT binary patch literal 4411 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 { @@ -199,6 +201,8 @@ export const getAppConnectionMethodDetails = (method: TAppConnection["method"]) case RenderConnectionMethod.ApiKey: case ChecklyConnectionMethod.ApiKey: return { name: "API Key", icon: faKey }; + case ChefConnectionMethod.UserKey: + return { name: "User Key", icon: faKey }; case AzureClientSecretsConnectionMethod.ClientSecret: case AzureAppConfigurationConnectionMethod.ClientSecret: case AzureKeyVaultConnectionMethod.ClientSecret: diff --git a/frontend/src/hooks/api/appConnections/enums.ts b/frontend/src/hooks/api/appConnections/enums.ts index 66fed8a5d..c58fb9194 100644 --- a/frontend/src/hooks/api/appConnections/enums.ts +++ b/frontend/src/hooks/api/appConnections/enums.ts @@ -38,5 +38,6 @@ export enum AppConnection { Netlify = "netlify", Okta = "okta", Redis = "redis", - LaravelForge = "laravel-forge" + LaravelForge = "laravel-forge", + Chef = "chef" } diff --git a/frontend/src/hooks/api/appConnections/types/app-options.ts b/frontend/src/hooks/api/appConnections/types/app-options.ts index 797e7a7c6..edf26d2e1 100644 --- a/frontend/src/hooks/api/appConnections/types/app-options.ts +++ b/frontend/src/hooks/api/appConnections/types/app-options.ts @@ -148,6 +148,10 @@ export type TChecklyConnectionOption = TAppConnectionOptionBase & { app: AppConnection.Checkly; }; +export type TChefConnectionOption = TAppConnectionOptionBase & { + app: AppConnection.Chef; +}; + export type TSupabaseConnectionOption = TAppConnectionOptionBase & { app: AppConnection.Supabase; }; @@ -215,7 +219,8 @@ export type TAppConnectionOption = | TNetlifyConnectionOption | TOktaConnectionOption | TAzureAdCsConnectionOption - | TLaravelForgeConnectionOption; + | TLaravelForgeConnectionOption + | TChefConnectionOption; export type TAppConnectionOptionMap = { [AppConnection.AWS]: TAwsConnectionOption; @@ -258,4 +263,5 @@ export type TAppConnectionOptionMap = { [AppConnection.AzureADCS]: TAzureAdCsConnectionOption; [AppConnection.Redis]: TRedisConnectionOption; [AppConnection.LaravelForge]: TLaravelForgeConnectionOption; + [AppConnection.Chef]: TChefConnectionOption; }; diff --git a/frontend/src/hooks/api/appConnections/types/chef-connection.ts b/frontend/src/hooks/api/appConnections/types/chef-connection.ts new file mode 100644 index 000000000..371d42199 --- /dev/null +++ b/frontend/src/hooks/api/appConnections/types/chef-connection.ts @@ -0,0 +1,16 @@ +import { AppConnection } from "@app/hooks/api/appConnections/enums"; +import { TRootAppConnection } from "@app/hooks/api/appConnections/types/root-connection"; + +export enum ChefConnectionMethod { + UserKey = "user-key" +} + +export type TChefConnection = TRootAppConnection & { app: AppConnection.Chef } & { + method: ChefConnectionMethod.UserKey; + credentials: { + instanceUrl?: string; + orgName: string; + userName: string; + privateKey: string; + }; +}; diff --git a/frontend/src/hooks/api/appConnections/types/index.ts b/frontend/src/hooks/api/appConnections/types/index.ts index fd840d5de..2664a462c 100644 --- a/frontend/src/hooks/api/appConnections/types/index.ts +++ b/frontend/src/hooks/api/appConnections/types/index.ts @@ -40,6 +40,7 @@ import { TTerraformCloudConnection } from "./terraform-cloud-connection"; import { TVercelConnection } from "./vercel-connection"; import { TWindmillConnection } from "./windmill-connection"; import { TZabbixConnection } from "./zabbix-connection"; +import { TChefConnection } from "./chef-connection"; export * from "./1password-connection"; export * from "./auth0-connection"; @@ -79,6 +80,7 @@ export * from "./terraform-cloud-connection"; export * from "./vercel-connection"; export * from "./windmill-connection"; export * from "./zabbix-connection"; +export * from "./chef-connection"; export type TAppConnection = | TAwsConnection @@ -120,7 +122,8 @@ export type TAppConnection = | TDigitalOceanConnection | TNetlifyConnection | TOktaConnection - | TRedisConnection; + | TRedisConnection + | TChefConnection; export type TAvailableAppConnection = Pick; diff --git a/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/AppConnectionForm.tsx b/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/AppConnectionForm.tsx index c4115a4b7..eee0cd84f 100644 --- a/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/AppConnectionForm.tsx +++ b/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/AppConnectionForm.tsx @@ -20,6 +20,7 @@ import { AzureKeyVaultConnectionForm } from "./AzureKeyVaultConnectionForm"; import { BitbucketConnectionForm } from "./BitbucketConnectionForm"; import { CamundaConnectionForm } from "./CamundaConnectionForm"; import { ChecklyConnectionForm } from "./ChecklyConnectionForm"; +import { ChefConnectionForm } from "./ChefConnectionForm"; import { CloudflareConnectionForm } from "./CloudflareConnectionForm"; import { DatabricksConnectionForm } from "./DatabricksConnectionForm"; import { DigitalOceanConnectionForm } from "./DigitalOceanConnectionForm"; @@ -163,6 +164,8 @@ const CreateForm = ({ app, onComplete, projectId }: CreateFormProps) => { return ; case AppConnection.Checkly: return ; + case AppConnection.Chef: + return ; case AppConnection.Supabase: return ; case AppConnection.DigitalOcean: @@ -326,6 +329,8 @@ const UpdateForm = ({ appConnection, onComplete }: UpdateFormProps) => { return ; case AppConnection.Checkly: return ; + case AppConnection.Chef: + return ; case AppConnection.Supabase: return ; case AppConnection.DigitalOcean: diff --git a/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/ChefConnectionForm.tsx b/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/ChefConnectionForm.tsx new file mode 100644 index 000000000..d56a7523b --- /dev/null +++ b/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/ChefConnectionForm.tsx @@ -0,0 +1,197 @@ +import { Controller, FormProvider, useForm } from "react-hook-form"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { z } from "zod"; + +import { + Button, + FormControl, + Input, + ModalClose, + SecretInput, + Select, + SelectItem +} from "@app/components/v2"; +import { APP_CONNECTION_MAP, getAppConnectionMethodDetails } from "@app/helpers/appConnections"; +import { ChefConnectionMethod, TChefConnection } from "@app/hooks/api/appConnections"; +import { AppConnection } from "@app/hooks/api/appConnections/enums"; + +import { + genericAppConnectionFieldsSchema, + GenericAppConnectionsFields +} from "./GenericAppConnectionFields"; + +type Props = { + appConnection?: TChefConnection; + onSubmit: (formData: FormData) => Promise; +}; + +const rootSchema = genericAppConnectionFieldsSchema.extend({ + app: z.literal(AppConnection.Chef) +}); + +const formSchema = z.discriminatedUnion("method", [ + rootSchema.extend({ + method: z.literal(ChefConnectionMethod.UserKey), + credentials: z.object({ + serverUrl: z.string().trim().url("Valid Chef Server URL required").optional(), + orgName: z.string().trim().min(1, "Organization name required"), + userName: z.string().trim().min(1, "User name required"), + privateKey: z.string().trim().min(1, "Private key required") + }) + }) +]); + +type FormData = z.infer; + +export const ChefConnectionForm = ({ appConnection, onSubmit }: Props) => { + const isUpdate = Boolean(appConnection); + + const form = useForm({ + resolver: zodResolver(formSchema), + defaultValues: appConnection ?? { + app: AppConnection.Chef, + method: ChefConnectionMethod.UserKey + } + }); + + const { + handleSubmit, + control, + formState: { isSubmitting, isDirty } + } = form; + + console.log("form", form.formState.errors, form.getValues()); + + return ( + +
+ {!isUpdate && } + ( + + onChange(e.target.value)} + /> + + )} + /> + ( + + + + )} + /> + + ( + + onChange(e.target.value)} + /> + + )} + /> + ( + + onChange(e.target.value)} + /> + + )} + /> + ( + + onChange(e.target.value)} + /> + + )} + /> +
+ + + + +
+ +
+ ); +}; From ead15e459a5c5d1a0a87a5076836b552741ee698 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Thu, 30 Oct 2025 02:44:28 +0530 Subject: [PATCH 08/79] fix: app-connection --- .../chef/chef-connection-fns.ts | 169 +++++++----------- 1 file changed, 63 insertions(+), 106 deletions(-) diff --git a/backend/src/services/app-connection/chef/chef-connection-fns.ts b/backend/src/services/app-connection/chef/chef-connection-fns.ts index fe9e917b0..5b1056d42 100644 --- a/backend/src/services/app-connection/chef/chef-connection-fns.ts +++ b/backend/src/services/app-connection/chef/chef-connection-fns.ts @@ -43,94 +43,75 @@ const formatPrivateKey = (key: string): string => { return formattedKey; }; -// Chef API authentication helper const getChefAuthHeaders = ( method: string, path: string, body: string, userId: string, privateKey: string, - timestamp: string + apiVersion: "1.0" | "1.3" = "1.3" ) => { - const hashedPath = crypto.createHash("sha256").update(path).digest("base64"); - const hashedBody = crypto.createHash("sha256").update(body).digest("base64"); + const timestamp = new Date().toISOString().replace(/\.\d{3}Z$/, "Z"); // Remove milliseconds from timestamp - console.log("1", { - method, - path, - body, - userId, - privateKey, - timestamp - }); - const canonicalRequest = [ - `Method:${method}`, - `Hashed Path:${hashedPath}`, - `X-Ops-Content-Hash:${hashedBody}`, - `X-Ops-Timestamp:${timestamp}`, - `X-Ops-UserId:${userId}` - ].join("\n"); + // Calculate content hash based on version + let contentHash: string; + if (apiVersion === "1.3") { + contentHash = crypto.createHash("sha256").update(body).digest("base64"); + } else { + contentHash = crypto.createHash("sha1").update(body).digest("base64"); + } + + // Build canonical request based on version + let canonicalRequest: string; + if (apiVersion === "1.3") { + canonicalRequest = [ + `Method:${method}`, + `Path:${path}`, + `X-Ops-Content-Hash:${contentHash}`, + "X-Ops-Sign:version=1.3", + `X-Ops-Timestamp:${timestamp}`, + `X-Ops-UserId:${userId}`, + "X-Ops-Server-API-Version:1" + ].join("\n"); + } else { + const hashedPath = crypto.createHash("sha1").update(path).digest("base64"); + canonicalRequest = [ + `Method:${method}`, + `Hashed Path:${hashedPath}`, + `X-Ops-Content-Hash:${contentHash}`, + `X-Ops-Timestamp:${timestamp}`, + `X-Ops-UserId:${userId}` + ].join("\n"); + } // Format the private key properly const formattedKey = formatPrivateKey(privateKey); - console.log("Chef Auth Debug - Key format:", { - formattedKey, - hasHeader: formattedKey.includes("BEGIN"), - keyType: formattedKey.match(/-----BEGIN ([^-]+)-----/)?.[1], - keyLength: formattedKey.length, - startsCorrectly: formattedKey.startsWith("-----BEGIN"), - endsCorrectly: formattedKey.endsWith("-----") - }); + console.log("formattedKey", formattedKey); - // Create key object with proper format - let keyObject; - try { - keyObject = crypto.createPrivateKey({ - key: Buffer.from(formattedKey), - format: "pem" - }); - } catch (error) { - console.error("Failed to create private key:", error); - console.error("Key preview (first 100 chars):", formattedKey.substring(0, 100)); - throw new Error(`Invalid private key format: ${error instanceof Error ? error.message : "Unknown error"}`); - } - - // Sign using the key object with SHA-256 (FIPS-compliant) - const signature = crypto.sign("sha256", Buffer.from(canonicalRequest), { - key: keyObject, - padding: crypto.constants.RSA_PKCS1_PADDING - }); - - const signatureBase64 = signature.toString("base64"); - - console.log("4", { signature, signatureBase64 }); - - // Split signature into 60 character chunks as required by Chef API - const signatureLines: string[] = []; - for (let i = 0; i < signatureBase64.length; i += 60) { - signatureLines.push(signatureBase64.substring(i, i + 60)); - } - - console.log("5", signatureLines); - const headers: Record = { - "X-Ops-Sign": "algorithm=sha256;version=1.3", - "X-Ops-UserId": userId, - "X-Ops-Timestamp": timestamp, - "X-Ops-Content-Hash": hashedBody, - "X-Chef-Version": "12.0.2", - "X-Ops-Server-API-Version": "1" - }; - - console.log("6", headers); + // Sign the canonical request + const sign = crypto.createSign(apiVersion === "1.3" ? "RSA-SHA256" : "RSA-SHA1"); + sign.update(canonicalRequest); + const signature = sign.sign(formattedKey, "base64"); + // Split signature into 60-character chunks + const authHeaders: Record = {}; + const signatureLines = signature.match(/.{1,60}/g) || []; signatureLines.forEach((line, index) => { - headers[`X-Ops-Authorization-${index + 1}`] = line; + authHeaders[`X-Ops-Authorization-${index + 1}`] = line; }); - console.log("7", headers); - - return headers; + return { + Accept: "application/json", + "Content-Type": "application/json", + "X-Chef-Version": "14.0.0", + "X-Ops-Timestamp": timestamp, + "X-Ops-UserId": userId, + "X-Ops-Sign": apiVersion === "1.3" ? "version=1.3" : "algorithm=sha1;version=1.0", + "X-Ops-Content-Hash": contentHash, + ...(apiVersion === "1.3" && { "X-Ops-Server-API-Version": "1" }), + ...authHeaders + }; }; export const getChefConnectionListItem = () => { @@ -148,18 +129,14 @@ export const listChefDataBags = async (appConnection: TChefConnection): Promise< try { const path = "/data"; - const timestamp = `${new Date().toISOString().slice(0, -5)}Z`; const body = ""; const hostServerUrl = await getChefServerUrl(serverUrl); - const headers = getChefAuthHeaders("GET", path, body, userName, privateKey, timestamp); + const headers = getChefAuthHeaders("GET", path, body, userName, privateKey); const res = await request.get>(`${hostServerUrl}${path}`, { - headers: { - ...headers, - Accept: "application/json" - } + headers }); // Chef returns data bags as an object with keys being data bag names @@ -184,34 +161,18 @@ export const validateChefConnectionCredentials = async (config: TChefConnectionC try { const path = `/organizations/${inputCredentials.orgName}/users/${inputCredentials.userName}`; - const timestamp = `${new Date().toISOString().slice(0, -5)}Z`; - const body = ""; const hostServerUrl = await getChefServerUrl(inputCredentials.serverUrl); - console.log("Chef validate - attempting connection to:", hostServerUrl); - const headers = getChefAuthHeaders( - "GET", - path, - body, - inputCredentials.userName, - inputCredentials.privateKey, - timestamp - ); + const headers = getChefAuthHeaders("GET", path, "", inputCredentials.userName, inputCredentials.privateKey); - const data = await request.get(`${hostServerUrl}${path}`, { - headers: { - ...headers, - Accept: "application/json" - } + await request.get(`${hostServerUrl}${path}`, { + headers }); - console.log("Chef validate - data:", data); } catch (error: unknown) { if (error instanceof AxiosError) { - const errorData = error.response?.data as { error?: string } | undefined; - console.log("Chef validate - error:", errorData); throw new BadRequestError({ - message: `Failed to validate Chef credentials: ${errorData?.error || error.message || "Unknown error"}` + message: `Failed to validate Chef credentials: ${error.message || "Unknown error"}` }); } throw new BadRequestError({ @@ -232,18 +193,14 @@ export const listChefDataBagItems = async ( try { const path = `/data/${dataBagName}`; - const timestamp = `${new Date().toISOString().slice(0, -5)}Z`; const body = ""; const hostServerUrl = await getChefServerUrl(serverUrl); - const headers = getChefAuthHeaders("GET", path, body, userName, privateKey, timestamp); + const headers = getChefAuthHeaders("GET", path, body, userName, privateKey); const res = await request.get>(`${hostServerUrl}${path}`, { - headers: { - ...headers, - Accept: "application/json" - } + headers }); // Chef returns data bag items as an object with keys being item names @@ -253,9 +210,9 @@ export const listChefDataBagItems = async ( })); } catch (error) { if (error instanceof AxiosError) { - // throw new BadRequestError({ - // message: `Failed to list Chef data bag items: ${error.response?.data?.error || error.message}` - // }); + throw new BadRequestError({ + message: `Failed to list Chef data bag items: ${error.message || "Unknown error"}` + }); } throw new BadRequestError({ message: "Unable to list Chef data bag items" From fd010fe8231394fa4da9019cf9990c7807e185ed Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Thu, 30 Oct 2025 02:49:13 +0530 Subject: [PATCH 09/79] chore: removes console logs --- backend/src/services/app-connection/chef/chef-connection-fns.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/backend/src/services/app-connection/chef/chef-connection-fns.ts b/backend/src/services/app-connection/chef/chef-connection-fns.ts index 5b1056d42..a60325cc3 100644 --- a/backend/src/services/app-connection/chef/chef-connection-fns.ts +++ b/backend/src/services/app-connection/chef/chef-connection-fns.ts @@ -87,8 +87,6 @@ const getChefAuthHeaders = ( // Format the private key properly const formattedKey = formatPrivateKey(privateKey); - console.log("formattedKey", formattedKey); - // Sign the canonical request const sign = crypto.createSign(apiVersion === "1.3" ? "RSA-SHA256" : "RSA-SHA1"); sign.update(canonicalRequest); From 2eb56d87701a5aba806be8d3fb1c2be23dd5dea1 Mon Sep 17 00:00:00 2001 From: Carlos Monastyrski Date: Thu, 30 Oct 2025 00:46:48 -0300 Subject: [PATCH 10/79] PKI UI improvements --- .../routes/v1/certificate-profiles-router.ts | 34 +-- .../v1/pki-sync-routers/pki-sync-router.ts | 1 + .../certificate-profile-dal.ts | 117 +------- .../certificate-profile-schemas.ts | 5 - .../certificate-profile-service.test.ts | 146 +--------- .../certificate-profile-service.ts | 87 +----- .../certificate-profile-types.ts | 18 -- .../certificate-sync/certificate-sync-dal.ts | 3 + .../aws-certificate-manager-pki-sync-fns.ts | 2 +- .../src/services/pki-sync/pki-sync-service.ts | 1 + .../src/services/pki-sync/pki-sync-types.ts | 15 +- .../pki-syncs/CertificateManagementModal.tsx | 224 ++++++++-------- .../forms/PkiSyncCertificatesFields.tsx | 100 +++++-- .../pki-syncs/forms/PkiSyncReviewFields.tsx | 109 ++++++-- .../utilities/certificateDisplayUtils.tsx | 100 +++++++ frontend/src/hooks/api/ca/mutations.tsx | 8 +- .../hooks/api/certificateProfiles/index.ts | 1 - .../hooks/api/certificateProfiles/queries.tsx | 29 +- .../hooks/api/certificateProfiles/types.ts | 13 - frontend/src/hooks/api/certificates/types.ts | 1 + .../src/hooks/api/pkiSyncs/types/common.ts | 1 + .../PkiManagerLayout/PkiManagerLayout.tsx | 4 +- .../components/CertificateIssuanceModal.tsx | 5 +- .../components/CertificatesTable.tsx | 215 +++++++-------- .../PkiSyncsTab/PkiSyncTable/PkiSyncRow.tsx | 19 -- .../PkiSyncTable/PkiSyncsTable.tsx | 28 +- .../components/PkiSyncAuditLogsSection.tsx | 2 +- .../components/PkiSyncCertificatesSection.tsx | 249 +++++++++++------- .../components/PkiSyncDestinationSection.tsx | 18 +- ...ficateManagerPkiSyncDestinationSection.tsx | 21 ++ ...AzureKeyVaultPkiSyncDestinationSection.tsx | 6 +- .../PkiSyncDestinationSection/index.ts | 1 + .../components/PkiSyncDetailsSection.tsx | 52 ++-- .../PkiSyncOptionsSection.tsx | 34 ++- .../PoliciesPage/PoliciesPage.tsx | 2 +- .../CertificateProfilesTab/ProfileList.tsx | 9 +- .../CertificateProfilesTab/ProfileRow.tsx | 46 +--- 37 files changed, 759 insertions(+), 967 deletions(-) create mode 100644 frontend/src/components/utilities/certificateDisplayUtils.tsx create mode 100644 frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncDestinationSection/AwsCertificateManagerPkiSyncDestinationSection.tsx diff --git a/backend/src/server/routes/v1/certificate-profiles-router.ts b/backend/src/server/routes/v1/certificate-profiles-router.ts index af32bd6c7..08f532bc4 100644 --- a/backend/src/server/routes/v1/certificate-profiles-router.ts +++ b/backend/src/server/routes/v1/certificate-profiles-router.ts @@ -121,9 +121,7 @@ export const registerCertificateProfilesRouter = async (server: FastifyZodProvid limit: z.coerce.number().min(1).max(100).default(20), search: z.string().optional(), enrollmentType: z.nativeEnum(EnrollmentType).optional(), - caId: z.string().uuid().optional(), - includeMetrics: z.coerce.boolean().optional().default(false), - expiringDays: z.coerce.number().min(1).max(365).optional().default(7) + caId: z.string().uuid().optional() }), response: { 200: z.object({ @@ -195,10 +193,6 @@ export const registerCertificateProfilesRouter = async (server: FastifyZodProvid params: z.object({ id: z.string().uuid() }), - querystring: z.object({ - includeMetrics: z.coerce.boolean().optional().default(false), - expiringDays: z.coerce.number().min(1).max(365).optional().default(7) - }), response: { 200: z.object({ certificateProfile: PkiCertificateProfilesSchema.extend({ @@ -232,16 +226,6 @@ export const registerCertificateProfilesRouter = async (server: FastifyZodProvid autoRenew: z.boolean(), renewBeforeDays: z.number().optional() }) - .optional(), - metrics: z - .object({ - profileId: z.string(), - totalCertificates: z.number(), - activeCertificates: z.number(), - expiredCertificates: z.number(), - expiringCertificates: z.number(), - revokedCertificates: z.number() - }) .optional() }) }) @@ -257,20 +241,6 @@ export const registerCertificateProfilesRouter = async (server: FastifyZodProvid profileId: req.params.id }); - let result = certificateProfile; - - if (req.query.includeMetrics) { - const metrics = await server.services.certificateProfile.getProfileMetrics({ - actor: req.permission.type, - actorId: req.permission.id, - actorAuthMethod: req.permission.authMethod, - actorOrgId: req.permission.orgId, - profileId: req.params.id, - expiringDays: req.query.expiringDays - }); - result = { ...certificateProfile, metrics }; - } - await server.services.auditLog.createAuditLog({ ...req.auditLogInfo, projectId: certificateProfile.projectId, @@ -283,7 +253,7 @@ export const registerCertificateProfilesRouter = async (server: FastifyZodProvid } }); - return { certificateProfile: result }; + return { certificateProfile }; } }); diff --git a/backend/src/server/routes/v1/pki-sync-routers/pki-sync-router.ts b/backend/src/server/routes/v1/pki-sync-routers/pki-sync-router.ts index ecf7da4cc..204f38aa4 100644 --- a/backend/src/server/routes/v1/pki-sync-routers/pki-sync-router.ts +++ b/backend/src/server/routes/v1/pki-sync-routers/pki-sync-router.ts @@ -89,6 +89,7 @@ const PkiSyncCertificateSchema = z.object({ updatedAt: z.date(), certificateSerialNumber: z.string().optional(), certificateCommonName: z.string().optional(), + certificateAltNames: z.string().optional(), certificateStatus: z.string().optional(), certificateNotBefore: z.date().optional(), certificateNotAfter: z.date().optional(), diff --git a/backend/src/services/certificate-profile/certificate-profile-dal.ts b/backend/src/services/certificate-profile/certificate-profile-dal.ts index 1ffa3e295..b66475bbf 100644 --- a/backend/src/services/certificate-profile/certificate-profile-dal.ts +++ b/backend/src/services/certificate-profile/certificate-profile-dal.ts @@ -10,10 +10,8 @@ import { TCertificateProfile, TCertificateProfileCertificate, TCertificateProfileInsert, - TCertificateProfileMetrics, TCertificateProfileUpdate, - TCertificateProfileWithConfigs, - TCertificateProfileWithRawMetrics + TCertificateProfileWithConfigs } from "./certificate-profile-types"; export type TCertificateProfileDALFactory = ReturnType; @@ -203,21 +201,11 @@ export const certificateProfileDALFactory = (db: TDbClient) => { search?: string; enrollmentType?: EnrollmentType; caId?: string; - includeMetrics?: boolean; - expiringDays?: number; } = {}, tx?: Knex - ): Promise => { + ): Promise => { try { - const { - offset = 0, - limit = 20, - search, - enrollmentType, - caId, - includeMetrics = false, - expiringDays = 7 - } = options; + const { offset = 0, limit = 20, search, enrollmentType, caId } = options; let baseQuery = (tx || db)(TableName.PkiCertificateProfile).where( `${TableName.PkiCertificateProfile}.projectId`, @@ -242,7 +230,7 @@ export const certificateProfileDALFactory = (db: TDbClient) => { baseQuery = baseQuery.where(`${TableName.PkiCertificateProfile}.caId`, caId); } - let query = baseQuery + const query = baseQuery .leftJoin( TableName.PkiEstEnrollmentConfig, `${TableName.PkiCertificateProfile}.estConfigId`, @@ -267,52 +255,6 @@ export const certificateProfileDALFactory = (db: TDbClient) => { db.ref("renewBeforeDays").withSchema(TableName.PkiApiEnrollmentConfig).as("apiRenewBeforeDays") ); - if (includeMetrics) { - query = query.leftJoin( - TableName.Certificate, - `${TableName.PkiCertificateProfile}.id`, - `${TableName.Certificate}.profileId` - ); - - const now = new Date(); - const expiringDate = new Date(); - expiringDate.setDate(now.getDate() + expiringDays); - - query = query - .select( - selectAllTableCols(TableName.PkiCertificateProfile), - db.ref("id").withSchema(TableName.PkiEstEnrollmentConfig).as("estId"), - db - .ref("disableBootstrapCaValidation") - .withSchema(TableName.PkiEstEnrollmentConfig) - .as("estDisableBootstrapCaValidation"), - db.ref("hashedPassphrase").withSchema(TableName.PkiEstEnrollmentConfig).as("estHashedPassphrase"), - db.ref("encryptedCaChain").withSchema(TableName.PkiEstEnrollmentConfig).as("estEncryptedCaChain"), - db.ref("id").withSchema(TableName.PkiApiEnrollmentConfig).as("apiId"), - db.ref("autoRenew").withSchema(TableName.PkiApiEnrollmentConfig).as("apiAutoRenew"), - db.ref("renewBeforeDays").withSchema(TableName.PkiApiEnrollmentConfig).as("apiRenewBeforeDays"), - db.raw("COUNT(certificates.id) as total_certificates"), - db.raw( - 'COUNT(CASE WHEN certificates."revokedAt" IS NULL AND certificates."notAfter" > ? THEN 1 END) as active_certificates', - [expiringDate] - ), - db.raw( - 'COUNT(CASE WHEN certificates."revokedAt" IS NULL AND certificates."notAfter" <= ? THEN 1 END) as expired_certificates', - [now] - ), - db.raw( - 'COUNT(CASE WHEN certificates."revokedAt" IS NULL AND certificates."notAfter" > ? AND certificates."notAfter" <= ? THEN 1 END) as expiring_certificates', - [now, expiringDate] - ), - db.raw('COUNT(CASE WHEN certificates."revokedAt" IS NOT NULL THEN 1 END) as revoked_certificates') - ) - .groupBy( - `${TableName.PkiCertificateProfile}.id`, - `${TableName.PkiEstEnrollmentConfig}.id`, - `${TableName.PkiApiEnrollmentConfig}.id` - ); - } - const results = (await query .orderBy(`${TableName.PkiCertificateProfile}.createdAt`, "desc") .offset(offset) @@ -353,17 +295,6 @@ export const certificateProfileDALFactory = (db: TDbClient) => { apiConfig }; - if (includeMetrics) { - return { - ...baseProfile, - total_certificates: result.total_certificates, - active_certificates: result.active_certificates, - expired_certificates: result.expired_certificates, - expiring_certificates: result.expiring_certificates, - revoked_certificates: result.revoked_certificates - } as TCertificateProfileWithRawMetrics & TCertificateProfileWithConfigs; - } - return baseProfile as TCertificateProfileWithConfigs; }); } catch (error) { @@ -485,45 +416,6 @@ export const certificateProfileDALFactory = (db: TDbClient) => { } }; - const getProfileMetrics = async ( - profileId: string, - expiringDays: number = 7, - tx?: Knex - ): Promise => { - try { - const now = new Date(); - const expiringDate = new Date(); - expiringDate.setDate(now.getDate() + expiringDays); - - const metrics = await (tx || db)(TableName.Certificate) - .where("profileId", profileId) - .select( - db.raw("COUNT(*) as total_certificates"), - db.raw('COUNT(CASE WHEN "revokedAt" IS NULL AND "notAfter" > ? THEN 1 END) as active_certificates', [ - expiringDate - ]), - db.raw('COUNT(CASE WHEN "revokedAt" IS NULL AND "notAfter" <= ? THEN 1 END) as expired_certificates', [now]), - db.raw( - 'COUNT(CASE WHEN "revokedAt" IS NULL AND "notAfter" > ? AND "notAfter" <= ? THEN 1 END) as expiring_certificates', - [now, expiringDate] - ), - db.raw('COUNT(CASE WHEN "revokedAt" IS NOT NULL THEN 1 END) as revoked_certificates') - ) - .first(); - - return { - profileId, - totalCertificates: parseInt(String((metrics as Record)?.total_certificates || 0), 10), - activeCertificates: parseInt(String((metrics as Record)?.active_certificates || 0), 10), - expiredCertificates: parseInt(String((metrics as Record)?.expired_certificates || 0), 10), - expiringCertificates: parseInt(String((metrics as Record)?.expiring_certificates || 0), 10), - revokedCertificates: parseInt(String((metrics as Record)?.revoked_certificates || 0), 10) - }; - } catch (error) { - throw new DatabaseError({ error, name: "Get certificate profile metrics" }); - } - }; - const isProfileInUse = async (profileId: string, tx?: Knex) => { try { const doc = await (tx || db)(TableName.Certificate).where("profileId", profileId).count("*").first(); @@ -546,7 +438,6 @@ export const certificateProfileDALFactory = (db: TDbClient) => { countByProjectId, findByNameAndProjectId, getCertificatesByProfile, - getProfileMetrics, isProfileInUse }; }; diff --git a/backend/src/services/certificate-profile/certificate-profile-schemas.ts b/backend/src/services/certificate-profile/certificate-profile-schemas.ts index a2c391c2a..8ac494fe6 100644 --- a/backend/src/services/certificate-profile/certificate-profile-schemas.ts +++ b/backend/src/services/certificate-profile/certificate-profile-schemas.ts @@ -127,8 +127,3 @@ export const listCertificatesByProfileSchema = z.object({ status: z.enum(["active", "expired", "revoked"]).optional(), search: z.string().optional() }); - -export const getCertificateProfileMetricsSchema = z.object({ - profileId: z.string().uuid(), - expiringDays: z.coerce.number().min(1).max(365).default(30) -}); diff --git a/backend/src/services/certificate-profile/certificate-profile-service.test.ts b/backend/src/services/certificate-profile/certificate-profile-service.test.ts index 26b1e976a..bb30b8d5c 100644 --- a/backend/src/services/certificate-profile/certificate-profile-service.test.ts +++ b/backend/src/services/certificate-profile/certificate-profile-service.test.ts @@ -47,7 +47,6 @@ describe("CertificateProfileService", () => { findByNameAndProjectId: vi.fn(), findByIdWithConfigs: vi.fn(), getCertificatesByProfile: vi.fn(), - getProfileMetrics: vi.fn(), isProfileInUse: vi.fn(), transaction: vi.fn(), find: vi.fn(), @@ -493,9 +492,7 @@ describe("CertificateProfileService", () => { limit: 20, search: undefined, enrollmentType: undefined, - caId: undefined, - includeMetrics: false, - expiringDays: 30 + caId: undefined }); }); @@ -515,51 +512,7 @@ describe("CertificateProfileService", () => { limit: 5, search: "test", enrollmentType: EnrollmentType.API, - caId: "ca-123", - includeMetrics: false, - expiringDays: 30 - }); - }); - - it("should list profiles with metrics when includeMetrics is true", async () => { - const mockProfilesWithMetrics = [ - { - ...sampleProfile, - total_certificates: 10, - active_certificates: 8, - expired_certificates: 1, - expiring_certificates: 1, - revoked_certificates: 0 - } - ]; - (mockCertificateProfileDAL.findByProjectId as any).mockResolvedValue(mockProfilesWithMetrics); - - const result = await service.listProfiles({ - ...mockActor, - projectId: "project-123", - includeMetrics: true, - expiringDays: 15 - }); - - expect(result.profiles).toHaveLength(1); - expect(result.profiles[0]).toHaveProperty("metrics"); - expect(result.profiles[0].metrics).toEqual({ - profileId: sampleProfile.id, - totalCertificates: 10, - activeCertificates: 8, - expiredCertificates: 1, - expiringCertificates: 1, - revokedCertificates: 0 - }); - - expect(mockCertificateProfileDAL.findByProjectId).toHaveBeenCalledWith("project-123", { - offset: 0, - limit: 20, - search: undefined, - enrollmentType: undefined, - caId: undefined, - includeMetrics: true, - expiringDays: 15 + caId: "ca-123" }); }); }); @@ -659,54 +612,6 @@ describe("CertificateProfileService", () => { }); }); - describe("getProfileMetrics", () => { - const mockMetrics = { - profileId: "profile-123", - totalCertificates: 10, - activeCertificates: 8, - expiredCertificates: 1, - expiringCertificates: 2, - revokedCertificates: 1 - }; - - beforeEach(() => { - (mockCertificateProfileDAL.findById as any).mockResolvedValue(sampleProfile); - (mockCertificateProfileDAL.getProfileMetrics as any).mockResolvedValue(mockMetrics); - }); - - it("should get profile metrics successfully", async () => { - const result = await service.getProfileMetrics({ - ...mockActor, - profileId: "profile-123" - }); - - expect(result).toEqual(mockMetrics); - expect(mockCertificateProfileDAL.findById).toHaveBeenCalledWith("profile-123"); - expect(mockCertificateProfileDAL.getProfileMetrics).toHaveBeenCalledWith("profile-123", 30); - }); - - it("should get profile metrics with custom expiring days", async () => { - await service.getProfileMetrics({ - ...mockActor, - profileId: "profile-123", - expiringDays: 60 - }); - - expect(mockCertificateProfileDAL.getProfileMetrics).toHaveBeenCalledWith("profile-123", 60); - }); - - it("should throw NotFoundError when profile not found", async () => { - (mockCertificateProfileDAL.findById as any).mockResolvedValue(null); - - await expect( - service.getProfileMetrics({ - ...mockActor, - profileId: "profile-123" - }) - ).rejects.toThrow(NotFoundError); - }); - }); - describe("comprehensive certificate profile scenarios", () => { describe("profile configuration validation", () => { it("should validate EST enrollment configuration", async () => { @@ -929,53 +834,6 @@ describe("CertificateProfileService", () => { }); }); - describe("metrics and monitoring", () => { - it("should calculate profile metrics correctly", async () => { - const detailedMetrics = { - profileId: "profile-123", - totalCertificates: 50, - activeCertificates: 40, - expiredCertificates: 5, - expiringCertificates: 3, - revokedCertificates: 2 - }; - - (mockCertificateProfileDAL.findById as any).mockResolvedValue(sampleProfile); - (mockCertificateProfileDAL.getProfileMetrics as any).mockResolvedValue(detailedMetrics); - - const result = await service.getProfileMetrics({ - ...mockActor, - profileId: "profile-123", - expiringDays: 14 - }); - - expect(result).toEqual(detailedMetrics); - expect(mockCertificateProfileDAL.getProfileMetrics).toHaveBeenCalledWith("profile-123", 14); - }); - - it("should handle zero certificate metrics", async () => { - const emptyMetrics = { - profileId: "profile-123", - totalCertificates: 0, - activeCertificates: 0, - expiredCertificates: 0, - expiringCertificates: 0, - revokedCertificates: 0 - }; - - (mockCertificateProfileDAL.findById as any).mockResolvedValue(sampleProfile); - (mockCertificateProfileDAL.getProfileMetrics as any).mockResolvedValue(emptyMetrics); - - const result = await service.getProfileMetrics({ - ...mockActor, - profileId: "profile-123" - }); - - expect(result.totalCertificates).toBe(0); - expect(result.activeCertificates).toBe(0); - }); - }); - describe("error scenarios", () => { it("should handle database connection errors gracefully", async () => { (mockCertificateProfileDAL.findById as any).mockRejectedValue(new Error("Database connection failed")); diff --git a/backend/src/services/certificate-profile/certificate-profile-service.ts b/backend/src/services/certificate-profile/certificate-profile-service.ts index 7b48af8f1..f858a8d4f 100644 --- a/backend/src/services/certificate-profile/certificate-profile-service.ts +++ b/backend/src/services/certificate-profile/certificate-profile-service.ts @@ -27,10 +27,8 @@ import { TCertificateProfile, TCertificateProfileCertificate, TCertificateProfileInsert, - TCertificateProfileMetrics, TCertificateProfileUpdate, - TCertificateProfileWithConfigs, - TCertificateProfileWithRawMetrics + TCertificateProfileWithConfigs } from "./certificate-profile-types"; const validateAndEncryptPemCaChain = async ( @@ -361,18 +359,14 @@ export const certificateProfileServiceFactory = ({ actorId, actorAuthMethod, actorOrgId, - profileId, - includeMetrics = false, - expiringDays = 30 + profileId }: { actor: ActorType; actorId: string; actorAuthMethod: ActorAuthMethod; actorOrgId: string; profileId: string; - includeMetrics?: boolean; - expiringDays?: number; - }): Promise => { + }): Promise => { const profile = await certificateProfileDAL.findById(profileId); if (!profile) { throw new NotFoundError({ message: "Certificate profile not found" }); @@ -393,14 +387,6 @@ export const certificateProfileServiceFactory = ({ const converted = convertDalToService(profile); - if (includeMetrics) { - const metrics = await certificateProfileDAL.getProfileMetrics(profileId, expiringDays); - return { - ...converted, - metrics - }; - } - return converted; }; @@ -506,9 +492,7 @@ export const certificateProfileServiceFactory = ({ limit = 20, search, enrollmentType, - caId, - includeMetrics = false, - expiringDays = 30 + caId }: { actor: ActorType; actorId: string; @@ -520,10 +504,8 @@ export const certificateProfileServiceFactory = ({ search?: string; enrollmentType?: EnrollmentType; caId?: string; - includeMetrics?: boolean; - expiringDays?: number; }): Promise<{ - profiles: (TCertificateProfileWithConfigs & { metrics?: TCertificateProfileMetrics })[]; + profiles: TCertificateProfileWithConfigs[]; totalCount: number; }> => { const { permission } = await permissionService.getProjectPermission({ @@ -544,9 +526,7 @@ export const certificateProfileServiceFactory = ({ limit, search, enrollmentType, - caId, - includeMetrics, - expiringDays + caId }); const totalCount = await certificateProfileDAL.countByProjectId(projectId, { @@ -591,27 +571,12 @@ export const certificateProfileServiceFactory = ({ } const converted = convertDalToService(profileWithConfigs); - let result: TCertificateProfileWithConfigs & { metrics?: TCertificateProfileMetrics } = { + const result: TCertificateProfileWithConfigs = { ...converted, estConfig: decryptedEstConfig, apiConfig: profileWithConfigs.apiConfig }; - if (includeMetrics) { - const profileWithMetrics = profile as TCertificateProfileWithRawMetrics; - result = { - ...result, - metrics: { - profileId: converted.id, - totalCertificates: parseInt(String(profileWithMetrics.total_certificates || 0), 10), - activeCertificates: parseInt(String(profileWithMetrics.active_certificates || 0), 10), - expiredCertificates: parseInt(String(profileWithMetrics.expired_certificates || 0), 10), - expiringCertificates: parseInt(String(profileWithMetrics.expiring_certificates || 0), 10), - revokedCertificates: parseInt(String(profileWithMetrics.revoked_certificates || 0), 10) - } - }; - } - return result; }) ); @@ -709,43 +674,6 @@ export const certificateProfileServiceFactory = ({ return certificates; }; - const getProfileMetrics = async ({ - actor, - actorId, - actorAuthMethod, - actorOrgId, - profileId, - expiringDays = 30 - }: { - actor: ActorType; - actorId: string; - actorAuthMethod: ActorAuthMethod; - actorOrgId: string; - profileId: string; - expiringDays?: number; - }): Promise => { - const profile = await certificateProfileDAL.findById(profileId); - if (!profile) { - throw new NotFoundError({ message: "Certificate profile not found" }); - } - - const { permission } = await permissionService.getProjectPermission({ - actor, - actorId, - projectId: profile.projectId, - actorAuthMethod, - actorOrgId, - actionProjectType: ActionProjectType.CertificateManager - }); - ForbiddenError.from(permission).throwUnlessCan( - ProjectPermissionCertificateProfileActions.Read, - ProjectPermissionSub.CertificateProfiles - ); - - const metrics = await certificateProfileDAL.getProfileMetrics(profileId, expiringDays); - return metrics; - }; - const getEstConfigurationByProfile = async ( params: | { @@ -818,7 +746,6 @@ export const certificateProfileServiceFactory = ({ listProfiles, deleteProfile, getProfileCertificates, - getProfileMetrics, getEstConfigurationByProfile }; }; diff --git a/backend/src/services/certificate-profile/certificate-profile-types.ts b/backend/src/services/certificate-profile/certificate-profile-types.ts index 1c22a5e75..5dac470c8 100644 --- a/backend/src/services/certificate-profile/certificate-profile-types.ts +++ b/backend/src/services/certificate-profile/certificate-profile-types.ts @@ -54,18 +54,8 @@ export type TCertificateProfileWithConfigs = TCertificateProfile & { autoRenew: boolean; renewBeforeDays?: number; }; - metrics?: TCertificateProfileMetrics; }; -export interface TCertificateProfileMetrics { - profileId: string; - totalCertificates: number; - activeCertificates: number; - expiredCertificates: number; - expiringCertificates: number; - revokedCertificates: number; -} - export interface TCertificateProfileCertificate { id: string; serialNumber: string; @@ -76,11 +66,3 @@ export interface TCertificateProfileCertificate { revokedAt: Date | null; createdAt: Date; } - -export type TCertificateProfileWithRawMetrics = TCertificateProfile & { - total_certificates?: string; - active_certificates?: string; - expired_certificates?: string; - expiring_certificates?: string; - revoked_certificates?: string; -}; diff --git a/backend/src/services/certificate-sync/certificate-sync-dal.ts b/backend/src/services/certificate-sync/certificate-sync-dal.ts index 278641844..174bc6141 100644 --- a/backend/src/services/certificate-sync/certificate-sync-dal.ts +++ b/backend/src/services/certificate-sync/certificate-sync-dal.ts @@ -180,6 +180,7 @@ export const certificateSyncDALFactory = (db: TDbClient) => { certificateDetails: (TCertificateSyncs & { certificateSerialNumber?: string; certificateCommonName?: string; + certificateAltNames?: string; certificateStatus?: string; certificateNotBefore?: Date; certificateNotAfter?: Date; @@ -211,6 +212,7 @@ export const certificateSyncDALFactory = (db: TDbClient) => { .select( db.ref("serialNumber").withSchema(TableName.Certificate).as("certificateSerialNumber"), db.ref("commonName").withSchema(TableName.Certificate).as("certificateCommonName"), + db.ref("altNames").withSchema(TableName.Certificate).as("certificateAltNames"), db.ref("status").withSchema(TableName.Certificate).as("certificateStatus"), db.ref("notBefore").withSchema(TableName.Certificate).as("certificateNotBefore"), db.ref("notAfter").withSchema(TableName.Certificate).as("certificateNotAfter"), @@ -229,6 +231,7 @@ export const certificateSyncDALFactory = (db: TDbClient) => { const certificateDetails = (await query) as (TCertificateSyncs & { certificateSerialNumber?: string; certificateCommonName?: string; + certificateAltNames?: string; certificateStatus?: string; certificateNotBefore?: Date; certificateNotAfter?: Date; diff --git a/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-fns.ts b/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-fns.ts index 2f10afbdd..774da6000 100644 --- a/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-fns.ts +++ b/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-fns.ts @@ -520,7 +520,7 @@ export const awsCertificateManagerPkiSyncFactory = ({ try { // Small delay to ensure AWS ACM has processed the certificate import await new Promise((resolve) => { - setTimeout(() => resolve(), 100); + setTimeout(() => resolve(), 500); }); await withRateLimitRetry( diff --git a/backend/src/services/pki-sync/pki-sync-service.ts b/backend/src/services/pki-sync/pki-sync-service.ts index a04d27580..c3bda528e 100644 --- a/backend/src/services/pki-sync/pki-sync-service.ts +++ b/backend/src/services/pki-sync/pki-sync-service.ts @@ -606,6 +606,7 @@ export const pkiSyncServiceFactory = ({ updatedAt: detail.updatedAt, certificateSerialNumber: detail.certificateSerialNumber || undefined, certificateCommonName: detail.certificateCommonName || undefined, + certificateAltNames: detail.certificateAltNames || undefined, certificateStatus: detail.certificateStatus || undefined, certificateNotBefore: detail.certificateNotBefore || undefined, certificateNotAfter: detail.certificateNotAfter || undefined, diff --git a/backend/src/services/pki-sync/pki-sync-types.ts b/backend/src/services/pki-sync/pki-sync-types.ts index e51facc8e..a9e236470 100644 --- a/backend/src/services/pki-sync/pki-sync-types.ts +++ b/backend/src/services/pki-sync/pki-sync-types.ts @@ -170,13 +170,14 @@ export type TPkiSyncCertificate = { lastSyncedAt?: Date; createdAt: Date; updatedAt: Date; - certificate?: { - serialNumber: string; - commonName: string; - status: string; - notBefore: Date; - notAfter: Date; - }; + certificateSerialNumber?: string; + certificateCommonName?: string; + certificateAltNames?: string; + certificateStatus?: string; + certificateNotBefore?: Date; + certificateNotAfter?: Date; + pkiSyncName?: string; + pkiSyncDestination?: string; }; export type TPkiSyncRaw = NonNullable>>; diff --git a/frontend/src/components/pki-syncs/CertificateManagementModal.tsx b/frontend/src/components/pki-syncs/CertificateManagementModal.tsx index 760802b13..f5fd72309 100644 --- a/frontend/src/components/pki-syncs/CertificateManagementModal.tsx +++ b/frontend/src/components/pki-syncs/CertificateManagementModal.tsx @@ -17,9 +17,9 @@ import { Td, Th, THead, + Tooltip, Tr } from "@app/components/v2"; -import { Badge } from "@app/components/v3"; import { useProject } from "@app/context"; import { CertStatus, @@ -299,119 +299,129 @@ export const CertificateManagementModal = ({
- {allCertificates.length === 0 ? ( - - {searchTerm - ? "No certificates match your search criteria." - : "No certificates available for sync."} - - ) : ( - <> - - - - - - - - - - - - - {allCertificates.map((cert) => { - const isExpired = new Date(cert.notAfter) < new Date(); - const isRevoked = cert.status === CertStatus.REVOKED; - const cannotBeAdded = isExpired || isRevoked; - const isAlreadySynced = syncedCertificateIds.includes(cert.id); + +
- 0 && - allCertificates.every((cert) => selectedIds.includes(cert.id)) - } - onCheckedChange={handleSelectAll} - /> - Common NameSerial NumberStatusExpires
+ + + + + + + + + + + {allCertificates.map((cert) => { + const isExpired = new Date(cert.notAfter) < new Date(); + const isRevoked = cert.status === CertStatus.REVOKED; + const cannotBeAdded = isExpired || isRevoked; + const isAlreadySynced = syncedCertificateIds.includes(cert.id); - return ( - { + let originalDisplayName = "—"; + if (cert.altNames && cert.altNames.trim()) { + originalDisplayName = cert.altNames.trim(); + } else if (cert.commonName && cert.commonName.trim()) { + originalDisplayName = cert.commonName.trim(); + } + + let displayName = originalDisplayName; + let isTruncated = false; + if (originalDisplayName.length > 34) { + displayName = `${originalDisplayName.substring(0, 34)}...`; + isTruncated = true; + } + + const truncatedSerial = + cert.serialNumber.length > 8 + ? `${cert.serialNumber.slice(0, 4)}...${cert.serialNumber.slice(-4)}` + : cert.serialNumber; + + return ( + { + if (!cannotBeAdded || isAlreadySynced) { + handleToggleSelection(cert.id); + } + }} + > + + + - - - - - - ); - })} - -
+ 0 && + allCertificates.every((cert) => selectedIds.includes(cert.id)) + } + onCheckedChange={handleSelectAll} + /> + SAN / CNSerial NumberIssued AtExpires At
e.stopPropagation()}> + { if (!cannotBeAdded || isAlreadySynced) { handleToggleSelection(cert.id); } }} + isDisabled={cannotBeAdded && !isAlreadySynced} + /> + + {isTruncated ? ( + +
{displayName}
+
+ ) : ( +
{displayName}
+ )} +
+
-
- { - if (!cannotBeAdded || isAlreadySynced) { - handleToggleSelection(cert.id); - } - }} - isDisabled={cannotBeAdded && !isAlreadySynced} - /> - -
- {cert.commonName} -
-
-
- {cert.serialNumber} -
-
- - {(() => { - if (isRevoked) return "Revoked"; - if (isExpired) return "Expired"; - return cert.status === CertStatus.ACTIVE ? "Active" : cert.status; - })()} - - - - {new Date(cert.notAfter).toLocaleDateString()} - -
-
+ {truncatedSerial} +
+ + + + {new Date(cert.notBefore).toLocaleDateString()} + + + + + {new Date(cert.notAfter).toLocaleDateString()} + + + + ); + })} + + + {allCertificates.length === 0 && ( + + {searchTerm + ? "No certificates match your search criteria." + : "No certificates available for sync."} + + )} + - {totalPages > 1 && ( -
- setCurrentPage(page)} - onChangePerPage={() => {}} - /> -
- )} - + {totalPages > 1 && ( +
+ setCurrentPage(page)} + onChangePerPage={() => {}} + /> +
)} diff --git a/frontend/src/components/pki-syncs/forms/PkiSyncCertificatesFields.tsx b/frontend/src/components/pki-syncs/forms/PkiSyncCertificatesFields.tsx index 51a93f4c9..a5abcb60b 100644 --- a/frontend/src/components/pki-syncs/forms/PkiSyncCertificatesFields.tsx +++ b/frontend/src/components/pki-syncs/forms/PkiSyncCertificatesFields.tsx @@ -1,6 +1,6 @@ import { useMemo, useState } from "react"; import { Controller, useFormContext } from "react-hook-form"; -import { faEdit, faPlus, faTrash } from "@fortawesome/free-solid-svg-icons"; +import { faCertificate, faEdit, faTrash } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { @@ -13,6 +13,7 @@ import { Td, Th, THead, + Tooltip, Tr } from "@app/components/v2"; import { useProject } from "@app/context"; @@ -76,25 +77,71 @@ export const PkiSyncCertificatesFields = () => { > Add Certificates - {selectedCertificates.length === 0 ? ( - - ) : ( -
- - - - - - - - - - - {selectedCertificates.map((cert) => ( +
+ +
Common NameSerial NumberRemove
+ + + + + + + + + + + {selectedCertificates.map((cert) => { + let originalDisplayName = "—"; + if (cert.altNames && cert.altNames.trim()) { + originalDisplayName = cert.altNames.trim(); + } else if (cert.commonName && cert.commonName.trim()) { + originalDisplayName = cert.commonName.trim(); + } + + let displayName = originalDisplayName; + let isTruncated = false; + if (originalDisplayName.length > 34) { + displayName = `${originalDisplayName.substring(0, 34)}...`; + isTruncated = true; + } + + const truncatedSerial = + cert.serialNumber.length > 8 + ? `${cert.serialNumber.slice(0, 4)}...${cert.serialNumber.slice(-4)}` + : cert.serialNumber; + + const isExpired = new Date(cert.notAfter) < new Date(); + + return ( - - + + + - ))} - -
SAN / CNSerial NumberIssued AtExpires AtRemove
{cert.commonName} - {cert.serialNumber} + + {isTruncated ? ( + +
{displayName}
+
+ ) : ( +
{displayName}
+ )} +
+
+ {truncatedSerial} +
+
+ + {new Date(cert.notBefore).toLocaleDateString()} + + + + {new Date(cert.notAfter).toLocaleDateString()} +
-
-
- )} + ); + })} + + + {selectedCertificates.length === 0 && ( + + )} + +
)} diff --git a/frontend/src/components/pki-syncs/forms/PkiSyncReviewFields.tsx b/frontend/src/components/pki-syncs/forms/PkiSyncReviewFields.tsx index 8119ac23a..61bf047ba 100644 --- a/frontend/src/components/pki-syncs/forms/PkiSyncReviewFields.tsx +++ b/frontend/src/components/pki-syncs/forms/PkiSyncReviewFields.tsx @@ -1,6 +1,16 @@ import { useFormContext } from "react-hook-form"; -import { GenericFieldLabel } from "@app/components/v2"; +import { + GenericFieldLabel, + Table, + TableContainer, + TBody, + Td, + Th, + THead, + Tooltip, + Tr +} from "@app/components/v2"; import { Badge } from "@app/components/v3"; import { useProject } from "@app/context"; import { PKI_SYNC_MAP } from "@app/helpers/pkiSyncs"; @@ -45,20 +55,71 @@ export const PkiSyncReviewFields = () => {
Certificates
-
-
- {selectedCertificates.length === 0 ? ( - No certificates selected - ) : ( -
- {selectedCertificates.map((cert) => ( -
- {cert.commonName} -
- ))} -
- )} -
+
+ {selectedCertificates.length === 0 ? ( + No certificates selected + ) : ( + + + + + + + + + + + {selectedCertificates.map((cert) => { + let originalDisplayName = "—"; + if (cert.altNames && cert.altNames.trim()) { + originalDisplayName = cert.altNames.trim(); + } else if (cert.commonName && cert.commonName.trim()) { + originalDisplayName = cert.commonName.trim(); + } + + let displayName = originalDisplayName; + let isTruncated = false; + if (originalDisplayName.length > 34) { + displayName = `${originalDisplayName.substring(0, 34)}...`; + isTruncated = true; + } + + const truncatedSerial = + cert.serialNumber.length > 8 + ? `${cert.serialNumber.slice(0, 4)}...${cert.serialNumber.slice(-4)}` + : cert.serialNumber; + + return ( + + + + + + ); + })} + +
SAN / CNSerial NumberExpires At
+ {isTruncated ? ( + +
{displayName}
+
+ ) : ( +
{displayName}
+ )} +
+
+ {truncatedSerial} +
+
+ + {new Date(cert.notAfter).toLocaleDateString()} + +
+
+ )}
@@ -79,11 +140,13 @@ export const PkiSyncReviewFields = () => {
Sync Options
-
+
- - {isAutoSyncEnabled ? "Enabled" : "Disabled"} - +
+ + {isAutoSyncEnabled ? "Enabled" : "Disabled"} + +
{/* Hidden for now - Import certificates functionality disabled {syncOptions?.canImportCertificates !== undefined && ( @@ -96,9 +159,11 @@ export const PkiSyncReviewFields = () => { */} {syncOptions?.canRemoveCertificates !== undefined && ( - - {syncOptions.canRemoveCertificates ? "Enabled" : "Disabled"} - +
+ + {syncOptions.canRemoveCertificates ? "Enabled" : "Disabled"} + +
)}
diff --git a/frontend/src/components/utilities/certificateDisplayUtils.tsx b/frontend/src/components/utilities/certificateDisplayUtils.tsx new file mode 100644 index 000000000..4a2b2de26 --- /dev/null +++ b/frontend/src/components/utilities/certificateDisplayUtils.tsx @@ -0,0 +1,100 @@ +import { ReactNode } from "react"; + +import { Tooltip } from "@app/components/v2"; + +interface CertificateNameData { + altNames?: string | null; + commonName?: string | null; + certificateAltNames?: string | null; + certificateCommonName?: string | null; +} + +interface DisplayNameResult { + originalDisplayName: string; + displayName: string; + isTruncated: boolean; +} + +/** + * Extracts and formats the display name for a certificate from SAN/CN data + * @param cert - Certificate object with potential altNames/commonName fields + * @param maxLength - Maximum length before truncating (default: 64) + * @param fallback - Fallback text when no name is found (default: "—") + * @returns Object with original name, truncated name, and truncation flag + */ +export const getCertificateDisplayName = ( + cert: CertificateNameData, + maxLength: number = 64, + fallback: string = "—" +): DisplayNameResult => { + // Extract original display name - prioritize SAN over CN + let originalDisplayName = fallback; + + // Handle different property name variations + const altNames = cert.altNames || cert.certificateAltNames; + const commonName = cert.commonName || cert.certificateCommonName; + + if (altNames && altNames.trim()) { + originalDisplayName = altNames.trim(); + } else if (commonName && commonName.trim()) { + originalDisplayName = commonName.trim(); + } + + // Handle truncation + let displayName = originalDisplayName; + let isTruncated = false; + + if (originalDisplayName.length > maxLength) { + displayName = `${originalDisplayName.substring(0, maxLength)}...`; + isTruncated = true; + } + + return { + originalDisplayName, + displayName, + isTruncated + }; +}; + +/** + * Renders a certificate display name with optional tooltip for truncated names + * @param cert - Certificate object with potential altNames/commonName fields + * @param maxLength - Maximum length before truncating (default: 64) + * @param fallback - Fallback text when no name is found (default: "—") + * @param className - Optional CSS class for the display element + * @param tooltipClassName - Optional CSS class for the tooltip (default: "max-w-lg") + * @returns JSX element with certificate name and optional tooltip + */ +export const CertificateDisplayName = ({ + cert, + maxLength = 64, + fallback = "—", + className = "truncate", + tooltipClassName = "max-w-lg" +}: { + cert: CertificateNameData; + maxLength?: number; + fallback?: string; + className?: string; + tooltipClassName?: string; +}): ReactNode => { + const { originalDisplayName, displayName, isTruncated } = getCertificateDisplayName( + cert, + maxLength, + fallback + ); + + if (isTruncated) { + return ( + +
{displayName}
+
+ ); + } + + return ( +
+ {displayName} +
+ ); +}; diff --git a/frontend/src/hooks/api/ca/mutations.tsx b/frontend/src/hooks/api/ca/mutations.tsx index fa422054c..49a53dce7 100644 --- a/frontend/src/hooks/api/ca/mutations.tsx +++ b/frontend/src/hooks/api/ca/mutations.tsx @@ -152,7 +152,7 @@ export const useCreateCertificate = () => { }); }; -export const useCreateCertificateV3 = () => { +export const useCreateCertificateV3 = (options?: { projectId?: string }) => { const queryClient = useQueryClient(); return useMutation({ mutationFn: async (body) => { @@ -167,6 +167,12 @@ export const useCreateCertificateV3 = () => { queryKey: projectKeys.forProjectCertificates(projectSlug) }); + if (options?.projectId) { + queryClient.invalidateQueries({ + queryKey: projectKeys.forProjectCertificates(options.projectId) + }); + } + queryClient.invalidateQueries({ queryKey: ["certificate-profiles"] }); diff --git a/frontend/src/hooks/api/certificateProfiles/index.ts b/frontend/src/hooks/api/certificateProfiles/index.ts index dc5c17efa..e12e066c4 100644 --- a/frontend/src/hooks/api/certificateProfiles/index.ts +++ b/frontend/src/hooks/api/certificateProfiles/index.ts @@ -8,7 +8,6 @@ export { useGetCertificateProfileById, useGetCertificateProfileBySlug, useGetProfileCertificates, - useGetProfileMetrics, useListCertificateProfiles } from "./queries"; export type * from "./types"; diff --git a/frontend/src/hooks/api/certificateProfiles/queries.tsx b/frontend/src/hooks/api/certificateProfiles/queries.tsx index abdc93ddb..19859b02f 100644 --- a/frontend/src/hooks/api/certificateProfiles/queries.tsx +++ b/frontend/src/hooks/api/certificateProfiles/queries.tsx @@ -4,7 +4,6 @@ import { apiRequest } from "@app/config/request"; import { TCertificateProfile, - TCertificateProfileMetrics, TCertificateProfileWithDetails, TGetCertificateProfileByIdDTO, TGetCertificateProfileBySlugDTO, @@ -20,7 +19,6 @@ export const certificateProfileKeys = { limit?: number; offset?: number; search?: string; - includeMetrics?: boolean; includeConfigs?: boolean; enrollmentType?: string; expiringDays?: number; @@ -51,10 +49,8 @@ export const useListCertificateProfiles = ({ limit = 20, offset = 0, search, - includeMetrics = false, includeConfigs = false, - enrollmentType, - expiringDays = 7 + enrollmentType }: TListCertificateProfilesDTO) => { return useQuery({ queryKey: certificateProfileKeys.list({ @@ -62,10 +58,8 @@ export const useListCertificateProfiles = ({ limit, offset, search, - includeMetrics, includeConfigs, - enrollmentType, - expiringDays + enrollmentType }), queryFn: async () => { const { data } = await apiRequest.get<{ @@ -77,10 +71,8 @@ export const useListCertificateProfiles = ({ limit, offset, search, - includeMetrics, includeConfigs, - enrollmentType, - expiringDays + enrollmentType } }); return data; @@ -145,18 +137,3 @@ export const useGetProfileCertificates = ({ enabled: Boolean(profileId) }); }; - -export const useGetProfileMetrics = ({ profileId, expiringDays = 7 }: TGetProfileMetricsDTO) => { - return useQuery({ - queryKey: certificateProfileKeys.getMetrics(profileId, { expiringDays }), - queryFn: async () => { - const { data } = await apiRequest.get<{ - metrics: TCertificateProfileMetrics; - }>(`/api/v1/pki/certificate-profiles/${profileId}/metrics`, { - params: { expiringDays } - }); - return data.metrics; - }, - enabled: Boolean(profileId) - }); -}; diff --git a/frontend/src/hooks/api/certificateProfiles/types.ts b/frontend/src/hooks/api/certificateProfiles/types.ts index b5c53e11b..f3584b12d 100644 --- a/frontend/src/hooks/api/certificateProfiles/types.ts +++ b/frontend/src/hooks/api/certificateProfiles/types.ts @@ -10,7 +10,6 @@ export type TCertificateProfile = { apiConfigId?: string; createdAt: string; updatedAt: string; - metrics?: TCertificateProfileMetrics; }; export type TCertificateProfileWithDetails = TCertificateProfile & { @@ -81,10 +80,8 @@ export type TListCertificateProfilesDTO = { limit?: number; offset?: number; search?: string; - includeMetrics?: boolean; includeConfigs?: boolean; enrollmentType?: "api" | "est"; - expiringDays?: number; }; export type TGetCertificateProfileByIdDTO = { @@ -96,15 +93,6 @@ export type TGetCertificateProfileBySlugDTO = { slug: string; }; -export type TCertificateProfileMetrics = { - profileId: string; - totalCertificates: number; - activeCertificates: number; - expiredCertificates: number; - expiringCertificates: number; - revokedCertificates: number; -}; - export type TProfileCertificate = { id: string; serialNumber: string; @@ -126,5 +114,4 @@ export type TGetProfileCertificatesDTO = { export type TGetProfileMetricsDTO = { profileId: string; - expiringDays?: number; }; diff --git a/frontend/src/hooks/api/certificates/types.ts b/frontend/src/hooks/api/certificates/types.ts index 622276e24..adfb815a6 100644 --- a/frontend/src/hooks/api/certificates/types.ts +++ b/frontend/src/hooks/api/certificates/types.ts @@ -9,6 +9,7 @@ export type TCertificate = { friendlyName: string; commonName: string; subjectAltNames: string; + altNames?: string; serialNumber: string; notBefore: string; notAfter: string; diff --git a/frontend/src/hooks/api/pkiSyncs/types/common.ts b/frontend/src/hooks/api/pkiSyncs/types/common.ts index 556cd0aa3..db6a6c4db 100644 --- a/frontend/src/hooks/api/pkiSyncs/types/common.ts +++ b/frontend/src/hooks/api/pkiSyncs/types/common.ts @@ -57,6 +57,7 @@ export type TPkiSyncCertificate = { updatedAt: string; certificateSerialNumber?: string; certificateCommonName?: string; + certificateAltNames?: string; certificateStatus?: string; certificateNotBefore?: Date; certificateNotAfter?: Date; diff --git a/frontend/src/layouts/PkiManagerLayout/PkiManagerLayout.tsx b/frontend/src/layouts/PkiManagerLayout/PkiManagerLayout.tsx index c33821ed9..7aeb5e1fd 100644 --- a/frontend/src/layouts/PkiManagerLayout/PkiManagerLayout.tsx +++ b/frontend/src/layouts/PkiManagerLayout/PkiManagerLayout.tsx @@ -52,9 +52,7 @@ export const PkiManagerLayout = () => { projectId: currentProject.id }} > - {({ isActive }) => ( - Certificate Management - )} + {({ isActive }) => Certificates} { return zodResolver(createSchema(shouldShowSubjectSection)); diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx index 405b5d7f1..85cb118db 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx @@ -2,6 +2,7 @@ import { useMemo, useState } from "react"; import { faBan, faCertificate, + faClockRotateLeft, faEllipsis, faEye, faFileExport, @@ -11,11 +12,14 @@ import { } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { format } from "date-fns"; -import { CircleQuestionMarkIcon } from "lucide-react"; import { twMerge } from "tailwind-merge"; import { createNotification } from "@app/components/notifications"; import { ProjectPermissionCan } from "@app/components/permissions"; +import { + CertificateDisplayName, + getCertificateDisplayName +} from "@app/components/utilities/certificateDisplayUtils"; import { DropdownMenu, DropdownMenuContent, @@ -45,7 +49,6 @@ import { caSupportsCapability } from "@app/hooks/api/ca/constants"; import { CaCapability, CaType } from "@app/hooks/api/ca/enums"; import { useListCasByProjectId } from "@app/hooks/api/ca/queries"; import { CertStatus } from "@app/hooks/api/certificates/enums"; -import { TCertificate } from "@app/hooks/api/certificates/types"; import { useListWorkspaceCertificates } from "@app/hooks/api/projects"; import { UsePopUpState } from "@app/hooks/usePopUp"; @@ -58,93 +61,6 @@ const isExpiringWithinOneDay = (notAfter: string): boolean => { return expiryDate <= oneDayFromNow; }; -const getAutoRenewalInfo = (certificate: TCertificate) => { - if (certificate.renewedByCertificateId) { - return { text: "Renewed", variant: "neutral" as const }; - } - - const isRevoked = certificate.status === CertStatus.REVOKED; - const isExpired = new Date(certificate.notAfter) < new Date(); - const hasNoProfile = !certificate.profileId; - const isExpiringWithinDay = isExpiringWithinOneDay(certificate.notAfter); - - if (isRevoked) { - return { - text: "Not Available", - variant: "neutral" as const, - tooltip: "Renewal is not available for revoked certificates" - }; - } - - if (isExpired) { - return { - text: "Not Available", - variant: "neutral" as const, - tooltip: "Renewal is not available for expired certificates" - }; - } - - if (hasNoProfile) { - return { - text: "Not Available", - variant: "neutral" as const, - tooltip: "Renewal requires a certificate profile" - }; - } - - if (certificate.hasPrivateKey === false) { - return { - text: "Not Available", - variant: "neutral" as const, - tooltip: "Renewal is not available for certificates with externally generated private keys" - }; - } - - if (isExpiringWithinDay) { - return { - text: "Not Available", - variant: "neutral" as const, - tooltip: "Auto-renewal is not available for certificates expiring within 24 hours" - }; - } - - if (certificate.renewalError) { - return { - text: "Failed", - variant: "danger" as const, - tooltip: certificate.renewalError - }; - } - - if (!certificate.renewBeforeDays) { - return { text: "Auto-Renewal Disabled", variant: "warning" as const }; - } - - const notAfterDate = new Date(certificate.notAfter); - const renewalDate = new Date( - notAfterDate.getTime() - certificate.renewBeforeDays * 24 * 60 * 60 * 1000 - ); - const now = new Date(); - - if (renewalDate <= now) { - return { text: "Due Now", variant: "danger" as const }; - } - - const daysUntilRenewal = Math.floor( - (renewalDate.getTime() - now.getTime()) / (24 * 60 * 60 * 1000) - ); - - if (daysUntilRenewal === 0) { - return { text: "Renews today", variant: "warning" as const }; - } - - if (daysUntilRenewal <= 7) { - return { text: `Renews in ${daysUntilRenewal}d`, variant: "warning" as const }; - } - - return { text: `Renews in ${daysUntilRenewal}d`, variant: "success" as const }; -}; - type Props = { handlePopUpOpen: ( popUpName: keyof UsePopUpState< @@ -236,20 +152,18 @@ export const CertificatesTable = ({ handlePopUpOpen }: Props) => { - - - - - - + + + + - {isPending && } + {isPending && } {!isPending && data?.certificates.map((certificate) => { const { variant, label } = getCertValidUntilBadgeDetails(certificate.notAfter); - const autoRenewalInfo = getAutoRenewalInfo(certificate); const isRevoked = certificate.status === CertStatus.REVOKED; const isExpired = new Date(certificate.notAfter) < new Date(); @@ -258,9 +172,24 @@ export const CertificatesTable = ({ handlePopUpOpen }: Props) => { const isAutoRenewalEnabled = Boolean( certificate.renewBeforeDays && certificate.renewBeforeDays > 0 ); + + const canShowAutoRenewalIcon = Boolean( + certificate.profileId && + certificate.hasPrivateKey !== false && + !certificate.renewedByCertificateId && + !isRevoked && + !isExpired && + !isExpiringWithinDay + ); + + // Still need originalDisplayName for other uses in the component + const { originalDisplayName } = getCertificateDisplayName(certificate, 64, "—"); + return ( - - + + - - - {subscriberId ? ( - - ) : ( - - )} - - - + ); + })} + +
Common NameStatusNot BeforeNot AfterRenewal Status + SAN / CNStatusNot BeforeNot After
{certificate.commonName}
+ + {certificate.status === CertStatus.REVOKED ? ( Revoked @@ -278,22 +207,64 @@ export const CertificatesTable = ({ handlePopUpOpen }: Props) => { ? format(new Date(certificate.notAfter), "yyyy-MM-dd") : "-"} - {autoRenewalInfo && - (autoRenewalInfo.tooltip ? ( -
- - - {autoRenewalInfo.text} - - - -
- ) : ( - {autoRenewalInfo.text} - ))} -
+ +
{ + if (!canShowAutoRenewalIcon) return ""; + if (isAutoRenewalEnabled) return "opacity-100"; + return "opacity-0 group-hover:opacity-100"; + })()}`} + > + {canShowAutoRenewalIcon && ( + { + if (hasFailed && certificate.renewalError) { + return `Auto-renewal failed: ${certificate.renewalError}`; + } + if (isAutoRenewalEnabled) { + const expiryDate = new Date(certificate.notAfter); + const now = new Date(); + const daysUntilExpiry = Math.ceil( + (expiryDate.getTime() - now.getTime()) / (24 * 60 * 60 * 1000) + ); + const daysUntilRenewal = Math.max( + 0, + daysUntilExpiry - (certificate.renewBeforeDays || 0) + ); + return `Auto-renews in ${daysUntilRenewal}d`; + } + return "Set auto renewal"; + })()} + > + + + )} +
@@ -370,20 +341,20 @@ export const CertificatesTable = ({ handlePopUpOpen }: Props) => { { const notAfterDate = new Date(certificate.notAfter); const notBeforeDate = certificate.notBefore ? new Date(certificate.notBefore) : new Date( - notAfterDate.getTime() - 365 * 24 * 60 * 60 * 1000 - ); + notAfterDate.getTime() - 365 * 24 * 60 * 60 * 1000 + ); const ttlDays = Math.max( 1, Math.ceil( (notAfterDate.getTime() - notBeforeDate.getTime()) / - (24 * 60 * 60 * 1000) + (24 * 60 * 60 * 1000) ) ); handlePopUpOpen("manageRenewal", { @@ -433,7 +404,7 @@ export const CertificatesTable = ({ handlePopUpOpen }: Props) => { { await handleDisableAutoRenewal( @@ -470,7 +441,7 @@ export const CertificatesTable = ({ handlePopUpOpen }: Props) => { { handlePopUpOpen("renewCertificate", { @@ -532,7 +503,7 @@ export const CertificatesTable = ({ handlePopUpOpen }: Props) => { handlePopUpOpen("revokeCertificate", { diff --git a/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncTable/PkiSyncRow.tsx b/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncTable/PkiSyncRow.tsx index 1c5bff98c..0b2ce65c1 100644 --- a/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncTable/PkiSyncRow.tsx +++ b/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncTable/PkiSyncRow.tsx @@ -12,7 +12,6 @@ import { faToggleOff, faToggleOn, faTrash, - faTriangleExclamation, faXmark } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; @@ -47,7 +46,6 @@ import { useToggle } from "@app/hooks"; import { PkiSyncStatus, TPkiSync, usePkiSyncOption } from "@app/hooks/api/pkiSyncs"; import { PkiSyncDestinationCol } from "./PkiSyncDestinationCol"; -import { PkiSyncTableCell } from "./PkiSyncTableCell"; type Props = { pkiSync: TPkiSync; @@ -163,23 +161,6 @@ export const PkiSyncRow = ({

{destinationDetails.name}

- -
- - - Source Deleted - -
-
-
diff --git a/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncTable/PkiSyncsTable.tsx b/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncTable/PkiSyncsTable.tsx index ca4aa7473..178d07e0d 100644 --- a/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncTable/PkiSyncsTable.tsx +++ b/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncTable/PkiSyncsTable.tsx @@ -57,7 +57,6 @@ import { PkiSyncRow } from "./PkiSyncRow"; enum PkiSyncsOrderBy { Destination = "destination", - Source = "source", Name = "name", Status = "status" } @@ -160,14 +159,6 @@ export const PkiSyncsTable = ({ pkiSyncs }: Props) => { const [syncOne, syncTwo] = orderDirection === OrderByDirection.ASC ? [a, b] : [b, a]; switch (orderBy) { - case PkiSyncsOrderBy.Source: - return (syncOne.subscriber?.name ?? syncOne.subscriberId ?? "") - .toLowerCase() - .localeCompare( - syncTwo.subscriber?.name?.toLowerCase() ?? - syncTwo.subscriberId?.toLowerCase() ?? - "" - ); case PkiSyncsOrderBy.Destination: return getPkiSyncDestinationColValues(syncOne) .primaryText.toLowerCase() @@ -370,7 +361,7 @@ export const PkiSyncsTable = ({ pkiSyncs }: Props) => {
- +
Name {
-
- Source - handleSort(PkiSyncsOrderBy.Source)} - > - - -
-
+
Destination {
+
Status { return (
-

Sync Logs

+

Sync Logs

{subscription.auditLogs && (

Displaying audit logs from the last {Math.min(auditLogsRetentionDays, 60)} days diff --git a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncCertificatesSection.tsx b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncCertificatesSection.tsx index b9c243bc4..2fd6aad3a 100644 --- a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncCertificatesSection.tsx +++ b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncCertificatesSection.tsx @@ -1,12 +1,17 @@ import { useState } from "react"; import { subject } from "@casl/ability"; -import { faEdit, faPlus, faTrash } from "@fortawesome/free-solid-svg-icons"; +import { faCertificate, faEdit, faTrash } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { createNotification } from "@app/components/notifications"; import { ProjectPermissionCan } from "@app/components/permissions"; import { CertificateManagementModal } from "@app/components/pki-syncs/CertificateManagementModal"; import { + CertificateDisplayName, + getCertificateDisplayName +} from "@app/components/utilities/certificateDisplayUtils"; +import { + DeleteActionModal, EmptyState, IconButton, Pagination, @@ -46,6 +51,11 @@ const getSyncStatusText = (status?: CertificateSyncStatus | null) => { export const PkiSyncCertificatesSection = ({ pkiSync }: Props) => { const [isManageModalOpen, setIsManageModalOpen] = useState(false); + const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); + const [certificateToDelete, setCertificateToDelete] = useState<{ + id: string; + displayName: string; + } | null>(null); const [currentPage, setCurrentPage] = useState(1); const pageSize = 10; @@ -74,6 +84,9 @@ export const PkiSyncCertificatesSection = ({ pkiSync }: Props) => { text: "Certificate removed from sync", type: "success" }); + + setIsDeleteModalOpen(false); + setCertificateToDelete(null); } catch { createNotification({ text: "Failed to remove certificate from sync", @@ -82,13 +95,18 @@ export const PkiSyncCertificatesSection = ({ pkiSync }: Props) => { } }; + const handleDeleteClick = (certificateId: string, displayName: string) => { + setCertificateToDelete({ id: certificateId, displayName }); + setIsDeleteModalOpen(true); + }; + const totalPages = Math.ceil(totalCount / pageSize); return (

-

Certificates ({totalCount})

+

Certificates

{(isAllowed) => ( {
- {syncCertificates.length === 0 ? ( - - No certificates are currently synced with this PKI destination. - - ) : ( -
- - - - - - - - - - - - - {syncCertificates.map((syncCert) => { - const isExpired = syncCert.certificateNotAfter - ? new Date(syncCert.certificateNotAfter) < new Date() - : false; +
+ +
Common NameSerial NumberStatusExpiresActions
+ + + + + + + + + + + {syncCertificates.map((syncCert) => { + const isExpired = syncCert.certificateNotAfter + ? new Date(syncCert.certificateNotAfter) < new Date() + : false; - return ( - - - - + + + + + - - - - ); - })} - -
SAN / CNSerial NumberStatusExpiresActions
-
- {syncCert.certificateCommonName || "Unknown"} -
-
-
- {syncCert.certificateSerialNumber || "Unknown"} -
-
- {syncCert.lastSyncMessage && - syncCert.syncStatus === CertificateSyncStatus.Failed ? ( - - Failed - - ) : ( - - {getSyncStatusText(syncCert.syncStatus)} - + const { originalDisplayName } = getCertificateDisplayName( + { + altNames: syncCert.certificateAltNames, + commonName: syncCert.certificateCommonName + }, + 34, + "Unknown" + ); + + return ( +
+ + +
+ {syncCert.certificateSerialNumber || "Unknown"} +
+
+ {syncCert.lastSyncMessage && + syncCert.syncStatus === CertificateSyncStatus.Failed ? ( + + Failed + + ) : ( + + {getSyncStatusText(syncCert.syncStatus)} + + )} + + + {syncCert.certificateNotAfter + ? new Date(syncCert.certificateNotAfter).toLocaleDateString() + : "Unknown"} + + + + {(isAllowed) => ( + + handleDeleteClick(syncCert.certificateId, originalDisplayName) + } + > + + )} - - - {syncCert.certificateNotAfter - ? new Date(syncCert.certificateNotAfter).toLocaleDateString() - : "Unknown"} - - - - {(isAllowed) => ( - handleRemoveCertificate(syncCert.certificateId)} - > - - - )} - -
-
- - {/* Pagination */} - {totalPages > 1 && ( -
- setCurrentPage(page)} - onChangePerPage={() => {}} - /> -
+ + +
+ {syncCertificates.length === 0 && ( + )} -
- )} + + {/* Pagination */} + {totalPages > 1 && ( +
+ setCurrentPage(page)} + onChangePerPage={() => {}} + /> +
+ )} +
@@ -218,6 +248,23 @@ export const PkiSyncCertificatesSection = ({ pkiSync }: Props) => { refetchSyncCertificates(); }} /> + + { + setIsDeleteModalOpen(false); + setCertificateToDelete(null); + }} + title="Remove Certificate from Sync" + subTitle={`Are you sure you want to remove "${certificateToDelete?.displayName}" from this PKI sync?`} + deleteKey="confirm" + onDeleteApproved={async () => { + if (certificateToDelete) { + await handleRemoveCertificate(certificateToDelete.id); + } + }} + buttonText="Remove Certificate" + /> ); }; diff --git a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncDestinationSection.tsx b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncDestinationSection.tsx index af16fbffd..1c6bb8a04 100644 --- a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncDestinationSection.tsx +++ b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncDestinationSection.tsx @@ -11,12 +11,15 @@ import { ProjectPermissionPkiSyncActions } from "@app/context/ProjectPermissionC import { PKI_SYNC_MAP } from "@app/helpers/pkiSyncs"; import { PkiSync, TPkiSync } from "@app/hooks/api/pkiSyncs"; -import { AzureKeyVaultPkiSyncDestinationSection } from "./PkiSyncDestinationSection/index"; +import { + AwsCertificateManagerPkiSyncDestinationSection, + AzureKeyVaultPkiSyncDestinationSection +} from "./PkiSyncDestinationSection/index"; const GenericFieldLabel = ({ label, children }: { label: string; children: React.ReactNode }) => ( -
- -
{children}
+
+

{label}

+
{children}
); @@ -32,6 +35,9 @@ export const PkiSyncDestinationSection = ({ pkiSync, onEditDestination }: Props) let DestinationComponents: ReactNode; switch (destination) { + case PkiSync.AwsCertificateManager: + DestinationComponents = ; + break; case PkiSync.AzureKeyVault: DestinationComponents = ; break; @@ -47,7 +53,7 @@ export const PkiSyncDestinationSection = ({ pkiSync, onEditDestination }: Props) return (
-

Destination Configuration

+

Destination Configuration

{(isAllowed) => (
-
+
{pkiSync.appConnectionName || "Default Connection"} diff --git a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncDestinationSection/AwsCertificateManagerPkiSyncDestinationSection.tsx b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncDestinationSection/AwsCertificateManagerPkiSyncDestinationSection.tsx new file mode 100644 index 000000000..88ffbbb93 --- /dev/null +++ b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncDestinationSection/AwsCertificateManagerPkiSyncDestinationSection.tsx @@ -0,0 +1,21 @@ +import { TPkiSync } from "@app/hooks/api/pkiSyncs"; + +const GenericFieldLabel = ({ label, children }: { label: string; children: React.ReactNode }) => ( +
+

{label}

+
{children}
+
+); + +type Props = { + pkiSync: TPkiSync; +}; + +export const AwsCertificateManagerPkiSyncDestinationSection = ({ pkiSync }: Props) => { + const region = + pkiSync.destinationConfig && "region" in pkiSync.destinationConfig + ? pkiSync.destinationConfig.region + : undefined; + + return {region || "Not specified"}; +}; diff --git a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncDestinationSection/AzureKeyVaultPkiSyncDestinationSection.tsx b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncDestinationSection/AzureKeyVaultPkiSyncDestinationSection.tsx index 7c1cc8b14..b9bc7462c 100644 --- a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncDestinationSection/AzureKeyVaultPkiSyncDestinationSection.tsx +++ b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncDestinationSection/AzureKeyVaultPkiSyncDestinationSection.tsx @@ -2,9 +2,9 @@ import { TAzureKeyVaultPkiSync } from "@app/hooks/api/pkiSyncs/types/azure-key-vault-sync"; const GenericFieldLabel = ({ label, children }: { label: string; children: React.ReactNode }) => ( -
- -
{children}
+
+

{label}

+
{children}
); diff --git a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncDestinationSection/index.ts b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncDestinationSection/index.ts index 5c8823388..4a1728f42 100644 --- a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncDestinationSection/index.ts +++ b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncDestinationSection/index.ts @@ -1 +1,2 @@ +export { AwsCertificateManagerPkiSyncDestinationSection } from "./AwsCertificateManagerPkiSyncDestinationSection"; export { AzureKeyVaultPkiSyncDestinationSection } from "./AzureKeyVaultPkiSyncDestinationSection"; diff --git a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncDetailsSection.tsx b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncDetailsSection.tsx index 7514bab50..a3d95d5c3 100644 --- a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncDetailsSection.tsx +++ b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncDetailsSection.tsx @@ -21,9 +21,9 @@ const GenericFieldLabel = ({ children: React.ReactNode; labelClassName?: string; }) => ( -
- -
{children}
+
+

{label}

+
{children}
); @@ -57,7 +57,7 @@ export const PkiSyncDetailsSection = ({ pkiSync, onEditDetails }: Props) => { return (
-

Details

+

Details

{(isAllowed) => ( { )}
-
-
- {name} - {description || "None"} - - {subscriber ? subscriber.name : "Subscriber deleted"} +
+ {name} + {description || "None"} + {subscriber && ( + {subscriber.name} + )} + {syncStatus && ( + + - {syncStatus && ( - - - - )} - {lastSyncedAt && ( - - {format(new Date(lastSyncedAt), "yyyy-MM-dd, h:mm aaa")} - - )} - {syncStatus === PkiSyncStatus.Failed && failureMessage && ( - -

- {failureMessage} -

-
- )} -
+ )} + {lastSyncedAt && ( + + {format(new Date(lastSyncedAt), "yyyy-MM-dd, h:mm aaa")} + + )} + {syncStatus === PkiSyncStatus.Failed && failureMessage && ( + +

{failureMessage}

+
+ )}
); diff --git a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncOptionsSection/PkiSyncOptionsSection.tsx b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncOptionsSection/PkiSyncOptionsSection.tsx index b6365f1cd..65ca5c397 100644 --- a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncOptionsSection/PkiSyncOptionsSection.tsx +++ b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncOptionsSection/PkiSyncOptionsSection.tsx @@ -3,13 +3,27 @@ import { faEdit } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { ProjectPermissionCan } from "@app/components/permissions"; -import { GenericFieldLabel } from "@app/components/secret-syncs"; import { IconButton } from "@app/components/v2"; import { Badge } from "@app/components/v3"; import { ProjectPermissionSub } from "@app/context"; import { ProjectPermissionPkiSyncActions } from "@app/context/ProjectPermissionContext/types"; import { TPkiSync } from "@app/hooks/api/pkiSyncs"; +const GenericFieldLabel = ({ + label, + children, + labelClassName +}: { + label: string; + children: React.ReactNode; + labelClassName?: string; +}) => ( +
+

{label}

+
{children}
+
+); + type Props = { pkiSync: TPkiSync; onEditOptions: VoidFunction; @@ -28,7 +42,7 @@ export const PkiSyncOptionsSection = ({ pkiSync, onEditOptions }: Props) => {
-

Sync Options

+

Sync Options

{(isAllowed) => ( { )}
-
-
- {/* Hidden for now - Import certificates functionality disabled +
+ {/* Hidden for now - Import certificates functionality disabled {canImportCertificates ? "Enabled" : "Disabled"} */} - - - {canRemoveCertificates ? "Enabled" : "Disabled"} - - -
+ + + {canRemoveCertificates ? "Enabled" : "Disabled"} + +
diff --git a/frontend/src/pages/cert-manager/PoliciesPage/PoliciesPage.tsx b/frontend/src/pages/cert-manager/PoliciesPage/PoliciesPage.tsx index 58f3c11e6..5b2988775 100644 --- a/frontend/src/pages/cert-manager/PoliciesPage/PoliciesPage.tsx +++ b/frontend/src/pages/cert-manager/PoliciesPage/PoliciesPage.tsx @@ -36,7 +36,7 @@ export const PoliciesPage = () => { { projectId: currentProject?.id || "", limit: 100, offset: 0, - includeConfigs: true, - includeMetrics: true + includeConfigs: true }); const profiles = data?.certificateProfiles || []; @@ -42,10 +41,9 @@ export const ProfileList = ({ onEditProfile, onDeleteProfile }: Props) => { Name - Enrollment Type + Enrollment Method Issuing CA Certificate Template - Certificates @@ -67,10 +65,9 @@ export const ProfileList = ({ onEditProfile, onDeleteProfile }: Props) => { Name - Enrollment Type + Enrollment Method Issuing CA Certificate Template - Certificates diff --git a/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateProfilesTab/ProfileRow.tsx b/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateProfilesTab/ProfileRow.tsx index ab7eb549e..e3bdea3c4 100644 --- a/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateProfilesTab/ProfileRow.tsx +++ b/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateProfilesTab/ProfileRow.tsx @@ -33,43 +33,6 @@ import { TCertificateProfile } from "@app/hooks/api/certificateProfiles"; import { useGetCertificateTemplateV2ById } from "@app/hooks/api/certificateTemplates/queries"; import { CertificateIssuanceModal } from "@app/pages/cert-manager/CertificatesPage/components/CertificateIssuanceModal"; -const MetricsBadges = ({ - metrics -}: { - metrics?: { - totalCertificates: number; - activeCertificates: number; - expiringCertificates: number; - expiredCertificates: number; - revokedCertificates: number; - }; -}) => { - if (!metrics) { - return No metrics; - } - - if (metrics.totalCertificates === 0) { - return No certificates; - } - - return ( - <> - {metrics.activeCertificates > 0 && ( - {metrics.activeCertificates} active - )} - {metrics.expiringCertificates > 0 && ( - {metrics.expiringCertificates} expiring - )} - {metrics.expiredCertificates > 0 && ( - {metrics.expiredCertificates} expired - )} - {metrics.revokedCertificates > 0 && ( - {metrics.revokedCertificates} revoked - )} - - ); -}; - interface Props { profile: TCertificateProfile; onEditProfile: (profile: TCertificateProfile) => void; @@ -118,8 +81,8 @@ export const ProfileRow = ({ profile, onEditProfile, onDeleteProfile }: Props) = const getEnrollmentTypeBadge = (enrollmentType: string) => { const config = { - api: { variant: "success" as const, label: "API" }, - est: { variant: "warning" as const, label: "EST" } + api: { variant: "ghost" as const, label: "API" }, + est: { variant: "ghost" as const, label: "EST" } } as const; const configKey = Object.keys(config).includes(enrollmentType) @@ -153,11 +116,6 @@ export const ProfileRow = ({ profile, onEditProfile, onDeleteProfile }: Props) = {templateData?.name || profile.certificateTemplateId} - -
- -
- From 696680bd8bad551346ca8a8cf7d160ee9e13f0cf Mon Sep 17 00:00:00 2001 From: Carlos Monastyrski Date: Thu, 30 Oct 2025 01:51:52 -0300 Subject: [PATCH 11/79] Lint fix --- .../components/CertificatesTable.tsx | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx index 85cb118db..2fd23dd40 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx @@ -175,11 +175,11 @@ export const CertificatesTable = ({ handlePopUpOpen }: Props) => { const canShowAutoRenewalIcon = Boolean( certificate.profileId && - certificate.hasPrivateKey !== false && - !certificate.renewedByCertificateId && - !isRevoked && - !isExpired && - !isExpiringWithinDay + certificate.hasPrivateKey !== false && + !certificate.renewedByCertificateId && + !isRevoked && + !isExpired && + !isExpiringWithinDay ); // Still need originalDisplayName for other uses in the component @@ -255,7 +255,7 @@ export const CertificatesTable = ({ handlePopUpOpen }: Props) => { ttlDays: Math.ceil( (new Date(certificate.notAfter).getTime() - new Date(certificate.notBefore).getTime()) / - (24 * 60 * 60 * 1000) + (24 * 60 * 60 * 1000) ) }); }} @@ -341,20 +341,20 @@ export const CertificatesTable = ({ handlePopUpOpen }: Props) => { { const notAfterDate = new Date(certificate.notAfter); const notBeforeDate = certificate.notBefore ? new Date(certificate.notBefore) : new Date( - notAfterDate.getTime() - 365 * 24 * 60 * 60 * 1000 - ); + notAfterDate.getTime() - 365 * 24 * 60 * 60 * 1000 + ); const ttlDays = Math.max( 1, Math.ceil( (notAfterDate.getTime() - notBeforeDate.getTime()) / - (24 * 60 * 60 * 1000) + (24 * 60 * 60 * 1000) ) ); handlePopUpOpen("manageRenewal", { @@ -404,7 +404,7 @@ export const CertificatesTable = ({ handlePopUpOpen }: Props) => { { await handleDisableAutoRenewal( @@ -441,7 +441,7 @@ export const CertificatesTable = ({ handlePopUpOpen }: Props) => { { handlePopUpOpen("renewCertificate", { @@ -503,7 +503,7 @@ export const CertificatesTable = ({ handlePopUpOpen }: Props) => { handlePopUpOpen("revokeCertificate", { From 30c0cfb8c292d8bcda45e0cb28932811deed75f5 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Thu, 30 Oct 2025 20:06:04 +0530 Subject: [PATCH 12/79] feat: chef secret-sync --- backend/src/lib/api-docs/constants.ts | 4 + .../chef-connection-router.ts | 123 ++++++------- .../secret-sync-routers/chef-sync-router.ts | 13 ++ .../routes/v1/secret-sync-routers/index.ts | 4 +- .../secret-sync-routers/secret-sync-router.ts | 7 +- .../chef/chef-connection-fns.ts | 169 +++++++++++++----- .../chef/chef-connection-types.ts | 4 +- .../secret-sync/chef/chef-sync-constants.ts | 10 ++ .../secret-sync/chef/chef-sync-fns.ts | 143 +++++++++++++++ .../secret-sync/chef/chef-sync-schemas.ts | 46 +++++ .../secret-sync/chef/chef-sync-types.ts | 34 ++++ .../src/services/secret-sync/chef/index.ts | 4 + .../services/secret-sync/secret-sync-enums.ts | 3 +- .../services/secret-sync/secret-sync-fns.ts | 14 +- .../services/secret-sync/secret-sync-maps.ts | 15 +- .../services/secret-sync/secret-sync-types.ts | 5 + .../ChefSyncFields.tsx | 97 ++++++++++ .../SecretSyncDestinationFields.tsx | 3 + .../SecretSyncOptionsFields.tsx | 1 + .../ChefSyncReviewFields.tsx | 18 ++ .../SecretSyncReviewFields.tsx | 4 + .../schemas/chef-sync-destination-schema.ts | 14 ++ .../forms/schemas/secret-sync-schema.ts | 4 +- frontend/src/helpers/secretSyncs.ts | 7 +- .../hooks/api/appConnections/chef/index.ts | 2 + .../hooks/api/appConnections/chef/queries.tsx | 68 +++++++ .../hooks/api/appConnections/chef/types.ts | 7 + frontend/src/hooks/api/secretSyncs/enums.ts | 3 +- .../hooks/api/secretSyncs/types/chef-sync.ts | 16 ++ .../src/hooks/api/secretSyncs/types/index.ts | 4 +- .../ChefSyncDestinationCol.tsx | 14 ++ .../SecretSyncDestinationCol.tsx | 3 + .../SecretSyncTable/helpers/index.ts | 4 + .../ChefSyncDestinationSection.tsx | 19 ++ .../SecretSyncDestinatonSection.tsx | 4 + .../SecretSyncOptionsSection.tsx | 1 + 36 files changed, 767 insertions(+), 124 deletions(-) create mode 100644 backend/src/server/routes/v1/secret-sync-routers/chef-sync-router.ts create mode 100644 backend/src/services/secret-sync/chef/chef-sync-constants.ts create mode 100644 backend/src/services/secret-sync/chef/chef-sync-fns.ts create mode 100644 backend/src/services/secret-sync/chef/chef-sync-schemas.ts create mode 100644 backend/src/services/secret-sync/chef/chef-sync-types.ts create mode 100644 backend/src/services/secret-sync/chef/index.ts create mode 100644 frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/ChefSyncFields.tsx create mode 100644 frontend/src/components/secret-syncs/forms/SecretSyncReviewFields/ChefSyncReviewFields.tsx create mode 100644 frontend/src/components/secret-syncs/forms/schemas/chef-sync-destination-schema.ts create mode 100644 frontend/src/hooks/api/appConnections/chef/index.ts create mode 100644 frontend/src/hooks/api/appConnections/chef/queries.tsx create mode 100644 frontend/src/hooks/api/appConnections/chef/types.ts create mode 100644 frontend/src/hooks/api/secretSyncs/types/chef-sync.ts create mode 100644 frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncDestinationCol/ChefSyncDestinationCol.tsx create mode 100644 frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncDestinationSection/ChefSyncDestinationSection.tsx diff --git a/backend/src/lib/api-docs/constants.ts b/backend/src/lib/api-docs/constants.ts index cd0782483..2aa14adff 100644 --- a/backend/src/lib/api-docs/constants.ts +++ b/backend/src/lib/api-docs/constants.ts @@ -2626,6 +2626,10 @@ export const SecretSyncs = { siteName: "The name of the Netlify site to sync secrets to.", siteId: "The ID of the Netlify site to sync secrets to.", context: "The Netlify context to sync secrets to." + }, + CHEF: { + dataBagName: "The name of the Chef data bag to sync secrets to.", + dataBagItemName: "The name of the Chef data bag item to sync secrets to." } } }; diff --git a/backend/src/server/routes/v1/app-connection-routers/chef-connection-router.ts b/backend/src/server/routes/v1/app-connection-routers/chef-connection-router.ts index d57bd354f..6bfd83391 100644 --- a/backend/src/server/routes/v1/app-connection-routers/chef-connection-router.ts +++ b/backend/src/server/routes/v1/app-connection-routers/chef-connection-router.ts @@ -1,15 +1,15 @@ -// import z from "zod"; +import z from "zod"; -// import { readLimit } from "@app/server/config/rateLimiter"; -// import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; +import { readLimit } from "@app/server/config/rateLimiter"; +import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; import { AppConnection } from "@app/services/app-connection/app-connection-enums"; import { CreateChefConnectionSchema, SanitizedChefConnectionSchema, UpdateChefConnectionSchema } from "@app/services/app-connection/chef"; +import { AuthMode } from "@app/services/auth/auth-type"; -// import { AuthMode } from "@app/services/auth/auth-type"; import { registerAppConnectionEndpoints } from "./app-connection-endpoints"; export const registerChefConnectionRouter = async (server: FastifyZodProvider) => { @@ -21,64 +21,65 @@ export const registerChefConnectionRouter = async (server: FastifyZodProvider) = updateSchema: UpdateChefConnectionSchema }); - // server.route({ - // method: "GET", - // url: `/:connectionId/data-bags`, - // config: { - // rateLimit: readLimit - // }, - // schema: { - // params: z.object({ - // connectionId: z.string().uuid() - // }), - // response: { - // 200: z - // .object({ - // id: z.string(), - // name: z.string() - // }) - // .array() - // } - // }, - // onRequest: verifyAuth([AuthMode.JWT]), - // handler: async (req) => { - // const { connectionId } = req.params; - // const dataBags = await server.services.appConnection.chef.listDataBags(connectionId, req.permission); + server.route({ + method: "GET", + url: `/:connectionId/data-bags`, + config: { + rateLimit: readLimit + }, + schema: { + params: z.object({ + connectionId: z.string().uuid() + }), + response: { + 200: z + .object({ + name: z.string() + }) + .array() + } + }, + onRequest: verifyAuth([AuthMode.JWT]), + handler: async (req) => { + const { connectionId } = req.params; + const dataBags = await server.services.appConnection.chef.listDataBags(connectionId, req.permission); - // return dataBags; - // } - // }); + return dataBags; + } + }); - // server.route({ - // method: "GET", - // url: `/:connectionId/data-bags/:dataBagName/items`, - // config: { - // rateLimit: readLimit - // }, - // schema: { - // params: z.object({ - // connectionId: z.string().uuid(), - // dataBagName: z.string() - // }), - // response: { - // 200: z - // .object({ - // id: z.string(), - // name: z.string() - // }) - // .array() - // } - // }, - // onRequest: verifyAuth([AuthMode.JWT]), - // handler: async (req) => { - // const { connectionId, dataBagName } = req.params; - // const dataBagItems = await server.services.appConnection.chef.listDataBagItems( - // connectionId, - // dataBagName, - // req.permission - // ); + server.route({ + method: "GET", + url: `/:connectionId/data-bag-items`, + config: { + rateLimit: readLimit + }, + schema: { + params: z.object({ + connectionId: z.string().uuid() + }), + querystring: z.object({ + dataBagName: z.string() + }), + response: { + 200: z + .object({ + name: z.string() + }) + .array() + } + }, + onRequest: verifyAuth([AuthMode.JWT]), + handler: async (req) => { + const { connectionId } = req.params; + const { dataBagName } = req.query; + const dataBagItems = await server.services.appConnection.chef.listDataBagItems( + connectionId, + dataBagName, + req.permission + ); - // return dataBagItems; - // } - // }); + return dataBagItems; + } + }); }; diff --git a/backend/src/server/routes/v1/secret-sync-routers/chef-sync-router.ts b/backend/src/server/routes/v1/secret-sync-routers/chef-sync-router.ts new file mode 100644 index 000000000..6972a9b70 --- /dev/null +++ b/backend/src/server/routes/v1/secret-sync-routers/chef-sync-router.ts @@ -0,0 +1,13 @@ +import { ChefSyncSchema, CreateChefSyncSchema, UpdateChefSyncSchema } from "@app/services/secret-sync/chef"; +import { SecretSync } from "@app/services/secret-sync/secret-sync-enums"; + +import { registerSyncSecretsEndpoints } from "./secret-sync-endpoints"; + +export const registerChefSyncRouter = async (server: FastifyZodProvider) => + registerSyncSecretsEndpoints({ + destination: SecretSync.Chef, + server, + responseSchema: ChefSyncSchema, + createSchema: CreateChefSyncSchema, + updateSchema: UpdateChefSyncSchema + }); diff --git a/backend/src/server/routes/v1/secret-sync-routers/index.ts b/backend/src/server/routes/v1/secret-sync-routers/index.ts index e778dbd7c..b6d866577 100644 --- a/backend/src/server/routes/v1/secret-sync-routers/index.ts +++ b/backend/src/server/routes/v1/secret-sync-routers/index.ts @@ -10,6 +10,7 @@ import { registerAzureKeyVaultSyncRouter } from "./azure-key-vault-sync-router"; import { registerBitbucketSyncRouter } from "./bitbucket-sync-router"; import { registerCamundaSyncRouter } from "./camunda-sync-router"; import { registerChecklySyncRouter } from "./checkly-sync-router"; +import { registerChefSyncRouter } from "./chef-sync-router"; import { registerCloudflarePagesSyncRouter } from "./cloudflare-pages-sync-router"; import { registerCloudflareWorkersSyncRouter } from "./cloudflare-workers-sync-router"; import { registerDatabricksSyncRouter } from "./databricks-sync-router"; @@ -65,5 +66,6 @@ export const SECRET_SYNC_REGISTER_ROUTER_MAP: Record { diff --git a/backend/src/services/app-connection/chef/chef-connection-fns.ts b/backend/src/services/app-connection/chef/chef-connection-fns.ts index a60325cc3..a224a82f7 100644 --- a/backend/src/services/app-connection/chef/chef-connection-fns.ts +++ b/backend/src/services/app-connection/chef/chef-connection-fns.ts @@ -7,9 +7,10 @@ import { removeTrailingSlash } from "@app/lib/fn"; import { blockLocalAndPrivateIpAddresses } from "@app/lib/validator"; import { IntegrationUrls } from "@app/services/integration-auth/integration-list"; +import { TChefDataBagItemContent } from "../../secret-sync/chef/chef-sync-types"; import { AppConnection } from "../app-connection-enums"; import { ChefConnectionMethod } from "./chef-connection-enums"; -import { TChefConnection, TChefConnectionConfig, TChefDataBag } from "./chef-connection-types"; +import { TChefConnection, TChefConnectionConfig, TChefDataBag, TChefDataBagItem } from "./chef-connection-types"; export const getChefServerUrl = async (serverUrl?: string) => { const chefServerUrl = serverUrl ? removeTrailingSlash(serverUrl) : IntegrationUrls.CHEF_API_URL; @@ -120,40 +121,6 @@ export const getChefConnectionListItem = () => { }; }; -export const listChefDataBags = async (appConnection: TChefConnection): Promise => { - const { - credentials: { serverUrl, userName, privateKey } - } = appConnection; - - try { - const path = "/data"; - const body = ""; - - const hostServerUrl = await getChefServerUrl(serverUrl); - - const headers = getChefAuthHeaders("GET", path, body, userName, privateKey); - - const res = await request.get>(`${hostServerUrl}${path}`, { - headers - }); - - // Chef returns data bags as an object with keys being data bag names - return Object.keys(res.data).map((name) => ({ - name, - id: name - })); - } catch (error) { - if (error instanceof AxiosError) { - // throw new BadRequestError({ - // message: `Failed to list Chef data bags: ${error.response?.data?.error || error.message}` - // }); - } - throw new BadRequestError({ - message: "Unable to list Chef data bags" - }); - } -}; - export const validateChefConnectionCredentials = async (config: TChefConnectionConfig) => { const { credentials: inputCredentials } = config; @@ -181,16 +148,13 @@ export const validateChefConnectionCredentials = async (config: TChefConnectionC return inputCredentials; }; -export const listChefDataBagItems = async ( - appConnection: TChefConnection, - dataBagName: string -): Promise => { +export const listChefDataBags = async (appConnection: TChefConnection): Promise => { const { - credentials: { serverUrl, userName, privateKey } + credentials: { serverUrl, userName, privateKey, orgName } } = appConnection; try { - const path = `/data/${dataBagName}`; + const path = `/organizations/${orgName}/data`; const body = ""; const hostServerUrl = await getChefServerUrl(serverUrl); @@ -201,10 +165,43 @@ export const listChefDataBagItems = async ( headers }); - // Chef returns data bag items as an object with keys being item names return Object.keys(res.data).map((name) => ({ - name, - id: name + name + })); + } catch (error) { + if (error instanceof AxiosError) { + throw new BadRequestError({ + message: `Failed to list Chef data bags: ${error.message || "Unknown error"}` + }); + } + throw new BadRequestError({ + message: "Unable to list Chef data bags" + }); + } +}; + +export const listChefDataBagItems = async ( + appConnection: TChefConnection, + dataBagName: string +): Promise => { + const { + credentials: { serverUrl, userName, privateKey, orgName } + } = appConnection; + + try { + const path = `/organizations/${orgName}/data/${dataBagName}`; + const body = ""; + + const hostServerUrl = await getChefServerUrl(serverUrl); + + const headers = getChefAuthHeaders("GET", path, body, userName, privateKey); + + const res = await request.get>(`${hostServerUrl}${path}`, { + headers + }); + + return Object.keys(res.data).map((name) => ({ + name })); } catch (error) { if (error instanceof AxiosError) { @@ -217,3 +214,87 @@ export const listChefDataBagItems = async ( }); } }; + +type TGetChefDataBagItem = { + serverUrl?: string; + userName: string; + privateKey: string; + orgName: string; + dataBagName: string; + dataBagItemName: string; +}; + +export const getChefDataBagItem = async ({ + serverUrl, + userName, + privateKey, + orgName, + dataBagName, + dataBagItemName +}: TGetChefDataBagItem): Promise => { + try { + const path = `/organizations/${orgName}/data/${dataBagName}/${dataBagItemName}`; + const body = ""; + + const hostServerUrl = await getChefServerUrl(serverUrl); + + const headers = getChefAuthHeaders("GET", path, body, userName, privateKey); + + const res = await request.get(`${hostServerUrl}${path}`, { + headers + }); + + return res.data; + } catch (error) { + if (error instanceof AxiosError) { + throw new BadRequestError({ + message: `Failed to get Chef data bag item: ${error.message || "Unknown error"}` + }); + } + throw new BadRequestError({ + message: "Unable to get Chef data bag item" + }); + } +}; + +type TUpdateChefDataBagItem = { + serverUrl?: string; + userName: string; + privateKey: string; + orgName: string; + dataBagName: string; + dataBagItemName: string; + data: TChefDataBagItemContent; +}; + +export const updateChefDataBagItem = async ({ + serverUrl, + userName, + privateKey, + orgName, + dataBagName, + dataBagItemName, + data +}: TUpdateChefDataBagItem): Promise => { + try { + const path = `/organizations/${orgName}/data/${dataBagName}/${dataBagItemName}`; + const body = JSON.stringify(data); + + const hostServerUrl = await getChefServerUrl(serverUrl); + + const headers = getChefAuthHeaders("PUT", path, body, userName, privateKey); + + await request.put(`${hostServerUrl}${path}`, data, { + headers + }); + } catch (error) { + if (error instanceof AxiosError) { + throw new BadRequestError({ + message: `Failed to update Chef data bag item: ${error.message || "Unknown error"}` + }); + } + throw new BadRequestError({ + message: "Unable to update Chef data bag item" + }); + } +}; diff --git a/backend/src/services/app-connection/chef/chef-connection-types.ts b/backend/src/services/app-connection/chef/chef-connection-types.ts index 7996026af..33f0d5793 100644 --- a/backend/src/services/app-connection/chef/chef-connection-types.ts +++ b/backend/src/services/app-connection/chef/chef-connection-types.ts @@ -18,15 +18,13 @@ export type TChefConnectionInput = z.infer & export type TValidateChefConnectionCredentialsSchema = typeof ValidateChefConnectionCredentialsSchema; export type TChefConnectionConfig = DiscriminativePick & { - orgId: string; + orgName: string; }; export type TChefDataBag = { name: string; - id: string; }; export type TChefDataBagItem = { name: string; - id: string; }; diff --git a/backend/src/services/secret-sync/chef/chef-sync-constants.ts b/backend/src/services/secret-sync/chef/chef-sync-constants.ts new file mode 100644 index 000000000..567b25bbe --- /dev/null +++ b/backend/src/services/secret-sync/chef/chef-sync-constants.ts @@ -0,0 +1,10 @@ +import { AppConnection } from "@app/services/app-connection/app-connection-enums"; +import { SecretSync } from "@app/services/secret-sync/secret-sync-enums"; +import { TSecretSyncListItem } from "@app/services/secret-sync/secret-sync-types"; + +export const CHEF_SYNC_LIST_OPTION: TSecretSyncListItem = { + name: "Chef", + destination: SecretSync.Chef, + connection: AppConnection.Chef, + canImportSecrets: true +}; diff --git a/backend/src/services/secret-sync/chef/chef-sync-fns.ts b/backend/src/services/secret-sync/chef/chef-sync-fns.ts new file mode 100644 index 000000000..33e89035e --- /dev/null +++ b/backend/src/services/secret-sync/chef/chef-sync-fns.ts @@ -0,0 +1,143 @@ +import { getChefDataBagItem, updateChefDataBagItem } from "@app/services/app-connection/chef"; +import { matchesSchema } from "@app/services/secret-sync/secret-sync-fns"; +import { TSecretMap } from "@app/services/secret-sync/secret-sync-types"; + +import { ChefSecret, TChefDataBagItemContent, TChefSyncWithCredentials, TGetChefSecrets } from "./chef-sync-types"; + +const getChefSecretsRaw = async ({ + serverUrl, + userName, + privateKey, + orgName, + dataBagName, + dataBagItemName +}: TGetChefSecrets): Promise => { + const dataBagItem = await getChefDataBagItem({ + serverUrl, + userName, + privateKey, + orgName, + dataBagName, + dataBagItemName + }); + + // Ensure the data bag item has an id field + if (!dataBagItem.id) { + dataBagItem.id = dataBagItemName; + } + + return dataBagItem; +}; + +const getChefSecrets = async (secretSync: TChefSyncWithCredentials): Promise => { + const { + connection, + destinationConfig: { dataBagName, dataBagItemName } + } = secretSync; + + const { serverUrl, userName, privateKey, orgName } = connection.credentials; + + const dataBagItem = await getChefSecretsRaw({ + serverUrl, + orgName, + userName, + privateKey, + dataBagName, + dataBagItemName + }); + + // Convert data bag item to key-value pairs + // Exclude the 'id' field as it's metadata + const secrets: ChefSecret[] = []; + Object.entries(dataBagItem).forEach(([key, value]) => { + if (key !== "id" && value !== null && value !== undefined) { + secrets.push({ key, value: String(value) }); + } + }); + + return secrets; +}; + +const updateChefSecrets = async ( + secretSync: TChefSyncWithCredentials, + secrets: Record +) => { + const { + connection, + destinationConfig: { dataBagName, dataBagItemName } + } = secretSync; + + const { serverUrl, userName, privateKey, orgName } = connection.credentials; + + // Chef data bag items must have an 'id' field + const dataBagItemContent: TChefDataBagItemContent = { + id: dataBagItemName, + ...secrets + }; + + await updateChefDataBagItem({ + serverUrl, + orgName, + userName, + privateKey, + dataBagName, + dataBagItemName, + data: dataBagItemContent + }); +}; + +export const ChefSyncFns = { + async syncSecrets(secretSync: TChefSyncWithCredentials, secretMap: TSecretMap) { + const { + environment, + syncOptions: { disableSecretDeletion, keySchema } + } = secretSync; + + const secrets = await getChefSecrets(secretSync); + + // Create a map of the existing secrets + const updatedSecretsMap = new Map(secrets.map((secret) => [secret.key, secret.value])); + + // Add/update new secrets + for (const [key, { value }] of Object.entries(secretMap)) { + updatedSecretsMap.set(key, value); + } + + // Delete secrets if not disabled + if (!disableSecretDeletion) { + secrets.forEach((secret) => { + if (!matchesSchema(secret.key, environment?.slug || "", keySchema)) return; + + if (!secretMap[secret.key]) { + updatedSecretsMap.delete(secret.key); + } + }); + } + + // Convert map to object for Chef API + const updatedSecrets = Object.fromEntries(updatedSecretsMap.entries()); + + await updateChefSecrets(secretSync, updatedSecrets); + }, + + async getSecrets(secretSync: TChefSyncWithCredentials): Promise { + const secrets = await getChefSecrets(secretSync); + return Object.fromEntries(secrets.map((secret) => [secret.key, { value: secret.value }])); + }, + + async removeSecrets(secretSync: TChefSyncWithCredentials, secretMap: TSecretMap) { + const existingSecrets = await getChefSecrets(secretSync); + + const newSecrets = existingSecrets.filter((secret) => !Object.hasOwn(secretMap, secret.key)); + + // If nothing changed, return early + if (newSecrets.length === existingSecrets.length) { + return; + } + + // Convert to object for Chef API + const updatedSecrets = Object.fromEntries(newSecrets.map((secret) => [secret.key, secret.value])); + + await updateChefSecrets(secretSync, updatedSecrets); + } +}; diff --git a/backend/src/services/secret-sync/chef/chef-sync-schemas.ts b/backend/src/services/secret-sync/chef/chef-sync-schemas.ts new file mode 100644 index 000000000..c2e09011e --- /dev/null +++ b/backend/src/services/secret-sync/chef/chef-sync-schemas.ts @@ -0,0 +1,46 @@ +import { z } from "zod"; + +import { SecretSyncs } from "@app/lib/api-docs"; +import { AppConnection } from "@app/services/app-connection/app-connection-enums"; +import { SecretSync } from "@app/services/secret-sync/secret-sync-enums"; +import { + BaseSecretSyncSchema, + GenericCreateSecretSyncFieldsSchema, + GenericUpdateSecretSyncFieldsSchema +} from "@app/services/secret-sync/secret-sync-schemas"; +import { TSyncOptionsConfig } from "@app/services/secret-sync/secret-sync-types"; + +const ChefSyncDestinationConfigSchema = z.object({ + dataBagName: z + .string() + .min(1, "Data Bag Name is required") + .max(256, "Data Bag Name cannot exceed 256 characters") + .describe(SecretSyncs.DESTINATION_CONFIG.CHEF.dataBagName), + dataBagItemName: z + .string() + .min(1, "Data Bag Item Name is required") + .max(256, "Data Bag Item Name cannot exceed 256 characters") + .describe(SecretSyncs.DESTINATION_CONFIG.CHEF.dataBagItemName) +}); + +const ChefSyncOptionsConfig: TSyncOptionsConfig = { canImportSecrets: true }; + +export const ChefSyncSchema = BaseSecretSyncSchema(SecretSync.Chef, ChefSyncOptionsConfig).extend({ + destination: z.literal(SecretSync.Chef), + destinationConfig: ChefSyncDestinationConfigSchema +}); + +export const CreateChefSyncSchema = GenericCreateSecretSyncFieldsSchema(SecretSync.Chef, ChefSyncOptionsConfig).extend({ + destinationConfig: ChefSyncDestinationConfigSchema +}); + +export const UpdateChefSyncSchema = GenericUpdateSecretSyncFieldsSchema(SecretSync.Chef, ChefSyncOptionsConfig).extend({ + destinationConfig: ChefSyncDestinationConfigSchema.optional() +}); + +export const ChefSyncListItemSchema = z.object({ + name: z.literal("Chef"), + connection: z.literal(AppConnection.Chef), + destination: z.literal(SecretSync.Chef), + canImportSecrets: z.literal(true) +}); diff --git a/backend/src/services/secret-sync/chef/chef-sync-types.ts b/backend/src/services/secret-sync/chef/chef-sync-types.ts new file mode 100644 index 000000000..2ad35ba87 --- /dev/null +++ b/backend/src/services/secret-sync/chef/chef-sync-types.ts @@ -0,0 +1,34 @@ +import z from "zod"; + +import { TChefConnection } from "@app/services/app-connection/chef"; + +import { ChefSyncListItemSchema, ChefSyncSchema, CreateChefSyncSchema } from "./chef-sync-schemas"; + +export type TChefSyncListItem = z.infer; + +export type TChefSync = z.infer; + +export type TChefSyncInput = z.infer; + +export type TChefSyncWithCredentials = TChefSync & { + connection: TChefConnection; +}; + +export type TGetChefSecrets = { + serverUrl?: string; + userName: string; + privateKey: string; + orgName: string; + dataBagName: string; + dataBagItemName: string; +}; + +export type TChefDataBagItemContent = { + id: string; + [key: string]: string | number | boolean | null; +}; + +export type ChefSecret = { + key: string; + value: string; +}; diff --git a/backend/src/services/secret-sync/chef/index.ts b/backend/src/services/secret-sync/chef/index.ts new file mode 100644 index 000000000..c8599c867 --- /dev/null +++ b/backend/src/services/secret-sync/chef/index.ts @@ -0,0 +1,4 @@ +export * from "./chef-sync-constants"; +export * from "./chef-sync-fns"; +export * from "./chef-sync-schemas"; +export * from "./chef-sync-types"; diff --git a/backend/src/services/secret-sync/secret-sync-enums.ts b/backend/src/services/secret-sync/secret-sync-enums.ts index 235b3db3a..a9625b53f 100644 --- a/backend/src/services/secret-sync/secret-sync-enums.ts +++ b/backend/src/services/secret-sync/secret-sync-enums.ts @@ -29,7 +29,8 @@ export enum SecretSync { DigitalOceanAppPlatform = "digital-ocean-app-platform", Netlify = "netlify", Bitbucket = "bitbucket", - LaravelForge = "laravel-forge" + LaravelForge = "laravel-forge", + Chef = "chef" } export enum SecretSyncInitialSyncBehavior { diff --git a/backend/src/services/secret-sync/secret-sync-fns.ts b/backend/src/services/secret-sync/secret-sync-fns.ts index 85fc27250..46f53fda6 100644 --- a/backend/src/services/secret-sync/secret-sync-fns.ts +++ b/backend/src/services/secret-sync/secret-sync-fns.ts @@ -34,6 +34,7 @@ import { BITBUCKET_SYNC_LIST_OPTION, BitbucketSyncFns } from "./bitbucket"; import { CAMUNDA_SYNC_LIST_OPTION, camundaSyncFactory } from "./camunda"; import { CHECKLY_SYNC_LIST_OPTION } from "./checkly/checkly-sync-constants"; import { ChecklySyncFns } from "./checkly/checkly-sync-fns"; +import { CHEF_SYNC_LIST_OPTION, ChefSyncFns } from "./chef"; import { CLOUDFLARE_PAGES_SYNC_LIST_OPTION } from "./cloudflare-pages/cloudflare-pages-constants"; import { CloudflarePagesSyncFns } from "./cloudflare-pages/cloudflare-pages-fns"; import { CLOUDFLARE_WORKERS_SYNC_LIST_OPTION, CloudflareWorkersSyncFns } from "./cloudflare-workers"; @@ -49,8 +50,7 @@ import { HC_VAULT_SYNC_LIST_OPTION, HCVaultSyncFns } from "./hc-vault"; import { HEROKU_SYNC_LIST_OPTION, HerokuSyncFns } from "./heroku"; import { HUMANITEC_SYNC_LIST_OPTION } from "./humanitec"; import { HumanitecSyncFns } from "./humanitec/humanitec-sync-fns"; -import { LARAVEL_FORGE_SYNC_LIST_OPTION } from "./laravel-forge"; -import { LaravelForgeSyncFns } from "./laravel-forge/laravel-forge-sync-fns"; +import { LARAVEL_FORGE_SYNC_LIST_OPTION, LaravelForgeSyncFns } from "./laravel-forge"; import { NETLIFY_SYNC_LIST_OPTION, NetlifySyncFns } from "./netlify"; import { RAILWAY_SYNC_LIST_OPTION } from "./railway/railway-sync-constants"; import { RailwaySyncFns } from "./railway/railway-sync-fns"; @@ -94,7 +94,8 @@ const SECRET_SYNC_LIST_OPTIONS: Record = { [SecretSync.DigitalOceanAppPlatform]: DIGITAL_OCEAN_APP_PLATFORM_SYNC_LIST_OPTION, [SecretSync.Netlify]: NETLIFY_SYNC_LIST_OPTION, [SecretSync.Bitbucket]: BITBUCKET_SYNC_LIST_OPTION, - [SecretSync.LaravelForge]: LARAVEL_FORGE_SYNC_LIST_OPTION + [SecretSync.LaravelForge]: LARAVEL_FORGE_SYNC_LIST_OPTION, + [SecretSync.Chef]: CHEF_SYNC_LIST_OPTION }; export const listSecretSyncOptions = () => { @@ -282,6 +283,8 @@ export const SecretSyncFns = { return BitbucketSyncFns.syncSecrets(secretSync, schemaSecretMap); case SecretSync.LaravelForge: return LaravelForgeSyncFns.syncSecrets(secretSync, schemaSecretMap); + case SecretSync.Chef: + return ChefSyncFns.syncSecrets(secretSync, schemaSecretMap); default: throw new Error( `Unhandled sync destination for sync secrets fns: ${(secretSync as TSecretSyncWithCredentials).destination}` @@ -401,6 +404,9 @@ export const SecretSyncFns = { case SecretSync.LaravelForge: secretMap = await LaravelForgeSyncFns.getSecrets(secretSync); break; + case SecretSync.Chef: + secretMap = await ChefSyncFns.getSecrets(secretSync); + break; default: throw new Error( `Unhandled sync destination for get secrets fns: ${(secretSync as TSecretSyncWithCredentials).destination}` @@ -496,6 +502,8 @@ export const SecretSyncFns = { return BitbucketSyncFns.removeSecrets(secretSync, schemaSecretMap); case SecretSync.LaravelForge: return LaravelForgeSyncFns.removeSecrets(secretSync, schemaSecretMap); + case SecretSync.Chef: + return ChefSyncFns.removeSecrets(secretSync, schemaSecretMap); default: throw new Error( `Unhandled sync destination for remove secrets fns: ${(secretSync as TSecretSyncWithCredentials).destination}` diff --git a/backend/src/services/secret-sync/secret-sync-maps.ts b/backend/src/services/secret-sync/secret-sync-maps.ts index 0ec8aede0..e82d4f077 100644 --- a/backend/src/services/secret-sync/secret-sync-maps.ts +++ b/backend/src/services/secret-sync/secret-sync-maps.ts @@ -33,7 +33,8 @@ export const SECRET_SYNC_NAME_MAP: Record = { [SecretSync.DigitalOceanAppPlatform]: "Digital Ocean App Platform", [SecretSync.Netlify]: "Netlify", [SecretSync.Bitbucket]: "Bitbucket", - [SecretSync.LaravelForge]: "Laravel Forge" + [SecretSync.LaravelForge]: "Laravel Forge", + [SecretSync.Chef]: "Chef" }; export const SECRET_SYNC_CONNECTION_MAP: Record = { @@ -67,7 +68,8 @@ export const SECRET_SYNC_CONNECTION_MAP: Record = { [SecretSync.DigitalOceanAppPlatform]: AppConnection.DigitalOcean, [SecretSync.Netlify]: AppConnection.Netlify, [SecretSync.Bitbucket]: AppConnection.Bitbucket, - [SecretSync.LaravelForge]: AppConnection.LaravelForge + [SecretSync.LaravelForge]: AppConnection.LaravelForge, + [SecretSync.Chef]: AppConnection.Chef }; export const SECRET_SYNC_PLAN_MAP: Record = { @@ -101,7 +103,8 @@ export const SECRET_SYNC_PLAN_MAP: Record = { [SecretSync.DigitalOceanAppPlatform]: SecretSyncPlanType.Regular, [SecretSync.Netlify]: SecretSyncPlanType.Regular, [SecretSync.Bitbucket]: SecretSyncPlanType.Regular, - [SecretSync.LaravelForge]: SecretSyncPlanType.Regular + [SecretSync.LaravelForge]: SecretSyncPlanType.Regular, + [SecretSync.Chef]: SecretSyncPlanType.Regular }; export const SECRET_SYNC_SKIP_FIELDS_MAP: Record = { @@ -144,7 +147,8 @@ export const SECRET_SYNC_SKIP_FIELDS_MAP: Record = { [SecretSync.DigitalOceanAppPlatform]: ["appName"], [SecretSync.Netlify]: ["accountName", "siteName"], [SecretSync.Bitbucket]: [], - [SecretSync.LaravelForge]: [] + [SecretSync.LaravelForge]: [], + [SecretSync.Chef]: [] }; const defaultDuplicateCheck: DestinationDuplicateCheckFn = () => true; @@ -204,5 +208,6 @@ export const DESTINATION_DUPLICATE_CHECK_MAP: Record { + const { control, setValue } = useFormContext< + TSecretSyncForm & { destination: SecretSync.Chef } + >(); + + const connectionId = useWatch({ name: "connection.id", control }); + const dataBagName = useWatch({ name: "destinationConfig.dataBagName", control }); + const dataBagItemName = useWatch({ name: "destinationConfig.dataBagItemName", control }); + + const { data: dataBags, isLoading: isDataBagsLoading } = useChefConnectionListDataBags( + connectionId, + { + enabled: Boolean(connectionId) + } + ); + + const { data: dataBagItems, isLoading: isDataBagItemsLoading } = + useChefConnectionListDataBagItems(connectionId, dataBagName, { + enabled: Boolean(connectionId && dataBagName) + }); + + console.log({ dataBags, dataBagItems }); + + const handleChangeConnection = () => { + setValue("destinationConfig.dataBagName", ""); + setValue("destinationConfig.dataBagItemName", ""); + }; + + return ( + <> + + + ( + + dataBag.name === value) ?? null} + onChange={(option) => { + const selectedDataBag = option as SingleValue; + onChange(selectedDataBag?.name ?? ""); + setValue("destinationConfig.dataBagItemName", ""); + }} + options={dataBags} + placeholder="Select a data bag..." + getOptionLabel={(option) => option.name} + getOptionValue={(option) => option.name} + /> + + )} + /> + + ( + + dataBagItem.name === value) ?? null} + onChange={(option) => { + const selectedDataBagItem = option as SingleValue; + onChange(selectedDataBagItem?.name ?? ""); + setValue("destinationConfig.dataBagItemName", selectedDataBagItem?.name ?? ""); + }} + options={dataBagItems} + placeholder="Select a data bag item..." + getOptionLabel={(option) => option.name} + getOptionValue={(option) => option.name} + /> + + )} + /> + + ); +}; diff --git a/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/SecretSyncDestinationFields.tsx b/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/SecretSyncDestinationFields.tsx index 61ba54369..5137b7d39 100644 --- a/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/SecretSyncDestinationFields.tsx +++ b/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/SecretSyncDestinationFields.tsx @@ -34,6 +34,7 @@ import { TerraformCloudSyncFields } from "./TerraformCloudSyncFields"; import { VercelSyncFields } from "./VercelSyncFields"; import { WindmillSyncFields } from "./WindmillSyncFields"; import { ZabbixSyncFields } from "./ZabbixSyncFields"; +import { ChefSyncFields } from "./ChefSyncFields"; export const SecretSyncDestinationFields = () => { const { watch } = useFormContext(); @@ -103,6 +104,8 @@ export const SecretSyncDestinationFields = () => { return ; case SecretSync.LaravelForge: return ; + case SecretSync.Chef: + return ; default: throw new Error(`Unhandled Destination Config Field: ${destination}`); } diff --git a/frontend/src/components/secret-syncs/forms/SecretSyncOptionsFields/SecretSyncOptionsFields.tsx b/frontend/src/components/secret-syncs/forms/SecretSyncOptionsFields/SecretSyncOptionsFields.tsx index f66cadaea..dbd5f743a 100644 --- a/frontend/src/components/secret-syncs/forms/SecretSyncOptionsFields/SecretSyncOptionsFields.tsx +++ b/frontend/src/components/secret-syncs/forms/SecretSyncOptionsFields/SecretSyncOptionsFields.tsx @@ -70,6 +70,7 @@ export const SecretSyncOptionsFields = ({ hideInitialSync }: Props) => { case SecretSync.Netlify: case SecretSync.Bitbucket: case SecretSync.LaravelForge: + case SecretSync.Chef: AdditionalSyncOptionsFieldsComponent = null; break; default: diff --git a/frontend/src/components/secret-syncs/forms/SecretSyncReviewFields/ChefSyncReviewFields.tsx b/frontend/src/components/secret-syncs/forms/SecretSyncReviewFields/ChefSyncReviewFields.tsx new file mode 100644 index 000000000..95f5310a2 --- /dev/null +++ b/frontend/src/components/secret-syncs/forms/SecretSyncReviewFields/ChefSyncReviewFields.tsx @@ -0,0 +1,18 @@ +import { useFormContext } from "react-hook-form"; + +import { TSecretSyncForm } from "@app/components/secret-syncs/forms/schemas"; +import { GenericFieldLabel } from "@app/components/v2"; +import { SecretSync } from "@app/hooks/api/secretSyncs"; + +export const ChefSyncReviewFields = () => { + const { watch } = useFormContext(); + const dataBagName = watch("destinationConfig.dataBagName"); + const dataBagItemName = watch("destinationConfig.dataBagItemName"); + + return ( + <> + {dataBagName} + {dataBagItemName} + + ); +}; diff --git a/frontend/src/components/secret-syncs/forms/SecretSyncReviewFields/SecretSyncReviewFields.tsx b/frontend/src/components/secret-syncs/forms/SecretSyncReviewFields/SecretSyncReviewFields.tsx index 8c8ea523b..78f365a65 100644 --- a/frontend/src/components/secret-syncs/forms/SecretSyncReviewFields/SecretSyncReviewFields.tsx +++ b/frontend/src/components/secret-syncs/forms/SecretSyncReviewFields/SecretSyncReviewFields.tsx @@ -47,6 +47,7 @@ import { TerraformCloudSyncReviewFields } from "./TerraformCloudSyncReviewFields import { VercelSyncReviewFields } from "./VercelSyncReviewFields"; import { WindmillSyncReviewFields } from "./WindmillSyncReviewFields"; import { ZabbixSyncReviewFields } from "./ZabbixSyncReviewFields"; +import { ChefSyncReviewFields } from "./ChefSyncReviewFields"; export const SecretSyncReviewFields = () => { const { watch } = useFormContext(); @@ -173,6 +174,9 @@ export const SecretSyncReviewFields = () => { case SecretSync.LaravelForge: DestinationFieldsComponent = ; break; + case SecretSync.Chef: + DestinationFieldsComponent = ; + break; default: throw new Error(`Unhandled Destination Review Fields: ${destination}`); } diff --git a/frontend/src/components/secret-syncs/forms/schemas/chef-sync-destination-schema.ts b/frontend/src/components/secret-syncs/forms/schemas/chef-sync-destination-schema.ts new file mode 100644 index 000000000..b69781ce1 --- /dev/null +++ b/frontend/src/components/secret-syncs/forms/schemas/chef-sync-destination-schema.ts @@ -0,0 +1,14 @@ +import { z } from "zod"; + +import { BaseSecretSyncSchema } from "@app/components/secret-syncs/forms/schemas/base-secret-sync-schema"; +import { SecretSync } from "@app/hooks/api/secretSyncs"; + +export const ChefSyncDestinationSchema = BaseSecretSyncSchema().merge( + z.object({ + destination: z.literal(SecretSync.Chef), + destinationConfig: z.object({ + dataBagName: z.string().trim().min(1, "Data Bag Name required"), + dataBagItemName: z.string().trim().min(1, "Data Bag Item Name required") + }) + }) +); diff --git a/frontend/src/components/secret-syncs/forms/schemas/secret-sync-schema.ts b/frontend/src/components/secret-syncs/forms/schemas/secret-sync-schema.ts index 5ebc38184..85c8289a9 100644 --- a/frontend/src/components/secret-syncs/forms/schemas/secret-sync-schema.ts +++ b/frontend/src/components/secret-syncs/forms/schemas/secret-sync-schema.ts @@ -31,6 +31,7 @@ import { TerraformCloudSyncDestinationSchema } from "./terraform-cloud-destinati import { VercelSyncDestinationSchema } from "./vercel-sync-destination-schema"; import { WindmillSyncDestinationSchema } from "./windmill-sync-destination-schema"; import { ZabbixSyncDestinationSchema } from "./zabbix-sync-destination-schema"; +import { ChefSyncDestinationSchema } from "./chef-sync-destination-schema"; const SecretSyncUnionSchema = z.discriminatedUnion("destination", [ AwsParameterStoreSyncDestinationSchema, @@ -63,7 +64,8 @@ const SecretSyncUnionSchema = z.discriminatedUnion("destination", [ DigitalOceanAppPlatformSyncDestinationSchema, NetlifySyncDestinationSchema, BitbucketSyncDestinationSchema, - LaravelForgeSyncDestinationSchema + LaravelForgeSyncDestinationSchema, + ChefSyncDestinationSchema ]); export const SecretSyncFormSchema = SecretSyncUnionSchema; diff --git a/frontend/src/helpers/secretSyncs.ts b/frontend/src/helpers/secretSyncs.ts index 12cae6ea6..f2cae0be5 100644 --- a/frontend/src/helpers/secretSyncs.ts +++ b/frontend/src/helpers/secretSyncs.ts @@ -117,6 +117,10 @@ export const SECRET_SYNC_MAP: Record = { [SecretSync.DigitalOceanAppPlatform]: AppConnection.DigitalOcean, [SecretSync.Netlify]: AppConnection.Netlify, [SecretSync.Bitbucket]: AppConnection.Bitbucket, - [SecretSync.LaravelForge]: AppConnection.LaravelForge + [SecretSync.LaravelForge]: AppConnection.LaravelForge, + [SecretSync.Chef]: AppConnection.Chef }; export const SECRET_SYNC_INITIAL_SYNC_BEHAVIOR_MAP: Record< diff --git a/frontend/src/hooks/api/appConnections/chef/index.ts b/frontend/src/hooks/api/appConnections/chef/index.ts new file mode 100644 index 000000000..2c1906d36 --- /dev/null +++ b/frontend/src/hooks/api/appConnections/chef/index.ts @@ -0,0 +1,2 @@ +export * from "./queries"; +export * from "./types"; diff --git a/frontend/src/hooks/api/appConnections/chef/queries.tsx b/frontend/src/hooks/api/appConnections/chef/queries.tsx new file mode 100644 index 000000000..f24a39eed --- /dev/null +++ b/frontend/src/hooks/api/appConnections/chef/queries.tsx @@ -0,0 +1,68 @@ +import { useQuery, UseQueryOptions } from "@tanstack/react-query"; + +import { apiRequest } from "@app/config/request"; +import { appConnectionKeys } from "@app/hooks/api/appConnections"; + +import { TChefDataBag, TChefDataBagItem } from "./types"; + +const chefConnectionKeys = { + all: [...appConnectionKeys.all, "chef"] as const, + listDataBags: (connectionId: string) => + [...chefConnectionKeys.all, "data-bags", connectionId] as const, + listDataBagItems: (connectionId: string, dataBagName: string) => + [...chefConnectionKeys.all, "data-bag-items", connectionId, dataBagName] as const +}; + +export const useChefConnectionListDataBags = ( + connectionId: string, + options?: Omit< + UseQueryOptions< + TChefDataBag[], + unknown, + TChefDataBag[], + ReturnType + >, + "queryKey" | "queryFn" + > +) => { + return useQuery({ + queryKey: chefConnectionKeys.listDataBags(connectionId), + queryFn: async () => { + const { data } = await apiRequest.get( + `/api/v1/app-connections/chef/${connectionId}/data-bags` + ); + + return data; + }, + ...options + }); +}; + +export const useChefConnectionListDataBagItems = ( + connectionId: string, + dataBagName: string, + options?: Omit< + UseQueryOptions< + TChefDataBagItem[], + unknown, + TChefDataBagItem[], + ReturnType + >, + "queryKey" | "queryFn" + > +) => { + return useQuery({ + queryKey: chefConnectionKeys.listDataBagItems(connectionId, dataBagName), + queryFn: async () => { + const params = { dataBagName }; + const { data } = await apiRequest.get( + `/api/v1/app-connections/chef/${connectionId}/data-bag-items`, + { params } + ); + + return data; + }, + enabled: Boolean(connectionId && dataBagName), + ...options + }); +}; diff --git a/frontend/src/hooks/api/appConnections/chef/types.ts b/frontend/src/hooks/api/appConnections/chef/types.ts new file mode 100644 index 000000000..fd87d47c7 --- /dev/null +++ b/frontend/src/hooks/api/appConnections/chef/types.ts @@ -0,0 +1,7 @@ +export type TChefDataBag = { + name: string; +}; + +export type TChefDataBagItem = { + name: string; +}; diff --git a/frontend/src/hooks/api/secretSyncs/enums.ts b/frontend/src/hooks/api/secretSyncs/enums.ts index efcc04b6d..d34876930 100644 --- a/frontend/src/hooks/api/secretSyncs/enums.ts +++ b/frontend/src/hooks/api/secretSyncs/enums.ts @@ -29,7 +29,8 @@ export enum SecretSync { DigitalOceanAppPlatform = "digital-ocean-app-platform", Netlify = "netlify", Bitbucket = "bitbucket", - LaravelForge = "laravel-forge" + LaravelForge = "laravel-forge", + Chef = "chef" } export enum SecretSyncStatus { diff --git a/frontend/src/hooks/api/secretSyncs/types/chef-sync.ts b/frontend/src/hooks/api/secretSyncs/types/chef-sync.ts new file mode 100644 index 000000000..6bd3d7ca2 --- /dev/null +++ b/frontend/src/hooks/api/secretSyncs/types/chef-sync.ts @@ -0,0 +1,16 @@ +import { AppConnection } from "@app/hooks/api/appConnections/enums"; +import { SecretSync } from "@app/hooks/api/secretSyncs"; +import { TRootSecretSync } from "@app/hooks/api/secretSyncs/types/root-sync"; + +export type TChefSync = TRootSecretSync & { + destination: SecretSync.Chef; + destinationConfig: { + dataBagName: string; + dataBagItemName: string; + }; + connection: { + app: AppConnection.Chef; + name: string; + id: string; + }; +}; diff --git a/frontend/src/hooks/api/secretSyncs/types/index.ts b/frontend/src/hooks/api/secretSyncs/types/index.ts index 3cab195bd..577ec7fc4 100644 --- a/frontend/src/hooks/api/secretSyncs/types/index.ts +++ b/frontend/src/hooks/api/secretSyncs/types/index.ts @@ -32,6 +32,7 @@ import { TTerraformCloudSync } from "./terraform-cloud-sync"; import { TVercelSync } from "./vercel-sync"; import { TWindmillSync } from "./windmill-sync"; import { TZabbixSync } from "./zabbix-sync"; +import { TChefSync } from "./chef-sync"; export type TSecretSyncOption = { name: string; @@ -71,7 +72,8 @@ export type TSecretSync = | TDigitalOceanAppPlatformSync | TNetlifySync | TBitbucketSync - | TLaravelForgeSync; + | TLaravelForgeSync + | TChefSync; export type TListSecretSyncs = { secretSyncs: TSecretSync[] }; diff --git a/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncDestinationCol/ChefSyncDestinationCol.tsx b/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncDestinationCol/ChefSyncDestinationCol.tsx new file mode 100644 index 000000000..cd1b2742e --- /dev/null +++ b/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncDestinationCol/ChefSyncDestinationCol.tsx @@ -0,0 +1,14 @@ +import { TChefSync } from "@app/hooks/api/secretSyncs/types/chef-sync"; + +import { getSecretSyncDestinationColValues } from "../helpers"; +import { SecretSyncTableCell } from "../SecretSyncTableCell"; + +type Props = { + secretSync: TChefSync; +}; + +export const ChefSyncDestinationCol = ({ secretSync }: Props) => { + const { primaryText, secondaryText } = getSecretSyncDestinationColValues(secretSync); + + return ; +}; diff --git a/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncDestinationCol/SecretSyncDestinationCol.tsx b/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncDestinationCol/SecretSyncDestinationCol.tsx index 1e4df7351..d1abd6e45 100644 --- a/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncDestinationCol/SecretSyncDestinationCol.tsx +++ b/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncDestinationCol/SecretSyncDestinationCol.tsx @@ -31,6 +31,7 @@ import { TerraformCloudSyncDestinationCol } from "./TerraformCloudSyncDestinatio import { VercelSyncDestinationCol } from "./VercelSyncDestinationCol"; import { WindmillSyncDestinationCol } from "./WindmillSyncDestinationCol"; import { ZabbixSyncDestinationCol } from "./ZabbixSyncDestinationCol"; +import { ChefSyncDestinationCol } from "./ChefSyncDestinationCol"; type Props = { secretSync: TSecretSync; @@ -100,6 +101,8 @@ export const SecretSyncDestinationCol = ({ secretSync }: Props) => { return ; case SecretSync.LaravelForge: return ; + case SecretSync.Chef: + return ; default: throw new Error( `Unhandled Secret Sync Destination Col: ${(secretSync as TSecretSync).destination}` diff --git a/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/helpers/index.ts b/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/helpers/index.ts index c4a3f2a37..559936ce2 100644 --- a/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/helpers/index.ts +++ b/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/helpers/index.ts @@ -198,6 +198,10 @@ export const getSecretSyncDestinationColValues = (secretSync: TSecretSync) => { primaryText = destinationConfig.siteName || destinationConfig.siteId; secondaryText = destinationConfig.orgName || destinationConfig.orgSlug; break; + case SecretSync.Chef: + primaryText = destinationConfig.dataBagName; + secondaryText = destinationConfig.dataBagItemName; + break; default: throw new Error(`Unhandled Destination Col Values ${destination}`); } diff --git a/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncDestinationSection/ChefSyncDestinationSection.tsx b/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncDestinationSection/ChefSyncDestinationSection.tsx new file mode 100644 index 000000000..c5e230878 --- /dev/null +++ b/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncDestinationSection/ChefSyncDestinationSection.tsx @@ -0,0 +1,19 @@ +import { GenericFieldLabel } from "@app/components/secret-syncs"; +import { TChefSync } from "@app/hooks/api/secretSyncs/types/chef-sync"; + +type Props = { + secretSync: TChefSync; +}; + +export const ChefSyncDestinationSection = ({ secretSync }: Props) => { + const { destinationConfig } = secretSync; + + return ( + <> + {destinationConfig.dataBagName} + + {destinationConfig.dataBagItemName} + + + ); +}; diff --git a/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncDestinationSection/SecretSyncDestinatonSection.tsx b/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncDestinationSection/SecretSyncDestinatonSection.tsx index 78e00d8fa..cda641cdb 100644 --- a/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncDestinationSection/SecretSyncDestinatonSection.tsx +++ b/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncDestinationSection/SecretSyncDestinatonSection.tsx @@ -42,6 +42,7 @@ import { TerraformCloudSyncDestinationSection } from "./TerraformCloudSyncDestin import { VercelSyncDestinationSection } from "./VercelSyncDestinationSection"; import { WindmillSyncDestinationSection } from "./WindmillSyncDestinationSection"; import { ZabbixSyncDestinationSection } from "./ZabbixSyncDestinationSection"; +import { ChefSyncDestinationSection } from "./ChefSyncDestinationSection"; type Props = { secretSync: TSecretSync; @@ -152,6 +153,9 @@ export const SecretSyncDestinationSection = ({ secretSync, onEditDestination }: case SecretSync.LaravelForge: DestinationComponents = ; break; + case SecretSync.Chef: + DestinationComponents = ; + break; default: throw new Error(`Unhandled Destination Section components: ${destination}`); } diff --git a/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncOptionsSection/SecretSyncOptionsSection.tsx b/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncOptionsSection/SecretSyncOptionsSection.tsx index 46ef832dd..ece9dfd45 100644 --- a/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncOptionsSection/SecretSyncOptionsSection.tsx +++ b/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncOptionsSection/SecretSyncOptionsSection.tsx @@ -73,6 +73,7 @@ export const SecretSyncOptionsSection = ({ secretSync, onEditOptions }: Props) = case SecretSync.Netlify: case SecretSync.Bitbucket: case SecretSync.LaravelForge: + case SecretSync.Chef: AdditionalSyncOptionsComponent = null; break; default: From 0661efee3e0e1a425f5e0936dc1b3fb7573d9dd6 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Thu, 30 Oct 2025 20:36:01 +0530 Subject: [PATCH 13/79] fix: chef connection secret sync fns --- .../secret-sync/chef/chef-sync-fns.ts | 36 +++++++++++-------- .../secret-sync/chef/chef-sync-types.ts | 9 ++++- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/backend/src/services/secret-sync/chef/chef-sync-fns.ts b/backend/src/services/secret-sync/chef/chef-sync-fns.ts index 33e89035e..7f32b398a 100644 --- a/backend/src/services/secret-sync/chef/chef-sync-fns.ts +++ b/backend/src/services/secret-sync/chef/chef-sync-fns.ts @@ -2,7 +2,14 @@ import { getChefDataBagItem, updateChefDataBagItem } from "@app/services/app-con import { matchesSchema } from "@app/services/secret-sync/secret-sync-fns"; import { TSecretMap } from "@app/services/secret-sync/secret-sync-types"; -import { ChefSecret, TChefDataBagItemContent, TChefSyncWithCredentials, TGetChefSecrets } from "./chef-sync-types"; +import { + ChefSecret, + TChefDataBagItemContent, + TChefSecret, + TChefSecrets, + TChefSyncWithCredentials, + TGetChefSecrets +} from "./chef-sync-types"; const getChefSecretsRaw = async ({ serverUrl, @@ -29,7 +36,7 @@ const getChefSecretsRaw = async ({ return dataBagItem; }; -const getChefSecrets = async (secretSync: TChefSyncWithCredentials): Promise => { +const getChefSecrets = async (secretSync: TChefSyncWithCredentials): Promise => { const { connection, destinationConfig: { dataBagName, dataBagItemName } @@ -46,21 +53,23 @@ const getChefSecrets = async (secretSync: TChefSyncWithCredentials): Promise { + Object.entries(existingSecrets).forEach(([key, value]) => { if (key !== "id" && value !== null && value !== undefined) { secrets.push({ key, value: String(value) }); } }); - return secrets; + return { id, secrets }; }; const updateChefSecrets = async ( secretSync: TChefSyncWithCredentials, - secrets: Record + id: string, + secrets: Record ) => { const { connection, @@ -71,7 +80,7 @@ const updateChefSecrets = async ( // Chef data bag items must have an 'id' field const dataBagItemContent: TChefDataBagItemContent = { - id: dataBagItemName, + id, ...secrets }; @@ -93,7 +102,7 @@ export const ChefSyncFns = { syncOptions: { disableSecretDeletion, keySchema } } = secretSync; - const secrets = await getChefSecrets(secretSync); + const { id, secrets } = await getChefSecrets(secretSync); // Create a map of the existing secrets const updatedSecretsMap = new Map(secrets.map((secret) => [secret.key, secret.value])); @@ -117,27 +126,26 @@ export const ChefSyncFns = { // Convert map to object for Chef API const updatedSecrets = Object.fromEntries(updatedSecretsMap.entries()); - await updateChefSecrets(secretSync, updatedSecrets); + await updateChefSecrets(secretSync, id, updatedSecrets); }, async getSecrets(secretSync: TChefSyncWithCredentials): Promise { - const secrets = await getChefSecrets(secretSync); + const { secrets } = await getChefSecrets(secretSync); + return Object.fromEntries(secrets.map((secret) => [secret.key, { value: secret.value }])); }, async removeSecrets(secretSync: TChefSyncWithCredentials, secretMap: TSecretMap) { - const existingSecrets = await getChefSecrets(secretSync); + const { id, secrets: existingSecrets } = await getChefSecrets(secretSync); const newSecrets = existingSecrets.filter((secret) => !Object.hasOwn(secretMap, secret.key)); - // If nothing changed, return early if (newSecrets.length === existingSecrets.length) { return; } - // Convert to object for Chef API const updatedSecrets = Object.fromEntries(newSecrets.map((secret) => [secret.key, secret.value])); - await updateChefSecrets(secretSync, updatedSecrets); + await updateChefSecrets(secretSync, id, updatedSecrets); } }; diff --git a/backend/src/services/secret-sync/chef/chef-sync-types.ts b/backend/src/services/secret-sync/chef/chef-sync-types.ts index 2ad35ba87..464e0372d 100644 --- a/backend/src/services/secret-sync/chef/chef-sync-types.ts +++ b/backend/src/services/secret-sync/chef/chef-sync-types.ts @@ -23,9 +23,16 @@ export type TGetChefSecrets = { dataBagItemName: string; }; +export type TChefSecret = string | number | boolean | null; + export type TChefDataBagItemContent = { id: string; - [key: string]: string | number | boolean | null; + [key: string]: TChefSecret; +}; + +export type TChefSecrets = { + id: string; + secrets: ChefSecret[]; }; export type ChefSecret = { From f72971e3b8830238bd378e2d8a12188016ca3567 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Thu, 30 Oct 2025 23:16:46 +0530 Subject: [PATCH 14/79] docs: adds chef platform docs --- .../chef/chef-connection-fns.ts | 28 +--- .../chef/chef-connection-types.ts | 20 +++ .../app-connections/chef/available.mdx | 4 + .../endpoints/app-connections/chef/create.mdx | 10 ++ .../endpoints/app-connections/chef/delete.mdx | 4 + .../app-connections/chef/get-by-id.mdx | 4 + .../app-connections/chef/get-by-name.mdx | 4 + .../endpoints/app-connections/chef/list.mdx | 4 + .../endpoints/app-connections/chef/update.mdx | 10 ++ .../endpoints/secret-syncs/chef/create.mdx | 4 + .../endpoints/secret-syncs/chef/delete.mdx | 4 + .../endpoints/secret-syncs/chef/get-by-id.mdx | 4 + .../secret-syncs/chef/get-by-name.mdx | 4 + .../secret-syncs/chef/import-secrets.mdx | 4 + .../endpoints/secret-syncs/chef/list.mdx | 4 + .../secret-syncs/chef/remove-secrets.mdx | 4 + .../secret-syncs/chef/sync-secrets.mdx | 4 + .../endpoints/secret-syncs/chef/update.mdx | 4 + docs/docs.json | 29 ++++ .../chef/app-connection-form.png | Bin 0 -> 260084 bytes .../chef/app-connection-generated.png | Bin 0 -> 163785 bytes .../chef/app-connection-option.png | Bin 0 -> 163093 bytes .../chef/chef-connection-details.png | Bin 0 -> 92517 bytes .../app-connections/chef/chef-dashboard.png | Bin 0 -> 108032 bytes .../app-connections/chef/chef-folder.png | Bin 0 -> 35939 bytes .../chef/download-starter-kit.png | Bin 0 -> 202307 bytes .../chef/extract-starter-kit.png | Bin 0 -> 24845 bytes .../app-connections/chef/private-key-file.png | Bin 0 -> 24317 bytes .../app-connections/chef/starter-kit.png | Bin 0 -> 122316 bytes .../secret-syncs/chef/select-option.png | Bin 0 -> 159405 bytes .../images/secret-syncs/chef/sync-created.png | Bin 0 -> 200782 bytes .../secret-syncs/chef/sync-destination.png | Bin 0 -> 203814 bytes .../images/secret-syncs/chef/sync-details.png | Bin 0 -> 203853 bytes .../images/secret-syncs/chef/sync-options.png | Bin 0 -> 253116 bytes docs/images/secret-syncs/chef/sync-review.png | Bin 0 -> 231525 bytes docs/images/secret-syncs/chef/sync-source.png | Bin 0 -> 212306 bytes docs/integrations/app-connections/chef.mdx | 142 ++++++++++++++++ docs/integrations/secret-syncs/chef.mdx | 154 ++++++++++++++++++ docs/snippets/AppConnectionsBrowser.jsx | 1 + docs/snippets/SecretSyncsBrowser.jsx | 3 +- 40 files changed, 432 insertions(+), 21 deletions(-) create mode 100644 docs/api-reference/endpoints/app-connections/chef/available.mdx create mode 100644 docs/api-reference/endpoints/app-connections/chef/create.mdx create mode 100644 docs/api-reference/endpoints/app-connections/chef/delete.mdx create mode 100644 docs/api-reference/endpoints/app-connections/chef/get-by-id.mdx create mode 100644 docs/api-reference/endpoints/app-connections/chef/get-by-name.mdx create mode 100644 docs/api-reference/endpoints/app-connections/chef/list.mdx create mode 100644 docs/api-reference/endpoints/app-connections/chef/update.mdx create mode 100644 docs/api-reference/endpoints/secret-syncs/chef/create.mdx create mode 100644 docs/api-reference/endpoints/secret-syncs/chef/delete.mdx create mode 100644 docs/api-reference/endpoints/secret-syncs/chef/get-by-id.mdx create mode 100644 docs/api-reference/endpoints/secret-syncs/chef/get-by-name.mdx create mode 100644 docs/api-reference/endpoints/secret-syncs/chef/import-secrets.mdx create mode 100644 docs/api-reference/endpoints/secret-syncs/chef/list.mdx create mode 100644 docs/api-reference/endpoints/secret-syncs/chef/remove-secrets.mdx create mode 100644 docs/api-reference/endpoints/secret-syncs/chef/sync-secrets.mdx create mode 100644 docs/api-reference/endpoints/secret-syncs/chef/update.mdx create mode 100644 docs/images/app-connections/chef/app-connection-form.png create mode 100644 docs/images/app-connections/chef/app-connection-generated.png create mode 100644 docs/images/app-connections/chef/app-connection-option.png create mode 100644 docs/images/app-connections/chef/chef-connection-details.png create mode 100644 docs/images/app-connections/chef/chef-dashboard.png create mode 100644 docs/images/app-connections/chef/chef-folder.png create mode 100644 docs/images/app-connections/chef/download-starter-kit.png create mode 100644 docs/images/app-connections/chef/extract-starter-kit.png create mode 100644 docs/images/app-connections/chef/private-key-file.png create mode 100644 docs/images/app-connections/chef/starter-kit.png create mode 100644 docs/images/secret-syncs/chef/select-option.png create mode 100644 docs/images/secret-syncs/chef/sync-created.png create mode 100644 docs/images/secret-syncs/chef/sync-destination.png create mode 100644 docs/images/secret-syncs/chef/sync-details.png create mode 100644 docs/images/secret-syncs/chef/sync-options.png create mode 100644 docs/images/secret-syncs/chef/sync-review.png create mode 100644 docs/images/secret-syncs/chef/sync-source.png create mode 100644 docs/integrations/app-connections/chef.mdx create mode 100644 docs/integrations/secret-syncs/chef.mdx diff --git a/backend/src/services/app-connection/chef/chef-connection-fns.ts b/backend/src/services/app-connection/chef/chef-connection-fns.ts index a224a82f7..1b35628bc 100644 --- a/backend/src/services/app-connection/chef/chef-connection-fns.ts +++ b/backend/src/services/app-connection/chef/chef-connection-fns.ts @@ -10,7 +10,14 @@ import { IntegrationUrls } from "@app/services/integration-auth/integration-list import { TChefDataBagItemContent } from "../../secret-sync/chef/chef-sync-types"; import { AppConnection } from "../app-connection-enums"; import { ChefConnectionMethod } from "./chef-connection-enums"; -import { TChefConnection, TChefConnectionConfig, TChefDataBag, TChefDataBagItem } from "./chef-connection-types"; +import { + TChefConnection, + TChefConnectionConfig, + TChefDataBag, + TChefDataBagItem, + TGetChefDataBagItem, + TUpdateChefDataBagItem +} from "./chef-connection-types"; export const getChefServerUrl = async (serverUrl?: string) => { const chefServerUrl = serverUrl ? removeTrailingSlash(serverUrl) : IntegrationUrls.CHEF_API_URL; @@ -215,15 +222,6 @@ export const listChefDataBagItems = async ( } }; -type TGetChefDataBagItem = { - serverUrl?: string; - userName: string; - privateKey: string; - orgName: string; - dataBagName: string; - dataBagItemName: string; -}; - export const getChefDataBagItem = async ({ serverUrl, userName, @@ -257,16 +255,6 @@ export const getChefDataBagItem = async ({ } }; -type TUpdateChefDataBagItem = { - serverUrl?: string; - userName: string; - privateKey: string; - orgName: string; - dataBagName: string; - dataBagItemName: string; - data: TChefDataBagItemContent; -}; - export const updateChefDataBagItem = async ({ serverUrl, userName, diff --git a/backend/src/services/app-connection/chef/chef-connection-types.ts b/backend/src/services/app-connection/chef/chef-connection-types.ts index 33f0d5793..a2da80d3d 100644 --- a/backend/src/services/app-connection/chef/chef-connection-types.ts +++ b/backend/src/services/app-connection/chef/chef-connection-types.ts @@ -1,6 +1,7 @@ import z from "zod"; import { DiscriminativePick } from "@app/lib/types"; +import { TChefDataBagItemContent } from "@app/services/secret-sync/chef"; import { AppConnection } from "../app-connection-enums"; import { @@ -28,3 +29,22 @@ export type TChefDataBag = { export type TChefDataBagItem = { name: string; }; + +export type TGetChefDataBagItem = { + serverUrl?: string; + userName: string; + privateKey: string; + orgName: string; + dataBagName: string; + dataBagItemName: string; +}; + +export type TUpdateChefDataBagItem = { + serverUrl?: string; + userName: string; + privateKey: string; + orgName: string; + dataBagName: string; + dataBagItemName: string; + data: TChefDataBagItemContent; +}; diff --git a/docs/api-reference/endpoints/app-connections/chef/available.mdx b/docs/api-reference/endpoints/app-connections/chef/available.mdx new file mode 100644 index 000000000..033723489 --- /dev/null +++ b/docs/api-reference/endpoints/app-connections/chef/available.mdx @@ -0,0 +1,4 @@ +--- +title: "Available" +openapi: "GET /api/v1/app-connections/chef/available" +--- diff --git a/docs/api-reference/endpoints/app-connections/chef/create.mdx b/docs/api-reference/endpoints/app-connections/chef/create.mdx new file mode 100644 index 000000000..359b86036 --- /dev/null +++ b/docs/api-reference/endpoints/app-connections/chef/create.mdx @@ -0,0 +1,10 @@ +--- +title: "Create" +openapi: "POST /api/v1/app-connections/chef" +--- + + + Check out the configuration docs for [Chef + Connections](/integrations/app-connections/chef) to learn how to obtain the + required credentials. + diff --git a/docs/api-reference/endpoints/app-connections/chef/delete.mdx b/docs/api-reference/endpoints/app-connections/chef/delete.mdx new file mode 100644 index 000000000..43a67f01c --- /dev/null +++ b/docs/api-reference/endpoints/app-connections/chef/delete.mdx @@ -0,0 +1,4 @@ +--- +title: "Delete" +openapi: "DELETE /api/v1/app-connections/chef/{connectionId}" +--- diff --git a/docs/api-reference/endpoints/app-connections/chef/get-by-id.mdx b/docs/api-reference/endpoints/app-connections/chef/get-by-id.mdx new file mode 100644 index 000000000..8461cc553 --- /dev/null +++ b/docs/api-reference/endpoints/app-connections/chef/get-by-id.mdx @@ -0,0 +1,4 @@ +--- +title: "Get by ID" +openapi: "GET /api/v1/app-connections/chef/{connectionId}" +--- diff --git a/docs/api-reference/endpoints/app-connections/chef/get-by-name.mdx b/docs/api-reference/endpoints/app-connections/chef/get-by-name.mdx new file mode 100644 index 000000000..f1042abdb --- /dev/null +++ b/docs/api-reference/endpoints/app-connections/chef/get-by-name.mdx @@ -0,0 +1,4 @@ +--- +title: "Get by Name" +openapi: "GET /api/v1/app-connections/chef/connection-name/{connectionName}" +--- diff --git a/docs/api-reference/endpoints/app-connections/chef/list.mdx b/docs/api-reference/endpoints/app-connections/chef/list.mdx new file mode 100644 index 000000000..dc18436a7 --- /dev/null +++ b/docs/api-reference/endpoints/app-connections/chef/list.mdx @@ -0,0 +1,4 @@ +--- +title: "List" +openapi: "GET /api/v1/app-connections/chef" +--- diff --git a/docs/api-reference/endpoints/app-connections/chef/update.mdx b/docs/api-reference/endpoints/app-connections/chef/update.mdx new file mode 100644 index 000000000..780bea960 --- /dev/null +++ b/docs/api-reference/endpoints/app-connections/chef/update.mdx @@ -0,0 +1,10 @@ +--- +title: "Update" +openapi: "PATCH /api/v1/app-connections/chef/{connectionId}" +--- + + + Check out the configuration docs for [Chef + Connections](/integrations/app-connections/chef) to learn how to obtain the + required credentials. + diff --git a/docs/api-reference/endpoints/secret-syncs/chef/create.mdx b/docs/api-reference/endpoints/secret-syncs/chef/create.mdx new file mode 100644 index 000000000..61b816d7d --- /dev/null +++ b/docs/api-reference/endpoints/secret-syncs/chef/create.mdx @@ -0,0 +1,4 @@ +--- +title: "Create" +openapi: "POST /api/v1/secret-syncs/chef" +--- diff --git a/docs/api-reference/endpoints/secret-syncs/chef/delete.mdx b/docs/api-reference/endpoints/secret-syncs/chef/delete.mdx new file mode 100644 index 000000000..a43d83be1 --- /dev/null +++ b/docs/api-reference/endpoints/secret-syncs/chef/delete.mdx @@ -0,0 +1,4 @@ +--- +title: "Delete" +openapi: "DELETE /api/v1/secret-syncs/chef/{syncId}" +--- diff --git a/docs/api-reference/endpoints/secret-syncs/chef/get-by-id.mdx b/docs/api-reference/endpoints/secret-syncs/chef/get-by-id.mdx new file mode 100644 index 000000000..2efeb51e2 --- /dev/null +++ b/docs/api-reference/endpoints/secret-syncs/chef/get-by-id.mdx @@ -0,0 +1,4 @@ +--- +title: "Get by ID" +openapi: "GET /api/v1/secret-syncs/chef/{syncId}" +--- diff --git a/docs/api-reference/endpoints/secret-syncs/chef/get-by-name.mdx b/docs/api-reference/endpoints/secret-syncs/chef/get-by-name.mdx new file mode 100644 index 000000000..d6ac030d8 --- /dev/null +++ b/docs/api-reference/endpoints/secret-syncs/chef/get-by-name.mdx @@ -0,0 +1,4 @@ +--- +title: "Get by Name" +openapi: "GET /api/v1/secret-syncs/chef/sync-name/{syncName}" +--- diff --git a/docs/api-reference/endpoints/secret-syncs/chef/import-secrets.mdx b/docs/api-reference/endpoints/secret-syncs/chef/import-secrets.mdx new file mode 100644 index 000000000..734c89a95 --- /dev/null +++ b/docs/api-reference/endpoints/secret-syncs/chef/import-secrets.mdx @@ -0,0 +1,4 @@ +--- +title: "Import Secrets" +openapi: "POST /api/v1/secret-syncs/chef/{syncId}/import-secrets" +--- diff --git a/docs/api-reference/endpoints/secret-syncs/chef/list.mdx b/docs/api-reference/endpoints/secret-syncs/chef/list.mdx new file mode 100644 index 000000000..e38b35e43 --- /dev/null +++ b/docs/api-reference/endpoints/secret-syncs/chef/list.mdx @@ -0,0 +1,4 @@ +--- +title: "List" +openapi: "GET /api/v1/secret-syncs/chef" +--- diff --git a/docs/api-reference/endpoints/secret-syncs/chef/remove-secrets.mdx b/docs/api-reference/endpoints/secret-syncs/chef/remove-secrets.mdx new file mode 100644 index 000000000..e44df1c3e --- /dev/null +++ b/docs/api-reference/endpoints/secret-syncs/chef/remove-secrets.mdx @@ -0,0 +1,4 @@ +--- +title: "Remove Secrets" +openapi: "POST /api/v1/secret-syncs/chef/{syncId}/remove-secrets" +--- diff --git a/docs/api-reference/endpoints/secret-syncs/chef/sync-secrets.mdx b/docs/api-reference/endpoints/secret-syncs/chef/sync-secrets.mdx new file mode 100644 index 000000000..8f8eefa04 --- /dev/null +++ b/docs/api-reference/endpoints/secret-syncs/chef/sync-secrets.mdx @@ -0,0 +1,4 @@ +--- +title: "Sync Secrets" +openapi: "POST /api/v1/secret-syncs/chef/{syncId}/sync-secrets" +--- diff --git a/docs/api-reference/endpoints/secret-syncs/chef/update.mdx b/docs/api-reference/endpoints/secret-syncs/chef/update.mdx new file mode 100644 index 000000000..d5c39484d --- /dev/null +++ b/docs/api-reference/endpoints/secret-syncs/chef/update.mdx @@ -0,0 +1,4 @@ +--- +title: "Update" +openapi: "PATCH /api/v1/secret-syncs/chef/{syncId}" +--- diff --git a/docs/docs.json b/docs/docs.json index dda9adcfc..04d6d2aec 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -114,6 +114,7 @@ "integrations/app-connections/bitbucket", "integrations/app-connections/camunda", "integrations/app-connections/checkly", + "integrations/app-connections/chef", "integrations/app-connections/cloudflare", "integrations/app-connections/databricks", "integrations/app-connections/digital-ocean", @@ -539,6 +540,7 @@ "integrations/secret-syncs/bitbucket", "integrations/secret-syncs/camunda", "integrations/secret-syncs/checkly", + "integrations/secret-syncs/chef", "integrations/secret-syncs/cloudflare-pages", "integrations/secret-syncs/cloudflare-workers", "integrations/secret-syncs/databricks", @@ -1656,6 +1658,18 @@ "api-reference/endpoints/app-connections/checkly/delete" ] }, + { + "group": "Chef", + "pages": [ + "api-reference/endpoints/app-connections/chef/list", + "api-reference/endpoints/app-connections/chef/available", + "api-reference/endpoints/app-connections/chef/get-by-id", + "api-reference/endpoints/app-connections/chef/get-by-name", + "api-reference/endpoints/app-connections/chef/create", + "api-reference/endpoints/app-connections/chef/update", + "api-reference/endpoints/app-connections/chef/delete" + ] + }, { "group": "Cloudflare", "pages": [ @@ -2135,6 +2149,20 @@ "api-reference/endpoints/secret-syncs/checkly/remove-secrets" ] }, + { + "group": "Chef", + "pages": [ + "api-reference/endpoints/secret-syncs/chef/list", + "api-reference/endpoints/secret-syncs/chef/get-by-id", + "api-reference/endpoints/secret-syncs/chef/get-by-name", + "api-reference/endpoints/secret-syncs/chef/create", + "api-reference/endpoints/secret-syncs/chef/update", + "api-reference/endpoints/secret-syncs/chef/delete", + "api-reference/endpoints/secret-syncs/chef/sync-secrets", + "api-reference/endpoints/secret-syncs/chef/import-secrets", + "api-reference/endpoints/secret-syncs/chef/remove-secrets" + ] + }, { "group": "Cloudflare Pages", "pages": [ @@ -2290,6 +2318,7 @@ "api-reference/endpoints/secret-syncs/laravel-forge/update", "api-reference/endpoints/secret-syncs/laravel-forge/delete", "api-reference/endpoints/secret-syncs/laravel-forge/sync-secrets", + "api-reference/endpoints/secret-syncs/laravel-forge/import-secrets", "api-reference/endpoints/secret-syncs/laravel-forge/remove-secrets" ] }, diff --git a/docs/images/app-connections/chef/app-connection-form.png b/docs/images/app-connections/chef/app-connection-form.png new file mode 100644 index 0000000000000000000000000000000000000000..9ba5dc8e8e44d47cfd6512c8a4c6e1f1cabf81d0 GIT binary patch literal 260084 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

KRwIq&bNaXMW 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

?O2wnuaf_H&07Bk>|7CobR&lBzYE=e}4^+4i1l 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�>&-s(O92v5)-=$sosHJNKl;CQYbwH(Uc-TY= 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 I?f9Sn10sYn(*OVf literal 0 HcmV?d00001 diff --git a/docs/images/app-connections/chef/app-connection-generated.png b/docs/images/app-connections/chef/app-connection-generated.png new file mode 100644 index 0000000000000000000000000000000000000000..c8ab79540677f6f05edf4fe728cf57f9fe332cac GIT binary patch literal 163785 zcmce-bySq=zc=g_6$NPlX#@djm2Q#lln&|c98ytakP<0j2myzNp*y5Rq@)?Tha4EX zc`nac&$E8}?0x=x-+L`Z=jNWfuIu~#)D^C-Du;(diF4z|4Lk*TX-)8BY3ALmHxDRoTizvO2{L|z6Y??S4VK1>2l0=d%&UF+xM)tG&z6-(UtM%F^ts3r zV}&W+rJ&$|UvA&*VCb6&RC`#==8A_;MgUjR`>v+FD_5Q$O_Hx3$8`%v7jEcO$q?Rx z^^K{^apPt`3LX5^W-D*T`|T;E=0iNz$PW)>rEvZ~`8eP2A)b`8xJ_JlK^eTyn&ejI zn8@7$8zrj`p!T0 z-MH~Rt<9QoaT)6J=N7#x1rF^jd<-qx9 zvn4@>|K&hj7T4$h%dV(iwy$T*|MG<|#6BbCKM8oU{L8)@=m$EB-H{vre(y5$R9%mn z@BPbh>ZX<f#8JClU3$#{qrW~`dBWY(4Jlz+i?mD-_PX2Mf)8WhRbvh{YVwT-n z^o?nAUy6Z3-vq_t;W~0sQnF>#sPhec@Euk4L3p}~^sUyC0iZnmeM5^<>go~@a911Y z*>Z4kJx_|)D<1o>P5PblEeaBJg@Y(-lq&7C6@LZ8yTbaRb-^3;3}6< zc3x=8sKT(YB;_AeIC~DYHbyXYi48R0*5kK~pBex8(0z!b3fX(YR#sLX;(hpl#{bUQ zYhSgxYQzImnw}B!683@h8N{81*79dwjiMcD6&?9uMM2U37`4CW!Lw@!BY#A9N8La2 zj+BWBJ`u#%w|ix@h~-IAkC>~|ORW5aao2>Ow^g}*68>Y@zYz)5LG=@nl2OJIVCBik zzRN8AEiY}5=6`tfwMpDYxJ1R4kS`cdH$0)@p8LyxdGL4L>!v$pq@-`3LhxqD-%Q~( z6d4)ujy^GgI*?GlOKJR2sMwFRg~UeEbzamzqpse?^f_&jS&6) zLXk>T*~y6a~5A_4?1$$tu?=}Sk77q3`{UcdkL2nvwLG;!B$PW z467(t{D@Nw-qPQ%7re6pBBB|}Q_dTCq{2P~0s>A_$65AZTp6KPH#V%FK3GPr@O%1v zb-U-Bbwr>o;K_Z%S&FSn8Lo4BlK;HqfoZ+oG?@8+`_??xCX)YE|V}!A->gw8hzJ(7e zw4cOtQAWXFV|^+;J*TN#TOZIwyku`Be>&eB5xRa+rO71XpHm86=ig4Qu97Xs0+oEh zN`_;3ttKxoudLh%mwJ2e-o33lLZ;~v!c~9y85s{jek2cOlYlqnQcRiJpTWHz*F-u%-X5nyzjzZ1#_Oqu zR#${SuXfO_PIce2l$DijKf-plK+~p|lsMm!YArUY(L|vaR&)3$@gQ|Vcr!_pwJ#1=jl)=B|6t` zILFN`(4g8;e_Je7JkT1|pGM9#Qps{7O69Pme6pUOg3RVY#Tx~M?(pz%QX2}n7*%=( zJ1*Ca5xXkV;G!8D7OP|B?Z-?^EG#UeGH!~gh!p?Yop(3KYgyD#f~v(j{t(FNiLXPI zaOg|tGCf?JJ%n*XVp?FIEw7GCMoCG@?Ch+GNxDICA_@}Gsj061DJ_swM5G}vPoD6- zK`;Y81Of@~5fX}Giddx}+H?(6{grVzO_C?WmXHGdh=WU2&&c;mTW@VO$4U)#w6wC` zO;%#uFjgv-uSVU4M=P2acz*Qu?O&mxGS~#P%E}k@L&cTCGGYgKH@;P(asCIGfI?IF zo$6n=$}L`e9L*lz#Kxz7>b9sP?|O5j9$7I*nv|AmWa!Aqe3OKjm=bdMOEH&neA7aY zxja^lJ18ubTg19GYn~FbybkWmXKtp+X2743p-oCk%1fALpr=^JK~nN66qj66Yk*d8 zw<}%DA7Rq8VLAVKsrJo{>)P5{)ihy#7uv~h3M9ok>~R>!3_Cm2pRwaI$9;ZuY5w%# z#z{Ak!Xk`0F8|xN1)C6OT8UO3hOz9_6K0~cnF9<`1-Gzfe|I-=I7fxOq50dl#{vR7 zy~)FyV}Wt7sV6v6_4W3&!55f`3DCDyGS&5ptFyA&dXf-D28S~4?(R~@B`M49LPRrn zNTMrpzo+**$rkJMkiug-?!>rM+YMU}eM^Gc&NT-X>I7=|U=OW(;*xXiVlYJGzJ7kf zBy-yNR(wLv((#5DpWZ;92rx_@X!-rRC-p1*%y$aA7M`!oSC9VBk?70<#$LRlm5Ir0 zwbPU%zaifdeO&k1;U)@=rX?S@S^4#fZ%a*DTKf9xvaP)x>*h^uHY+o;!IhpQwN$~= zb^-}YYwIyrR83fanuyrmPsXdOE6S)3OL=*DCzDkUa?#YM7yG2v6?K{Zx-2?HC#k5@ zo+NIyv<><)4}X}Le|4?V=*LKo2S175`UUoGAuFi1i>4E-1!Ri!vsGMYAE634DBP&| z#!jsFS2HWDn}(~M3<(H)lDBed-xL-y)6;+TK=otYIZ#s&sHkLB#2YPVxeCq+7#BR&==N#2QMn1kO?+gunS^>6gtMS7!wo%cbm-{E= z><;@3M6bA8*Ecsex3{-3x}G8l)eUHlD?jLCxd2h9#X^`vC<3 zO+@`h~lRi3!$GX>_ISp!srMEGh2^DkIq2aZbbKvJQ){z`gP9+qYXG zcmxE9VXVHC!)V?H1?iUSEB`dwSSYiKU3Umf`Qps8T^II7&$v zQQuxS?-IVhLg+$bNj<){2*U|oY(Dqn*4xcg&8_g4C%i?5ZB}XE)D=yW$bId3x;H?^ zY48~a+bq4$(&Z+chR)Bu5-@ASwTd`WIA)FO78Mmm*X4F4a#ET4+3gKT>=ZNvG!+)I z59~Xh8hE#>#RrI`=sO3hB<>tULd6W1EW&fcm*mg37h199^f*@UGzQH=P}|bo7TPQ*IbvE_uIUT*U@G} zrNX*zqV4MP{CelQc^T5I${zDWf{;++@f*(E)TfSTtZ4}gkF!o5{e_XbSwOx>z3*8u z;VdvzBdRtluINH%HHDA9K1QBO5b(M_tkD#2{uM@R_fmR}+2ohJz-U02=sU7*RIB=%ki!U;Hwtlj5u;ub-%6#`7 zv`DA0&-&F9MV98Io|PEUz0$(MoK-&c%veIHD16ksbtr9TBYi^LU1dc@MP+5n21WT= ztHn2@4yhgyx_-^ySPC1#n;zU}auSOd|%_`_>$|)R7QEzr3=NCX(ch zS(J(EUS3=rD$*Y=Eqz+XmaCfUk4mf2W*f~>fo(pKV=As3pO5?CZ<6se%}M~0AiLn5 z?ax$4!CxpOutJbU&i=(JJ%y2{F}Li}H? z>4I)qS0WyAnBCpixKWP=j3wII+9q@@3rEkc&OJ5`^oEc_;m#wI%0gxn2Nv}YH;ZJU z9$OK8Q`J5!427=*JtlpxjLcqts)u}$U1CdeoBm?+5(l?fL2hqz)owKUJH3}O6%En$ zHB*DmB1}_s;BaH9!a**vU2cbNO}8No3sq&88)292ankTNWSmD_Jmz$`F)Dpzpp)<2+d@u(z+Yqgw4eb5=E;Qz|l;EgLmm?`7!i-9CV4IKWHU2Xkp= zwHCO(I^O|hBR4mfgs97{J&b^g&pzIum^mv`D$JzO*R3l$4G(FYhnFp<8-F{V%6Uzh^)ZQZAMfuw4SiGCnQfvA5^NnEO{i)_rTbSJ%p9!q zfF7h)-#%7s*s|Ym2s#Ae_`|3lF3qP$s0^PpiQq>(Jj3SC*dP3Q^XAQ`PoL!I0&4+k z&=2hgvqRT3kco+DWuk1!3!~h5lGFOyR$KB#wC;4n?<=+$5%Gd(e4q6p_~B;DRHfa% zO$MipDdpng;)X;s5)8mcQgsr;RcNPgk^YTf%_p+t zU;!K?M(203yWqG0S}u39pyb)_!ECvVptEGY!WQlPQR!&_Wm_)xdi>BP?_kd?>R)Ek zGe{Dy_MOjzsz6Fde5;iUu{WZn_NW;`l}A6K=e9h!Fue!>s^4XUrxK}W(H9fC;k-o{ zX_$Hs+3Ewe#cj9dTZ@+b%|x97LeVg>^O;Yd2#<2REe)!-Dr6$asP5mf<9XNmDaG&T zc#fdRxWOA)4kscaqVB?o&Xrk&#fYa!c&O4xp#sY z$c3jRjg4@yvGorOs3|B2xz2ybTFZ`0T~%{2_3(qEf`7RYwrkFVSTIMHTrCfDC7=b9*)m> ztWM{Rq81h~%W)PAjEtUt^ozu}xP8#(gDww+E09~3*y%xM6#P*Q`L(`n@5Av0rYr3{ z05@w1x`gKWAER+XUplT@N-#1or28&nzJ8^TlC^mH@N-<8#QBy-T=zjM_P*tFWSK=* zB8R>~XKbO%^W?4B^ketbt=&wiJMSI|3k%EASv*f33vMuR1f^Qo3r+p-A$=SsiOWPZ z=)xD$!sXt);-uE=fg3`9MOMJ|bLHY^EMtS$=IZ)7=#1_j9%>olP3E1yK04eu-t-9$ z2xzRSNkTfBxg<1rZ*w8aYHE(-)Wj)hXEk$&6XN5Ingal{kqA0lXDNG&Kma()1BH%G zGi8AZBNHKR)&n4zSn$jD5OCfO3W>+`3`5)PLb>d-5Z`aG zmyZ~;OpmRVDqzx;*GUd;mlqdU+A6TR_!;#%o$-?FhMJhY$PW>ynZp`*SD>E)p$xLI` zLAVYhF+VdK57_&4);PGT3q~7jVur@mtOUfRd0k5-&OP~)i`Ym_y*+#gWMcfA-i3@( z>RuUmce|XIz|)^8Qr)_fzq7ugB0X2s^!V-rn(XbMn3_(<^JDed;OkYxV*DSxkF|$c z#~7c=_qoN#I#1T|@vwAZSY*IGdKBg6CN1v47u&Cw(}eBTCXm@y?;UikyU}S!b|Z>v zwi!Xqv$MbA<36+pqd;9B&Pi)f

r1EyaYf7g>S2zc~TNl?kTn6-(UmHNayb@Z76i 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 KOP4YJ`~LtV=Q@l4 literal 0 HcmV?d00001 diff --git a/docs/images/app-connections/chef/app-connection-option.png b/docs/images/app-connections/chef/app-connection-option.png new file mode 100644 index 0000000000000000000000000000000000000000..2a3e46920b925e957ffea1305545acfe06c88ddb GIT binary patch literal 163093 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

SG{(T7N6og2eZN8awe=X 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

ocl({bQGW&#k5<8>$Y#xjx4894JS@Q-pS{z z%*e^|Ub=nGdet%2nPLdaZMn(f5YtEpbe=YyIjpR*S#4D_7Ah^9TYCLE0jLrc+{-lIBfmo1EZ%@SvPo$L zC9l{+;;zQ7$B@r4#8Q#4Z|qOs>`F3@o}%Z_a=72pIvkW4DBaNl6BvYBZFC!x=DX*;#*32b_JVZR#+4UwNCg3bG2r}= zY*}SfuHRZW$Z=*O4m@7&PW8Kl_J;?Nup}oZ=lNd;GpBi(I6G(L=jQ4yY(3 z$&7rM*sHnl19IEZ=|BT;Kxk7!Y65P1e#w0wq^Dh?QK$uK2xvW75%FrTUH-J<+hpi^ zY-_@iL-vpK>;-;cf0CR>F=ivrYb^5#o!myMu;M;+m2w2n9@qyzqm9Q2Z12* z_LjEQ+q~H+7pEA5?CE}C-BiuJDT2kAxlJh53^>n~f5<9TWkAfIUx2kdcTqp!^%B|? z*=^ynaxJtp6tS-8>f}O;JGUP57M1=|V}#E}i%9&cT&cn8x&omW9ZdttI!^$xqQ zIj43|;SwUEteD7+uv&Y4fBt97QG6|NT-3!K4}mDHDEEDW=2P4Eh*Y*tW#u6&xlq|v zbTPeDDy~G^ZZBlkd+Rk^Gb~9&MiRMvdGNfMylPMf zpEHLL2R=-f`F`gi%D2ygTq(lNLi$TRq?vPkT-rX?dtMtvvvx5>{j@InI%9S?sL>6Ut0<@pAYq z35I>MSj53SgZ2+OuG9!xLirYBHKSwV$>#4$zp=!hqb0@nV!a>QHF}jl>STHnT-@rf zu4b&ir%58=$8GH>=%a?rnT-iaZSWtG2agxdZc_KooP!KtxV4d~r9OFHzmEH%M3=(v z@=_9xS1Lkih-=W9-##NxtSQ&t5wf5ibQcd|FLSU!MtXJGO`{%yO@h%qU#11OHmZ<} z-wRU-nTl|Z*_i@j;Q3Xjfs))^mI2xRl7)6_M0To*WWs&s$r_hn z^mLdJ`e0$wlau&psm<>IcYsQ?eT-V{Z63Gkv)i`UZS7hC&9r*x=-bMxI&rfENN3c+ zHbc2#`c^r^-%hK7a+QiCOVxmX^?XgwNk--v#tprSHlph@(tfvh0`^Q+OCaetONaGe``)i}rCqk@xyvuI8^Tp2; zM7qPS&&DdlpIfmT`J6_sGRNwlk7-w&EEU&=COqh5DSlMsmOn`?g&v^{*-?+5lAfR= z>5rNFnjTxccAm%FQa)`3fK&VTh2LhBNknKqs>7w0-?|m5nZVK0$2qQltv%cDO`{i; z`i(PCy4-t)VrniscY~~c)o8~dQT4K>?f9MuP{z|xP95&yTC#!dH!(H?e+lzwx++*i zgRR42;`EKxIAKc-b&^?h4{sPeW}0ofD2&^7G9QcBo7@qOY=>7ik!_b(77R!ab%Xi>6oQA?87n-AjAXnnW-N+l-D00(KRz5v zyC}`A@>8_>^aQbEYwKPO03mwk^+@7;`&B8sjp3AW5llK8O>kjfa7#&vw*H^&>Amdl zHDxxD;(SUMs{Q$Wkv>Laztg-UHgt!crJQYTZ;$)dSb?aJkoaAH&9F}&if~$z)zwink<&#JNzjfT~b`toq;hm)OOgLd({mNUxVajt!3*VWx_qt&3lc*xNskfP){)wr67 zW7rkxt>05h|2m^aBnQ{DL=7jW-+|siic1@oo!ANepO|=}1 z+lDkZ?Hrzhw#P5iu$IkjVIX#T_NWH%LZ41pjC^2d;0+q^nt<=-tiT8-Qa$}EJQ|A=OUZsd^Dy+itvAQcmgeLRudvsYkyYE zqzAuaC=T(_OH0Z_(LS5}lQRRDLFQFaWad@m$`u(%&hr9)(#^a1J7Tu}iEU{0J>{A$ zQ^LZ|)Iw=T$Dv?kby46=pI@2qi*qiH>gNN5e+DY}k2u%zJ8Ns&P}!{`73*9R8UPT8 z^wkbSi7gy6$47LvV2G5)<6t?5GL=iN4jgyPpWn@#U;ki!Bs@Y{@MMD?Z~|_ zkgHSK);J$`<5P(VlVA^Kk!m}WNFM9Gs^S^T-hTNA3t^Sk#Kd|Z4B|3pPp|NKiqeiS zJDL6T)m%4b2A=C6J?Cz>c~AK|P*8NJSESZ|)x}^)Ufgw}Z*-vjA5nMPeG6_gsVhZl zvp(xLf`5jtG#Dl?B2DOp_1ZBRG!doI5e}TZ!Qh^mpRZbqP{^{4=9*Ml;(JE7W7hfQ zV)Fb|u6&g~;4_@=uC9FidOkDJm6ZyQ*a8b*l-JlQotLTNc*O77f{+t4MLP|eysj=R zjfYXCIB@=&ZIqpQyEE#v7@jaEq}@*Y^nyin5l9h$LqQ4kJhz`v=sO8K_v8j0xg!?U zcR9dSKo^)*Z`Gxp*^6n^0%5;f@KgSU(*=nxxt7;9kYcyACAmRB>A;gTW%3pxLZ*R{i*v#^_U~XW)YgQo zu57PwdQPf<-er;Wf^X?T^&*$&M}K;&bfvPU^hU3KQB9I(?7lbD?`-c@crn~-RiDu7 zGS8oBp)?2pR&=b4KFc%=oVR4N%!V&4C+TefAZxxEsZ^bNy-`OY{Vp#p!a`-qG*BHZ zXb7%v&d!`S73>?AsX-rslA`nfJRx}1Zj*0FEN#@Gn(DEHd-5QicZXW=D+x`-noDO#xYXq@ztv(vZI0+r0Y!Fh zfh?#lQaJC~o;Vxplw@KCQ%`NyN;Nt6t?3LJm}#4B zYHFkSQW>iv1V?CTM#st9QNkw@TZC1X0B0ylNmnJL*XEHQ8U*iYh_2YGYMw?K&FwtW z`;o{?gKHvYd7frJA+`UQC~8Qt3v+WB0)J6FKx{^_HEQnP<-rxj2{s({XB zgD2^I(ECe-dMOfj`MNz8g>vqe*x2^QrS&*F^?zsSkc}52yiLpmJK5|~BG&ovsJjrq z!qcZ=QM~OcuJdIUY;%z%jIDp|acbWirQsN1sd!f%8}9z7_|T?|6DjUgy|a_?ns+P6 zz18I{R-7I9I0dZaMrD~7z85VlH-93Jy20uPNoCWzTXGku$PKI9om?X1)_N|!#na6k zMW(s*_s|hMHOly8P+;2&3Q}>L%&qLSYWZMRDCy zfF*kLa89;5Bm!SoL`+oY;PE36Pr3|JH8qIIOH7InvXsgwpL6^CywgT0GYW)8319tKQTx?aMwDegu% z`U&KC0xCpn? z<4>R;BnGSaV^W z?pB!ZaT-r|&4Hxz?(2fMJOx9=H;S67;kZQ86 zdG9{m!rsLZljQnM-kTkC1p%$lN$Zr01-4LPb&lv&X58t(k|jv_7=K(g`o8epkTh`gnTxmdDke?OGc@6GtLUTBK4m zSD!=-DGyDml-ppJ{29c`YICy$tU!9k+S=o4y#+B+>}(8`NPTy6(0q_hp`QBo^62RV^DL+0K@G=`kNcHly_0Me# zebsn^p0|m-M*(or3psPpvD~D_?r5;U;B0gZ;&@>yM)ztf2-4K}VsTg4=?#Fr56r&H z&g(rn*4kLxRUapRlc`=fNVm4WZa?SSYl|Ld@|~EQlhZXnvYsfGE2T;E`q?ML;LQq02my=TnOYeOWar2k^U#qI)k(KZ+knKl_cevD5adVMxM7ZWH^H+&mr`A?`5i?3it? zKfKU1h^;(;4(XKj)o0C>Q^Tlm1;;E!X#KaOLd00ff*S^Qx3zIJ{fd$K8Fkag7 zBFC$2+R5@_&d?aA&)q-!j%HWo5}yKM4&ZuFUix(+;0^%Sk}J~2Mf%oE#ooGw!RcK% zS^}{tFOpZUsJ#lNp|5_t`OOC~SmbbOf%`U9ew?L_?IsY-9MF%(kL`7}>hkkPcB_Sx zJr+GP(jT-smuM|4zq;IL!3M_!`VZwL`y5Arry9!4ScnDWkuldThT{Dvf|4;~xjvUm zIdqF-m9e+r%Yj4o9CjMd0-BhC^NBrwc6ah_5!YNLyp8RujtpIW8b z*-)A@J-AY8<>eTtey(kb%T4nry;L^Fb@g@{!EN)cY3`vRy7im12Ekehy)`gZzBvt) zdy3Ex{XNn;=^Oh@AZc#9WTe;vAA#Lf{@*rd@>^`WNj4WaY8Vsoq$ovylh zJBUJdFdnt`D??aJEU^@7CP+7&3hbO686OXXq=A~5*#{n-=>5pwP`O8VqgP*5LY5>1GaJSb1NZBjl(rNay~(4F@9rj)$W3)Qdy_m z8EZna(aPOvTb)a$^D|~-3q=G+@f|N1{gFUs*Y)rx^ezT6`^F3Nv-(@%v zZf!I5h3-T8{gnc+lh|4rsK+ZW8eRjGR{$3G8->Em)bKt#-b?joH$li{sS~lx65!YVNdb*CR=qLt z#ofcUk)0cUHN4Cg|!I z{9K`S=Cgw-di#scfB$R=Qu(`dbchL2-7Hm(tXY|E=x*ke2(W!3;+^JW+c@sATW^q+ zr_6P_ad2@-BsfX1EbFGUKCkBHsup8od(Ku9b!Wv*eWmxO=iI^Dn@1>;FJW7Es7G^~ znj{{9Pypr*9IRFj5}@W5qm~9oY+kasz{&MnAx15Z=x0Fm^w`Vb;T7{)pJ>DSI9$oz zM~DCwVye-j)!CpmDjSM><6&&slvH!4md>W{txFvp9_nAR=K)-qNZR-4lJPBivAOMJ zLy&YPpxCJG>6h<)qs%eXI&v;LO>^#Wmv=AC5Tl{QvxBs#S(Yp;bq1C(4p%eOJJT-x zzItrOtu~xN)52SM$bZPw5Uxtda*E$k7QPXqIZ?ii|7S(FBS2y8&nyM$lz%dd-!+MY zuPG?VqxWXaEX#(pqPO20+O^>Qjy$pxA<>a^RFVIfB*)H~^n z8jFpF%)@+F(W`Mj=H6D948=xvqvY7oYj!{VGW3;q!M!l^!g3=T%{r87bso*JkxOFLO}G&-$&Q zH{qr9KIbFX-=~(Lo7rV$UC15BZ(sLl?y`1n-NK|f*d-G1|M`d)P_$$O9Uh+NPOLb- zoQ%Rz?$7g$YlsY>WwLtoV__8m7toT=xzlbcsBBo#)90=5=c)7vPCE#I7bQ;E*})L8 zIztXZ99#{d{x5z%w%Tma{T4;f@)IFmtJeA_n*AtwN=$$UXiH>s#_~0#3A5D7G>NuD zqV%&gwM#xeiX-~-Q}0tuc>on%$v;%yeu2hI6ME_OoReCD&_6sYUb?Je_FoGELooID zA6)x;IMa;sB7cVU`iUc`EZTtJ=>3NvNmyvrGNEZnVZIKFw-|<^qbd$w6y86^KvAe4(eq4yP2F+@Y3ORVj_~yZKl7FF~$%F&Sbcx z?EAtNf3k)oK7RK1mFs=RzYX)lQ3g|ceo=C%Dc`TKDVjf-`zrA7TvYk~SkW$dA~C#M znZIx;dYkJuepZ&gk%rO#6qGtWz&jc}?78{41?Fhy%KK3rj<%7$_7eb+!qp`^e4 zc`K?LKx!s+Hh|Nwt*N%)!2cck1O@$CNOtz`k7_Fm^Q-SQ&yKC?jhD_v6*s5G7kb|Y zqwqUu#A|$8Av*QS?0ZKp?)5DWiiq!1p=p4e6u4fTSOM#?yIbTxg$37WWN1!%5pC3z zQ&7>w{X5;XeBfQQ^rm2m!g(-`yN(^NgfpZDqF?2wF}^;+$1fjdVsvtO5nz!kcOqZa z$~1enli?SdO7r){0^Muu&^%2pK!x$v8D_ly@odR)7BH?2;a%9Zdb;rafo}&=IC~^0vvOI$7hFV%+y}j1q*B-xqT!XyoMTM%# z!@t=AXab>{p{A$llH*QFV_lv5?z~p9^Bw8OYz+NxR0_Kl@qS!$Qud8ZnGr|Hn5z%7 z>!k5jiRln@Pp8KUF@n<4k|N{mnhBU`5F9va=`WAK8zKFLCHGhM1Rhj41f;d9XDAL1 zizg>moG3=dC@TsJ$;VJeYihuo#J zNi_3!K}>T+W zfsaSp4&8ed$?7ZkAmbBMe)rHRa=JJrQ5`OI!Mj4&tf>eSVkab$;!zf^b-YF|AmN z-}2Wbm?B?~@Z7=nuk-Ft;d;CCgXLYXsJyZ7$(P`qg|t|FmF-ajFXwGFmY*mZnsYtZ z-NPjR(y6&C!$06J-jC|68RcwhK>8-UR4Q1w)I&+!`Li)^2)9NrEPR&eO-Mv)aJ*XZ z8{n9P6o`ARoKqoZbpfJt5q7Z3InGqDMRlw8HpX@a;&(}20^@j=aV*3|8BFik(0LKq z;NGYlCR~gwgaK8VZbpO1Df@i43gKua^yk@`gsJm8mAcZUm7_DwB?x5~cYO)13i}4+ zAoV#Aw{lVR8p74#mwp#TQ<5#vI*z}de=;SZATs)_9H^y!jE?rYS);xVwLh9|60|Pq zWD=wsyd-H=FBFPHn@;Sw$!1|Z3{)h~^i5R{sjL@%QS)JP{OsAsL6asS`o&(`7{okC zVh|0PJ+EaTXY!7UDLlWp0HhiU&T3{aUsi84mI5`!dmd>&-^QTNgRK@H4Grs6H9dKS z=iHh?(vmJ2QyPQ}$!v3u5nyr!ipJjClahyiMhn#8Y3B9qf6ojjQoB?NIOt-H#KllO z6Z@`h9_!;yO+_VdS2f_fs}~*;_+c}Cx+mZL?N=fz(7f};0-&J%ty#bsSK4AKAVBJ# z4Z6Yekxe<3ZI~)o9qw2U-Ca?UvY*z0T6Tq{JsAvO3wTOL>R+md?LW>*pan}4LYSAF zDe~ssPKtjk&@xmxm|?p!wI=>Ur>Bf_!t|lC@Rz!t+0q$B;JvgYxdoQ)?r=u*NQQ>dvS*n3)gR+3D_%%TYLd(bUs_b;&@P&5(mvoik>+1txGo zx=*nvE4IDACRnlq?LR|QOaaLQaQzUc7J|G&Iy;eU;BckD#KWB4(+Y zT}i4kZd$xk43p$rZ!)CnTX|u8t3)*^?f&w zk)Lclc%N7@nTLBIx@gYtp4Y;E$*JPP2jnX3)v|;~*cKxJ|7&IA z6Ilb}>xsU!H7g!ab3vM2>?a9FSrZ=6xW843NWtWpAwnm(AKFlE;&%*0a&-X!d*kPJ zMML^&aE&sKIMddbbTI{veAItdB3;k+Gix$!WdSiBP@<(56-^X zPKh5{s&?qd524{-I9T1$$$Llthdurj{Jh8{3MhKLldwJ>IXSs+%KwtbR-`qM8IJA_ zxo9H&GYGNrMoh=6C<#xtHXZJ-9x+4ZSmG@0rV#8|2$p@7&?QLls_j2 z56?miG^_JDAUt?(l$E3P1>+%$AC>cuxww1H^xL4i0_+$EbK_*S9G~d5*;bs8&>ZGK zTa*mUXy$%en-8{k?L`~-DMWys8#;rR2mu<35D5bmrg?zJR@BR&K=&vV8++n01m9^Kk^F9R- zur%xdw|bE}+-ku4xGgA+gOih!j~gH{fs4O*6EGojEKEy^FWs!JPJ1XSOC7FVR3pLv zR*b8=1$JYS-u}vZFNH>@qTY2STG-fY_B21L(lx0jrt@jDa;-yUpj_(?HwE5{;x!@r z#DF+gBtc6}=Dd96DL@N3?hUS3|M5mVt;9KwWZ{XCEqNlhwz>DG$pKDiJYdpRNeRab&K=b}utf$lhtjm( z*`009llb+P|GLBn$rQ#UI+31$hqs%MrO(3`prNX6o`bvtQZ7D9Io0!cbnEhLzu`)eUZp>l1uCLo zxwQ`t2~kdykEWlOw94EXrFUdt?FJYM#}U9h=z+IJC^>E8M}rRuqVjHxDaFG7dhrh} zfrvzXhjCRvZ&6_WEiSG$CRUP-Vn0n;zG`|Mh#@;;#d0q~9JxvI zD2T|govdDBFmo<_y%a|-yUSaaIXPQvV0MaCo|>c6)5vXM*{tQZ%dWY|7molUevD$! z(Q&_~ijRwHVh1&*OPwQ+8b4F`Ci^O-v;{zcRx%&L^;h@yC>SZYwd~lG5_oHYI2tV5 z^K$~Z2>8gSG1}Wmu@u4fuHJ3m_-nSbxx7j~K~Jl{E}}!;$W-y&?Kps8t}YilQ<=9W zk}i|J70G4w(crWEhf$k>!sYU%xo)M%kD2Y#A*6|~F`aTrDJjJuguT3h;p1Dxftj!D zySWuj7iK42e1|7!r3qD3N)NwqfWwVTai|T;(5SCPKr)UulI~K~sh+L|mu~j6wVmRA zq8>K9_FsckzBz(5xoF_F7iVJnuUKOt{~M3TcieyjM7>Dc&an=h-Dw5Hz(_=UIX~^} zkG78N2kh(y7ATgLE=@OQq;;UQsN4BqO|r|fbS#6^)p_LV4 zWCsvh_b4zjOxG%ujteQXRfqv)l8p%L`UbhAgu%53pca;pkg$^~_If*1=q+I`KMbRu zs}mK2g0(QOW$Kk_(junrC;Y|d3|V&@0v-i$a2GNd0q1n8_kQ&@DLy&vVy;8gR;q)+ z^PVFBLk5_rgp@I^Y*h0&bF45;6E3z>!RPYa`|@1gd8h1)$u(s4z~8~3-fE|`P}uKm zoS8%lw~x_TWOBnEcJb}Kv(zjm6|mfX#arTNMLH{6%j{Hs{#XyaXD&)c>?i~%N~wL& z$7rwZdW3e-;&i2lKR1z0btkZmV$B1kp8=^cmVh)O9CqDHpgmN)r1%aB6e}Z6Kn4hs zXkPO-2KccWC4$*x-)h$+hNU|T89p}gdN&EGz4tfE`$AOke5>sYfJ)qE>+hVWr5cS% z&Sx6i&=O{JxTBFIue3f*D zD$wM`lnQ*YWSD_`&ir@bG{bqxm!8*+fV>Cspf){`)x-~t_F+~iZw%T%^lO*swg|FZ z=j#`P=Xk9SN0Rja#qVSmZ?aq!!$gC`fqoRRyLV@_XBnWEDL3)S4H~VqR=%zRa-#@` zS=kyef{jZoQ^^4QG&C=+7R4Zmwb`dxD*5gcb(Z!;DmKD#k9OO8IC}{2=C@?!_m3GBMFD4_UU>M15Rf@Z(YYcT&a=da9;fsS z9J)J$neR(v7^v`B)4-kI%3wTv+y%icfA^w$_o9M`36HUe?@t@AYy}|u#gc;@vC$P3 zV_Mw)Ee-?!f;BQ!$!MRO_mth8G}wkVU|csQCRD(0d%uAxq%MyMggwZ)<1{!Zi>38j zK?hNQCG0zo4{W_asO9O1SJukxfq^=_OuyFF+z_B~JJ3#wDBqKd3wEyt0X|5YIJ+|3 zl}s;z_Nbdot~Oj?4!0$D0Q6o(HY`x!m2ocs?|eFce3cgIWFl3G-@N2s`5~&|A>_K* zduu@}tqbUYx*f7_T8?boL2QzK?&>4?Gpk?QrUw-8EocLv%$+b>^|F>aYtR+EK7K(;yUV%}{15Z(d0 zfhU+BrI$c{RrlJ!*fA%xrU~etSSkX+vPUca#^pNw=}Qg2gHR8ee`^Iz zCUest;0}ZeuXU?4FZ7oDFFQ*Z4buEE4kl7kUbBKp4rl#@Hf2M(o4(E%Dh-Z`&(~o0}WIxb6Q9yT{onqyi>Q z0l5}HbtjXh()`7iVkve&6mJ*yiSPvfZ8p{ksthiU72}O-+jhOppVERZ=M(#6oTWa= z6N*#UaKv172s^ek8@#b2K(XQw89aPTX)fp(DINXNqrV<$SV@_YvF>U%!;_;<%SbVo zVL`+4Ghv)vCG`uy{?;IWejh0tGV&p0iBwMg0)P^#r5e>umu=QSp{MR^x>TZL63-J* zXEARCh~L#}$#ihnCqNNY)$I4iMmLWah(k>PjUyQo9UtjC6)`J}(}5)tjbReS30uEf(Lp6K49s1qms7gzaFy~=ez@R7j%+dypa z*xmF8a9IG{?%fy?d?DN3J5w(c^1$mvbFBAsT`&~t1NBbX?^*sNN5*Xb{#&AC)aT2u zH}STM(yQKG!r9JW{q5{^ifI5?MD(i+Re&{T617zn;}5HGO4T-)Pv`va74PkcS(Ez#!laM8&(*bJIPY70= zmvnCj66U_q<6{>GXSFO=SDwu=Y(t&05pwWR5V`vQY4{c-^5I;bcUt8E(u+CyPf$A@ zzN=p;zX899`gh$?(dphE{3dJB z7ubH2UEnNDQ7TEz)CUJku7U5&bX9w+g@nN*@O43V=Fd#5{kr< z|5j+GIvmTt3eNr?-M^m`TNVF(|CxGs2i=$5(ro^55Zx$ZYsetH zbOH$?p_+Cqr&>KDze5JVlV56T$z4Ega@4qaYIdoqL>fGzf0GcfCR-eh-F0F02{4F6 zXN5S0dm0?=H$fdYL6AKP)GwYC_U1~l*1CaroV0`gX#rO1Z>~x=Eu>^mcdA*GJFy0Q zAvrmi%?+eHP3humHp$rp&T*yeeLjOhuJcBp!XOx&GOzZKpt+0-sJ(1 zx=*9=ky`OFrO=7|kA4dvBSrwG|77u)w!TxD?nJ8Zn1h<-wO*jHfxa5{brurS8*t}g zZJB1+LNeok?1meJ{v45H5hPJLzw*u|d}(o^2o`0ao9L49v7Qj@>_ z2$NQLkPOqv3zGAQS+T@1V4aYXa~fmxw?Cy`w7G?+Q01+BMOZFymd^G1agM*KO>JTSh$9Fw#Hbx-1HZtA=3Empp=-}vz>mKF^E`t_(gj6uxn;UbzT)51J! zt{cDhHtB80t#s!%ApiYScvPc@BY@{uBHjMBHJ_yZzuKCgphs$PrZS|%oiuA3SdT;g z7M_@Y@o#zTEf&5qw3foXk9M^VXA?Kq|14FlL=gtjQLrE zLnB(U1qKvvU)jSTi)GJ&IOn4A&j_I`IyidOK~8<~%1jRRypdweojn^KEpI}862Tg} zD&2xU@UyOA6vZKTlV*c1Pra)Y0b=Y3ukNm$uThDGu5%-DKs<_R}7xcNA$ z&G>b2r&+{H6m?`uk<;B4BLDNBg#d^o(r$>AfkvlR7+3qkm_ueP$6%N!YF~gZRLb{k z^4QYE;Gk`A5ZgjvMM~%UN#3tFbQ=IRw$@9f{QcM6)ctZ6Myx>B^WW)ZITWXI!}g|; zu?9dFFVOvg>M9)GgbI~}JlGkBjI64(?*97q-~ddsVD{sene-QcH1b$)a(Z|jA2Z(Q z*0>Km)(PFVo&9v@VeYHsJLa>W!uJ>J_dekU%XPzvZWF`Y&?GN;UICS7&b>tY^(+;G zCPOQ$i_>0&!zq^cZjiy-JV`x3y*ASPbD zv6+r!)*+>R-d+ULSm>qbF6BUUt?U6NG3R>lzzL9jEjW#H>|jO2#YtEI(&0*_g;vzt9<>N?CxE1J zQSi9N`z`$okc*&RmuzvxS!*$sSO+?513Bn?GgB!%Y@ZRiqKm;)ic1cz$csiQ;aK~R zc$#M?JQDw&;0Q4vTq4{N*m_Hz9v`w+Sp_CF(>9+-WDY90uIul<%o=TKJ>;%D7zvfl zGXB3om` z4R<`}cz*x;;=a4#`#h7wrl!qv*#pY z71ZW-SI)r3OtmiV+%dz=oAGzxU#*v9VBBkua+X-1cETs8X!otf;klXF`4OK|qcV_a zKKXCun_`{gM9IAo8vUgcF4f)}%qLnc8EJMS~nC&WY(z_Pz) z$miQ{)Fz`e{4YqdjxT#x>z-^PzxB_ry*wo<^b?FV;kp30dvujw+&_*=#^Nsag}mv? zW9_n;m2DK52Xihg=dvjv6bf@1@98lg{kARLtfvBt20qR*`=pJ5J#8)~EpBGu*PX@0 zi16I(;QFMk=6%j}H8ZtOI zNzmuw@OGx*;AeI|7uGVITDJatvB60sO=d>q4ELVsx9#^2KhXyI1_%41vECC?(EJp5 z^w$TB-o*m{QGxA6*)jIx^DaiN8coJ5YvC&-zhDG>5whQtz%JYCb>Kd<|84!Aa9~dC zP`7#~_EYvmp8DmCjf0`&Y@^DU0?y&>H&B^spP@luoyIIK+5Y%?PT(z56BZ`R&kqBG zwnI*Z!d{i|u&yPUqoD63^rsp8z=@ehznNm&g^wlHTpKzS|76?3wx!ZY$(eBjKS8a# z()v{>F*ENUrSy5G*kEhW&M>qtTVF-xwR>wI27CzZ9=;z=TImr;?2D$s95U3s(JM8B zUOtCiHT75CUV9y!6Hk?^XATYZ&6K)qEJ$%t##cPUPe4)dutR^aSf%Dh$l*R2It8Vp^c1|! zBJ&zY%_}A#74WoM?C(+5BQD#8TbHq%Z(Tp4SXV?KfrYA~9r$y1~tc8SM3P=rd&;bNPMk53L*^R`aQMx--@? zBt*;JSQI|uiTvv!#l%FqI~xt#1+j3qkZE{DEFrqZlgmQ;yKkcF@e(>J>qrJmLcR<> zB{A>DpTI+JRgqkC;O^u%Hh(8!shq8=!ZgYfC|Rh(7nTS6&kPIeuq$EWnC`D5f4xUK z$H{tu@3YG!WK2ZanxQXe%n6MmmML-U*Bb=V1*fakM1;WQ%(l6cX4#Pa(vEsH-=6_$5D`?oK0`->!1z2{+Lr=UHyQEy*goGf+~ z#;U`lSi#S37t!d~YEmp7-y>Sku^t-DHt+w^Ga|3k@jf4XWD>0z?mtpi;ZPSlMiXuU zDa@oYR^@H>eQv$r)GaA*JZrK^!0WN2>y%?7lOVt#-J$P;Fq&nu+2?(rLW`H;d7}5$ zJNc5rV-hb+s{4-birc|e1@;)m45XGs?%Xb7pyFz2_ImT|990apZi|64j6VNc#nU9~ zf$awYA}nkU?YPh{V-^L5vhDVztP>;uAgrKo$*R)Y7y(0Y$1saz6~(k-XEgMq<2Zc# zyLUg&98;lDh~2;FAE9G23F%l>?uwwr<8UX%3Sj&2D{g8jaqy(sdF`E%fPeOTBTEUc z53JB|Ed#oqAQ`zX zA|0$8W#TD0Yn_UadkikR^^b4+IfxTJsbpWP(9u2_ePl}PXp$pSoa=~FCp<&btg`zj zzJ!7@jKaw1zeYa&#e7$zJsC$yOR2xo>-uhYoz~0Jn`@(`)(Ev>Yo=H}$9>d;K}`i! z)tAM^oSZD+GAMClj_&cEgH_lkzZrYYQBX%k^EkxWsn66HAp8p|;klb|DSNFtjz%#f&syc&*Ee7?OYr?W?}KlByG?LX z6wI01V(Oa%3&Sae^F!FD2LJkssW=M1+8OQZ*FMYIyYh?gx+m2AFfo)j;!U^RH=IOT zdw1i0?k4{dmH7=!i0o;v7m>rVy3#^ z6fv@G7M0gAH-5v88}D@O`eTOLb&R4y@zQfBB1DFXP@pJ4O(Xj{e%WECxVo1uf19%K zJG+bTpGjAw3#7Aau_egd(W#iQb?q>&x|8RnG{GRR^L3zbT0y9cgHkK%@nXH>?q!9< ztf!2u=B~7I{rB-rVq&&E+^TzVWkKakUq>8e;^oo+M0AycRIV~D<1c%tE+PWM--3_))RD$BL|1_h->%fG<*em zBV3QLYV?S>-})bkA82ipa4<3TuA1-27nPT{wzvD)K-?}fsc6Qz6bKj?cJGILXEEM- z_bzy<f_WvacQB7N3REG(IqI@@2n$v4&3a%7)9NmtZA zM&Y*}yA!`*Zffu%cT}fmtWy|@F~o$s75Wck0rEYaS+?-7_|BJ?mo-w9qj1UCtQjnc zNd;y)#-eb^EfGf6)*`=O$3?>!^*D{M38<^E<>~A1U#zP76gNneI%YIvpcGD)=V<3- zGE20bM=ybKbd1=u^hO8uwH`^Yg!*{VS0H48p8|5wL>Jqqdim@Ay}TrKW)%U88}{PW z)fd$MYnz*CV8ZWgwp50oA16?A#Cu;k^eXG7Fl}HAW(f^IcIJOjf zY{?AmWy_u^ zD=RMu5XH2{-xbthiiPQX4X#!kkwi$Q2B#Wo~V*?`%-t{`O&h$vxY|`te>C}=^0P8N(BGf61TUH+`nKL zkb0imL!*e7bNeIhlqak7jl019fcb&h@Atj7rtQcgM;+5Cs8IAX8t3+_x$FMy!t}Ig z7o`I?37aFvDRQv5SIatryd&TBDVui`N5S1>A6+&F^rIMgMk;nCSGag=^7sBqRLt>f z6G}f!68=Q<6h270xzSw|k%>upcV^)_g_J(SumgN6BR%D&SJYL$NtP6T2=0qFHz$2l zlcQ9;l8!F?^gm`s>a)4wd+qc5lZHaWoiJG32{v_F|fR^T#`HTMz<3(J`6@Q_N(lG~M0JL*C00tD^33u7q8%vM32wlq9fl zc6NBRwsmov)adl9y+bGh*#JLp=DMwgui+PXoRdyp=Ox{p?2n)uGtD!72UH=5pse7? z+1_GH2Q1dNrh$kXiwGQ859_UK(X*F3H}4>oT$Oq6sJnc%(}17pBW=d%dgdVZ zKZHwHdnmiwa8#PSc`{~3=lIGw1}o-8PY`i0UD4bU`8cJ{X+ouC?$x0GXXwBqpT!pz zHtq1&*6MsA=6_MD@M^>#PBl&h%<$W@{R`HDVGem);xB^61KF7_jWpVJar-ciEp+R> zUh-F7PY_nPTua(xuS;xJHnyeHW6m?@>muT*GsHxMo?S@}&q=yE@91k6`QV8N}i(UT2?n3*2nJX@>=(x08p!KExs6_qqslPgp#OmXYI zHtSDbl*)y?{_L_Rba@~|^W@2DR5UILY0{jZ-^JzqFA~*ktgDY1clSRSo4m%@3H3B? zOiDs-M@!HJqXQ&%q@cOPC-t4rTz$6QLan!ZYo@u=TyL+(LCcyC$?v8{ioURSu@AGF zOOvi46E?`YR1zn_GF@kQHpP|SV+4glBgpt7XMoo(9C`3nSh3(Jp;XE4Y<%gjfY4Mf ziAGkzddHgE!IU7#FJBzoX9P19LnvIX^4YhSwoSuGCzR#;_@wKs)(Y#DZzDH^4>tld zA8K|GUEs$|;8HSmEi4+^Ni@6MRP}z`zk(|&2Z$<;r>pa^BJZLn7HRj!S2_*ftM$sz3X{JU?B<7hUieFg`&=!`$<4Qdz{4#p9gex%n2Gp+R#l z*PSwH!-46v*zyOeyG=mqszp%G#t%K8wPj3S0h>f-gzd?b=qZ|JRk-F-(bdtevo>@9 ztlfwh+iCBGLzoQxgxgl@1>2f_0%B!D#P-Oo@y_Qjz!=ssG7XbMdevGtU^ykE=O%kS z$d!5e!Y?!D<*}P5?{NzUYk5@#Gu>o;oQs3u^}-xiI`6nnc4cX0JgZUlyA+GEFQ3Gy zvrWKkAAL+OkQ4~Z$;|vU>T{dxG}q+pwRGn*v?e#90d6U;{Epscp|*99f2^z0%oVHst0xGrLRof{$WgT3<4kJT@w@rfqN{Bg_(Z&&W%IV`fss51+ctST`ws5+E3ZaCt?YX=RA*8g#2g}Eb2rYn^hhH0vui8 z*OBpwxefAX(fwRBnEK_2f-N~+=zS|Q!?Itq8@DdEM;VuzHMV+5y!Puk`o+h`*y$Jp zWkc_zy!8f802yez(k0+=3O~L;h_L2WmX^LBQ15fkdu^SjpphbhhhC-k`aTMb z8^X0PGudbvm=F=dk#p9?TBP;jYS*DP`*z{6%J#dgg4{yy%^*6~y2PA~n^23OLeb~E zK0<5fKIA#;-zRy-ca}<0>XYiPPh+natW>Zb=C}Lk%IVy~8KFAI5&~-{dzF3IDTVQq z1&~_48kZM3)UjQrF|V#ybX+3e%x&-Zy%;za{ckxT>+O?vb~pIkv10d0q_you1{#HV zo|M$X2I0~IIJe~yS8!( zGo^PTkO#|WMN1RS%{j61bGhM@oSe|@JYY9#LQl0`%ymvO<$FmGYhNWI`XR2iLHYU5 z2#OLKOy_dVAdrC2(8^4|E?`0Ky1xi$J3M@ZhK}Xz;LtNPBr7fDK|(lJ`g9sWng|~4 zd40Ft&|c5R#lpc5sL03I+CJ3T*}#VaadQKO50+rg8M%^empCZHpA_*9ok|_bIUK85 zYAV?22m(hP`ji~|{DzW4SxCN{T-%XLxI!@UWc1WDlfJ8ekH11Vl0Ph~Vt;t-Vpqw@ zP@Eeq%kYZcc3B_WU+}^ogv$+*^15ssx`~VPlSOpFkBbVet*rKdiTVoswug|F9iXks!jil3 z;%4N4+5m6E@!+`q02xU5`R}U4kz6qwhM6t_(Vc2;mZ9deN64!P{fVuE`+Pe;foB1J zFj+uMRTWI!`D*th1&x_Zia&A!ZhBMj32%_?t5lX@P;F-ImXw-_((0PeEzivI{eSZ0 z{(Yd+8+3`!V5jZr@qR&|t{x%^?$@HCr+@W>|BnIr`%W`X&?*Hb9Vg_Dn3u%=c@9bu zp~TYv{Ts!XzW;YHfB457gYXgs%9{+Sp}-N>e}dg8C_|VP|10MXz8Dir>Hqc~qLIm#k-9GT*xDH$rgym|M;Ao2 z)t;lWCfIW+%N^8d!8I!;!yOM@-gDkw-ptP|6+afP#|-yeTQlgtiMl?L@3gWRcLT3) zzF+Un9~R(uvoN12aSwG&Pq&ZvhvK}5?xFAPJ0S&AXe+F=akBkcnPh8amLbuVf~J8O zTgQot%E5bL32BqD@%dWSEIV2(V*}-A;b;|Uv6zX=FbOd;)8^E(#eS1j7$!0se7v!0 zd_cOo`FKkPO)8>K&ikuoqPpJDSQ7uHyil0{q$4);1M&zOn6 zrAdw*9(wv$hIo!wz8-EqV^lHMVLH@=Ayf!g=ds7%CVDNu3nt~M>8V%}gr`{@nuZ+ulaZgxRq=qn{6pG%vmoxKeJ^RM7-GSQ1>UCH&;YLbF`r z%H%HDH@+>$Jq~v4tL0~cL6Z{oQ&8xG8Dm*)V@`jYdU`b6zd7m|?SZY|a=I~$kS`HwpHK@$@ zOHp=K30GPwukXALS;7(iP$gZ{lgX-vo};GA@lSVr35H6QxWSTdE!_H$;{0GS zpH`h<_va}#V#3rnwuU^Qt!Jn&%*zhm+HAVZLmklts@g7b((}Hi)p+q(C>-)@d2z2R z!f^fQa?%CpA$u8o60Y7oV|_FnJcqqmK1TaXs!3uHk zOK$(pAhpSL)OBzzFh@#_&q3m{lU;?9wJkzPD}_UYq{{-RoDqb*S^s1^GCx?@@O4t z>}0s#(AEwzw*?mhyR7Fb9#K&7@d(ireVws2u%7f%`6l680nG|ZRf)U&*%M=QK64<& zDb44&IHqOlhx3F@aEysDztpi>Nl1)3CKlhkJM~`mad~;oFoAWFkn%Ig0I~U=u+OT+ zL$OzM(%;Y6q*F06Boqi^%NK!9QOg3Fxp{BK{r$m^^A~myM)>?C+>rCLNGmEf zaghS;U=mN$;hgHJryelNdyYVD74M+*Z?RS{W~<3LOzu*w_jVjxHffENCMpQXLRl=Q zyVW03u$&)w9*sc!aM&C}BEA<}5#tYF0DZE~djPJ^ge}Fw5A<5=}Zhi`wp^mC+bHF*>{>#m^9z{n@n)`KD!ux|6y#@o?l$ z#Y>>j=rpW!r7kPf`!t-9qGFTQU4|H|GvDSgCXX1=G_h=07e^i?k&rxNdB6NxSQ3~T zz|sPY;UxSeaK5eW?mC}rc}q(d#eR9D5c3AAW1#M7C{K!`YSEM_hX%d5Fmtq27Va)# zh?wUlz3S|0jZ!4M=TwrfZaW-7AKDm73GjcW@S9sHt zuVp;lMDuEiEAi%Fn9*7w<0?Q_kMom_bo=N9(jv>Qllke^lU4B=_0Zd<*V@N9hy5ID zP`{7ieaJnJ`|=vEhero>))f79BBRxQ4c+Wc$?*?!-X-ox%Vr|ai+Z=s{@QaoRBsoK zVCuG*oiNMx5!9MX>n+d64k()Py4=$Af<){|qDj?8-z+r3{BV>V*N7PO&7bV`dDl2? z5%L}_2sV3qi@vN9zdEUbA}Sxv9SIzmLAGp755Sh1SMInItT>4^l+a4YSonT+b!V0? zk^W(s_bg-cr+=0-luBw6FH{AL0BuK++?o<0icCm}_ma(x)Jq=`;QiKuc_)OY0TH=1 zUNVTee)Ks#H^^3I=_itzfZ#irue5`}x-38DLX2I(_?>!=JhFZ#9(ylBYL#R65g#6E z*N}O6&$vzxEK~?)aD+xG4(t_#%YjRb_|4cJwdONs(if+@E^KER6etc!({^Wvn> zmd^>19@T8HJDzoQrt4$Jt+k|u*Reglk@d2#dEKE7fn;0KuKbySFLU!{`}!uJk3GB% zeyr|QVcZ+4iMW0QAP@K;%m+4}5m7CP^5d(qDO|VN8#0!?mmv-lblUnA6-D@*w6Cy5 z4vo%8H_C)C2v==fU~GhI9{Jfix&bqM_!n%XT4FfZ>)=^}1(L*D4yaO4mnn)!UJn;? zqK?WZ`&;#St2|-J69+}idL!SPDf|>jdIyFMH>7lT+2Zr+4o$C2UA74G1@Sv)7Y%PZ zrH1e=$JU-rctU3DG@b~P2v{|9v(waOlw3CWcX7p+9pOW!#1q;(#~)fbAvC#P7!3t8HQ+L;HLY_=3e1IUb|m!w1KDAoA$Jt9U{!JLcwLC;1D!j%UOP zrLOt%j-ZT*Mzupx_0vWD6DiTTGkQuDbq3}k=j}-m3F^MHo6htvSpxz)XV;!F`LbJ`yu=S7t=HPSYi8f*HN{j5S&${QxrfN5VlkCw8>xPypj65 zh2_c=>fOeV5@DBz%xrOmUo@!b7<1oa8?Two*uT+e6SpxT;53;$BS=Ab%(c(QEm9Il zy*uiASt$GgPb}Lj+xgx1m9G^y-*O2ifS}CRD}#!7ou#{aFfyEimQf5Bx*a zhxaPS*Q@jyb1btpH8i{%+-cY(GNo&hug(!FLSBog(oh%Gn4ec+mIvV21{@U-{FJD+ z6oT9s7UWEwfE60~*Blj1XF=$XwZr;zM4uJN?P1pDXTFl6rtq`;Fn+s1!3OtEP4-hb z2f_}mqXvM*g3#^HgSxR3R-t4)!HPxgb}9-4f)u<1yOnDwZ!d82TF4;s@w=G(a@W*2IoBjHY!0G1P%!~5=2QF^Z390Y`6Il}_E&k}7+oLJi0Hl#O<%-l9v z!A!o!9s3@b)#a*peLl?SAqA8QhqLksH@ec}Wi(S}RH({sxd3J}8aDMNtRP}cexQH! z!^NWOD{D&|8?z;@^-ZEj@^xjee4H`z1dKN;kZjJGy_GDS8_e^Z&>K252GNFQ-m_(; zyIy9OrWteRMVi^&ls`0)^D)uh?@f+zgg31{7Z$TN=^w0;=Hn+$fsMQku&IZ+<xV-fHAk-5tWQh(@8ksHmF5$Xk zVrVFg#=^R49~L@2G74lz0-Ky4vZJA8QQn&-QFd-Bmr@E}w)Z%CBBm(VbhESYl+SzG z?Xvx`aQCF_QsKf+N|^GC$X9x=qr-P%NwuMPSkXl3_S}ge|9{vTqzu9LxTZl(Dm+4D zsrv#5jHr2*g)ffPS-NWTT}7>?Up9)OypIDX7MucsQ!*?EKkQ_ej(tKy?B9gnHpMjx zFza5l#6+vrS|K*&&xg{P!nDAUNU4TMaobsnluMHysOHxW6!5m(?y00Xdy{&FVZ`aKzBAQX+j~=`PW9texK?; zZU!Grd=IxZ1Ma%4(fANN6BCmi(}BdRJ7bGw)|7nGZ=?G*5}LIKtXS(vs$)?j-p^j0 zUl;26F}~!X;K&N+%Y!qj$UV?%Hp%i3_rp1A`+nN*&A?!3xtk5M5(NMW@M5Q5GDJrg zH6Cq&IQQXvO0`!GBMT)#2>Em`@bnorr zA$bMSY)5kt8S-SGL1vCi=XmPvdp>64TLE?UGf;j}o+gBL9o^+d++TxAap~=PL8L16jIV!y^9k0RWR!R$!SCRfze{8%zYR^?p?Dl z9Tu?Ft2@ihpA=7t8^ol~Us5JN-xhb|upv-Nmb^$$`s$S>x^H*psLvqD6nA%|5cU?@ zX8|kcs;$XK1Fq$p_c_)OxRX5vv~R*JeuH$0BWSxl27+U_MT z8|Y`ObY^(fZEDNfqL8R%D_PfQBBUG|KG|eMn2ns;6>p{+6sh%l@|N2}?ibLrOhm*{lI6hQe0`9+$N9U*+=2(*)COPB5{B10`wYAm0{5 zBXNY|VsvS-CR}xL;3TqX&xtn?20IHZ`33F$TCbkvOvlF)Yfs04G7kN?9I_HBn#hT9 zQhMo^BfXjr8JQvq7J-N2?+Y{KBY_g7ADD|3cT5j2JhM@>6b+iflkZ=+_Xl&|`PhPh zl8|5p^bn!>YuRqYAn@$)Ls=PF=vx4GIi2+POP-(Q)kV*C4c(p%6!7v2HK$a2=OCrb zYagi4kVU{Z)=Z6!jcg27b_sv-mrX<$6$vbS?fJl~H|N*Y+bdLDY%^Pb=Lg1HYD-D; zY(jO9#K}xaF{!MujF%LC>49MxS?|OOI~{HfJ%PTk<#NC>V$Y>CEise#EkIUhJ)gUz zzhmyBO$2nVdF;newyWZW8+hb?MWvKiTue5yYNE4q9fYP|f# z+yeW1&L0ae*nz+VgqtU0i-I*!Y0&lX=xl<;B*W}mU+UYIG~jlA6k=v-Y1y^jA0GyF zmklCjiY-|4Hy&CjbF~|te1xKhCS%;8mi}6MS3RyYJy>o9M|l3P#CTeNM~icOYX2wW zdd|i45WT@|m@EX|vN+L2=zU9Fu}!qj3M?60PySZ|Oz@S7Ol?zg0(gv2o82Q1a{Dk$ zCxQ^2$*)4-%+SBDWif+Vy2LNw7#_pfEZ*1>Q)Ziz^6_9Ah6p9iyxq|_8EWOc!;YWW zXoj}s$Lzd6FJ$$cHh3<6T{0uBs-mMqn(mfXmS@u%!>T-*N*@(qprWJ_qTg54pY@}l zRaJZ9d{pV^SUmknDR_|q~dPRWeH zV{xOaYzGe2;m!SP47X-0hhcYTJswn^l3duN^d99Sml7Kt1&gKH{%t;rnKvNo+LEnW zMxu1m4mGAu9LrNmv5D+sm@!hiY&EC`i}xRKhYZ;+w{b-5!!Er_-R|>!2Ds<(@e%rw z`x8g(aj=NF&a$YOF?2F7edu8DqE^o+ecNS8 zo$sdnsC%rsJb3oAbdW3|${Mhdr{p_jv{+x&>(h29>gION_c~p|GXk>Dr!Q9ycuklE zB32vAlTye`zTf8Me0rr@;rwS>?Tn8qao6$meh3W8;USw>d^6oo%SDyJND*HC1nz$Xo_ zVs>2=E2SVr?9lD`E};bQr0|_QdT4QAePGeHzr4CvYPY-olCs${SVFxU|B;^8AJ=?p zieg9Wb;ewFw#lp#2XNl)2Kprtl$VvQ+3Ed?<)vc(WPW=ySF!`J z=fDVn5$t9&pwkrM4L=G_Z*8Sa*ir=UY1;gVO`Mi)Ti-e^>K8UttTdOR zpzQFTVUN`|Uj@<@D-LvNxl3hr3Wja%aC5#I^>>tk^oGt9+mO+d0u(=|i6dZU{@0%R z&Sw%Khd}dla_;^Fjyk`|EN$%5BzmSqp+2%qqu5w>7YsCXJ>WMI=^ET6lRW?%uMA`> zkcD0Xa!&fI^IOdfgdgUaKpO>XsAjVU4hIm%o|qo!oU|E<8p0ywTdK2+pbowV4u^=- zPQZ#Uyeu*>u;%m>XEupW(l>wcNy$LbhG?O>y2kFL)L1Q*j=A^)mbuE$Oh0p1B9b%* zr`FcDBH5F>Z5K(ZMpv?1{cD!RHJvL82xpIXN4>jj|70J61S^cRtRlb|&D7gl59uMd zRJHs2`)l^6UH1_^K>r;ZQ-XPUinPt0?Fj`!p}+4@v-b8#Wk0>e0DEzwC zik6O!Q<@Lz?2!)Q9u{UA9}b%Sf}DEQ4N3x-GaI;UoCH{c(*-Y_oB_PiaXU!e+0}y| zoXSbjbn}rSEfV-v!a&B1jGD<8nAd>yIHf+3t*NQc<+@^UIw%qVIoUbbCC?pQQiE%~ z9a`J0>Z9v<=zYUc;VIt8+GLt?Cr6G%N+ytjj_C*+?FifK3C>dlA&#gb9)+I(7aGd4 z7>lQPiLYddw8Xw(Q_Rk?$rF-2J}Yr~>S&6`(nGi2BFI;$TnR3)PpU4w5IUi+x?ZH0 z&6EB!uLc<#90kM8T-QGIFVih-pA`b%8Pau7V3gEHO-XPJ>wtj!!@Kh*4NMH{!6156 z;`MsEXDl2iUEyn7-^0iS=Yd(wgJ(E10%j+L-ttjLQDh%Bv+*}G2~@tJTay;eie5Pp zPkz@8-b>7$YPYlFR#`fX&o5QNL;5^%G&++9mJSlK^k;gpkV&mE8*^{=7VO|0_K1|;Jv~l;)TJ7w*~OgskPstQTTY>%DYFtaYYXhS8S&o zo}nDplt}4sZ@lg|Bqco=oc>mFmD9$tn(IW%T-=D1C!Jvxcy@d91`I1HsY-IVZQR_M z{EgLW>c2BxE1W<>G7RUaPhJ}faV3^E>^x=hAD?5nTk5szN)wLEGV-g)xw%URk z#~x84yQ|I;vbyy(AzIgz90^h%0G3q0Z!_38pxO9d&Eg$yMUEG$?D;dUF95yqKNz58 z%)3%bdZQ2-l{hSFfP%t)-(RQ9^>m51sU39LW4+5KfhG=w`99I)lUKjI*l-@q%FQnn zgsF23w5GM5*1um(VCxJ|5S_|13hY=t zHkG$psFX|lDirMXQz=65#G83y;}f2rf*($#q$vAiRn;=C4Trk$oRq|;LKjt!frn`r zRD%NyL`()al}&)r_L$XAZ3R-7 zy-ZINj;6@;e{ihg2m@(!`}N>0v@{v+!2QiNSNpv-bNFK#HVUqdw`!`!q(t|v*SI}q zdEBRY>gTj(;|bw0#yNN&UT$u8_oBSUgme8H8cw|d+P>UcZ@;8+%G!|(*du{Nx}F~S z3=stZ{t~&1y;W2C{m(tRq6w!|7p>3i1n!;{Z3Wj|iH(8%N&FZe+MQ(RzKM`;RFZe*ZTB@`iDZ5VO*; zOl|4*fSe24+co=Q?T^ZBmh?|t8b!?B!dB@rIMX@m-G?rpCO2SJd7=K1t>NImNfTxi zBO@|M^pI^gufYQ*nxbL8_86QO1X3r&K{E8F&+uQyz`dL8_s@xeKG&@H=Mj|vpZUG{ z|CpZE=rZXm^&YhG3Q#a=gFyO=WE{sZpgRB2NbEwt-TceLIMJc|Is##*c%)8X$Mb1n@*?&D8<*jZ9RqVRzCkF3!a+WJUqO7wnvG) z_Vo0EWh!ZUdahLaqhK>=}KfOmuH5Guk@VV~$&|eT&vlx9L7r4|``0C>*4&tZ7z5i?D zaK4zRpUvD^QCV5pzRjIG-VLDehmFl7|KBeLJr9haS*rEM-{&d$5_Ap@Zcgbp=R9GH ziD}J{kf)}ivab`jp1p@jGCc*xZDFRP!~EvjwfXu;Ti`yZ(llJJpr_G}kAkAbl4*gW z#b$f`5`5L0?wk~FcITa4zpuItSf0lN+2!R9n_ojh#-{X3w#IT$8+?q7jWsm5{Dnv6 zKY~%O6r}yHNcZqNcaM7cc=m9daw~8o@prGDK|mikI3DN7CP2>j|2mU%bab?}9Wn_6 zR!VA>@P9B=YK#XwDUYAbwkuqq!DVl1`Ylte&(9WzJeAJH?Tw9*S0kXal`a~;MdI%( zHDo~fvy#S8vE73_^0-6Ug|&S`FpimSuZ;PQ=Z)V`|%!!51lJqs|+{~^aEqxeelD5 zB1Wwat8OT#b?DuY?2vQV$wLIrGcFG24+fWB9m>46iY2KWIkla!9cObNvPoHCRYC?X}D zfJs^laTBk!9;bm+OpRhMAAURxVe}7B;==*yYWt(r#JED zM7wWJAu`IAiqnwDn_+HK>CcFVFQ~hLdM)B6% z>!1NtwtpnJ6o=z*gXl>_yfX2b%iSssbn*L&pn=}rIOYqAXlgR_Z7ns~b1*Qp&2(_E zzXF*k;`Grw+>e)e4&6Pot$%UtouQj$M1fd#t%jy8$<<}auz=S9ECA949@%!G zp%zVt_wn&>6M5v&f+9j-b~mAQbz;UZ_vgGm4rtf1bF=HDDHL8fXll_b-IeW_8Kv)S z+qF^abPOMZSg|X2A=;T^leu2`b`lIvI{y5obwTX^sXLQZ7;P$0dSwveh4ZkWDCquz z31N8wZC*_4h%{8qEbqk&Vbg*5#X84I7_8`0(bTl7NV_?S&2%K_iD`n+-(AcFZ_Y*s zMpay_HbX>4G~xPVS)Ay0aKLgT3BaL-WjjVN9AMAIS$^6i_>R9}deE}Z-==H{R!sgF)d2g`IKuxwx6wA8=8R=@{6XRg!*BnDFVOEGv3 zjy!wLMlm&;wy9P6?m}X?L1HSpt)5;zhcM*ywV1Sq3EsH4p_E+hHl;KG+0 zBOA5h0i0yHz8_7GMO*2|@{bsF^g@mIQb%eV8ek_%z_ne(@Q9emp37E`&HboQI<}a@ z^!GMUq#W{Y1rHy8*p;9{ktDxNi93O-(B_-{2}8Lqs#gG5;#hyffl>ov@OP8>t%zRp zQ~8zJawTp6JV?X71qIP9^!5#yzb_nqVaH9v>oe90jzw%d-PC~bpA_&l$Cgpk-g+R9 zy5y%K%Q-n9gDs3!{Uq}ixWcZW7%k|j$!Tbkhr3R01gt>ymSXIhM8IOd7C1EZho+&i zdhLSo&^XuSIS*MR)t5sjtp_gXIrRVpoUBY3_3Ur`DDHT)J`+tdbadgVuU`_Yzt84z z@*3=PF@h)0ctpO0j!FCd?&CX{P1>jLRIeI~nnZxw0c|hDU_cyEBRCr(0AFY0Btn%B z&JmmXMoK~obun<7F_kQIxNe?f5R_9te%FqnBxrkf&6dkDc8hC594esDzr|WQk~K*ex{) zoZ!w_1>M1CC>5SuxIl^|zL&U>$v?FiH9U zfg#e9=KOSP99;0g6&_WN21m}vA=T6-0c>`3it)OplAf6%C<5ZPInJ^m@>m$LN7_c2 z5jRlGe2RpbnjQ~^e0c4Ita2VQ`$lA;a&bGEj4RPHZRdjHb=-QmT{eM_{ z%b+;6uw9gd9UyoJ?gIpOcL*BX-9m5~+%>qnySoK<2=4A4+--0_oxSgO>fEYx|J|;s zBGogHp6*_6zw5E3%zLbcVs>)wz`}CnB}WmAD)bD!;&47E*PfqKDLQ5$wb+Hv(NcbKft&d9br8MwfHLxTh;o4Z*ETY3@6y zu5vtInwTFS@9o`LU5W#A8!8iUc%lPI79_Mo3=DLWH~S)jT5=Y!QWEvoT?PNRMa32A zR54ABXFB=IyW#`@Wbl@C!O*d$`UucV$vh2TeRQ6oaZuI$uhXLN5B8r!sXBUWUFe^h z7MPB+O2SYjTbnQ>LW;a)`#U*B=cO8QDSu$#29%a3Q-Kz}Ab&%O{o_hz6EhRS2gU5P z&bZp5_7JYl-257{sy4>f>(_w$+||H%I44M*yO~RTYbPnej-S*=fPBMa9A{x_WJiir zZ7<7+0Ti8NTzYqKPUET_n}q(+fTnjzNr3Nt1`jfv{f*;}4X0=`&=s&)Wq20b{zJGi zIIYUnK02r78us&-kl}uLbD*MVh)wdGow<_1$l^L0ZI0`?|)+%PjwXBxxg4J#>y9x-*|q?| z25_u!puPFRp2E9pIGgcrgM7`$%=WoJZ&Ibk-Sot>Yl5N2>p{UIdh^IxQKS9PQ}H9o z%xLVgVxQR^3W+pn1cm7JX{)b{$Jxqip>n?Q^kNfwBBM3C>NijZG(YypY)X4tj02%G z3h{QC@}}xLzd?ZT5b&3&dUoWOm)A)^2M31($|@GH`1xwf>kS6C(r+Xx)0mIwavjn!WeqqSi_M0c69Y&cO&6!ndY? z)5+U@dGyADU#(LbSm>4AdQ(x&Sq|Xv>61qIS>4xzaEX9WcQw5a(xzG7FFK~`WVOwf zm%L!A^#5}DUK*=nuj&g-pb*MmQ6 zX@;D$9Kb;RqjPh80jyKT<@wuo$oaS~>S7_e#w%c)Y1Sl1quhJIo8MgDY6{(t5%+dZ7GgH8&sY49G)JB zu-7s+HlAVDl2UP5*?T$)4#qij8#x9%}TR$wHQWl=WGraiE`CzC)UFa@a`S zPKsKeahmO3w%o%ta!rp41W(#Vz1@F+CT(4ytxx`xHA25&ylu+m{9=KNQXSxQ>wO%i zc5wTGa4A5~mtUQhQZUqu67=`>ew3h&NLkTS2T8W2b?hH^E+NDoem67WcRzKRAl|L= zh6C}5JAVVzr7yYAMB8~@9mute$FFmmWgxZqo z*FET2lc|RdT?C%);g)YR5P|a-tSWw79yPLZ`9gbiy8xlD2OA$!q^~-^yu(#cP`F%e zCd%Y?92^~uUpn00E*OaZchm~g<{O(CweJq_<@HMg8kI$%ZW6CG?|c($qy;L(=&-Vt z33n9dqv?$4duth?mYajCk&Yg#vrOD5Tt1zVg{h$cRA7DOYJzd*!tM1Abnk!j(=34a)j#1pl>$PX0 zq3$%4cuVdR(T<%0^tzEF#DYJAC+@b1tbtOKhJ6-$=en_fd21G;A5NtD3VBLwubY&D zCd~IrBFqo9;1(+O91yfepwWCT{P<9B-tIZ^$^1DmzpShgJR!jD6v5O)dLL3aJ?Gw<73%{IqBU_RNAO2RtqK;B!z zM1ibS8Q?FiLgV*WVaxAVvLnL?Kd)=@q>=h-!n!l8aA@pVa4;|E)mY?SJGIHua4c#b z*}W?K?p`WKEs z7w~p}#Vj2%GU~skH{A5)02{{e>bps^m7^=l5AXRKYc#(=AsWzXL*jgV^bPK+5&^xf z^BIr6siE{rq}p4Tp{Ze;*EV}!5HlkyD>M62#~mD(%fPPPm7To{?~uP0Vh?&bzM}5u z%3kNI3qlTCT-U4ZpgVEoX_JRfulyeKt!_F*+D9goaYK(@eYkv{(95^toBHp4I15nH z#%?dcU#bMY@(B;#&J6q#!iUO+W1IWvcu*URHeQllK5K?nP%vy9rO|1|Q@tEWh7M0d zLu2|iJKD>S$H9D2lyG{Lm-lVi^_MWk(%}LPO+qQGe30Ml{4Ma9)s zmG|^}OYPZsCDyW<5J}+jB^%8 zH^j^j?Sk1ONePqWo_gz#Pe1dvv>&x-jFr8SS)2fub!261d`w753jd%_^nS+T9Isd) z%vtukedz}j8~l$Sa$EX94oLM$C&*t=)D?#5s3?mFsk4I`D}5SHV9Rh=wDMHfcqys~ zeVKZvDnb>lY;|#NXxbYHi#GE6`PDc;_FCKgpP`4+-giV}?tHgb-?8IJna@nwUancj z=Q)(ajVoYsy+I|B%a)#5K%sb3`u5n*4R)_5M*jA)_j~V`rsGvSKO7qY4R{LWA@^Rg z$m~OQrfdeco&xA$_2}@BauElpT2RzEP9d}XGRZ>7CV!d^2D|vw7&6LA(Iza;mfQDF zK1kKq)qN7emEK!M(%PR$pA_VCy*!z^o{X8LBh=*&OR6ZH``V$^5{u7PT)IWb)wI99 zrUkU&a3CJ{fu*ZX3US|X8R=G-8#h!Zt@RvE{E7(gGjj3^z=>hC_B>KcvDvG$QFYJt z%K|0$bZ1M<{ZHD$LV)@_e1VXy;Wt@+QW#qj!oDF7OCT?F z043H|j>bYOZ^DG@$jKkIS+<&3fPqHJ$%z?PoB|87tf`!>>}qa;YQj;|wqZZdUvLKDmCvR+9|Cq*PhR!wPvC#2Zq%PY%3iXH|AbPoggzyrHOIs$U zDWX`kLs1@OyXZ$fw{MOeg{1z4L6Ia$#NoJ~msv!#k@r_i@;IvWV%IyrLSuX;pCDV1 z-sbdzEOyx!MWQ-J0sbB@?e?yrrG%EwHb=&dv5fMP5{b1MuWcvho=oOMhSa_(w5Z%l z&Bmqvc|wq(l@*uiBF7FtaJ{&=mJR`8>Z2`i5L-VC_o4Dj(Y`@UnU1Q12i9jo!+Uw# zuEic;(GcLMC7XFLv!p|Z1>y7&N2_XAcG!f6>OX+Cd0w0$DWgF|8!o3?XN*UQAQnIL zeAPT)X)cKYtRJ=+>?2AiH&h6s+m@y8EI| zvrRVK)t&JEN-)tfiDcK3SFwN3%6y%WrPAiyw^Y|;=^ve!bhD-NIhgG;c3|5Ik3c6z z$s?8@st_f_c6C^Rr$j5=(^5zcxw0pRmOz@k0!@IC4`lLIiXbx13g#P!yu`_r_r|Sj zI^HxnF{VHM2CjWcN-KVQ#gL(C$S1R)dELYZhc;>)B4~^b`~+fXicKs%y+zj~O4TBZ zVm`Co?-LDMRd@Jcr$5ARK}kl>5`p38`FC7bAo^}19Z&b;L4(}sSf3E9tdNXWL^GLm zG)5S9D~-2yn(^Ti7-2sUTBxj5$K}EB$}Vi7yxOc0`7Su!DSBWxs1jdV!~s=E_cVQd zy=WmtDs;HX{gG?R%dv4e9i@DY20k%8s8>Cy=# z1M5+R(!4a53UvU+(+~9rvj(m-`Avxb`*$}17Z0(GG!#5a71XWIHD<6}uO#SjiKAJP zo**(9KPGca%Bg-^kF)E`*$D}N&j-ee9+2)-<%qiIW)op*TbJjhM|I275_t|2K z1$Rpe9Ed$_tyyaFG)*mm%MQG|XBY?8HvcLie8$El5!-JKRpn~%RLD?SP;}Ywque1iLAO5R zua2B83|`L2dD%rNI#T6yJ*T6nv`f5zQP|wuJD8dNZ)!4z zVwH&b=b};anchy%7oolHl7JA(Bi+zEHY&@T)UomwllC>n@~zpnV$`%ZlfXN6<>m&- zTpB4UBLPTvQa@5h0kH@(o0`g$xL$lnVKgfYE8}sspQ$R_K@yco`XF&Q=S;lhg-%G`4v;Xcs4Oh@xeAJkV3E=3 z=|D@GNSa3QMzg!kp#MFF>wU%*YV8)ib6%G1oRG8``uEJ@GDs`tpoS8M|JkQpD3uC&dOpP|LUW>s`RO+({k zwZ>^Xn$6v7jVi=d@Wn8(vSDuKc|KH)=aNX-T-ymOr3w`HK%j|))P@T1$AxFdSQsgv zJ&eKCtmRZ?T_Xc+sUap+j^H(bpaaQlbNOL$O%j#$7BA1qS>%VzSvLw@gleO#J#G}Y8~gyW!! zWPXmluZHENe~rOhvsu91L_68C1ko3@)A(fR8ZTW1 zE2^a|hA+-U_ro74N%5+yuT@6=RzP{K8~9Cm*q_L+?KSC3pkX!BjTC&A`8cuoQPPG=Q23P3#bz{8-QqcUY|5+U# zPKgs2_Y5v}Rl^_--5ywkQVkX9h760; zqa~`|kuaM*+U0_F!4R%SF4AuRX+`1O@VQwgz8G{eN?htDYn z@4&rglO@{;{*f82F*hk!SN6aQqZ4?-$Ya3x<&;p-r+pnu4WOjrYhE4J%yJctI-P$!@`&D(mT$f31BDSN>A(mBMT3_>X}SEKimG`j*(Z6))Df)Fv;T2j{_^EF_?8>Lfv$I zXVk1mW8evkjBIsRvr7I~)>fJe^c^}nwy#EqWP8e&)l-+%*UV8z{Sh^p{qy6St18WA zO@php#gD})tU14&QaEPQD=XKtc#tRAfr$X%myx=Ju6OLkfnjB3MQ^J%ghK)u{xGNi zcbKWDX#Yr8*4y|!y6VeKz2N*?zNR8u>=SV7q=%FkGBeN>*j|QaqDYOk8 z9q&F7bFecJuo-Uw?ymKAR}BMLTFUwjKoz%ps;Zz{_re21b6U({r;9EVY7gqK5fYpS!!TlgqOBres~RG*?8a zJv1D*C4_vUho%MLs#)=D>gQ+h&S7OS24uNW%tetl4{%N6=9K>N*j#x+;>6-PG!PT} z5m{e*KM^{n{{i_H1^*-~O9lUq{6R+jdcfpku4a3?@7cQ0&D^cgprKFQ8{B_AkIF_#>lQ4;Q+=?|bCh zJcm{;vC?S*=(&ar9~!RD=ft&_%G9!ah)CAw)G0Hy(Zf)O#}$=r_i1vLrQ~YA>S*PC zH&WF1Sq-_+3x$+YAI@P*ny=Ib^zV;;bC%_=IPEE;#(1fRcX?0Z@24M}mq%sYF3Y#Z z^JMos-b#eFr>k~(x#o;?Ir{Y8nX1?aoZ{`#Z%vx+S&9+NT+PaOc)XBPMHHEbBDaO| z;!#qgzYcrRM>U+#`m-<^tsB%6{SN^&U3e^G^!?|unAp~L*$s$D!197;CSY(%bhN|q z{8}!_l4xIg20;>Sig+CZVEJ6CRf|{@2hQoA;{q`dKC|dYAvgn%OO2m&l+ZTAq$BUW z>-QLRnd~8^A9xlQ7w0yA&6-Uq@5>T_ggFU#oJoZ_`8z5G-@?+<%eS@|++moY1YfF` zQXgTqeyl~xZk?oZMgl%LQ;RT`7E@Ekl&sIZcFhTe#-W(5(TYm3HOw<1zfk?UOmQan z=Ionscs{1$)76X_GGmC(cfypmU$f%P?tWb6=7u;uO((%D;@}YBa)>@%HTwRrGWzQ3 zYAm6UY)8}G8f7ZQ>Z1J`L{VS)P@dzUA0Ald+)Y9_UUHquO#C*>(BYpjqz=IJ>N0 zJRI?^@WB0!Le#0sCk!*m{sWuc^^rH_3Fz50T7r|9Y3VR9OhNHUNp_rD)3^;zks%+e zL+`9_mE8}`*h9k*kRo~wGB7b!A+f8tcr$V6o*IeQ2g3cjG0+Q*5;rGu975q;!<#EgQly)&FL?$E|J!iU+lotW=ub2DOdo?Bl8c?90eXj zsQ`t41lF2~aSFWBDjJ4d8M!`h8M%Yk0TVanExE9I-Hp|VmoKOWOcN?_QRTG)_w3@* z6s|INjnEa(hh-CYs4(C~IFM;DkZA`K+YR6SWbh3NqQU9>3U_#5I+4j|1lh5k$m)db zjXmY&{=mX2LMB*tI4Asea$n48XG*xCm$LZRp#?Z^s#qm;O*H@|+;v{b~c$_4+n~+6C zLxTYy&^v1!7}$Tf9c0_4d+4mk=Z&@~!%IEoJ$Vr)jzaAJtkp>B+~o19>=_9JVVR3= zWbeg}0IN)rlW)-!)>r8G1=_H3A*lrF1SoqQn!!zr^5ANE>1O)nx%4HcGzYY;AyPfe zcW@#iTHH0u>g$WTR%~&=<2)FxCL-#6HuBaM8o#HctzAu#)s7A8 zKqLVZAkaMOAC^1=82Lu)4K0l!@GAdbHIE+K&9IuPHdzYvT)n$o0zL~!m-!;U>DMpw zz5$87TwGjSmRV-D^yUB~CFidvOK}%KAYUv87X8D}wB#A@WhjI>*GFF+fk?o$mFn>1 zFwd}6OP;|$+Aoi#njRJetn{d=O5TW04czgPc^T&FlIW%qQZcmLhY+qo9U_Qo7rkzS zq~1pM>wxt?K+!3NuNRau@EQUcDjbo0s5_;!<^UivSLYG|sp0)ABS}Rt5h3SdmZ@^0 zZCvh=qAI+>_u0XJ655L}aK2J8m@QJrdSnulDrkF$jp=heEtB|jUne|+R{2$h-Nby` zo(+IWM;_K)iT&Mrz<^b%?ZJJ&#SW&9@F_PD5-VOM-R|D+I{PG%3>Jai>9Y#j&jTV% zh|Q04Ut-9i^e}w{?*T3K{vLIyPEvC6_1#7gAa?9Dn^6tk0L~*+gmk;=CV*t9t80Eb zy^J&FZE_ax8gFTF8%A{bJL`W~DlZ2kMudmKBba+Azg)WT`uvnb)HE|S9nE}ux$R`9 zTqNqjj$kR^;GjrLXF1+IO+v+*fs-o@?_{sIvsg+k&Z)@BslJ@x%Q1ir6JcJDYirYP zpAe?D@6@Vna*~a(J}L5Vs;N=b(c$xtPN=6#8zbaB!Go-~HdYOJQvw%2+VXl}th1t@ zQCe=}`*L|eZ@-1wxVU#X@m&h15hjzgUUZhT=|-d`f%jC6O8tTKXiz5TCBz8;P*PLV zOR1YX=Wq~V#HG^0ZKChrzguc>w#nTiAq{_UvRla39lk3yE4iJ{qXtk%! z^!RmtQ%&cZ48km>{cW1Vsa=k|4g}EhSJD-7&u@)Rm{oJzwhx!*JM(TOr8{w8Pf{Ey zaNP|j4YF*BH`~3q+Ipn!YLGgw!ipxFAQG3G#>6sfXj=%tNbV8lR3s~mPIoCU2)33t z`8Mb*$gfO)eQpfdretGJYY?XAjopDGjxSa;06oh zbOEvBU}FQpucKpPVxgn&?Cy4YJkayC(|-m!M?eFJc2v)5xN%mo5ny+>7VjADLl_kWcq(bLhJ!TwpR;viY9crtF*b5%G3ZYt|K`*{D=4N*gz_7 z<~2Wk5kWx6DuQ{5DqpkXi@8yO%P2w*cIQjAl9srd8wV0Oi^I{064v>%bwoH9{A{WX z07w+90n0;dO>M|ls#K*W4m0pkf4V$lTe=0~WD}=p2sgR!!{DsUOirrPVvrkFtA_!J zO{4TB_-RxjG{G0k5z{bHR&tfG&6iP%yR3!~^Wz=DKY}XUah%ia@3a> z5Ino|<+2K;R#YNpX~?C9uPn^U$5N0ixdU`%~L z{)3YfDNuhwG4iL11is7D)7yU==C|u`$CFiy41w=JSC_x-s6^>0%@JoUm-YDfd`=Eh2Q)9S#JkMJArzu(@ZFag<83KtJ%!_ z%TttYivz(H2XN^HXB4YcIDu9GIP1;_vk6U0*1snsGg{VBS~F0wGBPud4i2`?4o^?E z&h|D%%S)$rOsVV_c{r+&@3k}52PV8Hx@M9X(jVhdP0Wpf&*9D1Mm02y3&1)n8Q>+V z&I1i!5y3#eYE9(&dY9QjaP`g@5RNLod5t|fUV#VQ`k{8o(jPTYU!Y<=8Wroa*PE=i zbUfU^8edzw_G(+(%V2q-q>lxl-$+f{vOVrt?(VKY;nRyeuo|o4OKZMF_!|n&Bv-LL|kd7R$9(S7- zi@SY2u+*Hf)KJtoW5SNuGkhqk1V0w_IP-k1Xe|31QiLroEK|0Rd8?^}h8(T8c!s+UyYzbYOUSdG|4fyVohG-_{+U7M1!K za!PYU;ikW1Yu?`FckU64jZjX{{y@o`Y9EP)A~}o2jxjzrEBH4{zMZ9`r4=+u$&Ak~|5D+2{D&FA-Jk}%Yq)GL z4GS^;s(N|+i!#4*_I8)^X|a-v>v%6_fGCrk5j$BNugELMr#~_FYC46E8D3kIH&iNO zq{04kmWo@r`9gz9SWwainYan&e$rB_)^fAfvb*L|vlg0npqp59(|-}Ati%8iN9_N) zT6cSJXtDD>I;Q#~7puGp?CUz=v^Arvv=q(pVQr_q|d*PyS)n9%kDO}*7F3geb&NH#-wr6_dam#8g9lhdw8 z(eJYkI_TiE9Ho5`v9vl4O=6@3Kqcd6O@R?5pf~ zr~tS|8)7$DS(8V7gvF5YnPXd^bw}z+>+Mc1*5COB#nndwgTF)TQDB*0G~feFpxEr2 zbLyczrkMo|wUOMDwcXwI`mZyJqr?&xENmPcQVqjbqI#>9%_5^K3|@m5oYX@ct>8R) zhPNm6i9CJmBlb3##!YbkdAF^@BLj}XBwS9%XXt{Yb9vW#dx-hI$T}?*<(vKm=7*;Z zfjhhB(03v$qpJ86+lgv(>U;ZRFUgTFz3=Eq?O)i6jJHYBTiA2Un|>U3Z(B@^=2T3@ zNJu4pM%@YUZQD8hxqZ+b`DV^5I|D&-AmVNf@+Al#y)olyJIn0=;X8V90gW6WZ-{eM z1E6Lxl6F+&&2yrO3NE%ZUh6}g<7=dXw|M{>|NBg~Emk98^G9v0u@gI>JPd!B1`-N3 zI$cXfnF8K-&5s=i2s^Jf(*UQm|0yn^kQ)=*onx5gS zmdSS`uy8{O*RZ+NUMNn=-dOsDy17pYD-bnz(WP^E3W%(Mid6t68@RN^->7kY>9eOO z@Vmb8VN$;66I=fZ%s3Q60B4;1ObHt^VHAgTzdul>U3qMpSBa9w%P5mtg$Wq3Z|G8U zi8J%50lGBiG)$%e;S%ZSAg*-szp8{FWn{ z=8)whK3{(x&5f8rj>nw!I4h;xE$p8vJN);ALuCt@H^Kw0e^wTc$#Ro|0XZ@ro2*n= z2Q9(CW&BQW&y#bf+oi~Z0e_S8zVObIBVL2%%Hs4HH5FBd;|ruSX+nV`F^TFCNrT4O z>h`{^%hhp(uUZm#VM7Y__x9gFj(LCeFw1 zTFh5yO0Lj>=#96Mzt-;2eLPwcSBevE#TvNW$?qkFy=(KRoNXFfQW6(_L@KnBc#QwO zzku%!++uTE9vv4`XnZjt&Hh6A7)e?yJ+UKt($Zrc%bM zpzkr?>hxdUfH|k$uN`q=VPSK6W+8q3t_PNZN^MTzM5a70xBGKIi(p5GycBm36~ohD zNlfp7bEr4{tqh)lue1f=@4YnHJ1y=qYq4k(ZYm_=W1mABYx_ zV9oGYrj;ln@E{}or;+28b#Dj7QJ;?0=m4S1*vQEIRDyzR3C`6yy)1P?mPY<4<*)Zo zYC4ouwAKqN;#zW$m>yf@c&(bNCnd-{D(gSm{uH7{oKMP6^qx{7PzgU7wE5f?Rt3bg zc+!*_?MKS2vRvG@FG#nHb=^QIEt1R4U}pf)KVquMu%K~Id6>7s_jJMa{xNftyQ*lU zD=S)Z@|nuf-N;p#PP!`o>clZ`N3#`I>K~QFxoWjiPp*HwR6IL_Oup<^WZmDDBjrh# zBeEsON?~VFxY!=|R3p7nd$~wT&qKPj#2C(II-(fTgx@{|ZBvpm?L#u%W8@4)nQZa( zv4w&$+sLNiFM>r}+6`v@s|QQnC#RliEkN)lcF$PP%)&(0&<_go-u^xjDwZdecQAgN zhr2V~6GWi+Ybt(z_Eh$<=C5YQ2ak^rtu5|}iRcvl1N{R7tga;(pOx(8sxX0b3#8-n z&}=ISr8_VV{r-KCrKEQ3^jsI8&o$FoVa;Fx@Ca_M4=xXNB5WF ze#<8WnA{;foflHOe}saPF&XzYg7ihrs za*o+S$Htoc@v>Thh&2AARIz}Hj+^o~E%Ak(+JLfF3LqeHY+O=GD)JE()V@-J&{&Yv zNG(i>N=aX4U~;|)u?SEy5QjS1vQ+~6F5>w7$uyT(fdvx;-lKIAttX)0|copGc>m#3W{^c$l6V zsW?|00;tOPgD0!F)^otGy6oq}o5B?I|0g;aN)H8Y^Jl7xiY*=pN0Zdv&K3x14oe9r z0DOA2VR-d5wm?(@ZPz;}R-XG1(kBA^j12A7@bGY;A_1TX+LnR6eNAeML3VY8R(p9# z>&5O6HI-M|Et~A`bN2H3=8Wo?03Qn}9s*B^S3Z1kaqqI6`2UIa|M}>LihM7LM99uf z$tmLYRMdMfYEQx8n`Ck>~gR$6zrDpB4|6PZt4PB@bB6L7pzLle3=h z1S@xn5jniwbH}RCSivSxGIo+8O3v?oy4n7^10T@?f8}0M|JLTyd%Z90X~0wyVC{cb zlv^Hk{QVE0ib<=SWP!H86-QKN?Gw~*EEFNmKT@zDfSrVr`JlS_vkE8V*`)??yRJ6R3zsn8$zqW(#7=O*qnJHjC{4|KqOO|IQ!lXMO@5 zw)!QJ)|&7zMH0iaLW67-UG1gdm%nf6aOUJk>9HfBdVs z@EEY8|1?GhZc5-M{Gz+&*fM8mn}*7eunGOp>devr`<8;X!41MsF{52m?xR*zi1BP# zua6OaB{0_9gLEnDb{`x!K21)GqT67*yy>@_7BFIXM~a z%s`KZfrZ6p>FEW3*l!W*-}@Ep7~O=*KvQXYbOyDvu{JX)9o1G+ zkoOUUe||eY%VG#rUAWE3XfCDm7?eGsDLq9)z+H2>-p z5{sht@3|_$kfCGO3M=>?1j&VufvZ~S8oEmU=D*EJQWZ#&Q)~tMw}{72AqsN>0r#1# zVEU=o{oj@LMNw>EZ&P66hRL91WO7dFiIp|seYe-QoFIkQt^`%we+EtA=yFmQzV<}EfY8$FJfJg;(U8L9Tp;&f(D_#(cero zi^sbL=QZBkxeJBdhR7@s>3YrBtU<$g+FD>(;M%1mJ9bsSgZRekZq ziW=$ky5GcNs+qUx*kGAjUcv|U(p71$n%FBj!$QehI9Xwiph$z3O&Zscd9HHJo|Is* zq48MT-7h#!*^;kIdz#>?Xsed1?+q1|#p13{kC_0q`9y;(ywhUKAD7YN{1$??aONIi zGW3|YDWNVb-Zvm+?V)9Z7-iQ5kx4^ z^`CBJ9SI4>xvqiqQhpJ1%sWY6^2)^I(Hi4n{f*%4wzdIw*u%4L*LBu`8x%-Kfm zs1XO0_-qYx;JeiCp3XqhY~zZxZ1Az*{sF+LxR4kr8=wfy`lY3f1R|AbHd=|UEw(zN zPPsg>+bz|oOidvvhKiA)GqLsx?4aj|bseX+3tzx5djPKYxCXk-fv(*s9#36~qUALkHu+Q;dE z#6#rS?}HVj?|(i%*>7t?LklnW189UTXAMQ(yKGJDKst3s`?J*&+Qil8g$m7w=cn@$ zAjSglWd#kywaOP-{o?`B3PF|4yFA=6w=xMwo#vRTu!j?$P#+i{^EI_Nw4H4b4CemM z$Y?@@mrL-*E;=M$e{j(KBdjxO?dg47|73oj5tbo_g@<2`MTsJMjhyLBv1k|<@*PvIW;=gY&HZ7E3#>Q&=x44L5c z!KsULZ&&+iOg<4v+|+9B=iZo0lq+ZQPiC{plP@c97avUy~S@ma2( z;LjDA{pBoZcJlzN^ycT%;8gzhwF8ad@gZi$GNDRx+TH;+7la<1FOJ{A`JmDFhS!`| z;yzW*`LrCHRR)P2W;1YBN;2Oh;e|+e?8M#opG*gqz~WvVn&(>-gU#tOze31qTg-U! zH2DUch}E$8T5mQHLN|#0Bf(AcvpVwc=5+tb+6eXVqEQThwUl*>z|cby6`GnkKDW40 zcWk$kX#$?zktr(IrfJ1LV#C<3nvv>FC1s&&{DkMSibgL9gKy`y;GtDWyND zMnDf;l0TSwgxDYGOtRl~xvh)+FgY*I0cEzwW+aG){iW`TDL6Qic1N%j8v&L1D>r{V?_-b%6nAv67EUp~B`ggmnsl-%rRnCwIDa-^w0whxktLw(rT56AN@Msr$7e-ZGVX|0YyVcEAXhbcBSvj?HBev z541q>MXZoRb65kz?)7;g6t%@sWXTNwPnc3X!^Z+8we|QU)|W?j;26h}TdKNk?QAV} zHyQ%uqzL%hXLs_OlB3Qy+K0!7%X@Ol!6yLIvvaT$jygO#>henVJXW?pEU-G(vm%gP zp@tv;O!`oXfLRXt)|!P?!K%c(CHu27#^FJaDBO{UkUSY@whk=Dr%3B>(2TVM9 zd9@aKxKmQJAf=^{E5NqQBJib`&l5j#yB-@02wJsTYcN3APzB-=N=k-^);nFV9z_-O zeYV7#Tii7@rzipi+)%|l&1o!F01T)B(KN5DY{1x}Qm^*8Pw5iHjslAVPs<%J3u~A~ zy!kCJb9+_1Po`xTqNLx;+me%A(~ShU^`Ima@ODseW59=pSgV5rWCAAgUlzY&s+od% zn%(#N=f^rJ`7OZ;t)D()0P1Kudk&zeY^YX*+&*zINJ$?Gc(|!*ygWabxflkcaz@Q-EQbf^XM1QQ%b47P}pDu z+5ln`9+c}wTP9(+-9oGmZ*07qXQha!8Ygy^23F!_Txqf6@75`;1$`za6#FA>2p~h# z!u_*z!F9{IIX^AXHi=5Q8txl?Lc>&l-|F-fIw&4LAtp(|AGI4>{SUD>@UY<%2J2!7 z?5RMWE|PsuVsZ5lhH4|?3=k|VC|C>-pb4Y&(zOz^G~zL{Ug&unRD1Z&-XXh*aqove=mNH`hRUt5R)`eIa?pKry|fjPw`S13Bc$5)wwkSxg}s&u_{dVphr`RIbE5uT z6HF?X_{?hLO98EDoo6cMjKzbw@n%O91_LQ*uLNQ)Zk8>5OY`)TvX2Q`H0~ezQW6;8 z@-;QNQvnab8Z^G8_UMQdwbG9oG}7s$eAYvqoz&090UWVF&x?j>3xI zVriIkhE$8fiFQ7V=m?k}8&5T;A<$5;!1%>vsi5DH@9q+aj{M_@SjW4HQL&eZu zh%OC7-ZD#O!1joqqPmTdZ)NgL(UacS|0gj+IH+~YOhZ2)w#$p!U5@75X?(n+!BWOp z(?j;;cn6S$%vKRi2cuxewk#gvn!+MqHagZ%&Tq$KsCYa^zuq75^aYWW9N9^m6P%1a zr&khYu)55;;lMGF&_33gdkSz|yYiU^~cuBIBTlb#X##!ahv zxg@yD_Z7~J5vS7YmJp0jpruZVU(jbnAyzohA*=YxTv{>k_aVJ&YHVx)j0QDb#gv%n zH2jRqTQ6xaPac{mS8SQ|hcA{&y3^Ok=Ro(vYH)(StybJ<`y>=7)=#tWdbV{WYjr7Jyzw*V)4A^3bLW>(VRAqO7L?Fg2i{1b zHSj})fN>ZN?@j$Dw=aH0be6~B+#U#+x*W`MF-IM4?Ny&=*)yL@O37rhfYX^7O0Bp* zIAt-J#N@xC{RZ$7;c$Uek zrKIHaH$C5IJ%v0dQG0Wh&4U|io%6wM9#|p>e zAf=Xs1VfPT$oO}sPjUzL2G+^>ncU|T63jF%z#*6-cL~UXHyx8o zw4^JL2CA@4txU=-vPH`}c$~}xQedf~6HE*S%LxJf_$MKt>YP1nTJHN)h||J!qtYHGlrHQJS`YAPREp=Vm_d6Lm3GT=%BPqDpZydez%5KA%W)pL%+A z)=hz>o&-1Lr#_C6GS^5B&w7ez<#ugD@-iu?-yDGAD8hpl+*ntWCb#$JT)c+rehZR=!X;Z`wX+Vd6_YCg)^R#Hk{I zMsmMdJflW7XIyrJH*l4Sd`K{BE?j+Cyw?<&qmV!@4o~ltT4FzxFt>l%s`_z*S=mKEaS+=jWP_2b%$ahHd9m-Hv**{e)=)r!&$4Oy$1iJ$Nq*a5Y11 z$FI#vMQ<$tpXxYct%#Mo!c4H?BJs%Sg)LwGd(VJh z!2;Zt9AOe=f$E&e^3DkOI|7EPlMSL2JEH%Kv$u|_>Wlh*O+X|?KpLc_yTgM>ceiv& zcZ;-?bc1wvw{&-Rhrprx5byHm^W1UAxc9G@afU|$&)H}1wbzVb5Zda2IC9iP0k&!qW0rJFijlFwZd}q zc#GC@t59p~WN=(ktI%j~4MKYO$QvgH0Xl|He88Bzu8slYb{Y7tk3d34FqCf|;8JCi zL0IficD0)DF~GCs?y@E0t8YOweiSGgi?Ckvw!s3}lC|WT8Ti=gw>x`cG_uyIgYl$2>!NZ?TqrXbd1c&kx{Kr@a}V+urnck7$i-gm+a$WQwN8Ei& z1K!%6JVz+RU9xC5M%jbA;k_@gGxo6GEnIu!o5fd#ytz~kxVQpQTq2W$WL8eDRhjv z(E(vPRW%VOEOE?W_rA~6 zYe^Tb4i|qer#~FA-Vhw z9Z03WOb;71w*rY^z~@nypLL0@E@Fm>Z-P~1FZ_6_f2@>o71by8RPC-p@KUl)U)yWA z8KDRbA6P|(dB?ha>p1m@%GaNpq*Slqshao}+kaJT>VWg642+8BTr7cVU$%{W zm6o%d6R8DI2|z*xx0QrZ4R>N1nUdz+0IR)Y_)Cq}>~5<(*6P{6u6oU36NjZ1A+vps zRVUGyUA~fy(|ZL2&vDR#2*rH(D6^+DZ>=z;>gP#H5L{R$Pd}Yup|MPS#ls<}X@rI4 zq$eythDj4OR;4kY;DPds4g(!X#f4+FM#SQiJ5`&^=vs8sLw8mU$&VC@+YHVVW?dd) z%TL38e+f)W$$K-#J?l2t(g#dkZM~XaeI-FZ8VgYNT>KSpgv%a~B<;QU`5N^fV^8T1 z!Gz4Asb+FS0^^8=Q*b{apWaTK!!73Fn5is|Iv-R0x;Byw>Z#o za3D*auO=0IQjoEb(C=!?2iby{hm7yKc{}kaTK+Hc_HZ0<4>Y0Zt99$6tS%>b-y`Zh zuhuMZ^PVe)X-~ImsZlYYlK7|pZhJ^7VPL;$($<`xbm+MChx>5NYPN3!av6lI1u0Dg zxX&yi)YRl&&XqvFD}r0*m-6IRF!igBcW$UDHN`C`g2bzKG&K3aS^zd+-6sPFXIr}a z!sB_Sl-J?d}QN{Z+Ez zKn0eFTMx;CG%OetZi~atuGT7-`KSDCv*2;#C8w`wrg!^X^bKv#j_=HO+JJSTzp1uD z{&Zj zynM!UMZ%x-)HIvbEho(3R_|^94L?r9^D?3}l2tx?*a7wDJ;hjMWP!MkGE(Z8V{OGM$0}*y^L~{si!6W4X&)O) zzK3y)&!kXLrx|UTG#JQG(M1kzoVsZ8Ut|u988OV}n4IRZ{y|+Ro8v>G{_`0x@z?Fl z_INw9INpCreB7V&CD{1r!#TJ#49QWOj>F44pVPMTuNRS<(8mm6cap&7|9fr+Qc%;JmP4eF5e(g1)}tPY5_TNg=p+^RjhOxyID5BnnmqC^JWS#q29ty(Z?v;m#o z18v{CyTxR{otn%7R`U2=RI#8}n_9ph*<+LJj0GSFNcz2nD-&L$))fR7OcmbR!>7WP zoa*cKiXd#J*gKC;(m=tb=qr;`mrst0N=Z#jjtAPudlLE_Q^e;~nF-DK$1#8{a(s3s zEiK*bUhhx#6HsbrO74@WjKA>k;9&)K?F{f8O^IK3&1~8?eW%6I)!%v6>^$>APn*%71XKb>tdw}_Q*Jl5r#w)5lM2H|$S9o7>h2sc9%64ky_`Gu z{M;<6$z?|AVt2Sbw(YpCuw@l>r4rp&CoM-wB2Fs8*Ur$=Qg%ik@eMK~>o(rsmTJ-E zhrv02@cZKfDno08r}IisN*{X~Wt}7O-Ew_g=NE1tZ?F#qc_s6enVI%wMe?=0hCf_6 z&*xffROh}(?s%{J@qo%rbbJvvua(%x8vqOu;Fk~$>U+PeIuq-dP6LmZ5UikCv$w6b z@iFk@=HzUVmV^vOx(Iu~l$&NxOM2w*g?Mt08iv@E7k_4`VRMO7)A_WEm&Hx4bjSg1 zzu_cfBwzGN_dUXT>Xi?8WxXV1EDX~v}I z$zZ$cIoZBk+K~ac8lW0A$xZXufe63yxb(O>CxxS9iUz?%j`e#4l6_DSm8(Tcz{w)6 zPGrSO5=)%`0E0f4+{d~Yw1^L@uaSq&?|hp4hxa~~eENfj>%7ycuoXa1ZQrF(O{g7d z^UO3bmCQqwQYJDsjKV;^+A8jf@(TTx@XI-JK(50Hs;3@H0K|qWpYw+rjQY>Mz0~&i z$3hi9!-KNhzU40kqLTbITOi=hT@J=Bh_)1MHU-2jceYCPT}RWr4Gf&u@7TE@OEVk| z`GsAJiCI~0&zMkU#yBP|(>vF?_bh@%N+Z0|{n3EgceJ1|VDQ{9B77rn2F3ShWw_LC ze;Z^)e5r2@28W1wYJ+#H=>`gPVrg0wkqGirM9%p$RDgP9xNcQ&LjWM|?&>&z)3*X|KgM5bi|hP{6yu8o++cdw#>_*rB4vKyT-{L zl@$tMLm)SK?+c=lvideH|0;^q@9Aytcv*Ij=Lb&1eyOWGl*C4#-gj_5SFm{!q^<}m z#Q$vCWvWH#q+J7deh|=q5@TGx@V)`;k)_==2Zud+g1jBzMU2^#itFN$AwVgzF@9te z`TX97i71WFbM%j$8LgX$@t=VI$QAT^+W*KE>4MBW)c+5TDuYKVfu>z*GR7r1hDbqO0}$j992Ol;|?IRFWD(qPxqEu*dPFTm}ajkbndRqe{-^ zP%UVqCf5bFhZLoRXgVfzON}$6slGg^Cdr(`R#gEN- zlMsw63PaP$kV{sHE!8}i)(F?Pq?A_5x@#wR7CwN=bGF{sdXzPw-`Ogm#bR{T?bS*e zYpwgP!iK4|{D<@6LNt&wXA_>6gTCnhxB!HYdk^rYCtM&(C#`X=ahPTr&4}fu6f;Ia zKTRTzWw)1Rqp{-bJzdV+SUJUiZmQ{qYxb7EbNb0+d#^1BGBJ_jG}E{5>YUa*((nfYrL69`Wp<_XpGD zTd`e)H&o?8ZdwhM@@Y#miY?caCoTKOID#R)b-j(pvw+(Y>4doz>!0HJKtXFZb&}8- z5Zh&hlC*FpNwg>SAEx^gyxpeF1GG{m!VWyx6rKs!eyjC2%kE%!itkSSB#_czYEE( zWe13E^>3VVNb`sykMlM^v;d7dGh}KN5&Jd zKBBq8Zv6&r?n2HduQ|nngoy;ax_Trf#BM#;?B^k&y$E7+N)j~Ye?;WWH}C3g=m4c+ zzH&pxwy~w(jvgmBsl$LehguG5wyDPGz>nb{H1=t_b?WT zjPUngF|v?a+^nkwZ%ZqqwUY3<65qt&jmuna^0Oydm>LRI0qyd&hwH0;e^0KM7)+j8 z%VbU?*)s%Z*2=i&i3z|xsZ63Eqsuc*E=PBL zbH@FrCtc&JwBZ-0rw>}jw7jc_iX+wc28e{V_esX$xZT3x=sHJMRyfY4mSn7dZ1TFK zqD-lX>;{K#^5nBqXf{2%IcrPGlK;rQ@UmoxWYi&9jM>OfDU;3b+6H2&PHRk6XwTLL zb!vN=EGZ;9N`ph*lqudM2n&QS2oWez%9fTHn8_CS*WqLA*|90Uda6@*xxhDWWp#kp zCn9X*O?8oOPQ{hoNu!A(KT@U_+D#W#B+_(x#RuqX5UPW7JLXZU(w`cjehQFbQP{6w zSKkcA>dS?p8C_sB{*DuEhHy?6kikDL(_7VsR4G#{!z^yZkaDxQU_B>WtYxacq0oW-tl-0mIysWQY?K}~!>?j8i9w*p+k#%6 zmm37G41erKq)e!biD97(54-&}**oLM($foy96AZGb0nN^9uI72*k^LwbLu`V_`aj( zL8MmN=2bo6dJ6{2S!bBE0Z-hGdB8uHP4gE-ogci6EZtD zVQLN4K8!4T1h6?&KYb#=;nRGztnu~} zn$wcHIe~*>v71%#e1m!MwAy}=!@0sf;Z(!kvKzyvpX9yEc+b>Uh&WO;BaL-MvDfFU^lggcPPBcqs20UZDYmqB4X1^ooHhSkHzc)s+WqbHepV>@I1O zt`dbt4I$K(^3+V4Ncb4hwr$}<={MTJ*h`U>yhIrv)QEg|<*`pSXb^+<6|QTW7Ca|2 zPo1L$I5Mp_s-9PymVHk9c`?8@if)zma7F>;dLO~Lmw(>TKNe*w{H(M}Zz}$=58DfZ zfGM|5|Fr?Fn!>V2vFj$=;IM_80xNT<5@k!SMMrlst4{qPJNR~EABb04zApX72mx#f zpEJZ(owakH7vA`ru`wzVRA_5;%o2@Wf17iBQ#S#Yiq{f-A)@7~$#+b0W2VM3L?e$? z@|(j_IevwdGWeS@6J+;ja&YJQULPaQ&o68=0}?MJv`>4;fJe-BVW{KmW+DKIa;7x7 z2niH|ZQT|-aR_*>I33nUn-^wctlAbenH@>rBH}E^#+#VNTDUb}N>{6>s{V{gu+%pX z2mFkwvrFWk3_TDnCcDEy0nxC_Cj2LYS``%)om+Ki5Nw9&RsAx0Ew1yQj!hwnZJL=E zQByQNmg|hvbo{SN1Ip|wA+?4IKei09)=yWT8`)dTksj}@iTpU-nS9MFBS1qQ&OQ~- z`&t7-Gh_`%-vM#UrtT{|s=1KD^XK|}!ZAoDnA=qNHentKlcuuo>ZKY#i%Znqidl_P z+eoTy3`1LlQTnl&q~DZoo+u?DS&FDFV%$gb+XkVDhmO1nCdU{F9o)s3Wyc+EadhV4 zQeJECsn8>Al@~PX*sz{^5&Vn5Fo*nY;M*94f{j$FQsTndUd7YQMUz$4XG&cXodqr`Y#uzGHbOOw zs!M_H?{cYLmry)F%|+!E6WuVxevdTP@0aEpE%IL+beB_3(aR_@d>3BL$`KAZIq<4o zvA&N^l(`9_HJa|84%>$7cD?=F@IuZf@o(2~L7`kN5`0q9KHg8;{VxC)5Im45MX8yZ zgb4;nT@8rTGx_cNF&0cPh)ek(UhF5 zq(nVjZ0N=>f*|0$6Mq;ssGLJOdgY)Ll^v6FI=c|;Y9@qS2DEnRA^*JDw;5;k)KY8?Gyy{+uU z4Uy$j6asi(*O!g)s_)heso1hjh7b!9Ewkq#xEF!k`%T2bf3DU}pWbFqF)N0J%TLq~ z-sqDF@m!}dsHoJ$i<1i7|Jlr8AwSNi-PtGyPSAZbb57k8tH>A}(_)`gs-yV`kxYRY zDZO$vq3z4NOBf;MR?HpZQiep`T&jSSZynspZ&Y(WO?x zV(#3Pd2U{%Ade-a)Xra;h6&US7KOs3_a==YJypI3yT(MRTETbME%fs63vyTou~ktzLLbA-J{A)abwqrT(4% zpO`Aq;U~``l6>kd4#}6OxeS|1BMZRA9g_wuIRf@yJt;{lTdzAn8=DX*PtB(Fa4mS~ z?zkTpH}?Qh5tc;?Ni`J>-OW$5;IyqI?~c51$D=uTE23Ms+Pkg!OIzSh?-(5|)2I#G zbOcE3+Y61oYMwOooO0oQ=9j`kiU8S`IAhl_Q5aFxvFJ~6yW#n#^?dcyc76};ce|Oa zZbRmg$ZjyqPIeiE>fgfAHN2o*WC`Qurp5{a&Cc|6D4JXF&Q|aCv-0e>G&)!ox8!!r zX>RuR{L1TDv2g-Qe1%fR#*_>l6-mQDHO;z#QE_Sh;~uA$I)uF=K{1BcbF;(QVpmM+ zo*(+VxsoA4#htvzpeU&>u7(!Fw0AL;6w5>EJ_Lv?Okd3%rBSxj;W%8K2e02HV#dx8 zPI%&dpKv7ceb9DMmaCz`*}L~G5}72TIkTdTJMGIH6Aaw8>`8fp{Yg-$QGg#P|5Uf`-K9aWhn(i$^7{QH3Lhiuu_^K<^ z2j=)#rN>u)ue9P#873a-REuD4VM3PR4(xx}1j12xTCa76cb>+!__(sWUlU_s^l^uW z;??eK<=6Z3%61+oEMX@G6lJ4sWo^-LOZ~<^gl!G3(2U&rHPr4N9AT_~P)O_=o-#X3 z%fz}|DvCv+>0_8A=n=3?lXqlI-|4N{^j8hBOwDV7YeXVd@R5_aUHv2`?2_$O%87Sh zBt94OpwL)%yD*_8^<2g_&KPPER%Sn97CpB-i_cr)}j*k{9i4K{gzG;Bt ze&H>SIPkjSM}@+f6~0$wO2)AQI>}^Ju@lUb#F^vLaJ+nlAy=iCZ+mVqXlc)t|LZQ=y?ElP^UaE2_LER32@6`MoCp(Y1S- zZya~I!cd~#S)!G;{Xu4ab+>&I*pr_ihhX_xgN!OBrmL$fV3g+a^I%2R@0yg4f?OO@(v)lt^$&bUSS+TwT(@|5i9YAXKYXy)a`Y$jCF$1jga0DtM&*B%*gFEG9 z-ejbbfw^T6sRe(jWGZgx_;+lOpRQ^xg*eJtzHqH>aW8U&?D_Hc3YNg<3!)UibI1*t z$VB8f2biGN{w3#~$x4}y197F+m-!#dEj0&32pztZFp9VdG%IXWs@uOJuBH2$;J?jQ zOjY}7L@=_LhKc#&VkzGBASAX|w7*UNWb)PgDQ8**%L$Fy@zMIJr{TV_Ndx5vMrIb` z4Gz7C>z#BjWw(|PPX+EZs0L+P%B;Qc1HON_PVq$-2OT#GQb!}0)U{_dq^OA{p=m!A zKdih^B3*s$_YD2UHa?&rUtsGTHBp`8bN2Fr&2|s|mIVG&!>n%O>~7@AfvkQOAe{OY^Oo7tkU+n(LMtutr0$vSET5(NboCseD`Kv^nYhxMNs=GDhr zdBGXJRs`G*uPx^MFG)iChhiVd|7;(sT@gI_#%eswiicDqYb2es?1c?jHR{6t~>ky4I*J ziyhHU;&_Hc-%e<%U{{SReogSJjW#t@9t2KJCpD2>w#-yCZ=ssBIK%&4#h;EZDaYjn z)}iS76ijJF^%pNV^9>5pbKNuZWjP&kKtNHxtx8H(~<@y0p3p6SZm)GSVgm#coN+p?dV}^9|HG}yX z6x7Mow%TlXRA|gF5eIt*pTu#a1Tky^R36Fl*prKQ)wwc0`lj5x@a{>c=&Qv#gH_hT1gEhZ9?+tBmv>6`sPF6WjbR& z>uh|SSk+G6Qq_vTtQU8t*PaHHoalY_gr^iOQvOYx$(s5nv$!{u_XL(pG@?2stj!?} z$&)K~1{!;KjpwVK4KB-M;(=X&OgPqb;2D+uT0BoEG_-gBQ6QTcsW!thws2_o~3U2{lmaWq*3FZ z#LZ9^Gc$|zakK#f5Nee(2#lxZm=-LBi8;x5VXgG<&1^j%e;It+J++u*mRa=a)R_9? zucs^p2|)GFb7@809JDh*?ye6?{lkBPoVYaEg_Hzn*|c%HP!D%Cpf`V4dF8PZ??0`M zU(vn95y0+P!1PvgegaV2vFJ2BjywGxo(GuaQ94;_cPwbRouimf#a^;95Vc+;Ii~P> zDF`jeW(p4|U*R!+5((fBWe)B_e1+W8$Tg>Sx`RL8if6UJ!x@^y=~F|^Viyc{UIH!; zM$Y?})%&&={r%!PyiuD{6bO2|$K?Pz)E0g?-x9H=PUp^59dZ4UyK}TE;oyA%K+_hh zw^p}2lOuYwe(V@rrc9X1&rBJwp?XQgS!BuclAi$%?iP=uM6Xf}A$_Aq=4h$V+C!T( zDoHu8HU?uXT}Gt`|58p$4znrRDu)T zputbmnZs)i2xpBUB75jO9Eqkl%(v2q246`u=rZ?5l{tHGORLszE}TA`E5EEMiJeSC z@$7l07_HLXEZyCx?{&CyZ7Qhn8ARhHTrB%>8xxb$O9dr_u2gTtDdK<*NlhbQB8;Y- ztEjZct9jPbaCl8Btlh{z-ikKx zLs9KAH;V>7yFBBVP%58#EN}6S01HacdU$tr>OtQhLt$C%R2x|zx`(&-P-h+@=|E-J z(n~J)K!=xrYmf7W-tHL)Y}p!88k9@^I!E`iwXSlbH?x3kyT)w7dl5R-=(W#IV7bzS zON5t_n0TQgF|kzD)!^As_opjs zgMwIDekUmOY-%{)?s`JpkqEtx&W38ig4XDM^7X5vqNjFAZd`b7Txncw8n7qaOfa!! z=2I?O{YEn*ewur?Zq0S-bFEjtyO`khPI>$%qdxN3LLHD_SWOHTOlDyTq*?F0y3w`TA zgX9yi_Aa@eD^CXcYY*3Zg`?szg>|gG_eJ=A0jqh`YO&s)n+U+t_tgFa?4iF6KImxtMGQm&o+S-!=GP^E(|EsG zA*b^TZaM+(ty6FKi12ka+IEh~=9yhbtmrIOO7;mw8$pDZHJ4`7!?}->^!YXkfWO7^ z#%^4|02@0xK_ltfzoGgM!6&U1yA5Z8DIrjAwtPU@bUau1TVwEA6H%+n)Kg&**j}F- zN@+#rC}(xGe!%obQ1OCcX+2BcWQI~H$jpv@dW_RocwDf%TH3h28+^YaTYKptbl0Ah z;9_}y7IN7h%lB++frBxE{$`K63iBd8S7jM%+bk<*SVtg5{r*UjSu)QmtJeDHIuOQW zQyLYOG0v$Orhx&Et>ac|G`#7ngDH+ionI91ba9+XNJ?g2oZM_NqZ1GIl!YL15YmZ{ zhb^HZ;3mR=cl1StSt5jFX^*vd9boG!l#$qI;%JR6QzlyS&x+*=(s}y3iqz-1*DGt`DTBk~IzKu5{`PGQ*P>UPU z9x2pn{NxEe&y1~bJTFE&@^XpJksbIFxvQZVw5^w8eYuI4lpiW>8DBrN%WVHD4t}{@ z<5Zi`!Ud!eU^Mh43s|~%?WsaHB+xBjqnnQ1?}@sz6_`mQCLdnqpGy7gde7}e!}B== z4U)D_=jz`udG(13ZJGN^M3Xq+TEPe&KIriJw*{d+WmphX2&(^k-QXLX!G}E z4KGaJo{E?5Yxx2tEUn4&qp1t!my52G5IP3RI-k0q55lMyiR92Ar29TuZu zWaqFysRVTn7I@S@gK)xzKPJbc%tZ*DaK`&P+tElql?BR4!0hqgVck&CGkqv7ir?8j zT3t6j!dm^ZL3ZQ*GhDvai$v>UU~28o_Um4Kt7Wc7Z%q};8H%InRAIs$c?;d*`@^2` z7OEoRMov;{cp05*BlWm%v4mis-Z%20!mj!h+2OU>(ZF`uVX8;p$b=&PTQHT$COH1x zVByV_ays8Vi=(-@wY1a)P`IBBM{sE)E0yN^2K~&$GFCb=M{upnvBU^YGFIT>ZwELC z0-Gx$c}(l2n4 zuw1fzxjemz5@0XZM_4o2-2$;9c+F=4y9nQRZ{c(+2G6c&Dp`K7da5l7v9ND7F!}K2Dp9V!}^>bL+39{!>}>6`18K9UC;}u zN8*76a0+U&9feu%v`wCBA&y2>q!CqSDP=GWE3#c4og7QA(@mi}v@d8=^BTJ4UY z`RK2Yze{(#X4!C$ZvE;Nj0?d{@MK=H@l8I7uk+Sc)Mr#_u@e3jS2?-0q_}fC$kh7! zjaRLuW@zv_W3Q-6O^BJt8=4qDVj7x_o;k!qG()4Tkrb{L;?`TMO>*+CS10{OF}i|^ z95sQv8En)<7%?uFuFhP(a0<(%I?a-Yf3l92FK8a`o1DW`Y1hxD*e_IX;wrsHP|Ud5 zp6p5P3=_oC-#;Y*4o_a&&CMd(9O91~q*y^t^mn?7P&=3@c@(+^HND?4DRdR-B0$bWw;dGLwu{5#rw>*-fhU9Jv=);e^Dz3~06 zmyxK}1bmiKG>0ZE^GE4skG`J@mR~4cLv_b6d&C1p=N>kgw$DxO#M^4>MXXYt)z5Z{ zoHnW)VWNPXsca}L`Fm_K(0t?3@>&4 z8|zg=!Yu3T&(d^Yxwz~^$!iDvadCQJiQ0YHIIkK z9MTiL@@swh_Lawlle<4c^8@+f;wJqoB);Oo**y{xm;j~gc+)C!bwsP(GTk$iCiz^L z{4IiZt80t#%=Bh>(A1^xn%Y}kJI<(_;kNv4v(2qw$}3A1H4y<<)fLa@{xwIFQ{Ddj zeh@GKy_nd~%NBwor1HGw)914v4n*`hBdz6haXDf zSZcZFKnc*&9>!xaa<#W-dxcdcuEyk%XuEe}+hDrHyuLyJJuf>gu(xHUN_*6&LA{`denXDrMO|5V&%WlR=5cttq`j)r(jf)A? z3u%UauQq$&=kaLCQ!K>o@VK|JDN8QEjifTwf(Ckmcpl4efyMjsaC+0xcU;MO{v4(I zXnE`Tm6E5U?E} z?z3Tk@cip;d1Q^-f_*c>nQ)Sf3CA_(nbaZPdty~31TJ^$pC_Xod@Qtz43_bIWywK* zQTfgU0uIdk1)#|c9QYifuj|~v*I{C$#$*mI1g`t`wAI|No_r>pzs2P) zi2399)5yKYY#Jfi{QLt0aXucMx(gVoMJvjKkvevQ+Ol3mT~^saE1%Q8k%5$(>vvdG zl(Ou_tof-|HD$4`M0q#O_=4@wSIRgL&%41Sjz1HE zri$Y|2=f~y7xp{VPL;N(_EnBm0BtuQ#SjuMs=PL$$YQP^E=VaNgXft|%+X9t&aTk% z_NnQ-mC&sU}EFSURt@cW=9BbLQEZDhU z`!#^0*)e?U>7JH~o2I0LSqWa-9ika3i9C*B7nw0pp>VpNjW_Sp^?vbril#dh?PHVI zr8ig5`r!1u69ht(z4MQibPNf+EIN8WEz&4n)HpQ;OE0IJBhsHl!03^xM& z1L5~$2Xn7SlIv9&maYdM?-bs)o4x?4SanC#PXJyJowDdE)mI48gwR#XP_!SOvDdrn zc*vJBuYLf(g-P+q8HSRIj`3VXpEL4Mj1cO`L7iHw)-yrFw4GMHQM9%r0IGjtkr^5^ z`6Q@kBimha)7n9?j-C61JoNr)BHGEVUuEG3;kUuTnA3DmR#|p-cdZX*3E|=0d`HK# z3kyP5W)~LJH8h%Co)aYrsvQwhHn}CsP81sK{e1r9+xr*6))$pWoW!hoJ`8NlYn6r8 zh5wjOtCav=1yz!3^NC>%UG7iYnQ_8?VxowTe-K6h13BC05R;3&P++Yy=3nXSTN_Le z+TPxlN~)ozE4C@u1Bd)8hxV&fV%6ok_1ssKq|A=(J?jujWJy}&&_N_5sdKQsvPZVx zlAr=fo%d|ojTIaJ!RPh)uV$m0r(O$|A+t&p7dA2J-It-2@ek_ zePUu_a&lv{jszqIA^Ms*{jg zSeh9GfM$Z3V+#&c(33MUk-a)f00jLFMiQ}mpk&IJIU!W2gwYj%jDDs5gO?%4`}i!S z3pFAkohwHA~`o(o>4+iYzgL=LyWQ=I(|fT7tP96gZMnh%Fj;j~ZJ2a{FJo;P zz?#t0(9!jd048B^uI1mCPFx3>0#hr0C!G}+kpD-AfD~9uy5+UAy1TNgp7fH_zYFNj z|L>qoUSkWusQ2MEmVTV}b1iw1)*4&kSsIvqBbqN?{RA=~4TnUKk3&L@m%Bqol_wGX z{Xc-h-#l(4E(SsiZ-Q=&T`M-Ry}A^~kebZvSVjoQjV7wwcTAB(5jjQiAjlKb#etY~ zW-NPKG##ISkO!sPsF{{$Hk4nCYDW%;}iB>5XMF5#B#)w7BA7{87lw}bKPut$3K_D$BB}eCHkLP&Ic_F?qz^4okqR)qUY)E za;X4=Yh<_^MlK~Ngq497op@NmjKnRUBn4d@U? zIO!i~g{~C0G(P{mGtf48msYNT$#*;9^{DOfC_R?x$3;G=Wrh%-qU`;XX?bX*Bmhl% z=1^zqKI+*wG~8q8afCia)B^0`c4NgWY|_dr{=)3f$;K~hJAJ;rkJ{N^)>0QZv^^9D z6hMkT+9v=R5~!liRJ#LLU8NR|J2xQbuM-ag)vcckR)<}On$8fv&)b$nTYFYAmLmsM zpQ&Uy1%9Qg+Bvd+B=(iH@%;0hKWV>~<*yh_5?|GKR`Vf6%q$I*G18qD*b!*v`Y`Aa3ar)rzBzTe7~DI@t-W^sy#V3ZL>j?pt+ zA00Bpsst1jcq^bo@n@<2SeND_c?U<5mD@4Lm~U76vd7M>x&LoGu&gDILvt$UPNz}m z6nd~VN$x?qbbAQV?=D4K4Z?t=v+`0@uI6(-R;qI3U=>Uu{KKGvfhX8FnAkYWKrBm( zRSI)3U59_y`((9}^bKejAhwNVhKpl{AVOQhOd9X)ot_?$i&}31u-wRNtgkI~k5+xr zn3>t-n0-5Lq7iel>aGE=3?cnW&gy8f$;`w=QC)qA)!^6A>a+rf>IBlaQE3<{-TQG7_Ojw-_F>`tY7qO1B{|x^)EA+MABQFJK6MX$!#GvCj9+Z51 ze7>@0SaiDh$lv_wtINKe6&E_I&|(SPUwhxYd8(5qgx#J#9e{=yEtO(rd=yv;1^+pWp`69Sk;}FtIiG>QIl4MImv=$^Rfz zV9BK>YA?_AwYIg()6euxP0d1ZH2Uls>WYAy(Cxb4*DsmIX#1s^_ksbQh<1TNORD1Z zSO~wJiK)n9n}(F-ISss+ct;#Zrum$Dv$+8SJS)W{nzV2XnskgI$4j-TqIQ>KlCXvW z!^)|#e-P4R99<u5aL{L9q1Xq9~GC`qR)fWGN@LV{m%ddvW!oze~^bgBOjt zc~eS4YL2?f$Bieogw+^73KU~Ta%po5n-5p2yBB~!Mn!+%A|s+1e>7eeyEQgWyo2jy zJ^2smf9sAQMwJI=2x$2`K9vbukG|@eouE# zLwm(d&`%(9ML4kF!9fc?luFM+e_sNJ&*gISX=zjPn!B%TBSS+Kl9joc(eTdMN{h?M z@dGq*IQ{bU#C-YvqQI~Gl9Iy!-@3pV29VrPhMt*apsNGIZ<7>!6CUg#Wu7vqvEGfl zzK+CqT`z-q9C#mJwC#-*%0&Gp#!#sIfw-Kc!ayj{6qTana|gLZkp_!Rik7AY6kkeG z%C4f4pR7~3$(4}cLOEdo840P;{t@xW)fH9)%Lu+ReV=~Z)~q4!7(}eP-hXv^M`(#6Lz+*3ekn)2tDKK@?=fK0^zR7ByEY?stdFJzWyAq zkN{M8P*Ns1G}QCz(m@kxqREYcNMI4Pp*=jlIcHd$8tRyvN?B}if^pmN%--{GN#lrlBn+ zSd$R4H+){VyUQv2gGX>mUnah=y!JEgH}PUJ=yfM275+c8y>(QSZ5KXjy?~&AB3;rQ z(v5<2gLFyDkkXO{AuS*sBi&uX5CYQO%}D3aHNXt#_ItnY_dEZeb!PD_ou$n4%pLpQ zdtcYSwro@1aDOKZG)zEY;yO%chBpKSWn?Tx+9lT6>*ZSFP12UYazc>$pknkfI=Jk( z-^^9dWYEZ0dT}8|==lr9&_QLdRI(G=$`Z!Ayts*o#f3?(iN(ob)nCN19Q3bqzJ6yD z$m^1QR$0OS9?z{E29%{V4xZGcZwqk`0721~7!!q8v#{!Bs-`N|G|4zN)#TgLM1U|T*D|athUWxKeAhZj(Io0*)ldA7 zJ9+2h+{hCCP}0NkYk%IP=Q+E9_fq(FM~m^Km|1zu&$w`Ka0vbNnMg^

qf_oU6)^ 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 literal 0 HcmV?d00001 diff --git a/docs/images/app-connections/chef/chef-folder.png b/docs/images/app-connections/chef/chef-folder.png new file mode 100644 index 0000000000000000000000000000000000000000..29f698080853f210099f86deee2816ec68e52256 GIT binary patch literal 35939 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 literal 0 HcmV?d00001 diff --git a/docs/images/app-connections/chef/download-starter-kit.png b/docs/images/app-connections/chef/download-starter-kit.png new file mode 100644 index 0000000000000000000000000000000000000000..27f9582ad51faf395988ad5624cf2f570ff38209 GIT binary patch literal 202307 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 literal 0 HcmV?d00001 diff --git a/docs/images/app-connections/chef/extract-starter-kit.png b/docs/images/app-connections/chef/extract-starter-kit.png new file mode 100644 index 0000000000000000000000000000000000000000..8743dae9b469d3518ca970974462dda0a56bc1dc GIT binary patch literal 24845 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�H39l)j^tb(1PmB&bRo==tT_OPSe*7MB`=aHiT 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 XIo8m)2%ZuSehl>Q|68W(5b^&2Wl4{c literal 0 HcmV?d00001 diff --git a/docs/images/app-connections/chef/private-key-file.png b/docs/images/app-connections/chef/private-key-file.png new file mode 100644 index 0000000000000000000000000000000000000000..052103d0e05c9d8b2f229159a1af34f2fff3c4a2 GIT binary patch literal 24317 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 JBJ=LUe*qX|ED8Vs literal 0 HcmV?d00001 diff --git a/docs/images/app-connections/chef/starter-kit.png b/docs/images/app-connections/chef/starter-kit.png new file mode 100644 index 0000000000000000000000000000000000000000..b9b9621e4945f00a36a5cf4d0ccd2def42703bc7 GIT binary patch literal 122316 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 r&g&SZchDOw04i8%FbwoV;BAxll{d} literal 0 HcmV?d00001 diff --git a/docs/images/secret-syncs/chef/select-option.png b/docs/images/secret-syncs/chef/select-option.png new file mode 100644 index 0000000000000000000000000000000000000000..5fba1e4153648396f1b653d8a8f3701d9cbb347a GIT binary patch literal 159405 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

|?%!t<&F<}e&B!oX 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

fxlOFSc6C?oW<&NX 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

YI( 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

gqnp-&$WM>LRgMwr#9^aN|85j>Ue@IHb*fHBYUG z6q0PoT!0cjOKSxAwV0gtn)e&GCdwz!V-B*(&7w_fwZ5NKLu9hDvY<;4yqusKh{)Q4Hw(WCr0<_@hwGq+!h31qJ5icENgo4Ov8N8 zrBErSX#zS4Rp;h|d%uQVtkWlw#0>);rzH*>>;oSr96ETvPKjM`o%zVp$ zf}H(9_GRDsI@Qc^{>2%gHXW_7$jC|4%+}5SV6lZsXufw=|HJP%qThxXX=GZ-e?^G| z5vAUi(Ete?Vj*PZL&C~wl8uIjBIx~x0G`EjT`iI1nZygC)q_ORmt)jlgf`?z=LoXd`Bdq5QdYT%+a~=>P zY2sD)2R1xR1ppYzL2jxR>2Z**$6-S{T>N?^rpO*cnAILz+p^+u3kzG8>x+k(%B4|$ z6T0WUEnTIFjt`^cUowRbn)7fT{g$LgI)|&KT-tbuD&NuuZ7DB5HLRIIfw^UdA%a*6 zC&q$3L`dRUtOE1nyda_&G-`Al4?-K`?Zm^5P+N(D!5+-%SEzl8j532m_0hLp02crO zFML9QTVO=Y$5-#7=WGN3_Ye?E$5XW>h9t(Kjp^xi9Q^@2VHFgl)ru1GEpym#KD?;t zxd#zQTi!bz#JHI$aCWiF+qrs{FBLa?nyh<(Vjzm)6)A{->p-W6^J4)I#M@QBP} zW_%Z$*bgm#V+)+^r_z)NILr&?opUTxiC6ibkaFU|la}yCCGrQ7Q~84*;00e3eyMvp zFQ*D}%)b^F$A}*uo5YB3?wttOXt#MCtVTx@?5+QD6TJ2gQ?6{lmH)}uiDFkpJ~_H?>=RAd+OtnG1LB~ zy%de76H%%O2|D&pyb4O)i|9vDV@ih~30D>72m(=7gXM=Mf_QZOs#E`mN^ITsW8S<*%a=eba31NQ2QxP+6E3l{9 z47KRhaf@9LI&;}bw>tm8ls57xgVd8I~d2zcowmb~$T3`0|l_!W!u9KZj6wE#$Abi?JgedWs- z3yqWx%QmfVdYqINW*-*5TF+LwZn_phBc^l+J`+{>p5?LXw>qEV#Hlf)C|q71DPMvA zHv>sL_@ezp%Ci?-tn9U!n0D&N?XnKl@skU!JzBGU1BIX~7SQ;E$ z$D1^-Lk}w6|LgF2vF8~?-M`HGJns&JmVQlcU7b6vVp+jXlzp_;h_HXhKS;$uxw(P! zyFWsZ^@*cXXv%nc`R9Ot01O}?xEb9WWE6lk3_UOZNTdViP5@6L%hUVs+PAVk$yzid zSkz%ag*FhEt*6&uGl+YeNNQa`w^AJo0*`P|)L2+CjjZ89W6q|@Jp5juOCFag(G5Np ze1ZE+kemw_UJWzS&c$8~tI4fiJn)cFk*@TU3i{=xWvVEXM zXW%re&>6W28Re|Cu;3ih$rVgdpo&#&8tAUFX>qSBwgL{sRrg+YmY_>n0BN!#W=LF` z-orsgfd%1i3qLcL(14loR#;L|Q?G4om{D}_NXLEc=pXM-E!WzQE49=CZORk25HNPP zt^O? zjX;S0ykGyF8`Fb&ha-z4qWZV};%Pl9zmOiFC?`4Q3+%ocK}WZaw9r&y_ZC(Dz`KRJ zi(&zRbi7z=s|zx7!n6~_T~47HDvX%hx<{op-{u&m@j%)XwN56Ug#c#H9GWHdD`yt$ zR(!3ZiW)z$DIPxL#lZ{y09yYW^hQX$#S9=ru2Y}zyGeE&ytVb78#L?~!=kun0=y5` zi|RuGsUa7r+M=Cqk#}wdNXiD_CTHgP{{4F!n^G_kOfK)J?aDW(-?;^(1OEiKf?f_V z0pN9BoQ3su5-?O`?()SEuzN%28G#>e;4<(TrguMk&R-lD@~8!9di08HR+4o|AN3h< z1^(Uh%BU%?RMBURaCuY3foRO9)R25g@TyYX7`IaK=zeBRkUCWxZex9t{8C_wyigp2 zG<@<*ZwuQqlObEJ;dWUGRDbSXB;VLRsAAL9hg`&g|B`QOINnQqM5CTv5{fLMr$j!U zF-S=cW|pBkw}F9Mf!a>_2MGvri=sMC3JZm7d4t7++KRH-lkxXuVwZ#=UtDC9ii(S2 zKdTf0KfHAW7@N`b7VY947@AK}L*1lOAgzqiUpNNJ{uYA8-A4Df-w6S1R8GNRACZ@% z!mb>*P8K_mDwALa73fIPEBmI?bsy5+KgR<*qf=T}gY*=Ys(Aj#^*lX&`ZOqT8^?QDytYy>9C?K>wOZaENe7-^ca@IhTP;!DteGCW)h*S1Ue8|_ zpnQERM$>+kawRKdZoXduiJ>tZBe5MwNI{5%!WV(YsY+=Gjdlk#&4)aDmls6+e6xs( z=BiIopywio4J*LWA90Q+lKGH^peIqwz!C@s+GZ$#*TE6!ds}JT()|7o0_o?Q@9kX< zCO5zhQeR4xQ6a@{)q_Q)B}6LstvVFMMjCRMlg|cA?QG97MbyuyHa0dwfZ^uleu1QJ zshL3Q&OaJ%rC`inDvp9Jh&!ot#cCbzOi7-asQVvXhJPZ`aTAilebk6U)jdEgWf3UN zgE6n8?h5pgFci_qZ4!A?mG$~eMThOd&%COf;^Lg;gjB5za?T_~gShMpm#DVWQ*OBR zYwNNa?F^!r*+_EhO1Cjk^;D&dUj*u~3ZSEjRN+awf%a^-%v_6)zPR$A=nR-pc1PxL zek01yw~Vi(=pND2LNB zL@t28xh~xN9&!&j!gvEDU~wOyDY-rp_zTwcYpjUTuQf)T8aTrLf@5>qbLq>0^HTFsa{)kgfT0?o>74aT zJ=O0D@JB^QrOaJR?-%WOfX+x?-xxl9znK5uHTgiF$y2ctlQ#Z!uX&A>A?WQ*7k$aO z1rs8jPZ=c=RGAj=#PS*^I)X3FRTQ^r|BY#=h%epTjWDKMe#5~nIc8&(MG z)gMST*aI+rR4)sWF^LRs6_h=(bSYvKhb=sZbEEa!01vD&pSq<5IY?z+6=rN?KJYq( zVYKo6J&}9fLwbtYnyhi7u@O~mE*YR9&L>tq74%V^E);&@qBrLe&5}6pwW#D zd1mRg@iJV(x6r8A&M~uxBT;^c4`u{upLH?&#c$`D9Ngfpo_7d)R!7m(u+@8S}U!hYM4(_)|VbK4C2LNXH$K3bU$rQt1FyKemF$m0?OoUr%2+Co!VU{nfOt)6gXGf;n!N$pHHWrNIup$6+NH`oUovT1kb4mHQ z5&qTbpkZ5;1(Jh=I{4|m5r!309?B?LpuRS0wBNU#sHIYtVI;PGG#pGF6Pb22yT4yr zN{*?<*aSWgAbLyc3KZhR)bB=su*h?7adl_bAW?)OMIf%*0n(oNTv4nkXJ@FHjzsw0Hd=T`*s5YV2#Df{{8(W^mq+JrbU*hhZ`G%J!{4~o& zbf9b(*~#T)u4Q%ub{5duobInLPG z4DZUBcYp-YhYP51K;ty9+m}Rl=FE!%C#@9mJI6NMR7h`SW&xl=Fe0aLM;gp$8}aBJ z6#o@Ig!wMkoZK~Q#naSM-s)PV%|R>b7HI|rIIW8a4MBlp=zRtvJ3?|o@+iKze5>|7 z$miG0yco=`EUP%KC=EevrP}IqdTz~<4@rupzC(c`0wl<-mb5jO!aSGXs!GR{FQ4MR@yk(u%jknnAHBw z^kno|_O*g7ZEduSm)36{Mo1^&Q~%eeKinu;UvPtmuGOu|$ASq=PXTjx2Yo=Z2Qcv8 znY%d>Pb|gRddxV7x;owooSl^^lo1gUdQY&`Y`(M}3mm&@Q##2q-cuWR%m(W>x!nLd zW48u9^Yi_arK@k-`8qAfzar8E?0G`$>t{o>45xJWzOF?Wo>MbP;XwdGHAAj65XA`~ zqYVs-oFMc`H-MQ&*(`wR&+_{ylP2iW?pMyH^{Ui4K&4$AU3H&6V@B)(UDQQoj4v3c z2{uo!0tGd#*Rs*t=Cv$D;&eFX*r)YcsK3d%mH=GH_;br&zU*9a8K2wX3r)RRM_!V$ z@weh8$UT~1%rK!o+?-n5^8|1k2|kYdM&s~l0tZ4_{NT434A?G5{mlR^tcz)qxCxhk zLM5>Re9sOkbq`XlE1sc0sp_Nm!%^#A@`VBgQ8Cx0OLaXCPIMY^Kgc#h!hbKmDF7WE z`a{Oi#AoQ_el(0(!jB`bI_4 zwJ8gm=~yP*j&#*Db1D!i=vzUC%Uo*Fg=T-pnnkKyu^g_(QPUB5! zJYVXR&*2x$0waTQ8NGdQ>7#C9e4LY&On*u#9|<~yqM0mccyAURGo$R@Is&WOfCwuv z;NWr7#Se4KuL+N(EFSG;4BkEGxNWeP4As9k_{CC(J&}r%asxOCP*OgduKJ;>Ev1rg z@QFy38*h5_M0DkB%7<%BBucuwovIZyqC6KA`LO~4)4|V$R z{Y(2E7BbDdXVU9Xgnz7GdIf7sBpLNxQ)57brAumfSBvdI{-Js0+a}f{IH3j8(#(9r ztaq92rC7T>J`p`OHmmoJ;jQvBx3z{XXSmeV5&6jMHmc!OD~;#uS*4zO87AY@$q~rx z()bN;shk6_esjmeN{JHpxb3p0B9&FYv7Aej!V#HClJ`LJr~x_B?6}ZLcRB=QGtB@k z1#*2iN(=#vnDHo1_+ zs*ioNj6%Id#F*c+^Km{o(7NIO37ic-@$fQthS6BsGF70`VIqOA%nu=!-9}ow;>(e zPoI`G0%ogQ*FY+EL7Gvx0ET=YSDgANLOQKXoJPRPb6k3Oa-}hUL_V9rWt5j`3;PRb zhBsG~3+*&Y%D+otp-iJMoGG|!1-u5VRk`E)8Yd}ZChkE#2pzbA^H4V6*Md`2OpMl7 zL0ksF!Jqg5Q;q>YcNT^p94EqJV(CaAf_syvYCR|%%FxdJW5sEq81MPGP3@`#3dn1T zl?zCVpFjbci?`qe)g)#5ivfev_LqlK$({keB=QpFiicT&6`&}S5Vs(lb!ic@PyC1+ zg_s?^M7iu@`rx9&>`5h!7P?ZefqJYc+U@Br{8#5w9U524@Ctcm2pK=moxq`n+C^uZ zCExao-;%N@rttDn{HPahdcJF|`>_^IT9>}g6C$FlJc!Ck^CI=et=2Q3&v`JHJ!N+_ zT6ejWsdXr}3mCNF5ToSU+R?jQdQAY49ZkL_B>CjU2ZcRPR|>eA)>U(Lgb`JSm%nB< zrZ2!gX$3=DfXwmLtDaB^7dW&hR#l`;=i`Ve)DH*)!TML7o4u9`f*SU0>uO-O^HroE zODDIjEjYkzo95#p1{(MjCtA)hsq&&u^RMmgxgfw;n2HGyKgu$XrbM@z_tdgZ6Q0o! zgi2m%Wt|=9yMwYED}XH=091 zNHO?XiiMjN^0Jfe^3_2vP)^ebIehUt2glz2-w3Wsj)~u-z_)Zo$1HQr7G^l*XmQZn z*Ei;SG=;1xrNrsbP0T~kkooo%=e2hk+K4p?d|VcGzzsk z{^3rRzb=wD{rCpDO|o%T8p{juB=wuHvlpaP$T%v&p=BT>M;4O(+~uMD<}2I`86He2 zYUQ1^Z!TLR!rXr$$f#7~DH(Lpy6bYcA-xBb0KbSk?qc=q4LvuFSJh!7{klR#2$|pI zFF##tlz2vLYis$;-~+dUOaqUihO+aO*J%F}gd>DLJg1Zm@_Ar^0_NCM@F7VIxpyA9 zk*<_yir{~zh-U5X0jYUPu|zBH3SW=o=mzSO=lTn%%FnzwA${?|_uSXa$&p)$o&>l7 z-i_GgomHcU)~Qq(rI9xV04;0-sF3?50P{lgGbIEJHO1#!Huy}hfbkIhr3Zbv17 zW@=~&$yi(jJ-Q+F<%DLUoG$qPnEDF1sJ8BHj4O&LA`&8qf*_%SwB%LEp#;gH1j!jf zy1}a#X}Gk2fPy0;4n1@UNQcx64T5xc!?%WeegEIqAIhAGGw1BR_KIgcPncLVtVl(a zT;>kuA2s${`F=n=2E|cN(oco-|Z`SY(-0LrZ+J8wVSD;#6 z%nocP1$%w;Ip23W_!o%nQ9JEE!>;W9V?Cl-74B0#C7D{WWc$#Up0{qW68-S*rDf6>3GAYv(G;?Yx$lOM;XX#bAk)zA<)p4>LVk2reH{dlmk z9t8R4c%715@5`(-L4Ke3xcJO5R2`p3rU2)Q-;MS4l!#M==F3^uxhQ2t#q9&{ynk-p z{M)oI9ToMo89Nkgbnigxb z$Cy4C-AcCl<4f|pwd@vi-ey%znn9{b2oKckNata&Jrxd(4xbq!v--oiT!m$HigVw7`1@$2MHE@ zU*t}{R5p6?Os0)jgfcPEitLe!ii%*u-PmS8$N|Ru&MA^^wRJGE!aP5QhLq0sS{FbE zCKOcKryhi^?Us$Lf3WpTvC%hpJ+j1iCbzFIv^PMi+TRLsF#xJ12@(%N^~=qaBx3JI zBQE+qjrf@UnEp>NO2sV@AAQif2jOU{k5P=N=2z_xpHao?cqgSxQXOpZvY&x#&W1x( zk%N(*VS09!?X;AtHoVczWMDLhHsgpIi#J~^S@=q)#e3K>k6*tA!sI%Mg_)Vg343T+ zH`NIvuq>OeT^ReDq$c9LB> zMB%TqdlF zjN#5<@4fda4Puf`uFxm|WQWpL*dA!}jSTaePX%1p}2aB5Rm*P`LP02AJD#Z|F-yRwdhe9EwE*VDbeX{h!DSVUc_wqrQ) zM5E`e1Wj1YS7{3qog~av%`ac-#_ZU_M})enc@Jnl;W4buYGSCRkMl0)AC;?PP&h z!FVAkra&j|tX_vaiE!wKySPDCy@&!(`kHZa86$yH1HYum7Lli@!+wQd$z10RiEH_A zAXyV^r3=n^%v7D2vBSXUzD_w1J-7_- z%vot%7$vhU$NAK}xlp$}tRs3_2<_iy&%jeMoH<2oH-|(NoQ1yhusUHw`_AV2QnEK_ zHTLO>1_8zwO9=hZslN7tSff5JR41y%e^Jv1ih=1n7eBDd5uo8}rG)d5MI5u?K_oXv z{Fj-kORGLh``_YhC}4``{bN#Cs+TFntV%g&Lf46>5j;ud>sevodIj*4a?YY8cZ?0o zLvH*HN|GMs2C0933OM=8VMp$k8h7-xbE)n?zxEq#bJZ)RCaxdN*1yd-7UbuvOFa@$ zV!C!s)Y83?X}R$4M|JDBv4Q}17+c$c;sPh5q%#9af3>wi7%7R2Y(2jcddb54jy$i9 zD)aN__@t&OAq5uKBwG~9-a{;=^~{w&?==IYHRhhF{ym^f7~8ozQ*NAo%ig@j@6N$2XSE z{ti|9V!6A$?Rqa(bZT(z#Et0qyT%^7jkBJ!TvTTO6=7;@~CR&+*Lkus1yxjQbO`hi{V$DygItWG@somKzBXu8|HwW!&who5)v_Q`Zm5MKawM>ij{2W=_@Az-dDCwflH$$h9 zllb*8+O$YDz;2&9;a$@8)Ai09^TM-t?aXiGS^^6F(&?Dz>B^?Spwld%Fs%7Z2X9lD z2XsWS*W!Gq+*GgVglbUZwC^M(aqr{zG2wlerBx$tX*_MlKqWDVxB1-*F>bPxH>F~l za|bQbl^<*(df1>E|U_mpAgQRln_r~PAC_BH&EGsNBFJu+|AHe?~ac8O1o}6 zXcMbkI$HSKvhFt)V5+gDsbsg}rOnulKS@r@UHbLHT)0NZ{>?i1)@Y^{Wr3A1V+{P! z>~;U}qPPF-z|B2hR<8YOH94{w-z!E6WX;@~{TJl9S{K{wW1CrBgv;cYfn6r#^`C}4 zLmK)nrju*i($2TZdPsLAUM}4hbk60=OY-E+E2)~@?K!fQ*f(F(I{K_uaqTPppn6J_ z*rD2D&yid0QfJ0|{;PvaeYKx}*{O0z=tyQi8YFR+g%0aR2IsC?H$o{|Fkxs;ha}@m z56Wf9*}LWhPytguGy!(Cc_C2tu%gw{v5Q74nh0&o+#n%A>#}Q&x!WV=zJ0ivBS`)j zi?czWp+9rt$nyL%Ypf=kO1_pokTbezcZ=fHvxC-J7i9*Xp&7rgH_2bU7$+DxY+0oF z!tD6qPaW>`(Uan1I(GuCPsaA3Pyd{&E>}+6lZd9drGtsTZu?;7)XYf7Y~x;nsDFRV9eCWa2V+5zfAH{wyRod zc~~;Obemg2a(9j;wcYGpx1g6Z=Hrs~EbYPF)y{6c7HrAy*{SCmh;}#Z+& zJB-y**iU(vo3Hof+ZV7DrAq~@2fJ4u7RqK->g?>h(0t++&|HWN^&=EkY+wx!Ck#=B z&#?!UN69|MEj7zl7C0o-9F%NrRRGp{S?-U`CwYB$Vj))PG*J29sj=vpeiaDEJ%V|V z?U2HbKv;e$5{HZ0E2CNcrhIiTI>SfXYf^G?XV~!i6PwOTcXZUp)!jxysmg&Gf$0c4 z(=5rcMzO<^*<*D$RJpaa1WN4$sy^lK#_8I39)yk$8B$#DHHAe-Y5n5gt3fhqG|72C zGvY^JwBHA@GbGQBSSC-9EYOFTaZ&lpUCJ!nnPI#BO4cu6{`OIs@S)~LoaBhZ;>eP7 z*TDLO7;9*nd!1N?`^wo8yYV{M(S|Je&CJbhfmLIsbE57sl2tsAxf5j2{vFR`i;Wpo zk)n0<5-vmI((G`I+g|V4LP1U=Tfc06^TBhPFU2R3u#)nn zG^@*#$cYa>+ta@P;b7h{D)UHwVirTu51<+_t2gSllo0K;4V2EH)aG*_%nD<{-N^Eo;IjwGb z2q@V6N1X^qd!1}Xg^^!F<_+49?|pV&N=*5RIZjtHD|z2&5p(3tJ~Yl=PH-SDq<_ct ztC?w0l;^&md4wXqPgRYdi^x`<@uR&BCQX=n$)4qN=_AvP>kmA{Zy&z`-x&D0Jn5J% z)+$NR7)yis{&R@P4@e@$i*R|hb+oeIe)#h%Yd6{P(}_Rk$p|ua$mdw$H{Pzq-3)3VWnwBL#v=3oo;1&R zH#{|@v-_Ae^`&1_C$HzdgP|km8v{#=8^=;HB)#MkEyU}w{Ne>m##j50+|aa5cV6OK zWV2lFYj=u@QA~C?l$$ju7={b}=zgpHIK0lY}v z4|<}y2+8&91~QU6?u4DA?6fVpz?f;~F*gH4;z;%fGzB zbiy3SDPTIAa%R$!y>|m{D+e|(?SE4N>iCPTX@!Mb`#Wm~US6SdfejG$JP;Bpd<;B> z{|zpCX*U~-VCL+9C&M|6>2&as!qMJ`%*UB(i0eB^WB}(K*=cj>oN=t*buWjm)N)YU z*)q{|)#kt`CyBXDwp<PUz^KQu0bKWJjM>yA6!jAq7|RmJg`q2c3mg=! z!Fc5~L+_ml=nVeh#;?a_zfuc=qwFBc4fVyFe2?wRGKwCZP0z z6VpQkSnO>2^c;2DI;MFrO2dgsg))l9{1O22W&kW8zNfJF3=DXH0+Oc$H}l9YzOZRx zwZQyzj%vkHY0_=x%(=zd?R0g7RBl|0GI`SWcSGoWs(MzYcZUX)fpS6Vzzx`Pk5-=7 zmz0!B|B5qD0(qIk<(e>OM>a;#j34(E8rhF@FRw`OJ3~Ap;y9-jY!{W250#a=vuiK7XMnjAJ9r^e;Ohh2uJ&h^7uLtX0 zD$sI~66HRhQ!lZ<{P=nBxG)k;d9LP1KlP_sw@m+B{2L=WrfR!)n+K4l@G&$j?_iH@ zUXjSK(=W`(;7Vxhp51`3qs44Edaq)HK)5FTN&C*3huL*W$hpi+&wB|$it51U+cVqG zl4TCE5&?2oq*w5YY+dkND;zMtzPY$ilBvd75wViZ$Z|VMO?+smPcKvNo)%{`^^z(n zCTgx^#hRLOVcK>17n`%90MHEP>9DG05Sk{Mc9(+GW{b^}Lt?r0OS+Q?!8&NkQr8ZZ zH26-;%*3iAtghmI3t&qwOiRnpUak_IaI=vZiEcHC$7%wjykG)j9x4k-f5ymjmpONn z>VNlh{Wg6$`@B;4iOYu-P1rs}VIC`t``ES1|RaS&dBgZvefp zB==bkN;e>k$?Kbk9$QA2kxn9U=vMD%MJE^jjL#i4T_`@35y|_?%zPr%4}(C z6^9~L#Zr)5M$hih$idJB#$DiIQAq1*3?tf;G2iA`ZXf9NTd}_v>+#c<*4@Knz+6B; zVCQg;DIbZ|;Ers7)7b>pA<>=tvCT)jSx4?=`_T43uw{sGNK+Q?kkELZGDoN<3V$S7 zO;=UD94}$MeC8WQAy#u>0kZ7=EC~?iBIhQ;f80*?Tm?P(#zX;=v z+Uh>AL)P1QFRwN;-WR28oLC)!7RfyGWY1AIORUcdC?rEYkNASxjj|=rDbere>jaY zCcs>v+gu1{dv&nbVZlWcJ+%VY845U}o88FD{Z57ErS7V#Q7*}SBYRQ2@PU)TF~K_V z0%nKkQR$clOrCBB?SbieLsws)YPzqj!SiT9k7Qo>bKYp7ultb z|8-mWT{a$Uos+veCwXc|jh{-Q#9ih%#m(9PDyRzwxjaRbZ;x#e?eWJR)KH0=gFT8f zxjiIAT#%pt7PEPKQbIDfa;6S??MFky^0L3bl+pG#KPG5WP-Nrd<-JVU6SEtujpovd z=z?qUYdlQy9&?@4__z?;?b}`>OxGC2#Y8xniB(+{kOD_wa-(OyM{-aHQAJW=I$zxx z8sA{rO)MO77GGMQ>GHeCcsU$u(7ZO-B*pnYFh6U)&}t9PrhQ%?+)^>GT}SW@#!IF^ z&1uJD3F}-8c;;dExx1Kd1@7`&AjUWj&Bs*Xo7Hh}=HdYQEnCH76R4;n@%@mYU=(#$ zN1KB|ZX?XmavSK4fAW{JH8d>aku=ovXg5yJ@BakiQ1n###jC*gm9I7nj1rKLqYZyv zAL_N%x{#heW6};6zjP%LG?t*FIWI2{VEjaFip51c@g*preS?G)rF6%_Kw;4L6#p_H zAtKtPVV|SduBQ=1Wv=6qy{D%ois)<5R$csU1s`gDm2>0WJ~%R+-QIGT@=o1b=CfQ_ zlzWk<%6qLyY{<0H%0i3(Ijhr|z???$I zyN(5b5)|cqHezXGcB8~!QKflfZd?Tz3&47gxn(l;iIqe#c_i^}oFz#mv9ASubjJpviMYTxrKmWS2c`_;rf`Ze7#~Y=E^y_lAgF@CSx@HkIti+sd^oc(c5nx@)$z*q`QRW}x+XIGd5> z=&}WP2~a4}FL6wV4NsO&x3#T{s3Uoi%{`Uq$_szilg(h~FCZ?NF%uUHREw! z-+n4^tHc_5KbT2O1W>@vKDaPaCMXnYe|MvlifVxZXu~AkRzLcKDa{wpy{a{LB^;(= zGX=lhmW{_BwXW}k^FZG(GTN?3o^q$JeK_P)cmV7^6y)om^QGRT%kq+)+3uu%tcr21=AZF+>vh&7h zJ2H8H*j+|j_wrxmo;zw0gy7b;Hqcz6wcF{0WrAgNR@@6(yAyr=iK)W{urLa%@j1Y_ zc1K!pFEYA5cCkD8a3;CVt@Z8wNtL7Z1!BHc3c6PX#gBs^;_AqLtjEQi)XN^h<32h} zeBk9lGX!=LM+=>a6e!xmM@x-NlU?O)c-af6$u`-Iu%i*<6=!p$rk<$VH4us)&KDx0 z<6g9<=Czuw0Uekn^dAF(f2~($q!RSqzyQkq9WWoPS8GB26@`mvo)C3Uy?wP7xTv@# z5k}4h&qMBi>a*IdNJhA=&|{q#M)L8>N=i=iwpg#JL`mKDtF2eaybcbSS6?%gd9I92 zfswMISioI-z<-%rQN`uDvJ{zbAB$`*QWWNkW`?!9dt|fo@bm{Q2Ep)K5|DAMJUXBS z&q}Ox9%cJ|`Nxy87gKFR6S|NYppq5z^Yg=BPrF-JvQxA^pQ~<>+Tl+dF`uROB`r-> zDmZ|KhDKyFtQoaiF#^Q�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�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%0A3SJz zrxm7nnQ(TMkZ|8>upMnHd-u zjtQGXBJW-KIR5b@^EhGk)5YUk>x*bJ=5WHmp(LxMtWk*Dtr^`}vejzg7LJ2q^UtW; zjTcZ6FT97InVFe>V?<1Qqxqbhh&GIVNV|sK@;rTZc6PUBQS`5P0rxFOSe|1YW)MMH zt*v-V{Mq71y1Ii+l63wY_tn-I1nrkPp<+f%D&XS2UT>0;b~a0P-xd^Xey<76>9O(k z`aUu;)9YeXVeP)vW4lOEt??DC6)54s>^}EQ!DHeca!^Jp7lPBUT-oHvAASY`0w3-v zw=6H+Q}Fn9%wvXeXJmLduf9br>;aU>N&3(``f%;*x7u3iQMtvI zqDSN_*?fG%_-h zO6z2HN(u`*yOp7)Qck`Fc%oH9e<>XJ;bdv(d1gMKp$sv!$`XPdqOsJjL)v#GkFJim3HlLBf;b5pw zuwy*d+U@iV>YVu=J0wPJ`#`iP^qj~1u^cz3;FdZWzcWs4RqW)7qc!qzrZBtVIR~tx zlb;pu-5Yu@`e;IUJBqCi#IbEEjT$QM>$U*svAw#xI!k??nqh?bS(#o{pW|Gal|%>^ z4HXrHTwlb_w0*lBwmgwaTD+2--uQ*W4f>jv`*5iDcv9mD>~cy=a>>rJ2PGxtL+0?U zAURoCp%rYEbGb-l^LT5H$7as%Dm(!f*E?V;zksqd(>Z-{Y$P2|En{6w6jOO8)Nt(` zZM$_PLIV8!lo>mKIR}Cs?ZCj@?_I6;tp za8rQ*f(^I?D;MPFLnUmFBYvbwfu|=+sJgQA*y+4W2~83 ztE_9k#0=GHSZGCa0kcnEO~tpQ(%5c;5A#@e1%3Z!*;=K6zW=*7OQQnK35iWSpU zySP0UNayV!1XE6~JQLF;A1Rb~I+Kxe5mGl;_HiDnCffVr^qeqQ!|cd|2e%jB7t(=) z6%!M) zfpkZ(pAVCgj?M(q6!Z`_8mrs49aLcTt>P)*>Sz?>AY*`ef}NfH%u&r^S0_Vx{X-@F z+IR21jEfTy5NPV@;RI#4Rgi>pcXtO7FE60J14*Yrz0$_=n6tiCI^Wf+b#s(ZJqt0q zyt)0E>2uAU8c<_^%~s#H!SFR$!JJ%Ni;Iif-aD{v1*`-(&EmXZabI@@)NiL#=Doy2 z=S(95137tlt$aI^g`#n+@5`4jKbW>jTiyP2bN42!QH4*~mS}xVUn`8Zc&wQutF70u zmn?u{r47O;CVI05j{}^s3y&9EO`V)~JbLsfIM=sd-vtX})-PoH2&fHw_;4NSg`}sa z13zTu+2*!8rd4U10`l8(4|8&Iihmz`ZhNd-CS|Ne<`nR=a|5X80=@pB*bLO;0J%CO zXQk)|l3de?5|0ITR-c!#Ogw#_*k_f0StX5Z72QdWE zmV%|Xvyr}=+!DQJwYzdsY`WtI7a+B6TjnqcO-f1%1p9V1Suoi<6Dqp_+9Ghm4r+oM zb#qFp>(E^4=QCnt>eRJLmptCXE)tS35U1E23@?s|dWA%a#P324?r+f`NYu!`9tGg_ z8`%T7ypYabCAtGLtB5>Rl`3|6;(@>kbdIx{y52wT^eN7GE z7-xcXE^~kF?{DwhX=c|tPf6+J;0HImvAKD?JR&B>+{y}Si)BO6pbEjC7VD<3Nu>1i ztiS(}6{`}YB%HeR_$1V(?cZq6L7`X-C_N3DCJvNluZ$)3`#2CumW0c%^4!BCYp;i} zM1>H?bZKS_I{2r!0PMe5Zgjc)RNeJUXIS<$90{l1+v+~G+Dno{*TQSCj@b#7b_mmN2>gF8g81vWckVyIeZ>0;@Ll23gQ23?)@^w||lCWfW z3UxKy(aOE|^XoWxwDBgiFNKApIm7QR)|7-54l`C)+wb7N4jib|H^v-SceyQX&h?uE zWewC5P-F&I6bhgHunzZ+&E=qyE|eCkJtfoiyOXNMy;Q;}cV}W9Nq_X*{R1EBaatg- zp_y4#yuW)3pzTS1CL`pej=7RzQqiH`10s=f5<$q0XyW?s+w zCnQr&j79NxH+f|k(S!_p{q}#($SR8nY{pTT{#W3D^_-Z%coaH|@^@$JmiBE%-slVZ zzqdfr^Fh{v1%W8P+x@%FT7Dgx*F-Mz$8xxT@M8mA(yKy)M(v>ip-)EM=1{ zn7mFx2sAB>)xQ`TY3>Ni336Kl8tN!Y;KQ1@0U4I|_0)_YF zJwqtV1MAgc$h)z%v4K?`YVp~mks8)EHb%#gt*owA37)E{ug3ywucqd&csq|Y@XN7S zChI*7HaJ$pB?)WMBz=`FVQ6n+DeMRRD-k|ENmQTvW^7PU&}UjkHnwFT5+D$G+|H1w zyQ$jZ);Z^6n)DCACRFnC(yxz%Cy?s-+4dcACV1Ve>LJZI#NJyT*uKWc$1Er)iE>BjYf9B19epEXhn4oHQiO+DF8)+<-?!HNu3nvn%u4>l8% zanPtbS+cXSd^g=1q14hGqt0>fZ^a<5PTX>xHl3ev#v|UmJSQa3=h7GWWfF8gA2qtG zp+S=#Qvdcd&*;FCEVJ3KR_5~LML`>ftW@l;PvlU$G{Zs$1+)f;ZTGC>EekB5x{=Gu zl(+SEW;dW$fLZpq*5ADFwZDT;L}X^m*trN`$*T~P;4NdNr>%_TCTj#g4t%E}%Fb7* z>8a7@TRW<*diEALRK=x_KdiO5c8_3>?rjKJMNjf%mJM=l1LCY!p?Tqy^UH@WlsI!`fO}7Q4+z)9y;4UcGt+0#b#~(9#fFo391%f!c%0GzY6$qat=3QF;nmfkcnGTQVr zK)^X6$`=|G^lhF}xK|h$Awb>6(H6x^SX*1WyK9-6Mm2^56aq8^&|V_|eSZQ}4`2zh z85CWbnm87Zzz_$t^b{fT)ne2j)v1nlDYiGhyzm@`6gtnwKtjS5!*z0s z^iLMAK&2H>`5GM_K1)F{GCE4-IS*B;8x*a0OdAYP0ZI2HKPD#|!MH%cJ=@sW+OlN* z(0(Ebi%xkUmBpF$EqiY&emtoNQe=wO8D1Lsu1<|{y?5@^G`PZ0c6Tp>kn#z75t<;2 z5ynPLpdUX=bi)kPVY`#;@+5Vw2thH;dW^e|~% zUG1mYo65@VfY6wlHMX_K#XC)a%LfBg@P*AABmFby&h^_Y*1yp9C@LxOunwnbm|Yco z_R>Jy9Omx=&?PKyj0+8Ypr!^CPzS&V=F(~(o;`aOLf-ZsvNAHj58#~Of{DGW*iBtm z_myC9Ow6m;*pJT36ALt~sQD8sq zd7S!_QD#zqg4l}_l8m2jq$h|r&2rR(#$UnWw^hbZ<~*FSAzyoXG#rv3YZ^9q8-{lp zAc1BtE<_wYHeBX`lD?AON?PX=33E&7Ba4oPSoz|lvqzsh{96ndH~3?Qc*w?quo!Fw zTth7*)p_@&d#yL8Ee)gFogE!JqvW%pOf2YLRwb}k$hiVP-@?$)khOqYEB`wg^m#)| zwkua`ls3Q*sH&{|#D`TcXureMiYEQzfJ5;+Q#ZhVDy%_Qp?s0Y0&nBMQ3SZ*Y9-|~ zjjM>ZrDYt~%;coYY*)*tMILaCd+jP=l!KU}69hR)W$)avUgSCWEG53k&lcHS_#* z#lX;LvL~dwx-193Hou-^YCz)YCj^h7-4&iF}Q-@fFNkmneATU zCv{bNQA0y|=_T$JS&ZM+K#459J_%%JZ1&<% z50qPd85MR3iL)qLZpUL=KA$ zl?lIA-;|<(0(p2qmKl&x?#lCT6l1iq{HQf>T~SkG9CBEw0uclhUu<^cC_dXv1qwxa zrKx?)=U^Rz(g(9ew&}qf;G#S2Y&j+Gx=2gc!h+S@(h{nK$630qhpJFm*91T-!@^cC zAPzZQYrTu>t}e5MEnTgxcIzOtpO}~^odV+l0+vwA`S$Hka(unq_H=Mic}&Y`wq01n_ougbqO zgW7Aut3qS^^|tXUBc<;_D9|=EBr1dC3$M6`Np+ z0NV8FjKtGMnwpxZs+Fz=@<$?t8-}1Fu71lNx4cA1@7vqz>aU9-!wl5Ak0=@t*ZB8l z=*femTDIU{>+9$Yj5Q@Tbk^L`xD8Q~JRn~~gyYe&BA@m>RChN%I_jF>ka&0u*`YrG zW44{V6c!RP)%9_7XH(P}k{%%X9GN6w8x9Z@fj^)q4Kt&s)xzdBOiRdwY)Bid{o)3E zz|O9&;TTH*cB_LrEbs&Zj6MkT8-O;2{OmGJ!4Sr~u^xqlp=UEUa4T6zU)t0ZCPTmQ zJmCxYHOfL5>b35_hf*7^(APrU3}MFNp+q+%_dQSu z0ABv5acN}*{rY7UcT00~*op>-6u_ovb|b(~)}RUI3byOk@kU{|QITU%NJt3u21Lf~*OBbaKr@Ae&`}on zu(hpCoHau2`lF_pjVP$qsQVNd@xEK(&e0`37{McWQNqzhF^3|)t zfYZEwebFHk06It=lTPXBDV%ff4-K_cS(1pnh}3T30GbUM`L;Xr-z}hSDSHoPj<>O) zVEEE|K}>~r^fnTTs#aYyEQ)0x z`OxV9V`zwrIlD+h__S;bEAT(wzLio?P%+KhF@|X^4WP;NbUrdY@msf?#GTyTpLkJv z8uj-Tl{k(w@v(m;2)ZaU{|#~N)|5{XadBZ05sb*8p&`qnFAs;BEYT>09Kzbg_T&h^vK&@y*N?IBX9i9DqWFglYEOw*(hR)9Vw~cfpij%xLKNg+^ zlLm|h42DU5yDm>N->&OU7vOe+k2bRIQDhY+^mLu)xy2jfq6icd#dEo#g29I0L($6L z4@QYW_v*>!f+Rd$A^9ohAF7cgs)xi_WbCTHQn>AT#n(#uJ%Ced-d899aV;Tjt}|o} zn(Ed~=J?{~c6(qrmpvmDEBn{WQT8MB2Uj`ZVMXbPi|27&W_OS=*Lpy2(ZU^DR#B0u z(YsW}4C}7L$dbvZWDcglWyQ&<=r3Op7kT*xkZ&%7)mQwxSwLVQ-d|#d z3{yr|@A>btUD>wD__)y2r4&+0i;ifw?^w#CUQ*;@b>Vi4KS4vAu%ki2a z_^cOBLCG3$5TS+PeHmad4G^zPN)s6Qx-VP+Gko>;7!eqr)I{%v7w`-Z9_wNxJ%C6O#x~T$u}-RWFFYw2?@GJ z#VILHhM49fmZnx{v}x;~DJl0BpQOqJ1MxbxV0<0Q@S^l*`e2Owa)}?OWJ!i(`oB!# zAR=@(Q7E$V>Myl6mFa~GwO_y9U2CtPvPe6}C@gFN(Okk3;S9yb-Cmntey%>E0e0la*89QXl1CXZ=>0M7Gs*Jx>I zGy*;X?k}(omdp@bP5L?|S^orgcsx*}>Tzu4b7v^t-<1~79A`@F8K;4(#N3i_mT3Kx zit65CVxnG#Cdv*x58EXP2V0I&%QzV3d#?=`#K$R-=&Kwks>S;N6Oc^j_;y|##Hq=`-khoV{d^qT#%OW z_YT>oJhd>M>(>YTQs1@LYkUANZWfkBU}$L=RK5f1hREm%JZ|_q4@~7{;~yo9iq_ZH z0d|&^_K8!a@?Bc8GkS>0=79^dgocNod&G{%0c};h;<^xgPu^vzsVS(etjwvg6FjN! zaY;t{Uu46%bVC6eK>OQcjII|Z3u|GaN@1`E z@JLV`m1CN~VCq{oUG()U?%-tZ$nnT=xwb$oEw-=-{JdwD-^ytPE#=}AC2b*@4y=fV zTZ8+8(OWnRPToLqPr+{nmhaUg+Y)$L}xKQ`dz=MRaAK_bCtF*h&Nr<8DWD>6{y zQZdE4IOhY4AVg`k&&3L?1|axLOWT0U_aLm(uC=30fW;0*Dq$zU8Uq75*ZCvk;)24% zCl9e8Vb+rOt~zr3xPMod0CMpAmZqgC`jz}3@Z;c#U=BcLg1HRl4@@mLFWgmCU9%LM z^YrW#{16@*iop~|(@p{uATKX1?aU{hoiYDPu-G+^g^MdSA>lSlHq_}}!QmR-HjdU&ApCU8Us-&^YFl$uz_MTR~ajdf`6=y-AawV$8g;Gk{}iP8OM&z>bF zGSt+txR>-tg7~D*{2RzGk(ZE=0A14YWhlA(0*E3I5N&R5_VM+NO*FxJIL!^b5-J8a zZo2EE(M;=?w;-f&=NClT;h7?)OBr`4&?04EtB$y$m1Gi#V5+K@k#Hr5<&y_N_;&7g z;5Sp#hUuS_Zrz4~3-k!!zf zoyTUCALOvd4NL+JqW6I(R%X6i96}G8;^@r0UzM!Qv{QBYBe)J8JO~n%Pi~gRdROC* zY4=0rg@w9wcuy!+e(S-Cyl&eT(PBK(b>@PR>Fk&z1kLmF^KZ}A@3x>%o;U%uNNEI= zXtV!#3y@(iRCV=x;d%JQix)=kn?Cl3<>k-`J7hXbEXh*SdJLEhA;T1wOWp0SUk9L6gNQoc;^($rkb4)g8@oHj5&@i? zOWMDXN|_0E(dE#8Ele<>Cxq9Q80G^AZcj%FP}&jRMYMB+5nAbBUoe^+Kq8x(51fnY z$u^vJMo>|XX}@~xeik&!OZu(U+CkF0&=<6zzI<7V8mS(uo|~(Fwe%s5Nc>?lVlQN)8cgCZ^A`i_cljfQVnienkV2^UdAFgj_Dv2_arXM^9UBCDfu3{}h?@aNI@tLfxcZ(DzD?Y`ydpfCrL(Z8u8#MgsfiyQ1JCb) zmevf9T+8HH2(xy5@E5P1 zi6Qg6UFKLtY%5igdnU|kElNKkEd!d~-gn>!Waal??R%LTUA6YLwa&FQ)j~01`&CqA ziJ@6Cgu9cfi6Ju$D9#f7Dr$nK2uV)%C-Waq2EM;BP~S?nCq9SbAcs)jKZoM`XL*Xi z9}y|>(07dRA;u#gZgXW{48vt%&GCNwq31hu>&?xaAyU`*1%!moP|^oFpa^GqJlOy+ zJDHCt2L}&N{iIxV^%odv5it>74#Z^s$9a?@fy1ZgyXn#~`*G01ez4caO{k>7342qJ zy1$s0(tv~1s~HQ6nKYv?Tlu7%*ZvjqD3$N3b?Z@g^N#ruHAk&6_W@z{0x~bziKQyR z^Mv~-P4_H&veVRrK-`g&yXSL-jqu^aZBC)TJgd$GW`-j7u$Ms=0hX?zd2oea?#1p^ zU&3MD-hTyF1&4&t?1$h#a#rB7+i?b7)82beKevMk35p0|MV5;_n-3s5IdiF1>$aR6 zENUza`;qhnuG_cDaiPVFja;P%Yt8vzs z&=a5q$H*||Vp*?4e}oU1i{g{$>1KU9a|p!Mzbu7|617g&6%|{d1?3U~WF141=@;?`9;gN5QY*N_Yek z){`yd>MWS&J3r_W#82U$y3eO%vas3hhxcsLA0NZ-uoou2%DOJ*V)*?A{k3o4umPo( zV(nLSmuJ9lh!5pw%A3j0yx!~Lzm6*9sv^(Wch-LGQH4Y>?7x(?6u;R;k;JTT zEQa^I_+y~`It)ht5$BN02z65I{-FG|@8L7fkc;RpTqipCH6$X?((prwD*48`Z4ug35iOdPq#7m3lIKmZbxk{VNY`W2MhHO=KUEk zOdK3vLQb}Qj`grp+-|=w$<4H6vUFI?qpZ(INx`|L5T)~~9xO~2R>p7B355Q|@DRqqc}SfG03ED4)(CsZip@dC2A7?FSgtb3eR)@Z|v5`fIfJ}PI5HtW*mmPfBt-gX zK?16+X$e1`Z*aZO|`jpoJGI; zQfJfFqs(ykh3_??f$3|mJ5!iM9-hsW*%F7cY+a zhb1B5y;$d!h@w(N7di0~J{+Ls6yQLlyge0knpvSQ*WGPg?vz5jKrnSS)YNtN@P?Q; zL|-md3VH0fww+_S%3kMx@&*o+xTU54Kn^ZDi{{%5*QKfeTmvfDLUfCpTirv}MwLSx zh{&iYbYUDkWr6#RSow;f*AF{s1->?uD==z(?+sU)0Dxg8MxXOrcHzt;H<4ZDlJ)Nj zyVDAhvLpV1$ldmk_L*?tEY?D)#QF8nal0G4&Gha|ucJG-D=DjL`WAu`CB-Y`EZ(m@ zNy~kg<8c9=rSuXImG1>F;*6~U!!kpY5gt%S_=DeNJbyxkq8-s`eSCZvT)K0jYd294 zx!mpT-`)P0tN=lR^-4x<2yW}?C3-JCJSIL?hR+NmG=Q^XPq%n_%tbO_svpvwpgvDHeb*Vp^gIL^w${o6XWVDN z5i{!Z&_+RfXFqyWBrNQ!oil(n!A?$01kedm90g6Kf#H+v+S`*4s;ntu)RoAkE}hQV zu{Sd|uC@k2!gpdXPIk1n=NrI?uF}m26@HnMGQmbqSbIM>Y3$6EV-)DX2s?isU9dMN zO+Hc94biKhjNV%_%~>J7fnAJtyNX%iix z8p`kx%3IuYqRy=#@+eiYyAfU@``!Gs$8Mi+4x7Q{GtKDHcz#Zyt=^peym=I2d}6|R z$@u-c+@l9=)amMT?KD-8FtoXm3hN0{Nl~$Dt_}((7q4$bLzrvz05G84U4|q$BTpeP ztpI0-Tkoc-w5f{_W&oWN%EqqyX&rYS{hh%gsCU@T8?iNyfie zy-UG)*4rB@9q+eWM0bW@enWO>YB)HoLOblNrF(qozu<0f*e(nl+D6fNQ0TM#ha+{- zAlc=vrsj6#Jn1n$!$vV(sswdK8W)X**kFiV1)s!hI7^maorjU2K_8EVFIqW3C z>gp7tV{=Mh#55BAhorEDm5B~9ok3$grF)L}RH|-(OnK}K`rf^q1zi#1me1>Id#tDD zX@s5afDGZWz8KFH=_eTB-y=}TN?vj`TKmnv!`B8^H`(gQ5mmTzjAt|gTzJ0^lC6He98WK>$^>m8Dd2`_> zHy_TYrYkQA%qt~>12n4uN?!OyI ztCI zQ3Tz>j*bqiUYs1tbaDd1hT@Efz=Cv~h-+s@M^5!Ph+I8lXLATz+uB-K_`IU-L5-fQ zqjw)mI!TLn-x>V;_3PKx@874U(l|ySU8f)_s(mous*ne2H7u@+S5OA`r)EOTUFRL= znWK56SC8ct8$2LfI4o5s{YQKJrG^%)$>K!jcVY;;NR$$TJ5zWXqUe}-MsKN1nujm0|-lWhhLSRw(HL4r!%2tIuF~@ z$DD_-(1q9{BCnErL)JDMCB(RAiYWD_&MuR>)e&1Lt@LT@rTzAav6FDg>KK|g#u!Hv z&0%WE8^I~Wu$idM(%9q*uCMPaXrF)il1mD)oUZUJt+hHg^dz91V2urzgqY>|cH)FZ zL`LXxXv}N0=fH09SUc&#|7haAJ5GrWeMk9C!Y5(J<##T(wC=GyP*=$b5mz4Y&#_-C zTJ3q(xBeo`Y_`~K{p8$0*|V84K!+eq@qMUun&>Vxq4M$K)%r~ii(J7m3{#9CaW&6FnS}W zr`a>rBdPU@3pa+L!0bEWxD7US_tnk*)s-a>%GuoB(Ug!X+YZp|u z>21wYM~Q$L1;ryF;)(*%PLOq~lyGPO^D4OJjY~|8K8WankUU)@SZ>ZP&a`^n+J%mq zcc9k>SeOMSXTFY3Lf8Yg=N+ShE-PtXA>opsg8@mv=jhJ?k)a_Z z6p|717DoxofyO-Mr~B5BRzjL;=7Mp)@+CQZY>QdV9J{FHy~OKTV&&c&Hg|VBFO4Z8Adr>{vd%%_w6p<3XVR)DZCCq>2#%N(&~=_(3OGG96olbP)`r-_J(5$FsY{OpoSQ=XxEI zkr^FXlL=9(oJ;(P9e#Li%%tlV%RyE3bq{pljcR{^?I>9{gjo5l4G?q#NF10tdbhM% zcy8R-Xv;S1s;~G6rH)}e?OivpQyNjxdgwjOhD0LyEPEXL+HpFu_pdkskA%7-ot@GO zNUyLSz1(W7Ff_v>BVpII zxtUnOV+|ATz;^T46v9*TOg=hUQMe-!rqaeqUkzDQ3Jy75{J7qYx6A%R$c2HjgR29I zW>@#-9zwVNF#mRUU35E;iWw?hb;j*Z$M3A_cEAvL{OAhh5icowsLY}3RD>MtT#3^9 zb2j%6miNP#3RY$W37n##RHd(`-V$cwZ_;yIrmrE$4%aat5LEQkpid_w0GdXOQ2c3Y z2PFgQ>0LrX0{0o8DqS$6Q|_D2r?Rd-Va<3K zI={IM26#!==wu~Zosu-0R67A`Qq5;m&jB}mj(SBxbrczN6k+0`JP=NH?)6c=x34W= zU80UzaYQkGtQ5V!w7HEW_pRz!x4;SwuC1|L9Ph1i>cf1C_{n|*4Q z76AK@;}wfN2l4Zpo-aJ7WGlV+1MW?se}40WX_{YW0A~Bu#l3fLdu_gHK*)PA&TUz-hTS+1W zQFVlx$h`cuha~Nu&yXS9{^R;D908Cv=Bv2}J!%dYr`YxD5Sy_5A~s~GEy3JEsc+w=jSjcKgD1M- z^V@Gv14!njjN{#JYuVIK^2xy9^LrwiG&ciSfm0T9tURV=T(^UG z#mlmw5L(9|El_!C&mYwVIw2zHVQ$Z?k;`6CgmZ11>D$A+FD2PTGd@iL?Q6^dhNj)# z+kGs@7As#sk9}}o8Rh}qaN^SH$hWq&<5PPD5g8l%`ZEzPOf%|+6jmXmbj#l4>cd76 z?a!=>2G237`R?1!VdBeaFMz-E^Ciq^6<~(w+CQDDAEv@fxstppW4~+MG)zkN*Lzyl zys+SN^8+`pV6<12QysB~S7Wl1L2@cAY@<*F;r-dLi=0^hpk1_%VwgX`hNkMrP`JQZ z60CXo3>0oI_EJEer4k(Ke6z>6Ln6C}GK6gDr@L^%TwJim`Kl8I-gH=44MH-r$?Fo= z=7>z2cHjF~1bD-M5;ear1NEzhGb+m2yNP{%gi=pw{Qi|lDMs@B=KpX%jBU`E!5&Q( zL|i~swaLBn8vCHyZhQWZr~k9c+8n1#eEkkDhifh)m}<$@_lL^Ozi}3eCd6!iVpGk@ ze?(DXD=0Vye=|I5GX1U1t1c&!Y5pV;5)UFFY5#{Ja8nx{a&3R+*#8)QQ3nrmNL*z= zN;K`gp;h1w_yp|(U;Ftj zlF8W3*W~aLW>2vVT4%L)&(Hn1EJpytl>bkJ_px~Ww9gDbiuXXFSe72Of!XjpOZq;r zY28zO$^Tc|&NNgbW|&G1Q70!>hw!!2I168ngfqJVKdq6+;L|3AQ0n3BGt3S=9&QS_oEV}cy=cM@ zUvEE-$9?u{{{PRL2|LX=ZbPNi0x4=qDoH_!H98m%kC)4HODIfGCiN%A3702srx4gj zyy-PzVycG`u7GlPxS&ZG z8=YdeF|*tXp(jtivcT6`_qbi_;rqUX@5%iVed3t z#QPyB6rLW-;=RM5>znhNbr0=V<)s_|%bwYfA!ZuQQl3utXTi5-wggc)OC7-bWBL-xWA4d z{MGJhAb3d+kM5F=*Bt#NhVbjMNZS4G$)F#E=-E}u zpZnhxy(W`2oxhSJfFtfVmoveHG$&*=)&6cGVv6*;%uvb8_`eT;p;f5tq|!5(lKqWw zk>+P_o@kEesQqCUk%*u6mk@uGm)Esz1IZV{jtk%KG@1UKSE#+1fPuAgS>0uSF(Vq@BHvS0aQ{0w1u~%RabM4PC}~oBv_Pb{_j4n0E+JN4TEp1p1Re zv{_x7=@k@jGy}%DF*v+=3_-9|d2{pdO!pS7f)1hFrC_U%?%Zewq`OCr`hz?*wXp0W z>s6emCgwF~d}F+PvZ0aB&85K~T!17&!8m(|?DWrkix1VlFI0K3Be&hs-M8>6sl_`s z@C`V4@anm0=04=?M3AETtDwKHzz zzPQY%tspOdHvLPznPf}xv)R~YX(P!(E$uf66V>y!axQ2~*X87#n#~!(hZRHfkVWbj zK(^!hS#z`J*?rE8!B7>&-Z0MvDU286>G_U&LSYD-aHebmi~yTC?+mGafSCU2(kmZm z0x9)S$-+^VgsI$-4R6hgz-C*t#L`|400@VNmp8u(P!S;JU9}X3AWg#v550)%8c5ul z4^@I37+11_Iu!8Bgyfg?;c#sVxM3+Xw~d}qW4WSD10g!<^JCUD$?j%)ckbLoeKH6- zZFH@FV{Vfwl-A~J@uj&^p+k%IMjV}rb~MbVKz~FkMfvTLB39tYQGrNQFWUrlA8{@`_|mhkm>l{RI|}f|CWnw z=MA;o15sy(W$Zg`Vf3VwcqoV>E>XnHTK14KVjs`WR& zk;QWWo*<*-r2GIHgWNQ})*@l+=*LptP zWoZL~4@lphKk8i#Y`o4+Vs$i5h|H7F4AjSwq=zq&ILIcTmy22e)l)c5cAL91kHY6_`B z_M#l#Jk%ei3#6lh|LA7uDIGNril=uJ0P;OC@lNLhcdR_nlgLh-fOO{3Mj@w#H_E22 zx(Qe;+j)Op9v(oTZUhJm2`xZi?*5hGzE2Q50P6auZ*xmatpJw-=Qq9XwI!ZF5WfU> zu<7QF(ls~V^3TEftkCnL)pH)8Bs@ti-5eg3HJ*C$V#CGd2B=J5M5^Ov&0TEzY18|= z#}+r4DG^4v*3Dxl?J$ChY9c;1vK?*J zpP`QOB;C->i0tuoW=(zX?s8efQmwCZ>dQ?Jhpq6_nWHC`9xn&UqosqKD;oMO)-fFhZ%EPr z8Nks9+V=u4D3mPC)IBpvKX>;kU4T0Tb z&A||?Iv1pK{cX0$!-1Rjg&7%H#l<^NWd&-=wB>y?5)K;<0QLg>%yzde!E|v=%0gL1 zC0@u0dFqIvq_m6}d=GBH2}EiEE;}aj^1&H0&y^`rMj!xf=M-<7l`*f+^|A3~s-e%@ zOJ=n*H)@avB?rzm-&6@to0oVsshBUSZdatXO+ufDH+Hev9UpS(3NoIiSk=)rXWYGb=8KsRNVj--p%R;>0K*|{@W$O` zF1OmQfhszDRIV&2r`YWE$gijx=VbofOH9sE4$uSpVG6kdPQrk3PA-eWYAm3S7Q+c1D!QU#GM)Is z;6jmZVQTY!eGqbew%vD|ttQsyhw=zfk+7l^;PJ2adx-9a+`Sx9Z+3~?dur?5yZCqo zWl-6+)Zz-2HW-EML9JrfuI+X7&fZ4?4H`z$z#1q>0r@lAnbjhYL(;6BU4;;@fWz~f z7hqL+4r*_~@*tsRG&Sv$VA-f`Zvem`)bzSwsM3Zh zOQ5{NdIAVa_cw2i+jS>qw|7r2Cjsmbe$ZUMGU6eBjGSM6LxZdBwsYBBq|yXH_GLOL zUb6DCJ$Wt;uC5v=kedsn6-Fznu^>U3Y6ldPO#NWql*cHE#5c~aLPH1m`ww5s)~kYC zjO661ong=Jbu_&&R7Q^R0@1&%8HW-V$k_xM`qI+Upb-xrAB^){KF8U<-oC!#`&Td_ zp#0b2GF!xqgh&F^i#d4kPiI%4Y2b2lU>40Lq~Xu>7WA&?^#_5-1Lma2!^J2t3l-u; zqGMwpNIy_fDe)Nb8(!XUEru1Nzo_8D!M9bJejNR-i$KqhPAJn#k#b+!OjBFiV`IsLkl$0LbG@Ks3#jb9la)gmCB0kt3fDKwU(24ktjwGZ5_YkN z;=`;vkgH&z_GlR|u5WJV==|K4IVVulygBwfwPYa9bd^O zhbSEvTq$&zazhB%4EEGddNc?_i2UP6zH|>nU=@l{N%7Hqc_Zpgev*hwDA#EEp{E$6 z&Fo6ON^E0qnI~;QAdM(9U|Ek{hJLNwu1E6RxNV2+`$2)N#`4up{`yb%+FS=h@K=ZV zPtf}uP!;dy)iuu$H~-sA2D(h4+LcgFiJn$Na5s3t*4!*}UAl`xtJ52BK6lXUQqrEa z-vs!%!>R|~2$EAkV7<3KI?@h}g4s_!rvWnvLvWmKswYpcObP0**qzL*=Re26&mYk{ zu1?HX2n0biP}LK(9&{u`rINl2@D0~V3|jUVZ-ZfZC6pYYCkyo@Ai~=d4&jqHj~SRs zfe_VmA!UdkqP~>zjnQDf>nDTBU%KE-%!OT<7M!6Qvs7L#h~^u$ay2T${mW<7XUCOR z8S&&vnak>|k+#iZ)C|VO#f5ODdEi1!#Uv}l!)nh=?rqjlTss1yRbX-m(VYuwZhqNr zwuXPTtUgMfW1%p^&dG-FG6ZBPr^fYxBls^nRjI6 zOOK=vO2hWgjPS&Z6t7OzY}+}{oXnpzP#5C8Du5OKI0{2MeP=_GFP#N>dMMFSveE8J zXwg@Pj$PN)WUG?R5npqydnl+tayz(dB(v-D3(t+CBLDF5R=Wbb2QsC4`3)fnWpbp& z_=nm4woog*y_@pR@Rk=jNnf0S-(`*jPF*j8eKt@}qxUN1P5)>I+Qm&oFj%cU?juRq z7?hbo?-qKj&g)eHGwJ9Ka(2b@@ajNAEdJP~H%cj_C+T6W)_`i_kYgC=Rp`2I1FSS; zCShU)X8$NHQ!c3x*GL~97nSQVYLzZnXAu@z^XA3jW8vT4;cu*-tL$|ZijIhhi!--! z2@!0;am}xpU%o$*;odN&A~}iDcbq$?SiR--eJ6|o$;lz|DxRKpY__i}OWP!Spr`7j zl~K+c2emLJBv*^5D2HJ1_{@fYLR$8TaPgHK8ru@tOG9~qw{7fAw6Eoq7;>N2Wc;D^ zr6bmic43vdYT(Cs?@rYRrW=pj^i6;y`R}w(XH-ld4);BXj`RLOwQRPh*8)It8B2 z%o;)4<(Yv+pD={Wz*d12Ggw2x8vCdGoB1|`i2Gm$hM&ysTOX&d|39|g1FWg+`x@L*v5Wt0=V?9t~4Bj(twH zG&59^IdUpGW%y^p(^8-2R`w#^O8Mt)RiZ2MD>Rb>-wa&U&5qpS+c@ZQce$mcYPGWE z#JoKRDsBH1%lpWQ(9&X}Yl|mU&A)Y-B*cI&cYJsyi@db!WQ{y}1KgIi2aZq8s53_p z)kz5zA2~^w+uY+Kr3HBKjA7MM`?j$01P25_T(4`Ga-4F47?GSQ3G!w8uRx1PK9vMY zb?L2Fk^Rz+Y9ZRiGXpbDOjQz10tb0^!qSMT>^QW&E#tzFo9ix=FCagDKSwTv$%Y>L?E#N zBoWjWL5AF7tjGeB6>DfXLqJxugVq{IoRxOv4KxkA*GABVMD&pmqttdX>zA)A5Tw=U z&KsS|@XshZ`SO7d)HE+#7;VHEjRHvJ)Mihu}#xJ_OSO6uh;Iv z%<$+6jBi`Im*)!L_XM5YJTU7EgDyB7r_UnD*}r@YrdokJa%lU(*jKGIy2<2cDGc@J z;-X12BU#K1ju1*cg(+?B1~UZ*Bq2`bJeOI+VhoIr*q3*qNsMeYb^uzf8`4V`Sq+bo z^n_%jR7)4a*mGGVwvl8Q^j=5flAwuG>Pfw>KEYFDRS<|RS`L`WWkol+)1GHVwego~ z(=YC`)B9y>mWN9-yz%yim5=1+_H6(ckkH0tY;2dpRQT!s)e8PUi($FLR=|=3eM@i# z15RMwvD9t@`o9AYAe)d(8Wa?OA4fn)ZO##ZjGupdQwz!*bZ;*VCCRf?f1?|AFNpYR zL0VdtmYxpsc7Nkhu(=+3Xs__#tho5v@A0+g51$;C+CQZCm+l|4RfJY?%lP2eWxkE} z0);vXw!{M+1!MQ;V%m^pp;POs%#jVU=-|iR=q7OkBNtA5d@(rH#b3!SGEcX)#4^z} z8i0VG|6?`hy3$L+q{Jw`*yT3wH+v~5;BBa7x8dfE@z2EahH5aYomD3RjRkNjD+VaoyBykmC{rg4kR*MZ0YRG!%M z-qzv(TLX5WDAsitV6pA(H|PMuw!E+~7&$^(S?R8{;JKTZUsPmC2+XboJ{oB-((~Y0 zvMw>VwSBI{{*Hy$++}&NkiJ!e6tQTo)n&5;WStWsAy9xG7*Nx1hMsz8>?|!)X^wdO zP4o{dum{ecY;CLF7|MFZDHw|oc{PcB+B&)fPK521(0Rq@HEzL%%Y!4VboWQ72VNLC z6v#r9>q+d@9Q-)^S4r_(p-gLnbNf-jJ`J1Q-{u;0YV7hqa&MLPJr{P;fLm6zw=2RJ zy1rCET|R4@G!S{-(UfBj5{dp+E>QJ%AXam;vPb;PVNkxfs}}%Ee3>uE;%d*YIlZjv z*XWBn=`O~ngT2u43h=QQDt&oJC-(07BjjOp+>x`Z8Op|Tw8D9&2}OY1fJd?eS%IbW zbul`UbG|-zjiA@icM)92l8~0=q2g+nt+cEvEio$8%HpbLSL$S3PkWB07-$U$3Z7r> zU9RU6|HdXK2B0(7%f4dJv^65W5ttY96cS6U?UOdkkgF^sgg^j6=s7Jo3tp>sf_FlV z7H^32Qg>bU(MEPDhjV3BKJ7trMTNZB-oBPY3$g`#l~+j#P@SWRHXBbX6n34sT1-BV zO|kPF0LzIqsL7h!C2mw?CjRZ$^fa?W`j-Zi7^fLm)M$2wpI<{43a5p%+(xX#Ee(uD zD)n&FZKPqHA<80Q9~*L06@yKDsd;#;xNo^2&dkZlDWtL^U#+>0S1#qa+?dllJ34cC zaE&3}h>$6A!kC711N;4ZLiOZCh6-ql;#S9y!MLS?(CAx>i_vE6bC2$j-)3VQ0W|on zD{6Oyd3a_W*8?6U!d7NEoRgn#=6e?fn!)PoD(dP;;Cb#_ZU!Y`W!#POP*bJtgOsh)agdlQivZ&VIAjj3ijtlBIsXj8pdLS-{!QN$s$7&9(2+eNd|V=Z zY7fN3u$CQaql}>k0LvjPmvWD;b6}tpxvE7x001(G&VZ~YFU2GiA}eZNG0;C-1E%od z(HOc;fZ=y`etak3xYU2pAdeIWhF5DUb+h1^EgBJz1IU1ty5^~eI{=?cXXjJLJl8v% zoNuKW4n3+Nn;I*yyIedr6AnH9Oi7Bc%YEA^c|6e?Yt=p4;jz?jL(K2Kx7nxd3AnmA z_f&vIAL80fmYr8CaaD)gLy*-B)BN}$H@7sf0n%)?s4#hO);%=S931NO?;$<+wqg9C z7#|J+xpiCBtJ15GLm%6o_ON8`laYqV?5w0zdZGil$N?+z=v8^KfMA?qHLzv4zIVmZ zj+W!CQT~jXIM3S@A#S^qPhbc6o6smI8A{wrxrU(=%;d;%N^GgCje`2$&s&k@f>^MLY0-f};O<}J@2&d)=qJ_Nu()!!1nH$C4)D)OD6DlI&457Ya1l~S0&-ekU zJ+crrl^b5mI2;$nK2%g*J}9UK>{oHku`x2z+m6V9;NUnn{M+bPBq9Av(u=QX&+I|2 zE=8dcRu4}xRV?itI(f3l@~4(!ofO!qu_}SxqZ#WRjB9*coZG?Lwhq3{j7+Ex`iEHP zYF~*2U7g06k?nP{xhxQDok#4Hl_t**kqr9{|oy(+$ML zscC75b~8I$y^lgxR(sr>oZa}A9(CmL4>0Y9U8kaNqr@b<1C1kAR!5 zBI766mN5Nu^unJ7Ilc?aZH{I<_PBeM9orU$N7C&s5E0osR@q}iP(jqtFaXU{bdyC6 z=9ZQhe?3`>g%Shk$EK*VDq9xIE@Fgl<%VH!-<1izUkkSim4z;HLx`(`J$ahN(n?OG&Dd+;4vjT zmqp2I382($y`Ke4@Zg@|(fBoyBy&RHc2^spjZf^~A`IIX#GO*S>xY>fA8F}|Kiap0 znAzAaoOwkPYz%yZ5c;kM=!lBeLKC~#r|j(2-b{5XyAgL^bpi z5HxN9*~HdXve6y^uv<{U+csSBi{qdP=HR_r`jxK)vY4 zU0IqF)~e7&Lg8D`!a%~_W&j%{-(v$TdEP+F4@4JXTzPJwi46m$a>Hyhew4vg?VykW zSPY^q$3aLzoValW9I>ovVw?lb z4Gq=|u|=%tr+#DRghMatI*RT`zNhdHKJ!HXeyQS5_3u|E z&-u=F=>SCLpf&bXoz^jwDTalJo^H}aLeMeyJ6;oWry8vg#u^E~oj|{)O(6W6(@fOSr0h)0rbp)b z9l}g__WOe+G$G7Hw17f#uIe8u%I`;VZV|CHk)Yep{Gew0`40Gap9HF;0?v2+2-5#? zzCR{?*n)iiFNb@QuBnATnW%KU=F-1S%->I%@$}KCqMquc&jz_GA-VD22g^HMW*Z`P zqK=P#mH&TabXX&&ou0qGzkCtE z<3ha2GR4i<;Iocz_`mObLE3cZo3en_bGE2n0{Zg552>%5-!9Kg*Af5x(tgd5?2b}O zu!i=*OPgEYB;Jtmo)Pcv&MW$K>ut*?2?_7nJ$o|FveE(Zwln9eMN%rV?oH#)BKl%el06bA zlXFY%Vn|k}q-10-ZsM8+7^s*s(^8Ses41wpzmh7uh0Y_Y{mol)fifzQREb(*o5S+B zMUL=ARdreE>6)HOvRIIRpE)n?DP0KyFGcJdXXaA3EV^JgmhOr97_QVT|KN+b*tu>5 zIn5O&wrEU6!qbw}q!zBsufLyqsdM8pD@$-vSL0}$>?*>D)L+SY@fml$P)Lh&)?&tI z^`2>?yVNM?wuqH(zM`Yq@IDO1m8o<47G0#hKzti%)y(~P$!nb==v+8ysbOq+EPAFM z^(fq>FtJuNByR(VM~Q#;l59#O)nA`y)NJ@?uI7BD7*zgPIQ3ZAGb>_-FbXg1Ug}af zq(_D8&6etY@H#kpFtjJ*<=g^$W8FvzLQ{?yeZmfFlm2DI_a%(e^qIfO(A7=Hv&m5vZUmrC@HS51o89b z-;{g0FKo7qPLw^paoOAiF=Z(jbg#YdDlN5bSG>3GH|Df-GnLZQOzH?;D*h5A!r_q$ z++%iNV(Q`&zjZzR`t`Z{p=b>%s5@H*1YQ&j%AdQt2956FMS)t+I`!Y++V+T8LmI!m zw!p}AZS0;h{?96+@D9CdsGgiaWVU-`a%?DXXL-*m^P-Akn*TbpC~2Q z+jF^|dCh(`JvGL3S0lT~d)H1y7^<1|T5=JIiWT(2Ovl&`7;1^KM~D3-XVIbmeJo)g zY|=4}??ss2H8)Ps#2i0c4Vm|;ny0>Pm}1uSGNYac_*53PIPs$|jRJoSm>c!34e#`u zh${uc9GK6g@qM?Oa_*`ljUboV);A6Ip&pz5Wq(bY%q77NZi^T4X&FKcbcjV?-&{rJ zYv;mL!#OCJpQOA^v9mF*RrFSFQxLZMMgMC^=UZ!2fZ*>QM%pvSN(Kc78s+Cp2!+WT zcKE^E#Th}lQqi`PMOh&I?c2xB8Jw4iqLRbVM)&5s=NiVFcPXO~Vv5Y%{G42ugMj>9 zyf%b0DM0^CJcqfA)|DVJeWjxZ?OcQ@ESvI3;>@z!DCOn!&&<0f@mTRoF&zv(06Np}Y=U~eD%2dnO z;qJB-X;mgiE z6Nlxrs;jYyH$}VZ)rGYe2eHGBYgrHODAHuYBogUx&&VN4L;f|}V^$l|`E?im=a&|h zyR+sSC(E=Wjc#HYR-o`!(^SyrLw6gbIkyO8uPvNU&rDriT?Po7HS&=p`exFMSNfWK zk)1eC7$*YJ=PENT7)%|-@mJcfe*Tch0p%Q&QR)%crGZqZ&j7Bd zS|<|BcQquRO6&^t>4Jre`GS?Bbvl|ib(Ue8^AjecB@S87eTFl1F0kFDM5UiTxDyX_ z@{2AU+4Fp|$sZIAM$%@jKV?|w=u)s{QdU$X_YR)F2~3W|d97?lY9>mx3tuaY*l`aH zyEaS=73_wZ>BHWMX~h8Fb7*cW-1qa?sG`G%hAo48^?psEv@$%Qk;)Ib%Ok^mU8Rn-MgSW5i!`j~W-a>Ny)HyB(WR36$@-){Nrt%- zHC5}mAzwcapSMqqP<$>AbgD2wO+_Ps<^Oiq zyrQ;TilFdiq8{E1N2x#_o?;sQ%?cI1{IcZHbn`*ik9K;jmP5`-iWwi_Mm-UuOEL`U z%mcEWX2W2j3({tBT1pD5;S*5oOs z{JCsbL0Yn(VceWB4ed2sf4%3K65eO`_sd3#he>9+UL7*-?U%v4Og42+;ti%1eE*)p zZq*Y;Q?O%(R5UY6D-KIi&`YXRsFkHCmRtvo^S?YLo?l(Q4x_|@vRT@h`x}|Kpv+xL zIi-Jd<H0CfHuIz_f=LS`!+l8{ z5#%9F3uO}nlD2z?zZ8Ep;fanctw^Y;@=HT>aj~IO-r1_x2L}h1@g@i%?h19UUfBLv znXjB47)%r)!6N>tDxtJ0VW0?m7I(kg=buPN$1vxeGM%Kq!crJv*iM9p^xoG*^%hu= zgjj#-Hak%%G?^&6-jVRu`jZgi8CdkZXpjOlbr@20+Y!U9?;2Yt%X@p9vRYmc_PlZV zH$R_V7tZyE99BcEjEq<5CwzRsHwsTMbGs!!YXKnm&Dc3xe~q}6_tVpjms7@QRmVJP z8rHtRhRzThwe=|>)g-a^3Uj2^A4;jANbbu-GJzueM!gs@GwS%nI79XbyO{ahzQ6Jp zBaLw-wC!}$SZCgDb%pZhwt7ObadGFiWYegPdr#jkzLDuOM%zHhg9&iXJ>mghTgw0j ziQ|^QT^<3uI0McOhl9s5ny*~hMiV{C{_BnS>NDqx7c4*ho?>eKV_wnL-l^T9pfW9Y zru_(G^k^};(dZtG5zM3B4L_`uEW_JSUvQgY0@0)gC@DrKGttd-G-T|4(eJQVOEZMh&@5$VWRVir-bqVa zgdZ^j&bu_U)a>R*?57PSqt$y`^NSvg8yIwL#8$M~89u;F_8hTJw|4In&y?|{d`^|f}!N`_VcgVS`;Na+m z$YltkfQ(5{ErUx~AOmBfJ$Wf6V~#)gzf0@IA4PK&nT5;m>$Cus5AnM5g-u+EGam>b zSdL@!Ed*mFTla#=?KEDS^W5wAoNPZbo=Oy5iSuiU+P$>Cm#}~MORZ}2rNMqh5wqGm zQOd=nM^oIt;Py{huI|u>fo%|d3DA$Q46S^RSyDEG03V`FoIR3e>rvU)kUZF>G8bFb z#csD>=)47FSD6vqVX=L>{s-B{6(I+^~n2OD?`wqxs~cl#TM- z{>C?q%Fo<4GD8LuE5Ys$mObLtTjXo~_O1Uv{(M+XUSLcfTUUqQ=yC9B4e)K)4&JL9 z-@TqrMSU$MU4ERi9f8}n4-ZqJ@Ybd9hN)$A4;vtt@)q1wpLgLBsM)!u^~{C67)tC3Is12QA@Jl{px#$)b9Qp8gP zLl`Y?06xj)wUqVQX9|6nfAbbI$iaWpATBoNp(YCV@e#51YcO)NFJV`tqvI~TFtr|1 z`ZYPc4HNdTSvD*_KvwBVfkpYM7^XS#YY1ntoeNjdbcjsbPXFiqKX=^h99^{=D2N+p z^42>hcII;AnXjkA$ljuR`JjDqF18ILOLn=3v(I?_)58+ZEWzH&T28h9sv zo`3(OO!RXhVR-~%rB~X*1Yx)Hg@%K9f&S01nEI0&r5eoK*Uov#bP@dubZj##kXRd# zGWYZ0RvNI6W1W5YkMH*)tmY1t!Z&-?j&SB5$rJJRp|1H^>QgmOKNXnI%K{_zEqOBE zcS?QTZ317oWC-QJfhDFUmZ0F+0MpjN-NB@H&j}G8}4z zgUVmYbg}*}A-gY6UdM7+QgYYB^9JG>cVE6kH~jX6_~>q8yD( ziiWYjtrFU-j`o;h6ZfF*Y(4RKz0AJ_X& zWWKiFY7J^R{U7bP9ubmXFYMl0U|d~gm7_Ft%Gc_A<>-g#l4eN5xVuKT_D``{P^N?% zxRTz*KuX%G%?4R6gcumk>vgf2c;b1ZzrslKNn_)enY9P;NJrlDCPTZ<%&b9ma#_7B zou%EItdX@{6kQcY?uTi!U^3Fk8TBB3mG@1Z{!~8UPL}JJW*YA$pO)Y(;~;YwRTNn0 zztp}ae6V(${hN`Aop-*hCi6_MR}@4+WUujmPeunz0(%TX2T23dW&2I zE5)F9$?1=jwV(w7kN%O1USGp{3P(M%l})6E>P>^)`Q(*V#=6@JjNJE6d#``&PA2CG zR8l;9@=xL?x9Ug!?WW|TmogQ#AH9s?{2>U5`JB6Bosq{(A`p0InC_E8qdCvi_Ec7; zRe+K*gm!t61*W?X6W%r`Mw=2x7OL$^>#v72C}I|^KbensVVHs%(>*vjc(FsEDJU}{D^PQ6++B2Y#TLUu;(@K1KeEJ9|?|y zVqf>!lQm*`8U?R!f}GYf@GNhINtV$wirrEGLbT|nWIucgNWTw<9FbS@!^p!*&Cwluff>u!Hx1LTtE9Yb)L;*NPa!hnE8o}%-bva5C}*Tv zJeCeH?qq_T9X}0G*v{cE=)A#Rt0)TESZQgW$Dax^gk18J=hmK9PxX7{gN9vVZHH=- z$_qRDmE(49!k%;DM3-t)_oPV&;-?DZa8H-B`LcHllo%lQ!Oc_bebbO`5_i_9caQ`U zH?^U@3KHuYuvO;`1W-0y4SD<4M@6~oIN@^5wpgaizKuO)!8lfy5xW~>xGVN4Lr8#( zmdULT15s{=+NEv;2YcT9wljH%X&5y*9|H}ouTn203vGrRBT(nYS}@qk5o#}2$aArw zF+B1dze^Zxd#=t4D65KaMz>IjIOZfdyz+UUOq!k%q*V3!Xl`BqEOu7`=P1Ij&ftD9 zR})@zfpEFt$g`wBKYuph;-#`{k}B-ck@tV#Bc|wRt*%Y!X09&YeISRW5Wv+## zn(NLNtxRf^&G6+kL$zenNBT+~s!9{jATf|rjhr+Tl+Bf^`q&tkxZsU~|5~*s z7Lc?Z>UBx*R6cf`D>g|T+qa9hhGUEEN|zqseWM1I6mA;xYml{6RAgU3!N4itw@B;YQloqX#-!>)61Kz5WUJupWoe zH*=ZBdP1W^cEf@p#s*GbY+?YV$s4)wgyAYSy`kZSMO`4P?f&@_2i$P zH^A`OGjnI2+5!%A4>aZ~+kp9?*-0%DN?r>E$ynR|+}i!F`A@h!cdQpkPYK&vuWDSY z@(Rdh)xJSN5+W^7`FB%dAQAe3noBr`{HoNaCOOg?b% z^XK~9-F0J+=LNNN6tvgu5nPDS|=%*1eu znNeqI=|)tTQlVjo>K&&%m$|tH*3*LI|H*XT3GW^32=Xy(n+rZexV95ykjQU;cs$o7S~$rn0!>r(c|wlw}~ZQ5234bQ>>KHFV&Up9SNSX;Aw2UA{%-Y_-**S4eFm z&iVD+j?yzJZ$pEo;HItTI_c?||0e-@PTv$|UC`-0_4jv0nGgL1y*EWq!H+TD8RHPs zD2SqPokh!WS^C(3RlyF2CjS5T+va_1rwbzcSu{9tf`i{%H(BAyak{Y4K+h?st!UTt z+3`rg|Gt>!i~0BJVZt1nf0WuzjMFnlplJm2s{8+~_gCXs1NZj zglR3)|0pe?xe61pMHD>$YRP>6>=#M8d_jDOcb(qs+lZf+^W$IT+oDto=1B#;Y5o81 zvfq!XCJ@y=_0|=T9QZ$V^>A-p7AStv(HZ>z`}4zJCtyEXWQs-BX&n~=ADC$_(I20$ zmGs~@Lb3dXp^*u(1eGDB_m7g>7yjVt@Z%dBenI3R;TN6AYu<8{9}8}y#u={>-b@mh zNKI_BV|M(9PHBnA!x7p~gaa=ObyPo68BTMH)Diyt@ZNlg45pM{Gh_R4Ti8|a`z8TwxvLR_U^UC8~mr^T5Ha|L?$Q;}p{8D7emWk7FZ^r~=u%H+P)+4! z^Z(u}JD!1_!6q95>cqcc+TgD%$Jdb)L)0O#+D{i`DF1_!hcz-rIw>?+mxqTd?A`0G zfs90lT=L`LQ~jMPvugm+hgU_wd z&;qez*LTMFT97`o!ZpbP&F^3BgjljbmpENg&4W9t)FdG=w8hvUAT?v!ULc(6L^Usw zAw{xjBm_NnxPD0QNE_rwPO={-bNH_evH#`*AYaCZl^dZvyl2+@)U+g{#{z z*rT#z%LSK&Ft!^oXNZ+e@&8_QgyZ1ErcUkOzkDLhiPAK3EV;W4s{+xjS z9?apq1|0c%zj6PcMe8?XvTVZUop<5qF#r3e3~BG)!S>1ipv2>ru73}}l>Hrj8Py(? zSV-|BJMr(qFXs$>^`9F?g(m_}kN@#B{r8}1BvI}=9x<~_r5~7ve-Gt6RQp(1M4e=j z^nV54Z?T5;HRTjuk;wRIKmU23jv-Wc8>d0m?{doj__&N1)9WAWY##r_+y8tYD{(E! zU9kdX0D>IP@t@Cw1xm^jgG)5E03gKin)>$;Ve}n05JLzS!}R}oAwV*fS(y6m_CFRn zhCr!K*Eu@6Qbk2YMG``g3Oq(7!bx+4Sd%UQfk>`@(>a7 z!iJ9UvApc#1P~l=6%Xgr^8v|)%%2lWEyqX(4YHm9%9fCrx+GEoWXpUc=PdejJlf(a z0c%r`3?fN@bp&ovseJj2+i*QVUkb#u9NQ1IY{?E!|JvG~q1zHUI5Y%CgVtp(Vdj_` zl<=)%(5w>CMZkzN!Sa3g7#}u@nq?GTw@K%i?(|Asrm;u3q5HuUt%Br;JMKP+>kZ4t zOeQVSJMF@k^=vWIvKZQ?M!L-wTqLOX?vLSxiJccxQ>yTXo`|TPL#=bap7h^8Nj7qT ze{}B5t5r|@{?~~dpM$-=YUk+?iEuj$N*?o)r93GBsq5#y2lbj$r%(bxW5_WA% zK{(pnD<~{>|akAN1 zz1rijj$Hd)qrnl-Zx2Ma6%n>>nu+c7hDOOoy$ylU(zn8Z{IJD(xmbaRJ-%Rr)p!?yL z^&#+8VmvBu#|~FQK*bbrvLG>+(r>0_8x}@-%xHk$%Vs=xGdf@RrT@{%DgzL}p19=R z-okhB(j|N?c~wbF-&Vc4RprtKTI^fVGH4nD=Crq`H*+kfDkG!$P5`oUQB!-jNhOHp zev$d2bK`R>EA7pf|F|YP^Qv@`EXzKbbw5!z#<$4){T>U)<2ItQv=0|X3IBD)0%jM_ zqJ221rcR|?puvudU3Dw&Pj~V~43n?XFIKL)%N>FaFF+i8M__z44} z2!0n&8jPwu#Ke0ZSrk`_ia}Sxp9cArm6d5}&$E!o2fz@)Z3rNR4` zzFIGf_O2u`VC_6NJ5Uu*0EK^vitj0(vxNopJ6W)?u>n{g;KTbk+Q%tfqvgQ)O|EGl z;v=;7$=^av;S9ZLXoA{cl&H8X()MQK3r#fO!jZbLeonI(2pb(vr4V zo1WZ_%OFK>VP+QiC~-t{jh^G`!^lnG6$5P7@Zl9ynU_VVM{p8Cp_xs-Izm zmP@M7(h$xKiEJxCfH!^ZQbX!O-W5OOQ;GkB!wN*sly;$2gRZhp{33 z3NkavuyB8)Y*DKhq^BeaiUmAdv(lob{A0`HH#z(`Ne*3J~(aL9kx z3W=W!9xZZQMi4^>UHst^#wbgfsSp%Fx!Kr4Iv>Lqsd@D#h*o5!QV@UDp@qBe*OQF# zpVit%`}@Iv5u2{sU*RCIXxO#g?*p_th@%(v_C}t~0?uFTtPI$DUtcj5P-GY>$CMs; zxzS;@lS$l~y zp#(>(OuHCX{|4p7Y1;w8)q^13w08R1zuUehw3*Zh6S$P6Z#tW&l8do`XIEvfYJqTyR;A?0P zY6{S+OH0F`72Sp@pYWy>yA^@f@;o$i6Rrk*yJc}6m}1+##Z`58h*sBBDi@T_UZmOq zYdEvK&hR8jzE2aEr^-6JQoY$JMUC2>B(DZFVx^Knh#P|4mlEmeb#XJN$u+Ej3S!Km zPlO;6LO~?F{_SeM(GsxRsZ=>*lR4Zb{JTa$=UhEHDoSj+xcYEe1Nnq$%bU02C=bo9 zu;4Ye!{ND$78De$-b~_Be?yXr8@ndv}+aDLwT znO^}Q;Af+)$U;EwSLAT>9>*}oyw~6SQDTP(r~#~7Mu4i^bUGNv0^@NRE0-?%2y>2M z{h{JfciaeE!sE1sg+LA`ZSGTFV4#}cTJrydOz5!6IW;~qq=pVo*&HRi*_E3RC= zG$K5kh32R}*vj@iL{?#A@4Ifd+Ko%&m#ate92S)cg@*Y3VT`fSS&&Q@IY_wVGPVZ- z0Gghaz=r0AD<6Z^eKmy81aYs~?IY;7YvIbs<36jAKUG$qwS*>uW;dLa_TENwY_jRm z?i-Qm@Y7o$Nl)nkUWLf|x6rOL5wB|r4v5UYSQQKs($O)l*HE%1#XNErW;=0^Sn?UG z!#WO+^?v?1nQ45r>VfPoqAr7Xqk=$uHTBOWzX)xUS+2RO3RXonzOVO zn7H^h7te};S?A)iGM7JWnim$H5B}t({UU#ds8;?XQIa&blS-rW2o&jfhChqQ-t64G5l znP@9>bEmQW(Zw@cSA4|?`tDRVU9*H+>xs)k4$eS>D2c3Xmkcj3!~msK(k7^F9<5y( zTL7fWZUyRv~rjFaN~=B0$qr8s4i%Xg37^K=F{8Lv)qCL0&g3qHSR49J9hyc0MJxS ztvgv+Wm6hJ3l4PMAxVQOb|(ERD~xzTVaFB!l$*OAWtPQGXA?IP-m&ou<8(VR@kV|gkhtOmif!>ben=m?e zp|)hXXh^w|uYs>xrDAdhMm`Lzz~LqQT3uw#qBY+^Lh6k~iy`nTSI%~Kc5Yxik92YB zJgZk7GRyDwU8ScRWgE!_qKgZZWO+-3lWRd2r+s(kQ!}+*_0f%RfA%u#!Eu$U4bprM zIxpQZFO6CM*@IUq-Zz2YVuBRqz6A?1s2Kmu!Xk73phWF?Qn%~ae%x1%BZ5=R3rMEc z_VMxd@ei&a!8S_ogS<8ni>O<|4O6#_OtCAAVaEN06{&Jb`Q{Z)_$+_kZTg;<@_Wn# zy<8imZSJEje{0&ca9i@1v1C_FmSW;4fhw!Kdf!ugdV6TBXLK}9GHE!%4n!=>dNYV2 zhDm61n_V5IXs-{XBuvvV`D4SKJmJ+Ufi=Q%vy*L8e5c zEVJiA?arKph`hRbIarDKqfKqt-EpCEE2GdsTG+SJj%ah)l}yFNxvrcQDPf6jDRTt^ zp)p()jv2CBV|%@LN0u7|OLsJdKPAE?juQ5T6}Q_w!zPyr$Yh`9l>ulpMUNdY z0Nx4%>_&b=?fhi^gclH>^E!uFf(A)iS`HSL^6|gekRw}dUN~K7e&-}5igmcZyi7R~ zuyiw6Xd^WKpnJp_4K`(qTLsj5Ek-LE+15*(v9pA&iH`HmowXzm_kjzaczAg|VR0nC zbD5$XD=}`vT#@IK;&##)v4DCacC=49 zHs`HD>$a8$l4@N#pzLqB#NYkFa(1u(_r#~(uC2qI7WE*Y>W zqD+OlwR^^K&dOr!=fp%<{D!;>N1~Hu}~kgw1eWFwMk_gn<_ZYt1rCAEdTKwoh4$asyWij%S%fKjdC7zbm4{;BQ7t? z?K*;M)U+E1^16dVecbj1$4arSg81dJqh+uJ>s3o_!uuJ~Hs%(Z`F}rwB*^jZRv9yJ zNs}PA1wY3@_E@F&6r@R71*?~X2!7j0Z1w)gs=+h4cZ+XeET@9;5#^dHD#h5@*!aC} z`~hhCb+_=Y#wbU_oEZj*8~N03P*^~^pn}I2aPK~)r=u5hJ^D0}Gq(I72k2^wSXFa}=}n z&Q*(9*XzmhX&`(beE$gaL8nhLuD^AT0~#N{ z$2_6y%-72p7#T+t)mX`*l^Y0(GhQ6~`}-qt8_-<75(mCR#K@I0#cF?@j}n(NW`dxm4yW5> zL(9)!T3uOTUs{1+*sM=caMr9M)>7Lj(?Rz)+v`@>R$cmNAz0sCDeBz=Hn>lBSY|yw z06Ai0c&Xb`E@~vOzMcW8|KBOZ7X*rRql9TX3Sw~tJ8I3xN@sc4s(>hWw3r~T$&?Ya zXoi(H9C((-DaX3nVn|Npu)yc_!#{AhvxTPTg`bU*9CTK8i&){uVJxiXLw87fK`^p`NfS-m-aqrc#AKLoLD6fJni(1(+MYX2cgy}^iI10jC} z4=A6+UCtm}4Gft!QVxfU)kmHns4g#=sb0Lo zaWvU>FS2=k3I)cz5kiciqRKB%>L=GtU8AC-p+nBVU{eAJZ{_Iyms0FiZ{0~Z(Tg3^{ZT#wEXhhG-s+x^T z@5|CuS5upCJQd&A!qAG)Cuk`pCnsCW3B(FJZkm{>55X;x?kcbt%46j%ahz@lF?}-m z5NO}Dc}J~9`L6grN-Q4PzBp9m>gpQrz76VEE5sbS^SJ#HPx3>G zn60oFHuM^wFYGVmT22$&%jBSJ^`>^BPW%u&3y2i7_XjB%7f#$kd~gcN7y#^msg`$I%W)CJbGl@$S0d`+LbK0va`9>S8W8lnASjP=|`y) zE_zzJ?Bkz6&3Z8v0S&tvi`Z8cmIuq}Z~ zU$2W1%9=NNuBbkaAi6T!x{t^HLVTBKYSN$GmK;_#tfY7>YrRd3+}L^~1e_%*7Ewl^ z`LzYUX|d-%FT~6aEAPMRMDo8X7vWTrbo{yUiGmfx#p@v9yvJtcjD?^Ilov;=kbu*Z z#cDGlM|YQj$Ju>R9Y4gT;tZ)5X|uGIkuRkyaiE?QQBJuMI(7e9ght+o`$w`Xl5xr9 z(AlN@$lQvh2mLnwj~9;{JGM51o|jhGold^Q*18J)Uz1b!o;`e25`vlO!b z&KQfqf_b50ayy_cY>nlWNsq^DEVO~E(k4<0HrowjVR>fp%ga+>tn4LF>mWslvJnR7 z&Dp(QPRi30j}gY>fb9cxCLytklzP4Ab_CLj+xT^nqvuAk8 zE`ImYDO=kXU4T=XOF#gzqYNq|C#3>~flGvU)CtgDpcGmIt!j5}(-Eu*{uyv2cn&yl zTm{AUDPWgCu417Y0bvtZ6I%QZ>YPOV)H+b%s&Q0Uru|}{0O>`ed)GW~SkEY_2ygF9 zsc1PT5ri-y&D2u;$zH%66FbHuV>eYF7|j!lJle%b(1D&}An#~@PmlZB_@Ao@0#4)O z93H!9HO41NT8~-S_W&HgqDEtU#8-*Czv>tt|MKNa$Q&*KaUf9DfzGEKep3!?sa;d8 z=DL#`C}3VCTl~;$ zv1`rMr$z-i9Bf43MO=|I+Dh&i&jajz3 z@2`xFbR5j>vN3v|xh$RHz_wyi*sE+-SafdXHsaae;=f&ae1l~`^lh|j+wT9z)>S}7 zxpv)qZLfr&lpx3;0#ec`sDOYH0t(U~EesvfC<-GfAsqq&q98qVH%Lnk-67rmpHcDq z*8kmi-F02dac16m-Y3r4XP>;^#~{CU)^yC?`~}wHi-NTa zw*JiNWZwq|L2hTM_+V2&=B9Oj4pdZSBDohzwuZ>7o)>+wbu1ZLU$-{kx0(@8OjHo9 z&PvrPYHt797fTpim0!ysnF zWPg7;?~O<8>gt*MCdSX7gA95{XD4nIX&bU#auILS-;Re#Lruu2T}{w&A@!QJg>k1m9X&t_+J5|L%tUJ0o-!0C__2L=+(`=zC%kWIeQalx(Bko@So zX2Xs{Q#EhXz0;L`$hw{Yo?-2w1QE@H#r91A15C9<&)XKI7tS@=4cg>omt|Sjjnzyd z#@2T3)xE-(G%nGua)kSj;xv-KckkZfr{PcJU&~7K^Xr$kj<$zg*+-UAQR|zO-~9Pq zp<3PpF%#5ZJSibpjE#-OLbAR|3Pzu*3Y%AW5A(-Cu4id)6yNo-LvqytE-u$S_ivCs zpN>t+W`hl*O8sZgJxr-vlpf4z#l}Y=pJ+Ihf5ws*)#;*hw#9{aN15~XIoWjEtN?-F z@W+sr+Gv7SE^1q%#+`lm1;AOcb`<`KA|zTrZBkJo?4ucg>5;?p9u68*^-Um zGy?xWL`QG$i~KH?kjeG6NRH|1HZukRfxRfJR^9>iZ+UGx>niEx<&`8APU!HlXZ`>xn~sx>eO8occ`Zyl!{4uuya&f80+s z$1pD2s?P6$0UTPaSK1EO;P}p;O>%`Se@(=WpQA0Br?Jnfp67w+=3}M0!ojzctsRLc zhoAe`ahMIMVby>@N`?T89G1S@_ZuaH*4P_Lry=_$vto-$WZr=w7ne=2-2(3bh9diE zo~md+re9<&!ZgpZ)`!efFfS#=D8GEt?VyUQaS)9p|KkmG?H&%}hm#>_J?regpIb~_ zshjY-fPhikBD4I_UCE$TvFpOZNAcc@yeUce+-8)E)n$hp_Q?$6kQQSlb3mGj+(Qn0 z7baOX84zfs*-){vDBAQk=}DE$v3my1A3uKNfa8XvRZs_~3xLXrsfp^s!H3|S#Hx9j zgk;*bXu3Jlu7Q^1Ei|%pCbgw3|I8-l!$<5SeDVEneT`5H>@CBDYbQUhbnC_339gbu@WIcdHW`p%;wKXBiYw^Ww zVyNhKkW*?O4>)wf)JL)SJV*h&t8$h-EIRrCz^cUj{1@c`kd*pyh&WZeIt`^h4N$(3 zm+#2ZBZ@Ps|2ra5b(06QAweVsi%wdUM=e$mUb+P8Af_5aVvLF(6BEfiECwvMBR(I#q z1;`=A+yvRrC-U-RwnbJ}R-sIM8+F2^4U&x>wHKqwwmh_*pq`?VW2g-wmzvtZX_BZi zt%?%_MnEKPhhrqHfYVFTz>pjPX4`YFY4_j|W4c%4@3JnE zhf&wSUP2?bXK)lK6Cv=~TP!*PB$}AOOh1W-qq7e}-CalyeJwfnyVEecPD06@8UV0& zTCY7yHi4SBueWz3mvMJmUdul&3n6;AGk5wR%LZIz7-}tBI90rp!3r{blffh6!1kz; z)^M5ZQew>?IbpB|D~eC|Hq7kx^K?-kf>j=u8p`d&xA{W}1gq3GLbOykzX+v>p<6z1 zj4ngT9_RKdB$0LwuNpsTy3;(81npahUmYAA?%u7C<~fK&IW0LJ=_+@RmcC42Yw4MV z$1N}&#hS17^*y86xl%&*@2VD0fo8I`zt$RSQA_5bovLPE<$AOwo7)W`b$MRtMssCl zB~-AWmNOq$he10Zoy5m`3J0!+aGo&jej}r&OM>XfgoN>xIx5Y~XK&=6gU1Yq0bUed z86=kCR0rzIb$LT7AfaZlJA1^+z%UE>UExf;Kc?}_iIOr}xIGj@G+X=iMFg)TimT zV1L}1iac5iH#p3K(*iW-;aE=7IH=e0zb!QLF(70xWAwIx4j6>G3twfrcn+dO*Y2Jk z0bzbkN6_E`T|>4JON2b=$hY1u!*%vknKy{pX@Z>BL-i;vuUmi-Y80CoGpbbpT~!Vt zPd6^N!&V&3N^F{#g)fwzg!Xe~dnl^d*xGtf&Tehph6*IU(DozqR(ehMib{>QDA>cU zf-6M@)x!r5bi;TaojEw|(>Blf5o++WTV<}51$A1MyO2>m)YD7!+4d(On~IgV>w2_z z!6r8s3=kcJ_xf7->yCzx4xs+rd@^JZfE8JnRVw$h$aKfG=65`ESIMGbQn+G}Wxd1S zFYk_sPTW!IiQqCeEj#dQlN>{=4p_C8Kso57t>Tj>2R{t*&KzY?tiF9c)J|_^mCwc8 z6f#=2Gja%(^rM~FqpQnkvw{2-Y+dvn9UeD&g7%LCDvEQXgt3ef-HT93)f5KPi+Svp z<0jD-=PDD+_E5CHAMf^SyGn%zdIkoLC1ldlduLDe<1uh>bk1))PlNg-)U7-O0r`LR z>J?NTL7cDRWf~jG-=CG9zD)&|+n!VDDBju&!ITsbKuZIitpqhbxOjMaIGcgO02^*V zf{Bg}X)UXZMI@?tckYYpZl{8$;9xW)QLVnd zK8^G|kiP{z2<@eywtj23`f|jYdYQ0tR|^f~1NCY~ta}=Hmlu1DKqc-a)h1FW3%S zHpz-jfT&`=nG`N-$&gQR@qSB-9~d+Sm^E@X4-7${mFMMZ@uyUcq<$g$i1h~YS)UT-72N&A^2 znx6@-ka|uxWJDE;R-TDap?=38g+YTZD@Rg?M>qUJojN}e%5Gqf-uq@M0ZbQ9B5#Vj za7JJcE#(5MJHoJCO!JYS+>OLzU}3?k;v%xlhN&yxxWmeA_qR3!^2$KY;wVtY5}a^h zIlzTy-wV^62CH=eHH_hr1DzKqJuijyNQ%NPD}s4-|FNbfM7bN(_yT)BvZH)SG}SoJ z7Z!$xi(OsU4E=JLjF*O-9k=jSGHOkN^Y~<p6c>|3(xhp(v>WD%RTC+8P>*Ypq9VU^A4HV-1!SR#V>y2r%d` zpKblkcflD$bOPuoSV4~%hq+lAc`iTsai?g%dk_f*(aE-aTaU5skVJH}wV9uK3<*V@ov!41dN;R@72W@Tl?iq$9vYuEU%Mn@HYfYQd+lIwDXC(PUg_4Z^u?PKXA z6k_ARxYVGp5q*G09_?lp#jF2RoE3eAcVM;aqm1b2?!Hpuuxvy?LJ}Gf(B9o`3yZ?A z=amj+I(B4)Zp$llit5gXNFxw8^Hp)}1hIEZ!Kj8-M59H$ne}siF;}(j%`Pkq!Wzr@ zQhusp{y1eS&upQM4@TZhlhPCaALqNb4SL?Es^$5w^?Ut~&E}<`CLGduDI`60=5b{f z`^9iwBxAv}J*bASxB30uzy2Qk|FAGMG};6MIa+-D|JdVJ>(c8PCI+Jv@BiETJhGlu z6YClNa!dTrC;sJzx>ZdKc1B1;#{U1$a+Q+u;8u^9N)zqWJ)T9s-+7H)EvfhKb~N&S z(N9y<|9qg^`KEKIUX>i_Uk2g-^@4;2Sv;;DCdu&OzYi6CnoapXz3snjYX9>-tyk=# zWau~?k;r@hUwQBvLajeNhqTe0fyBN2_tZOnBcgJ$qn{n8j25BzZ^NPQlg9keyZ2`Q z|5yBydc>j{j_AK7`u6I=|5xt1aU&FIgd`6^bNxx0{(K#D{CN{y%oGjyDU@~m*YGFm zT-BrgTR9yMa{T^f77(;~aO;@pZU6ByJAS9AhqkJUH>n4Gv(_;i_4i9|DD#@?Ff{r- zaUMG1UuFTS8v*&kFI4FG(|+DZXxjb*RWvi&QtaQRDhg~LGmr#C|MIJ=x)C?;Gbl)E z{@X}C@Mi8vMk2+2X-)p;3*F8)CjM|ERu%QuzjYj{{eJb1XuhZ@!&|msj2j%r7{?BXivJCIT!oq@sFH=!1 z*%ske@tz>bMPjDcHULbrwWZ`Wzhmt3CpY)vaG9`|-tj$O)cER#B#$>yJrN>&yoRpvgQepQ>4@NW?=B7` zkoxO2P6P)(-r-G3(cL!GpQ&HXsO5?Fb{XRbs6!!H2Bc4SXA;!m8vW0skQ*VC zdj?&b49+vZ5dXh!y_}euf@G%-l;G{NZix!o}S0A4`Fe7xvqOAmIS@lZBc z9#NQ)@rVJ--A($_h;>o#t6N+yy=!>~&d)Y%Sj;{E_7NzfQ!97aNcq*W^^uR~8d_T+ z1iVNHg*qmRx- zvck^3PoF+L1;Cg9&lKujQsL~h+v6`!o(1EHzOJrG>o!3qkPAskNl8vl2Kw~)io^?# zkFFG>I4!#PgE8!SjW18CBasW^#m5}wzr@2HR_jUJVQA|9`a4F5wQUNG6>vRtN(^qD zo}Za9w}o5{jot*BF4X(*c<_2Tn_Uk^%WCu0zz3>i3retz9f={Kp{#1#WCS~%u`&G+ z@*B#)AeAjwvU=4E1CbC?M*m0JU=wqJn2DZ+p{1#5?fMPK%DFf>6?-0=Il1Zp|M)eF z17{?U>kwE<#!RfBBoq{avOBXDAiV-g>!9PNNq>F=dLcuNvBQ76zHEBjZXve^=bSN~ zqMV$?YxhWnq~J4oj*bqDjEumLJllGMinb{We1D)o=P&G{a_?So_S&+1WR<2W15v*Y z$Msz0U7(-(rD+{6!}yv+q$;@wS`F>o>wNj=-;O>}Q~NOyHDGE7aFDsHsp(e~0LDX| zookSQV@1Bp--7q0jGwgV)VFA>Q}HG{JN7bfAVN#i_h~PLGzw*-{qhUJH*ZcOfauiI-OU}L0DDPPaT4lv>0`dW zK17yQ#VbfYmr8J#4t82yDP7Gu)ckqDplH7NVnAbKv`d+A{t`CJb&0TldCkYVtSuUz;B?g58z7GWH^1!wu%$F46076|IjEmuoVYL0 zvWCp7HY$qs%d;TjF2tiaN4X3{vrRx;{pD>&*^IltH38uU_^hf<9b;@!LK6=s*_%&a zm~x#K7?yeP;2(wXahvWw1HL>yfaTi`>bf0;A`T-?!jEE7RV0XWphz+zzI^%A@JnDV zLXu@M#dTF>erjq8N<@5Le2t}T+T5H^a{u$sKT@3(dryvk5AT>7I_0_+L+6sb_V&Wh zknb83<%{Kt#;fmJ&_)sP$Y9pqWM%dD_lFMj&Lnl~6|pkMb-TFafz34xBvSBezyas- zO+W5Dj59#5(M(D`FHe4PDZ0sfN)Vt8$Xdg>kr61VNZWlMvQB89xYDeWFabHcJs_pg z$i&Bxy##kKBu6<}W~k2jY8I_@#|~ckNSog!a=8JI(?UO<7?YZ47p^U7oc}e<9FXn$W z;zHIX!IqXQC9-o^a!GZcM*x(849 zA`D;?l9>h=&ThWd6c!F-1o&;B&T=u#B5* zj)rk8Vdvst<^Ay)*H+I+PmL!}a-VmVw77PEg~Ieg8%G;Wzaa;B3W!GWjpJ_M3dOP( z&qE%)yStl_vmiJVw7@OAn9G1T$UE+pD$lH(lt*(vj-_`cbq)X7vWfZ&gQjwxXis;V zER2sw5bRX)Y4#qjEmX+1^3SIZ6ssXI011z{q3wg>)zyg)Ly3tP#KVo?dcw)vooK&DL*aVPN6L z8HX}&EJO<<+5md)$FGXb8X0Ap+5yD3P}+~Ji-NxQi}Jw4hkz4%d3!}s$*L6dva-qo z{@%ymLNGetT|##05}+|LEQkxl-;N;f?1x5-kuVFPtDZ&?-o(sNY&!R!KmUy42N7I);>w`MoXQriqT~0pK10MK!UO2yVv# z3n=Q~O}3csf$F^Q_J}(fhdykNF)=Yi(_2alpZfvc0)SDE;^s|{dNu3>XpZpbh-g{( z(f@=ipUMC{gWwL$>c1%%Abizi5nXOtzO=xJ4` z_G#GKfjbN@*1G=5qWt~}%|bSzbDyesB5{6dt`Sn7M9&1>FAN66J*j#jtPj&)LIH6Xh;|&hmpc}0UB@Gb>(?Dbdcyf_=3?gN9F+zI8pE6DqRcCS&2ZVrmeyWy z$j66_BPrIl-^f4JMb~`76d-N)yWd6&7s04(c(qft($c2tmg3i9YA~tHuL}wbi;Q%H zt{N75u zARh>{>dW#1sPwAp-!#CE32;{yAMEZH;*BIH2JYtq5=o|E_OvqM?gLR*%gzRDgmWD0 zVH0#8H+E!|HG`7R@BE1O3_z_m>pYrKV7OR+7I0(1u%7QKdFb5Jov*QL21|z%?7$Lt zi?~TCKpxiC=JYO&1z2MM32*RSDDU_;j#u{0LU4GNeacw&Apc6$e06eq+VjSVz5PQi zf!k*HYjGLPP`RD|9b!>eVw3 zyJfVyJN}p#WBR#fjx>FG6HGwW1Q1lQ#XKw>1l>; zLm+kQ?zhTTUVG^@8^gUWF>m5CWjp5Kf&~!CPxKq7pFgbY6V~Nvrk?)nuW2bCh~f>X z1K3$Yt+Ktpd()zvUCo2k|LeqfVoLU4_c5O47l+|qpBfxT@k?CmeKI#X{~=)4E! z9exuNx&(ZH-ZeInl&sW}lXDkO<4Xp3OwLV5S;;6Hr2zLFI{Rv%B{UBRnVikAmGh2g ztgWpXG)DlcF^b5rz@W5$xKD46y7DkOo zj<)RwBiUhS0I0s?dNH8Jy9o{;CIWk%!NTbnXVZzLi44H;;56++1O`U1$1EA#s=D>H z?C=Zr{O*7UP)B$4^vRRNTo!uzd#Ca@v!c-!?NROX>C)M>su4UMFurB!zv%pLNXe9^HZF*}# zha*Zp-npM0?l3LfbY8~2?@+tF)BrluyV-79b_Usbn~ zIK=wV3wB2~aK!4`P0jJqT=(!#UyR{{2$p}{C6kh!@&kO6f&BLKVX$iV z7u$#V#K8dku(FS4*zxJ(CkwXRV`F2l1gci8ArTnQA=ub)vKw%zgEKGcI~agB13hp& zr%FmnDoXh1BD0Ps$AE~DiHQ?5H|HVu+ID6JCa3Z2cTWNaZ@;FWJZl8)De87ZlO}Z6 zuji}jkV#n9p9zQX1NXjMDDxN6#qH6oXWy_0UDG9FIZ%Ey ziD$2KoTc+NlJyfqm1+Au`Zs{6_4xTFC64Hg8`pizpMG%VwuZmEeH&tU0%D6F!(~SysxD}Y@!FAZ76c9T^}IV1L0Go6 z(*e0=YildjbeHg2`01AW02xCnaVBaN_PyIj`@_(QL4rSUR6erWy=nIZCqme@G&>WP zX~n^1rF56-zH?V2DfudxjHD!F*qCGuhKk*lzX92Uf4h_q48=00YPec#&AE3+uk6GL z9&V3210N}0N9V$Y3um1mWw%va#2JLPt86pPwCvm4+ZpD&#{423!luRcqG3sWWhwVf z?+D01cD3)`E;cb9Ff%447AiaND>sByAubTw5t3Hj{Q%Lq_A}GCXv?yu_35iYTiEI& zpno3TDVH1p;`H#rOoIQ=(>&82@uF99Eu-{_#TsU|wrHMCRY=l&qKE^)IJ)BO5~j#( zxdo0C=xd@&4Udh5j!w3TH!!^Je^4?3WU82BK-AQWDi2y(?* zoBy~Z%M`}ha0_QTA?n8uI7VJ<_8Ih~Ia+;FVx4JS##NTOcJT$|%pOds$;k%GQafXT z&kU-vQaiFbMon+(Rev+?J)P=)^uQoLMn=XKovn@89Kmp^pCxH%X&_Urpb@@YHe6;l zTpBp`i~wpbP`AK4$SIA}US?=+-n;P6jkon~AFT2rOUpD?>dNiWxb(J0Tz`G~YHl~d za~HC#($_ZhyBR(-RzLMzu)|eZk@%jNAWa=jF?OW$6My4~%|JWu}9X(0zIC_RxZDXlQ6_tS~DV*Arj<(@#`Y1ttz_Ywy!# z@!eZwUQhT^x<5(qH83(#pwR(KA={WA)+jrKRLn@(2oCb^S?tq(Es!#7ZrUaX&5(Yj z{6Sg>t~~8MGzdkB@zxI`f-8Jbm4TXez7=kjgp?G;az-V~Q>ob2X_MFUv(>e={N$l( zmMiBx6O$8tgEe*u1J3-?zlHH&TOn^B?0-|{TR@UXZt)9QDlp2Qq1oH zG@PW_ebu5QBfm8n@e%9N?<)R>vDbC<@i#(`B_G@pf|~TIPvsy#2@$wd;9^It&STt9 zxTVj~*!b#By>ujZZcYx9ri-cJCl+Qdo7s*;nEG?DrIzY75gQnQ)lyH{VQzkY{@;w- zC;!G|4VZ43htAB-QtG? znA*BJfq6B{h8iGud!y0Z1O-rPeN|Bu4Hl%sr6mwYW@a`_uQ5NpQi1Vbx>Ksrb_zq6{kItRNvxZ~CTLPFN(#@k> z{S-|3{gGxRxjXL7G!%VcG1FpvwWHX6Ey@>vug=?Ze)beolU@X3bwmVzW5+|f$CvMg zUA-rvlUUsjv2O#`r_Yfdn3JX`~qF;+_GEvo6eVSY;GIpaZDWM9P;&~F;}5a z*mT50<#&z^pBGY4Ag*|^;~+6xgLY-O*jcihtG*^kJ7;QURd1axp~b^%R;`*VdvJMx5Ww&#rH7IuKqG6U`AF7{6~+J z`lzA(@d7Ci(57GUe%ja#5!aXQ3keKPIc|&68sm>rj zXe)Nf*wK;|Pw!zw^ikPW|Dd2a8Qm?+?kHhjPyqP$Nn4huw}#1-kQiGyv(2Y>ol3h8 z)kfZ0$xt|z!!`hCZ~eD#6mfq|-vq#D#~zC>@Xvm%5uxNT-efYM(NYf4^Ie!DA0F;4 z>o)-ee`FhC+eouRe>2x<43-jAf0{}SIex=Hr+A!oZfemZeJuX^xkrzjt8Z>T=m=#g8`)orri$ELa@|P`6&KQj zRRlNfSm{HiG&u~qa>ik zCHrg)no{5Yy;2QHiCM*~9qeum4EN}fmJytp__6qQwP(7N{?k4jt@##{59l<>Gg7<0 zD0xy|3`t(AC7+M-CF@KEA%vp~2lbrIj9<6qcjCn$dt5lJS$r+OEboXrSt{JJzKC=* z4h{pCSua*T3~&~JGcW&FPdg+YJ9fjRUS+T_~6A_jyB zr^>wh2;luII|Be#rhWQk*q<~0US3Jl`3Z0)HWvgyN66dD3m|}{*Ci^LezZv+`zk-y z0Tj}e2MnP`8n%6U8^A{H0%;3o@Mi{6ONGokG*WnN+Mw3SCT(NTZtx&CebA8fzNzV= zv~Z~re0`Bn|NDptdEiP2(xh#G%7tS+Ycs=COwm%oO6_}?c+=CaM`wqJ0k#tt5PqVT|&?^y_{CaZsdruE&C3HfwBOw0jh1RfKK}*BYcoS-a(bgSfBcYr7nz8sX z0N7)f0m5>X0f;qpz^ei(N+KF&yW@icB13_dc4hO+#N^cHWt*2*l_4yyk2C+dOyPfi zH(B(^RlI3K5W6{qyn#*b` zHJn34*kSCgu(i)K{T1jxwyeVKnVz0zOazwnnSmFv!$&hT{*;zj4IoYEp##Al8w(2y z1OP_Sox%&ZKP4wmL-pdhsVQY^7x|Sdluk2o5Sr-`kU90J%zIL43=RqPOEv==2+KPJ zhEHPf>h&8f(HsVgQG9V{O?F4zA^AS-Y656w+LxxLW}*Oat_7#xTxjhL4v;1wTTBG6 zO=w2l>));W;Q3Eer~Tf79l*LFEb2EAeXz0bqMxTh8?&&Tjm_z;;*BX)$lXJKfW8TVfNsG7xu*N(d769_+>}v@sqmdgQIFBLeA23>qpq1`dW+iYK4Ha zkmkdOP2}_4ScaR>`iO|g6xTvri!+R};AZc5OYcnEX)xY(S&PIBAJi39L{ly7&p8cssI4bAd%piDfo?`9VhZJ>sbf=hpdAnY_WJTjB^)S}E-#?N=eCg6k@MEj zv`@C($HXK*3ZKr+w$R13Jz&ytn+;jkU9|%WZW#r8I)mrV0nQdmY~l@xhSQ;$>jfD> zeCSQx2i{;8#;oj8VdwPPpmWb)+_0p!>tpNsEj15UdhB+v<|lCWwW0VY1<@aeW+qV! zKo$~=ue0rdluT{qxFnc~df&{?QoNjsh=UAs`dc^+F!+s;OT)v! zQ0I#%qoLuD&Q48b>YRUqRpAfn$8ogf*luM>+kk$S`<-=quC4`6|ZYaQRqTy`{>kY|IDnC|pnjFq7F-W8Dk5fYS7 zpCo`ufIOY*QCmA$Wam$p3;v5RxR4_^>D|;jl^pNMmqkX%JzU~w_qY^GE}a}{hZ|kd-x!)3ipjM0^7Zy- zjCvdv6F}KlJXJUAXoNJPPCqUv@Dh_D8j0DERXNSS*X&&{H~?0q93-bID*c9v5Gyb;Gcw=22?)Jqftm+F z%2WhlU=K({^zB!ig~&&{?3k7Im$+NgWj*h#_cO~!{J$|f@s!1w7?A0R9l-CJbj2AIQcH(+^q)LD4mi1OfD~xhU@)6uW zB}@PMD^}>efE{;U&SerJT3WiTWDe;(jE`>@Az?(YtOxs9PcGV2`{ofF*k^2)h6V=) zD89ZwM!-<1Sn-SDBcD^hV)fSi67St@)3+#YLcy5T_6Xgpn$l zq+&Rm|E_y&@t4Cp(3u7!x-C!VKX>Ct$nr3Uo**+?`1dUH9Hv^{JK6sAcxQ7vUzx}Z zW}V?4K-T)Br~T_6yS;6=B}G7sZu=jipFB>Qm}-BS@&}qz>!Gr{7j>V;pUle^!?Gg9BSB3MB{K)TD-0IDZXg$IZ2=u>E z7)AO#;&4U&*L?IGTX6R?Bh?hQj(;1gzA>eE91JS=@xKf*PSY(WwqQj<@?Y&2$M*++ z-k=YS3l59NZRh@9!er&-KN5GCnz(Da|LyzU#z`T)&i#)=>Nz%(s&k-wnkDrw!|~8N zF&8E8CG>lf_;Vit+N96Oo{@zROaIU8MyPp&#plq5ockC4XkswKGfX3z==j!!l5pO? zo0qJY_G^_er>%)FRr+}JMv3{^&WV>Tr7=^Bi-mrRg)GQ5@}CrU?6==I7uu~740g2r ze`bpKn;bG_GLGy{zcnvyCyGwN6EB$M3UKn?(3##Q+auTH( z%YSn~myJUCSXm7$w4-?BBwuqx@NZAIIdi_JXY*Mf&+bUl+gKESRQ9!ScCcT9_|IX0 zXaaTF8bV~j<=+!!dG`Ig$j2}4D_hF-(*;G`+{e=U)+_XKaYAvrR79@|G7UvOwQR}p z>Er8iP5be69>?zP@nDWfnD_lH*Jw_LzS>E0Ocjl<5}>nNU7aQ5Kc&v+Dp5~0-c8m0 zSVgpYF`IuY=jx}WbuPOto6SC*#5v<0&e7dk89Fg zIDX_|Cacux;}LM9siRGLiipQ8J7%l^^Y5J|8=tFWLxoz>Tr5h6H;pf5B#D>+K1LDI zf$1O2D#%=@O1hIbym~rS=;2utB(#=#$g@=Wa7pJiy}uabP|V}(5F&8IcG|Wdi4Lc7XidN62?z}D6cfD_=rMPCE z9eIFce@`q|IGR@CyVSia;C%R%T0h26bzZ1xF?(O#xr3>+J0_&rSJ`SUONc|Vsp83M zXfVCVg7Zp3RqDy|BZH;VlL`4Pxi8BM^m7?MK3OWUI~C~j7xkUXtkbiA3GzdZd7_kuEo80RCkwf&4F z>5^u)v7orMG3Z#fDZ1I;6w!S3#@Q`2X)|#`0ZU%T(_ymWYxkxX?p0rwe?=my;xpxO zz%@SiXX3-Rsol8}K&s<)?_ka9_-XEYnqOE$JtdPBtxnY!F_`n2nWp2a3&Bima1kMr ztb52A^N8(wY$T@Sj;2xzs=mwjYCT`{drG!MIFocyLE`OGf?+Fkc0v|X>h>`m2)@Ye zg0zU&^@|Pv9J&7bk@=|Yot;6TojKW0x2T^!eOdt%`<5NLQUH9b|5QIRqE+(cOP`6U z;jPC#kExh>p?8O;tAw0p-kZyZMts%M%8K=lD~kU5b=|?jFK=g-189aPU3esmd@8(% zLZJe8u^qIGLCT6vQrtpxqF)r@XfLhrdT(9MlbguqzI9?=LGo&+LT$gTUaIQ}nn+q5 zX~)U#u^B2_0mq{CWNsx|iX+U+Os<~-;lCdXNtlP|jfYvOZ7=9{emxVnw`i>jCt+dX z(qi3)vA4b^yC9#lyL(a2$SAz#S$KJfCkY{;C1xRSHb=$AS0?!aK0f>x84C@pN}3>B zu=mPF|3pDSK?;d6Dd@D3eBg*mPCmONZzxeevA}+YfFNL>9*Q;!qO};l{)RZf| zk4_TspW3f1Htv8T9!$^)7ib-XUvF%4aCA&Aw7VmE{dvuY(*)CV#xaav?OEdaG768( zbhf{gmEVx7dKrNpO9IXxpO|95cO=eP<2?g4gUg)4_r80LoBb&)!64s=ydOfUb0Q#7 zHZZx61TB7m+hv%x}}&wE_9{Lzb`fHFbGr=!$koL<`9+gmRT zvjR%j((>|z1d!q-eY{RW6dl%B>L&tZFpk!Jz0Zz+(=5kcy*bAzDyYi$$S}x+FminR zv{K^H5h{3SY7vGjQ2B~k@>vP}6rsG1+bxa}c^4S2&xjuN#cd2fk$$}Qdn#c6xFvZi zkSI|1nN<6S-vLy)*mVJcNLDA{4mwfazKxtK7&lMeNrthm%PhFi3wfOtN_# zC~P>#L1X?5bF4K2_u$s>L5|Z|mzY!P+U4IZ4f%$scvA99BBEJLuxtunv?HjfsGu}m zUtbTbvkFYQO72a1UWtH7o?)klfhOKNgO>Bm@$}qW+#pC7j`~_+TQbzle3L!U)d7T0 zxkzzDb4tEhZ2#c`V2~hOJg4#M+P9c!zS~?~z@|=UhfrBbQE_3QAiJo@(S(lZVq5G@ zMivIL0m-44Zf<`e*u!_%kn=s7<5P<=qN?0xnSL)m>nAnCTE8AYrceV*VD3>^^Hkoj z13{(RA=)G3t8Y@2=+?o6x3zsibC>Q ztcu=ssd$9(jt}EvWu)b+>1+yOQ&d&RJ}Q5i)xlop&nu~RVuR(S>2uD`!l|Mc+CDXLp578$y6xJLynV!zRk-=+?) z-DuUrQ&d+!*w*n^OSrC%Z)jE z`t+cEPqYf)ys$68)dBnt3ci7lmj0VJ#uVa%HiBm^1@+{_(|?z1f6f*`mnz0coY42Q zZ!Tb_u4svJ!S}y&s&X-zi@I{!@l1j7;d7#eBYJt^GWdM!6s5Qvh970-IZ1^5c z5xI#*gOuVt7feLBpz&~DJX*#M==Yy@#Kh#jtN8e28mFsMQBn$dj02N4Akp1aY_-sD%N@hY8Q%Q-C|5>C_+Zu9F>I#gvjzUw#M_*hZO8ZDJT8&zd zTMV+hc09x3&#;SEo)Mmx3Je~dlKB-UxLv4+G7LRE3UyhG&-Mo?L2jNMWZ;f3UYvV% zOJ~Ywzj%Ko=ja=UD|Ni8X~`RMoL^LQseP{NOIFs@VqZ2LE9>wxB1DeG>I4G} zmyKnIQ7&61+oaxPcWg_na4c(ZtPqkLL(G2pR9s=<6liPG`N!+)HLI66a1qQ}7fu9E z6w}yOMWxp~1N=)lZ*dNeQv?Vxv>zUv^{H*Rsr`wd2B1G*a!n9Fql-tOP?2T@%JUP| zq>-VwWz)Vy00t2e(HII+834IfGJb|QV%Tcww#*d>8Xi87x#Hx=Ys4vPz22LN95yvJ zHMO;|X|At-TIximBQ-yPRmpY*G36@jRuGu*6IdFtZypN_WG&n7(7J_+4|{jfwRv{~ zKCHW8cFsoWXl>B-bI}0AUd2+WOiikJrp)xb&)LI)yUU_!VQ(Vkqd$;2Zeh7;M~nG3 z^;)s#I^qo-cgnm}ohY|s>0)8a;cI#t1L2+qfj^Bt@Ia-`y}XW4CM11Z`DfEYp$tI? z!zr#XDaq^u_h`UNRGj+;Lmks?n!(mqf7Y_i{@UVVLGPM)`o`JLWKG9~+^=6*5FMzo zh+O0QAP3h(&Qto8czb)aKmoo2s*PKlo0P@g@$_|ml;cf(eSO@q@ICIV z6L^=$b084dp8JyiIZ#duCLU^f^zD+&=YCt>8|t5d4Mc?@^!z7 zv+5yeFF@T8Ai+dk{D-0X3-aazGpns?&gZgbRy+(|l_*rsVt)Yle@6xkH{R7tPzTZ? zz8?n$^t$>jV;8!EoR@~nVp(6GI=d#BLpMK@&Aw9^bK9{s=C<)cz;#J*0J#A_%4`~PPN7!Emz?mtQ!d9W|1d7Mh1&hqg z?x0F>F|m~oaSggR8JWqQ5WxD$5&B2jSNo~qCz|PpqA*OO;6DH&!$+94!I%oq3~#n6 zq1SHZcZ!NYqU}q&{8!+?$_Aq92M5)o{fY|;K)iz)rZ-@s{U)8SD%$Ev?w!TGwpBZC z)|=W_pkrXHO0FqG&i(ERIY}Lf2Gw^7Wh3R9I|OZQFXf(?jX*vA)vFWp3wp{fYt4Bc zFq+gdR#!e{@Ws97T9}=u%tHOB<{WbUM=ENHv$FfYcBorjoPi&1DQgi1bntXV|4xs9 z7%{Hk*_5UBqWF>eFdWBPw@z*EU6NDm9squqto+&igT03`t9*S(C>^YYH=e$`yt!%m z{5c{XG#lH8hhg>B(9*&@KyO^}u2~)RJlfqJm(_1B)YVr}ff2fLfP-@`e>w&iD|HA7 z!uJIz??FwexTNItU5V%bm3PBbe?Rs%rEF-*cAV+xkdNf@^*t!KKmTohc^cE(`)P5K zckQA=$=a1f_h@uPm`2xNSIt_4N?M3gO3vui6!B#WsJ@aAQbdJ?)hj*cjHplrgd8p$ z4NYa`+4mv$Mcsq4ZUT)n`6YK%Wz`w8YyTYZ^}l;J0{!cRa*xb!X(}k{(>*Z0MXIZ; z$hsRm!qB_c8F5LFm7jn$Thc34%DPBV{2dYE**^p{+&e1@|23ebbhrU`yeh*GZPyR! zeghxoZTmY1lA@9!(2|!X3_xnEHlNkzj|Oj(=eY-+j9=EQF@|Qw;~Z}t9qd=@r${9N ztw+i$PM*bMuYETDEITV}Y<%p+lu6g;Cs6JZ6Qld?3#-2DdDjC(V}wAcI5!NM1Zq0g z#lTF_8gWJN?>y;tY18Vpt7*`Egw^5rWNT!W&7qX9o1O;|tyE+`x+YakOYOrFJ_W@U;Rh>%*+gzpV!Po)!9)r|RrjvIqfDEu zSAPEl#M57&;|w&)a(Sru-OKBq4@0#Cy0<|4zXoF@KAu|nU5YHh<@3K?;M~0L%=wTx zRY)el3G%!MlRvw0czAfmU7MZ1+$t!G>0zL*-ANrK5`Po^`KXgECGXw&=p>iW^P5xe7}9^6DjVG035o8I21 zh=})m^F;$oQ!U|5!r10UUVnkH9SuQX9j8rk;hqtJ_98K{#0srjS9~Gt0p;2w^5^0k zfqmyF!zu<0bA)vSqBT?3Ax$Swa-2J88ytlBB`r!#T>*s$_dJTEPt$L-pD#k`lH9(C zP3vTebS;X(rUXQ-Ci(=IA$XMQjFg~7M)g398@$O;UA+uQi|e*&3;nBM+~PrvbN zXqMeWqX&f<3;Uk!>}R*0F?$yr6?KtHRMwj>*{AvznY>Q}A-l zR8=Dj)zsCIc9uJLi*nWsjU)`|+y9P~jgE?<_(m%m^VK22F?H!9l?U51FV%bl(b?}gThl7nuHC*D=c z{T_j%7s+r0NX$<_YxajlP$aD*d8VUd5+N-kLwT6*q;LLYCFNOZ#e9=!9MK%4hwpHf?@8sfO0XJ2Oh(YMJbHIJdRGx)KWhhUF z`ctt|Jl70r_|E^XU+SUk|MB$|P*vsM_l`P%ii9F1At50kC7`6z2oi$eqZ=d@q)Vk9 zost3)5>nC)N_R*%NOwus?>rs9qw`*TUYxod{ZHXcozbvLX*gCF~FAY-Mh5Ed2)P6%FV#=_updsg6#<+ zO-&Mq*vv)s~2&F*j-lyS62e(ACu5C5ulrd zaGb2YA0$||vpUGbcheo2keKl9-8)A7OSo@CLpNotlvh9kdt$2Vlcza+lTR5UwGc#vHTa8Yt3^Z#1ftUfq~-M+Vjzm(_C5W!Q|isU>;y5OiaArb31Qky$O_K>?(6;rxz9$ ze*BnHXBo7mK${s>y=Ug;0Z3$H>$^Ja(V@O%{Qgktg(dUK632ZD%8M7UPTI_!oxnc| zlnC71&hsZ8hsslz%*-RId^IU4-SI@JFvn9_wILiuMl>F=3k^xq^2;oQ6ScaXTpG7n z&R~nAQ26}@;Se`bK9o`v*4`98o%^S5|2)FSNAkHWjs^%L6`u`*s2eh6NNIg@AmRtL z%m5?^QVR^`dnu*iorg|K%WhpjKX`wj8=Nc4<3%nT-|8T-5yb-v6cU(^D-fMiB*2~r zE#4b%qE^k!cRe1rE&X9G${^F}A_{#pZ_pKNf`Cz%7q%kb?^CqUK2_lo^uaVP=y_;h2bAXmvsYT)4qx`UX%1-~}%q2ySUYnr0KBLku!d zptcX0sfSGME0_V=ZCw=fHt2NQdL3UVX01!7Ar{Q4IMd}wy)bT zboAzIbk;3zi%oDsCU+=@Ih(A6y6dp9F*!N)F@uF zVy3e;^U29+e$6IY8#vmKA?G* ztIVCmX-Z`DgN2#PPm9u4e>Pct)|JgT<+`VbhFef@ta(*Bfet#Qp?we}JnrUJfC*et zQPGWyejfFeTj#8Oa{wQO3PSx;STLQO_~JaB1n=Iv=kD%qXXn7d#nIo>b2oSlmK9@& zafKD0s2%Sro$$-?$)!Oq1(^Kh%a=LNSp?yTu=4Vb3^$Y&d;pQKK1b)TF9~7F!Ue{pYp(d_Ism4Rq!= zR+#WxWQQ5NEg;*5fK6Jq-z2~RB#F8Cyw&h$r`O%rEG%ggB}42huZjmJ0gDkHU8@6w zgLdENyIznT0N0xe|IL%8T;7i>%+xxM4kOjBQTQZCOrFjtQRuyS9PKNv#aq%uNbk#9 z&pYKP7+&9F#y~D(B;V;BFR8;jRZhe_(KO$>dU2ZLw}`Eh`Ft{lHzP}R_J^O(eikup z3chJ(&xZn>-tpQQeJndCaGpaWyda$8Dx%GYU#>fGOTcildJY_!6uQVx6@p0 z9W%?Zi+v$}iAEg^P0Y{Li}SM6=NZ{vv(kJod>M06Y&b&t55SDN8Luvh1>(6A%8N(5 zPpkTQch1l}wzn_sYm#U)CKGTz8pzR+AHKOq!DU{%gCnU!Jr2}h>E(Mv9z`b9-{dEz-7f=6A0_9D z0#2f!>U7g9xH?Je%F(cVu6#@CUlih#%Cq?ZNBwd8hF>)jPeN8$Bc9k3L5#J9w+};}y`bYMSlcH_8(*zLzzT-1~ig?s2q~mXubzbb?~yR_yGR zX`1aFiCO*+GK#wH$cWDoqBsS_U5LcUS!(3jt4Kns*R0wet{iVwd}zNV{Wc^f1iO*a zZ?uE-B6YPs9{$RuSgdaG^YtozCCR;`OuqPKPE3GcWV#+_JYT|;jnW;-8mw1Ocr{|; zc3`wW5>HR_ES|f$SS^y3684X)ZdvRr2G$Ds*SP%F7=QaF&1S>%A`3c#ae`8Wb1yZ1 zU4?P;%oJi38IFVGzxO+^UIc9N6O2$(@~a#S(D|-q;IL}fBG13ZqZHBdu8w|^>hjuU z%tf=FP$%XslShqJn^=ecT+gpV!JnGV&yd0oKHa?#%t-Y=+rj&f{@#ZFZvSQ9AuJGJ z$lNb$+9dnbs{02;?h;3CSP&9Wq%r#|M~hE z&Bum#B9HMTf+e)1e?=vKzU37;jh_@TO|!JrV?3#UGQ>aM!9ssWiX!M4UL<`m+y8*M zKi;yZb%l_M(jDXGfBmz6yo<(1R8d?`99LZQznrWeFTZMvrw~!pMaYSZ#{3d6{Qc;! znkX=m3<+5upQn+rGWh+KUw?OwxRZpeJuerE_w3&}`|Cy2pX=vt28v|z?y{{P)= z#ui^{ciI2y>HRp6=3|UE8OWZ7^N%C+Kl1!D2Uvo@S~@I@Q$F!a)w(pVFVmSjszCho7Dp4`+i=}vBg`U`CW(1XFtC=3Z^ zY|NsGFT5R&j#+I@XltMc30gCu$a-+J#f({?uRZL!vA(f^@-Ft82TO>Iw6sWHp%J?| zQk3OG0NF5z`s?Nk*r8Q9PIwxCorz@lZHfexnnhz!c@t0P?(TyO2hhm_4di^n zp`fh4GkhAcxccjQze>D=FNY^CM~#q6{xvu6=c5dyeJpy&Ifx(0K7TIze0`+E5^OSU zztuL;FGo}H^71NXDoY4!IBw_}8!zGQ)V4ihhBE%bw*3PfT?D>J7vN|}$MTBaF(@qK z1}Uajd>)M!aB&9LM-b}*+<;)OGf{i@4HnsO)7_V{vVqX_n(ouWVoX!$L>Ta_TXnA+ z1WY(3JTb5@S@tdo3BI9CJ8oj%n>i=I3pwDqOOscx43aD!em^|C;TWK5qJaZE;5>ab zZMI1MlfA1}AMCN;7c%_w8$a**yw{?}3GqT;ME;{iM_+gnWo)Z1ADjfDtfr%-+w1W) zz#bN+#;7K>8Nnqb<>+-Hc^wdd(#X=+PtML>>)A<4OWOyV?T^{nC}f|OUj8oG;NTVz z)gcQ`DW#(N*ZKE#yB9V$0Uid|jiRexC+fDGF3R7gr+>CC zz`i_Mwgxc+zYPEWOBCe9&%pt< zs^%1^jJ-RBAvwckoC}mwdZFW=qqkyDt9szOm z78l278r1^PGB|}v3xh}sB(eZI)z#J2kkmbZqksp&Uw{1te}TCx=0Dxr->+i+89fjQ z75Qg5PcsCRi=W3!r!dgdr+xew#m{$>j_xiCOCa*-_?WqDnT-;D{Kxck`J#TKf;5xJLiSK#CX3^CQxcz@1}X}W(ij+Y`1tv8L^F9}lk>m$c7B|OkBsA_RrKNl0K}V(QisV_pU?Yye=75+|AGS#)@gOlS9O{SBLf>k?As zn2R_F2nf{uGGHwM@7CJn^73*h--C8knXj7O%uItn>2)K?2J)gW9wn#12mp@(FGDC| z0Y89~2ik|x(9i%oT^Y!6MMJAfNJz-YFagIBBBBLg>!*O6+KX>VZRtWY6Czr^z$zCJ z5nUXGrsnONH$T8=wZ7i7@DgwtFiEzyuz*(fwhrd!y65Zng;gxqYsJddbqJ-(NJzB& zm1LlH!V8Uhve^$BH12{fer5t43?-PVU;Ale?!HJUFCQ`6SAmTCo~1sp!-|Ru!b8Kr zZv}W_$saz@dmjNo!i1A-*3|q_N;jZn4Yk5BAo}`x!rq31t{gX;wlI{5S*bW~-5MGl zt;j4WC{EIiuql|@{WPQxE&$+6@F*IqGPP-u!(ne-3!ri*`-eu0n0bTWf!;B&GC2{Z zqph8gm}Tvq~} z0>Fy|;ZHlhW?4)dVQtsp5)%VYo>9VSxM*#{c&`)EOmI8Ad*g;?Uxp-)dEzJt-ppHQ#;1L^X30zDsz2#(VK=S6nA=8y$^dhEarh@_o=C?t1yxrly5SPjVQE zpVXmv4C?OYLwHkoA{&#QWSAGR3e`~OCRI@AehM z38mnoqTkV;Z}uQKYY>_fp?vDq*xw(%)_#))^>`RuOGT4FH)he&27SJZXwXiC?_)Pr z&*jlHFDxdO`84MZQaUb+j+uFmfk>xc!=(Z+-j_$V@lnD(OWOjVuIxo8Q1uGEyf3Sy z`bjo36BDU{ZU`$R9=(7=>n)FD^W0V|%`YuIfFC5ED7Scq?4Cs}4S9+63h@J+@``e3 z;SXchAR{LJ=v-@qEArscItY%OPSbL&U!8^*)KyiFHe0e&jbUkpeNIG}Sgy4_cJ5<8 z_HuL~q&84r8?za&So8}D4b2CaXux<%^79o;A7uBBTWme*VrA_+Rt1eXpwa+eL6AyK zwoGTK@#pLXK+e8GJvd3@=$l-0g$4d?)j~%iTn_$v4gKD_yp|HMoWzW;gngWQ0n-_MsOXhAh7(+`hjchD0eIO z(Xje80s;dkLw++6cMvuo^DCo!m4k~UWW91e8AtygVb_R< zuu(fwK+`T1;)2wAp2jB70p`lvJT*Iu@|{i#x?v^BG13V#lY@hx5brmOqOwj0V@B&k zPczM!et1_Zes}57=8VxS%xhP4EMYm6#J@pXsT&g7C@-VAM!gQy8`QiT9##fLc;0N9 zmQ7%1m->oQT3CD?v+9pAQndO6@bZ?sudii{ueY}XI}QX2i}qIgo$*370mFuwYGpJG z3_b?@a1x74OLoNcyu3%yNlR#Id@Y3`Bk>xVD^wl9>owcU%WFUT^x%TP7wA9bPzwqS zd=B9Ymf1?KUURoxelnnh&KLI7z7P%rAs3(^s|M)T@|@$)LzqDi zrjg0?>r9x;K-cROC+NA2Zl32w41L!-I6-vYX=&Z2{88*SShz4cN%^>SE2P>b(n0-f ziBJcucCG5Z+aJ4PkC>Ad#CP$Ux%%0jLZ9$fd@PSmR$C>zev)^BxG+d>HP|~T4@r^b zK7#<4xL78ubg{XoM*G|dA_ckoE%pf$CbCn-Cy;G-W5;vw|x1MZ>(V64>F@YkaUF2fX|vwos=-t zlUzUJCs`rY& z;EwO88X7hNPi?~PQDT?vY%7s-N0O9G$!e*wC;1&PV1Uy@iZw%INX`eWAo!Pf+bawI z@tQtU;K4>cqM-yPu>%|*a8i%8uPmU?P_q>U^?&P2Qdk{OW$ff;E(SyTNwM`Pc5q z!b#jmdod#bPlQHmy6q?Qqxtpa4_1>c{6v^8aE-aaboKQy`sU^qigRn`0(&8_=)C5E zfp~h*FBVMAT91cR4*OHufR`3Vt4sV6^gIayd{F`0?#NcTLNuhU`yJ#PySsBC zh=69=XinU&#DEh@7M4y;7F0v`q8J$&+3rZ*Yu04CW-zLXi9^^f zQ?GxbT|a0|`BF*>DCcpfM{af6TE5VbuHThFQvXy?kT-w@ zR4Y9@TGi#{w_qvWFmi;+AHaW*Dw^2T+&omlV-s=7DBQJZ@Vx&Vq>)F3s>PbGt?sY` zak-|(6?t*qdhqi`c3Q zA`GfLQD6@SkGZ*i6hWx+`J^D_W4xPSd6GN_d4UY?26cxflWOrg@ad@&mY3~}9zAS` zJBDBNO3V?2pw-lqr4zeQgqw&9Dg+R|d04{U~`ilRsd0yIp zQNJ)>m$eKp14H`ziTQ!7a4Oel{f6UN!ocooSYvpAgBmq(>mK0fw~Ehf`!=kp?b_mWL2g zBz75Q6@T+SIyze!Ii+NoPpA`24P4z8BRO@8y)YR6s74D)*f1Op77X?#mbMR2#6yi@Lj?}tl6W)>wN#>_5es%5Ms{{fcm|R~(tE*0KVcC( zk(?6)v@%hLd-X^E?#8TFskL(xf+BAi4m3vp+@nA1+5?^0ZrKBQ_T0IC^^zSZ%Eg@? zkB@8E%_uJ&AW5`@KP* z0@_ax#wd^@#vHfWs!p~CvH3s6Atr6LKSP58>1&Xfq%<-#ypizf(@iAL9ukN8Bhig<8|gLXDs$M!y?Z%NKCK*x23ID&xZ_HBRWqz`S= zHWNTps39k!1oIb%N%yMD?RR)i3IqJTXecFurDJ(N#CE~Sd_QqmI|ZFC(pl$qum#ln z8~*HC2!i`QCnS6JfJ5q%rDg~K$sa8LT7k;l~3l%t?PXxl&-^!cDgpgv+N zO87gZZD~q*g@s|^;*hMnRt<{j)uL;?8y|HP2Q`MCpt)ytAhLO~AQP~`kysj~vkt6a z#2iP{qzWY;pC5VufgBsLALyy@R;>_RZY^4UzrU5|B`y~VYRVE!4hVVqyp3(HJqtxe z7eC!HjT!ws5Es^1U?T>%g0j+s?7AiM@*EIHM6D|z)U{Y+yF9>pQpVlYC6~BJ;kRw! zyRz~>KCTW8l31dPj_s;$RO9LUe@bpTH(E9!h})eL5CB?z!(8i4N-(Z~C=OQeQ`;QA zb_f_cx<4jcDl9HH0fom=l7DccU&E>Gl)c;txF)A-r^kz#MPr3cebY0fInUUssojvU z2bmV~KA)HX4Q@k2BV}zUR{G%2q;6S|@!4m5{Ajetja;O#%@t1R-nd&0c(Io_jvGih zP+r8wo}+iG5!>{5W@-YlYvs{q`oV$y36&1xjT`r43I@kr82=J00~VH7qY2w!k34h{ z43*h1;{wwn?dnI1n>Xj)s`G%voJML!My`5CjcA``CseP2H{;&G?In&^2R;Z$Bu1qP zJMA7))GGSXge|y+h7`TmzvxBB$K;0uO-oxrJz>Zm-fjm3Q*YRNa>w`+#J)Uwk=OF& zu*yvHq3V)E4cJ=LWbc7=kx7)Pv9Y`m=ZM!;T4bZ%4d3}a5xG1k9-CO3H^J1`@bGZD zAT_t;>S5~5pfKQ!#wO)8KiG`-J@q2ntW|4|*)z=UN5a-bIF`kEO$a1z4(8~vG4oej zQ^{~*g`T7lt**a5GJg5;4ld}lebmG4P3-UO9n7EI8;(us6P6qKG`Sl1`lS*eHm_aL z%SuZP4KG|cE)WFgKMhWDr|(@2j<0Fol9Eqq4LO3jq08yvDXMJ9qDHI^tcHl)8PLMf zJDvhc*8UqSQM-ImM@UY`NBQ_hh4J8AAh`rOi(fX}vRjOdkC{DT)4&9lCp~?R`qUm1 z?)9sZ!azynyxPnKMj%`qxN`S3Kc{lnKFvp)S3W5Msg78FC+?0=h&BB`dfrKHVJ-X(O!4$!^-Gq)Hxy(D{24-i zzWa{PAuL?$(&fvMG52^tO8QAQ!TCuD8}gqr!hoa#-2Z9i2H^O6A#v|^vtJqw+~(y4 z0PpE&?#F|2%yAYNSD7w7Mg`?rV<_0P-owPr4O5Az3*vfwd|;xfC3a<~p(MvSAgu$n zpysw?X{IL}p@3&VnB*rK5*AkIa{9WbXWC zX4b-KAW<#J$D5kh~!S}%4?{0*(-{gwX)g8)&!X0a+ zir5(PV6xtG+Lq_8`-vjL{(gXimZc{CoaHj{hZCozMWGC%1;0hp(}k2%X$c7}U%-I* zHXCbbLIBxaT%V+ZS!xs{S+;kaO!u(my$$HwUe-Vc1c3bj`3j#&QQL+wh*fv2;`mGXQ0i0sWT=N~|x zh$5e*pZd>*y=PVP^6m8)p--nmHS&WZ@qUA%5*`SaQ0S4PGiJ$+^ey4}fuC|fOM zfj<<&^6vl>wDaG?b#;6%Un`utd99ZzI=X>ScLNMZ!#%mfoRf^CPP$S_bd>Fn)=m;?;a`40{#n;tsLYpp;1u}&+XR%@@~-4F7@!?NO>e!$#|uv<#c@+ zj1<#ryQajbo;zUgmq14o^6Z`E5LW#q=sDZVHnb!LoP?B4dKSzUf z3S&CQ4KY0hR6w7SKnMD10Mi2|4{2!Q#h#boKDqiKh1Z!Q~hE{MHWGFxZDyK{yB}!NsE3)?6 z^0GdvC9P7YD!g~}n#857`D-IO@ya>2qr(v7%l3BR9_Z=VOU!!Rlv^TKv2y+Tb*RkH znw4%;y?Nv6C7#j^;!E(zR@t3W(inXTGQ&1D+jN}n$9DnIp}VNlIzApJ>ViFNYS~P` z`TT8CgGnuzXN-@+^j}+8C|UfNzPI%a7=u3^eW0=p(a*Zr*hcz23K$-$=+dUCmgK$R zG29VMnb!U-TS0Gb7#1k!4f3`sm0X5)9LSk)qs4}`S$z`pO$OUoRsS<8*yyi>P$NPy zs_y>Ou6Z6b1b%NOCQ_oJ9^kIf0qFg9e>foh@<8t%tx#4`@k-6jJ?(z~{{0vC4U+gU zcLw^~gMgb_7fp7jUB5_=={(zCM6A1M*{2OMal$dK>^$8^?N~{7V8sV0DR1p z22g|mEC+?5@IVWwe)(V?`|;6HzA{s`*;}p)H#w)KrtBOa%7wb3W8+_oLAmEa<6>3S zDbz}tS5~z{@-=<$JQ0|*^jf4GSK z!qrP(0^>`^uybSB1asH3 z-Jv2UaFw_!!$0%w8ygfIpzWIZ=F)Uh#ZndzxX+GbUV9I|Ml&|RS)6qSf6gOQgqoUA zA`$F}B+U^TJ>vvdH%HZEpXa}yNX^bRhrIsrV{H=?MxEB-VTT%zG88;a+}5k$#DiFm>>z>w%EOkEdU)#lXi&iHNjv zo;vReRFU(ho0yxsv{3`-NXZT1&8b{UcUp+r&<8Uj0s>?97h4cyfc<-OON%FVabxbt z*x2giWPI;4Pk}HhsGq@25P=Q)= zpcX<8zE6UoCHA^*G_{0LN!y0Fl=uxwpSmNEf*m@z&ntEp&3|0qKOn^wGDMgVz>jBR z`sH^|c` zcfnUUD)inzMxvh|Jn8LKj%k0AJ;%LCqqNSzyI#G`o#qh6-C1(!t`K`abwDq7871EUFmyvB}O_t zIG8Op?)Xw4!Aq6~bM}UY?iVE`z!=Gn8?Sc1giM9HaZ*z4#%Olgs`8S(1311NT?9I} zx<}haLtB>I=&8HA2)<7wGK^8Z)qrBWz=6xpYl`4QQj!bS5;RYnhbWgVBwt6dP>%K* z1ilG?wshK3W)bGai&6J1lU+%pmuc(*j4Ve z!*$*?ezm#pYcH+hRuh&K>k|FBH>t?)&2-0|DCo3^s->p)HngmveLv1~Fda7I0eyZM z?yXjKVtE3tjHfx;?eA#Oi@BnT*D{F&4Si!x*5)I=>iEtAA)}wHwuJxsMsV?NC5~Y1 zT(-mLlD%R}?()^Ry}c&dxE{ix0UJMBOOWL4PCl+FSbdUhuctG)H!ErEL_P!M55AoN z9dM172a|i33l#YU1squkeoN}zNfIH%=tpAoZa6xshkV1`q8tsPM8FXQgX>d9YgEsl zrYQoG!d)?BMK~a$nxJX(w4imRXFstXMvc5Dq=X|`x(30!RN@m&G1vb?DesZ!PP72Q2Q(!|^ z1XcW8$6Wc6=abc<@vQHF;)qM(W^d!v8o>%28o=dVXBI}`2}ay`_I1*;!_c>=cxkmP zZlmd$RCUo#2#axF%w*bMNSkrKIii3qMqo27;|Th0AgN9YSnC!*-_xIav9T$HcK0I~ z0QNq`uszz_@Fdv;&(8tvvXw%I4u>&57>)(l!%xHQ_SPrix#9N@T#0qK!0%+c_Nt5< z&JH-25wT-M-+l27UfCI5J9S)lZMd^@P{-`NU;eJA!ljbSjm6rBX=mJ}iclv^Pd?e? zFekw2HW^}gN?bLyO)?BaWCOo@7NfM z14eE$l5?FyNXw-vF;3FKbmSc0T)Hvy@djGSlt04ni*BM=z{%I}%IDKTYc9KG0e4sO zJ5~?AjS1xo#bxiLD`rNqI6FFsHJlu-Rdw)p!>xp>}BVsT9BiuYs5ZDSL9eF zy=O5Ers-wi@-t({Z#uNfZV)?QD{*vUQ)RBWI>lbT!>Z#8TGqg|!sZw=v=P`A9Zm(i z^aJO8wYW+b>+F?{hHwy3r|;O>EuR~OLNi=rDp6nC83v6K_#y5%_{{1fwpUFRj8A5m zU7q2M9mej09zi=CbIc%a0c6EDMPn4mHLlpSM)eY2I)N2?b;5N#cP3250|&5Kr|Jt0 z0btDqGcZxqZ!ERJlsA&X&8BiI2A$;j=k>`Nh(foLxhfVupTowacxjWpKPqofx+7+X zp#?=?^5aH&nKp7qV~qIp^mJUSgYOG|U4Z}>I4tKhv_{fq9nV9_VcKWX&)l(Q;)|=p zWl{5?)YI z1f6&WP?KE=J9ob}Cx&CfIwTDu@3Dtj3yX^_#C=6$ z_QNV;n_>DTCC7!ZQqI5U;sUBb`HOSg2Pln#bfs(vejS@6)h+6Yn4dAulL*pzYp*<; zM(Jr#`QN2<`?LlXx3aZLKR*~}fN{2Ll^e7{ars5Kn)L;WJ437W*UiemgG~@15*c~z zC$+TvV_jW2kX+nRe7|b9K4;9=Eud=I7VEG=q{9p35^P|Y%BqdLil2l`KYtBzN` zJH@^`1()#EwEiV0ff)6Jld)3}V@Hjls(BISC~!N2!QQ`h1A5?>hR2_cm9JN4J8g!< z5yGYFNt1Vw?kWOG+J&nJrM5Qz%)QV#XRDPD0%JEQ+%DZNUWZke*KDL1JVk*5Q4;yQ zk2G&*$RRtH12DD8_*qZObR4*K}UxFV& zZq*aSw-yDJX=diK479db%->N)6c1c3ajCzE^Pc7lKh1)XkuKEi*B3 z>Kysqk8^7DA6l5J%HdO)b~Tr|R;$LHb&3YG8$06x!S8lGC3D`J+?ZGAHk%js+xz1t^~!Ca{RBm@KuVA`Pu8EgOr$}6aOaD9BwV^&QM0d_@p zez*w~ZkJs`VJBE=3)mDmnv8PAvbT(#Yap?F*Lwc`2y9+*m-B8D^Eal<1Q%JidW8>m81R ziL>CMja6DS`Y!*Xpb z#nJzAF2-hu#JxMe9c^WMg!B81Uf=GV~dh4#Mr{#!Mg-+f6>BJgmNu{jJpbi)TH^g^8$7Z2b1~LSIkRh z!hCL*7WeBVrKc}}S<>-FfJ=G1IA6!^(N@)0%QwCC^(y8i+rxbI=v*c}#5i zH|O2%>Db}Ut~_6i8dKYu=DA6QrGHn>c~CDLJd#ekMmEdFk5{Ws zmc;z1+iZcFYd7_AfV~E2+kgYRm{*R%LQmSab!7$S#IgI!QLBC~!7T~g? zD~9Q*m_ajYS0W(qC#V6TX_lv)$*EPn7epnNrCPEX?}`7N*r;0!Vg@oUGgU+w+!1rk zEaep7TfyP7p5`RXm40TehZ2q-DUbeSb%Xt7y@BsmFJFSmD3nl-kJnt*IF9sU-lAiZ zjXXVetbxUCw5tmh6#`8%b{Iu-)v9(=&MdUu_y);+(%QL3&gM^AHHCxv(Xfic!fbv$ z*5-N4ekZiSvP6oe~yBlA{gcWjhoN6%b zET8P}kSCuRtagVac0gz8kZv6IHd^U-pA5UcK}c^{qp|M+mj?iI@UTlQl>RNN)4nHx zLJZX5-V2o9@H9E=w7cPQI55CeNY}DiL(Z>PW0_)lfQonP*=m*4thTeAx6=(WusaNa zP3E+nu3-gkbUP%+k$Qt^DbD)yo$+8dx(t z3eR#TxAi6&=OZA!48FU!TT8e*WZVJDNZ6#@cif(Xp^s7wE*$=hre%<4U>)9Lago-K zSg1<;C)|^LQgd_6K1_-X^@;u*`wL2~w6syRFTZ+b*{y(S*9;sPJ1!Aq*5# zQ2|OM`PkAJVERz}HfOl-qwVMuQL_*ReG+4so_-jrmtewOcm9(Wg&S-su@ZpJ5RCF45k$XK+hG7}OzUB6%ht0cIx%Y&4S)( ze?HxzeM{(;Jkw2v--NNh`()6`%Xz?6iukQb41ORYY)G)em-X5cgMWXZp`2YL90S4J z{Iz=i-!D9-l%cqU$i(*vZ2t44d96|+^y2%-65sxDmBzx{SMhwDe=Xd)ckO=WK zOwr%p8<2s?s&D6Au&Vo;;yT=vMYydvd4V6ETK%hV{;Dt3CcoEPp`J}2f%x-z4n-lE zc#JQBzugt*pzs%u7?m}`R zHOqQDWyt$;Brw)7>QmGQ>iy@=ba*F7iD2j<2>;iBdgcuL9EDoE%>+6h1x3<-+b`d9 z=;?)dN0jE}Vr>6;Y~H@y40ZEMdO>x+o?ov9O5VsvDwg-K|3Bh17 z++XiPUDy0%Mz=t1%y`A*|6ID>$EhE3)syY>|D3Z+2qZ1Pk{_{l2$#MfdGmxfwAAeox%xBT2$qJ;e z=XA%)OP+|qF>JrI7$a^8`LZT6rvG{uJPnJN51!ydJ*j^-il5*1$~nlBEh)5lASRe1 z`ri{cru4~?iWjH%$X#Uo_gSV}k`zgd4D#yr8GkMs<}I6n-l5m@*xLU5#TW&6f=Io_ z|J;7cP*w(*mp|9E_eH$s#>VC?#&%(PPYj;X>mmAl?02J9?JLSqUwz-aRIr1Y?*?o* zkA!30S8*OcjI=^66rA*~XqUcCC<-K0*KM%&WH0tj_yi&%yVmKE(Gf zXEfdp^p;gX4NOf-=n3N2-fMhn<=ZBYsa3lk1a$15AM(%Y{M`NHL&9OXxr+7Wv3h#y zsLA=NO~n^*m~8IaSu>y+QXG7MC(#14WUaszhHM-4tI%Y_K7{77=~A?8H=s`Kj_!J( za;Bn{cbi(K;&nD#@m_lPa`prUg?RXZPq9H4Tl0(_{S4xxJLB6Qi<|;&y-DDB6X#`D zG;A-{bZ#Iync%;4zm|`bZcvJ~1zG5f651 zMCY}S@5pdKJ>q_IGmiYl0?NLJE&{N{%SP@L?tG+L2VaddXU^5wtUY?I2q#I%fG6d&nWa1g~LbX+H{hT2tmD0<|$HKKy6EGYb+4 z!n1+5+JCk9!a#1jv2j&6iLe7h(Fg2{F*4m=#LFN+P$0q)SW`eBcsBp&ik6> z+=(85O6{PB32D_|(%UCg0Yi4-YJw=qt>eXg4YCO_7z4^X7@g~@MKle_wYCr_FeT~h@IgEM~ zRZI&2*dfrfYeyKg?@y7Vv-JWt;Y-YM%k2|j?O4-OaJ{0vOjCFV7ceMDY&%u5Dt3kd z5!GEWsuA-wR7BzKuj-7=&EqON`298?agFvA*l)k$y8~Z-j^+}pd*I`s$B{o`^UpN# zVS2Q2n?bVyDCmcY#)D-mDI{Hb1G_Mqdz)|V*v0R(5YFb~6ub)CkaDBExSe8sVZx6U z5i=Fs;nlVUPP^$q3|EFwKx;_gSl&QP41>aBJzK2&u>N|+8JLUt$&hVT>{w-=u7MMj z70jVCoK$w01)KcC1OTP>fHyl^4eHs9-7|J-c$YhBZO$_t23vh9)=RG}QUgMo8$TkfH zKqIScXUO2iWBA@ja1oUu1LqtzxhgoI%dF5}ODO19!0maSAChJ$l?9lTq`Is$tImzbX(E5yKfe6+~Q+8T{*-{O3@ zHcm$%@?uxbMs59Vw&P0mB>*Fww<5%xCgv|s+s&k_9~TN?Ic;L-LGwuL0hlQAlGDN# zV$x@1cLM(!v0h^Gi;f{BT@zSLH5f5&4y6|(-})k2Lgx+Tf|F(NA=ounwE*Jr9nN|j z=?J^Wc_#>icVnuzjw?>roLK8|sy(Ie#>-()IIg_O?pxZ%sqS#z>1LNc{fhc?wzBG| zj=BBrv82JflMln@W!v{+Q6W`yD6a=&Jx()D^T#~+C(9@6p=WdEj$0~z7K-T{V!FvV zvqu}NdF^)-5qTAfQ^3QHF0I+A@xUsZ^jNBL?h^4^;TnJ0ea><&_C?>IU$nz&LH`jt zIVOcJVkfMqvY_N}0XjOJc1MRtW^~9;YoR8CBS;8kG%TJ~TVQP^PdtTn=*Afd;Rg!k z)`j7f%X(|v-;lIhNiSy?G@<~R+Oqlv`|>QK53AerraFQ(e$#+LUTli;Wxej~@^9Xk znIAY$qx+lr7D`dPbLxxSg&Q~Eyu#5>;_}U_J9!0H5Jq`zy2e&idUh!+)G)n(D`tQK zBm^;lO6OTMMQSr{)!(O5m6`)Gm~CcR36+k6xwBowP`4RVM~MX*UPfTVhiT&rMSf-P zgEjGeT~F*42NTuJy(yQ{IT^lmt4wvLlkkqiPILj=p2Kk)IM3a3V}KLdPNt#C+DTWg zJ?>;Y7~*pe@Er1}DUR#6OV{53-4wbG9%+=VzbS#{m7z3ss8Ex`QsO60@0RU6b0h$8 zp0N@Pf7?Fjv)Xb6DeKv`DVcXAubW}&jaiHoi|%_YWi4^U0$r}%xHX&z=6VBZ^svkR zRvfcx@h3Uww!gBEKX*0UAwOWyIN7x1hl8C_x80OY4%8+R;$uhUPnui7f^@M52v)bi zIlDv_qn=bDEWVfFYBqdRk{ZheEl@urzGnS@ZGCw_Q^(r3-|bi1tF}rJl`3)#SC-&X zh-lec4WJc>n1w|JB?}5zlr6H;UKc=w@*+Z5LIq_B0UDwrYp5cdffU(yT-XCa_MLA| zz_(}e-T9-%$(%DY&pyv@&P?Z(^z3KtzHcbe!0p`Wzb1N?9`OfabD8tCG1fDBRp11@ zz?y2cThqI=+&>7T+4eV=6MCM5>HpkOg+u1R5G;;1e5x+pS^i*V zZ0A&~#BAraol?~HtQzSVudr8$U(N)rraJ@sLDDR+pQTk{_uwmF`*|Nnb~-eI)5?pJ z03S9S-s7`rdRHDd{Hh5>x}4nDn7ryK8glUWJ=6c&z7qgzk_7p*2#%WCBj^PpS(1PO z{n|}M;=+-0J>FH%h-pWh{yLuw5|cWcG;UU$9SUd}>CNx*9WfpK8aP(w06U;r(J86R z=HrqDu=e@Z7h-C>gzf-veIMTkO!KqFv4&=58Mta!P)C61PT$!UTniTF_PtWSgd*$Vm9wq`1BNX{az(a#C)BR}xhAp{G z%HiYM+H^Cl)bGC2OesyPP%3|Hu*S0@3tEJ|85Z!FCm<6nxyW+o+h5rC_23veEfU z?w9%CXwOLC1Pwh_Ct?wS1Q(qjDjt0I<9{|z8&rX95%arg*_4q%vDmJ}H&q+#E9<*@ z^&ambf~LN83tB{CDGx&}U`xH`b594&O;{JNZGq4rrWFG`(XI&TK<72^(Juk8CMZn> zR~A1RsQstBYVli(FJ?Nmm-`Nbj}umE9h7hM7W4xK_kOOP+jK(itW^a!TpC1Nj2;KJ z^2lx1ifzvTsQLNk9mP}hhJ@Lb%GpxpGmIMF7u1QhNJGlj;kfu;t6tY ze82$MHha*{DLC4R{k+SYNQl$rU!RMlrLnsWNK52%6b z=%%f;$vp?ahuU20;skAEoQ z03y+#zB;kfc(t1;Xi(p}TTfg9!1j$3;EDr-tVtj_7m2Ykwv_VU@@!^S0=@$MH1A9X zA6Kbb#!n5m6!&)?PBsRq`ic^8C+wNjYru{-syF7j=EoL4Dp)K(70qCKPPE^-@W;g; zJvP>Yb1apEUWC@hG^n{1jar#0gP;_ga5ygtvUhkU2^{DEx$$fKenG&yXwkwEL_@?Q zJ1>BpQcr)`#O%IqminFl+&Gc2c>V#swy4{yT&@WCfc7Vb-OKFRQc2b9v7_K9h|+?8 zFMv~m4lni{2628oFs(9#BBNrL%NiR$q@Qw>1WJy4sF?>Qt7z>+;UZ`bpp(qzMF zoKvC?h5B<`SGq;fc*Ae>|1MJCy!~Q(pG7!Rm!Pc!0=xxtk{`~cGV8$-^ zjh4)|lm?zUIrJ-VBx6NmzH9;_pu@C%o-K}?$0YtCB)?10sF?tP#G{d_f;}Tub1iR6ydHc2c%4j^z#Rl*$VXf$!_q0 zwVU$tprJ?ql-}`8Z~y#4+2BflC^#T`^{ahbzCAK{?+c>>>5Z|UJLn3W`rLv>5&-z+ zdVjWUpzmD7?v~<_-C+5!09?Ay;LfXjiyi_nNx>ElOZl?_kHm)xiB?;OepNni^IwsV z=1X@ERv3Cbws`pncxoWfBhzELL5aZTrv|jqTmQJ!VUeWA5Vk64J`g48&(@pm9g_Se z>UweOaPV(HC;kb7tueiPH-7E?r^iZz3y&N2`IL^{*8rxoWG4$L0DQrtXBslIdI02c<|PN`}A!6wS>?510bJz zm#2O_Y+od0{hSEo2atgY)2P^f;=q4o5|IzNO~<$F%R-$#`9oF>KklshiA}N?%2|ML zX@lGInl61B8}P-%9Ypq7$_|ZNGU@tT+7;W5o156mq*XFcYCPIjLwdc2)UCbeulNa) zrXw@s*0XKHvPg`h>*;-`0U)skWl7ruK#1$4u{ra>+3%n{Ic?u*jl1+OyLi$Ra9Mwr zxgI@X+y9p&Q$JyDvc;tK0FsYw(g;iWZz-}JE*keW(zcx_k)|CIask};U(;W{;dJif zln0xnX?zmH!rHn??nZn+5bj^z7R{#pfS~$Y;tt&0MHJ?pxx1EmN8a}HWV|b;u&4#> zudq%6!g6$T;qe%0vU1l+TP#)a1WN%#egK*YuI&g@c%2pT!JU)f1^z^3oL5eYl^co5KOF$ z;nr890B*M9>b>fBX&MG62IOQ&^ON2nKlxCapB$gat2!G(r`+GSmMr-LtQ<&SL3)Rz zMC0?_`!*35fqNl)-r5+4WGH{wKM_}{w$qFtRfg7oAEBh}*7LMMa>uV357ooK7PV~K z1~QUAY2^-W`f7_bXe6~H@wfA!%ZB{EaJ z=FGc^N zb!U^4w;a9$D!*P9%pN#yviiBg?UhgSs8!FU|x&CaKvW8nVjmvKipF zw8vLahdF|`R&v>And+}Osh@g6koe*QRQt_ZkKX(aWlUoqsvpljaMvdH6GD2>`4hMi z9M)%B0!FBHS{BD@a@qH4+i~^q*1s*&pt5ba7L9J`6$=an2shRXKtj%bX<~c(w}}HV zc+{6^PTyo3{xlx8K%&>A+q15`G6 zXPAu_Xcjy`-g}%?lV?tsI|ze0V&WkjC~AS`{tUp6zFfHpn8Uz4(h&iYllBwKF_FmVN~+rDA@9v8#765(Nyx-(rdPY5H)hbIAW zO(AHk`){;Bt3=Xm(|oa126}(MY8Ak( zIXfSk?~{tf#eZ!#kvkq@r3UgO8;M9Mh5k$y|?u^KRshS9P>=zDA^Bs(J8_ zV|o(s*Fn|OJj(W`+lUXWlK>EN@rMKF3Xk0U3tWC7P3iugZ+fSs-Up=BFKgKf!+uNG zc3FeDzWWZmk>}Vqaex6*Dr=xP8|=4Xy>fk3(veSzxX?7>2;skq6K3 zIzA}gbAR9glBo~2IL^-Z^8R`g!K(w<0XxDDs<~Dg>Cu^7L}$u2*z)|_QY!a?Kx(h{ zzeSVM#CKW$A<^WYCvM-|wqoqZ?08h^mH5T;qJa$ubf3I0rmU74q81r8M;g8c~r|(VW$!>h#QPH zv*!D2JMtZhFI0ww1TCcp%?-P)RtN#}Zv5dzt1XXW6-W>?{#s`ET%giqmS8zyb=GZl zre|ewb?)70$8?s0VBv0;VORbKM2kdb6eY4`b-sfsSy_kP3#7R#L8WnavEp?P!~9H<_go*9#+ z?U9EZEF3KQDNuq$3fFe40qiwc^rI3>PDftxYh;f|a;PL<=d1r9-I*FUwoKUoy6?Sg z!pMo6q(7@s1(E3d+zNe4vhl}BssOa#F!y_DPfcSBm>oL@gHcWG_RKDN3F`gLjf<%b zXAo^O`bPk82)(!`dfm!+i7qVN> zl@FIsrGt!IaOK>0pTADdcLRU-`cUwV<#mIpV^ZGV?J>T)QsNdgAj-C15nhjGsDZAS z1;rZk4a&cB!Fc?4G`~(PQNxV1GLca5c|G&xLuC!ZN>$s`)|HROCm$m3cNio;z&Oy= z!Jn_Wp*5-e$|Z0IL9d$s?rRde)jv*@?r!j>XWd|!TvEUYZHfLyP_{wKS;2(1j ztKURQx|V#5=j4{Et~0?1_KuMoRaS3q%f*0WtjjJ?z!_Y#!kHhy#OLT^hpw-@U?x?7 zk(M1a;%RgxE6>U=ZUy#bu9woXI2})}mk#wtQs9sBlV7A;MtR zg5VxL*1b|#ue3P!9YWeLNp0dv`PcoC7F>Im7-U9jix*3N`W$JRe8!1chadQmutwe# zqrc8z@8yH1=AKU>C-fVo)MN~C>dZ&ZgSr)0<)4o{eh%nXX4X3o{x@EqU2WiG&E_c~ zYl6A`6DQb5gN%<(t~P^5uie^uzPWK3h|HWVr8FT%ho2%rkk|3*#Xl9B4i8>f`5-(k zWnhn&kIz|sgngp?cU9qSxQzjzx0bozJC3c6_bjv35c&>?soOPTkTC^jK20y0#W&ud zgMXa=P}AJcOx_lTc#33Jk#h-`hJaX?4ZNk!sv)Yf z!6@9ToE=w{m?53HL5ErA&H0im@f#7sr;j~re^iRJ|ALRvPQx+p{S)k-D>ECnYQDPi z)@kLC#2C)C)UM)($ zuzW1cM#{lCfB$loA>%vWAU&GR_-aPw9#cd*|Jkd&4SWIBg*cU7zQ=4~t?|17^FezT zZ_rgjz>CL~gzrHik{uTU``zP}=oCtwm52YZ=bL~IA3A*wU@6n^1LE9VTH(!2*&;o0SghM|+86Ko2 zN3{)I1+qE5$+i%Yn!~iOfu$J7a+P$g6r_fz*u4?oyHfylBq+(d@qv zTGB^#Q`{N$j2`J)z+udfsJHoh(187;2Ev=@{25&qOUKK%AJiF$ww6v$A-~!iztjg) zNw;+<&Q#LsvX$Dh4Mq{h+5j6u=rZ>N@o7ezT`*K%h8YLhZZ+;vanm^ojKMfr4@k}i z0Z+9DTnsU|#_Zncai{RzPYr+}CPZ-dgWr`~Yiw}DlFBSFj^L~t9^e(Aj2E2iV(~Dk z3&r|>$G&B_?C_xwT-xH;0cj)Yf3`k#lvFF#|J(=$vR=;9$an%*c<3>Z$@K#KGfRi3 z8euSo+Vn7f#>L&f4o9_~>bmr)At1>WB`rh6k4HVEwsXCH+}wppqtFQ5h%l~~-iI7D zjHBv|Pd7r;PnE3Zgr{jt!mBk$^}n^wm^^G2ZU*kCFEBJb?(#jCKZ(R7oMk@m`sz#&if$VWxWJDal&KdHQn#M9Q;(ZVMA=j5Sv>~6-nLZ zdUY?0gK=ieCc>RG+p`8pNm;I_0Q`A*d_)!J{9E*3bcXNNa9YVdX^4AVFJ=3irxd%Q zlK9e4W4&_Rd}Kc-(!krY2clUsr&Z3%2QNc2UAZX35-Ln_ooK$kyO~&OOV;0MKy31? z919(kYWktTcOyb(`g)ub?({mF=hCNg^!}FiHKv`r{&!l2Q{( zX)FbC?`!2em0pa;mp>^&(XquQsYxlRXtED__DKXQG&D1H1ga!yWev1yC9Qd#^;e2W z(L}>aRz2MENgk7i@2hzaKd$Je9l>pFlN!hM$8V&ySF+lo`F>LUU9aqAQOtz2G2KF# zY?>Zm^kM^uk9e{Zo~`u&wH@+2tyY{FZ`<$;U6-O-C$x`IgoVnEWmb+C|8x$qX6xk; z4-=8d{sXoDrxzO|8Htyd_k!fnE=gWj&Vvc!m-P}{X~)N5Qm{_&JUG}CcaaSrn8x*T zElNl0dPS5L3noHXHFq$yfeqyEhKU)f$33gow_1%|{MDVoh!V^Oc;Q?|~Fr0yq zssi}wZZ~QjhZ!xyz!+k5LuEIlgpSh*vEhmK(MU-Asl?hSCPir}8p0zd`v^ZoDY?n$ zzX>;v#ZQlfB)p-9g-dh6UWL?fcqlG0F$5kand#|Ct80WTN@kj)J4SopIXs`Lnj1me zOJLp1D#WNU>{a1P7hf}mnK%(1PrLy&FRj}(21WJLB<0HTsHpjhOP-&m4VDKaQ@n+> zXDe!_>$Oljr}Az;LJ}-xc@r7$!6m||?byBFxHwsoD#r@-K?-WUl%2>9Wmi{iVWRXp zho?Pj-uV4pu#{ad*RlzF>^5xJy%E_95W_KusEXTzx=AD0g`23NT~v2{7l@tKOYgS| zTG3WfO-$6r?;9CmN#N{0zjJ6I42>5WrA-nmxs zQG6NC=}730(3SC#3i|va$B1iaT7MIhg~KqkWduJdMk{JDWC#*8V&5KJR=uJJWI;Ga zPMC$b92t8bX6UC^)B;KVm4NGFBkF8@5lmVa0nNuH=sAGHU*p1LA`oF+2x|-4vgGiby$FO#b|I{EUAj0H3kO?)nw;=3RuwcE z5}9sliO)iFhB`VZ1mSq}`q;q#3@EQ6hFGjT)a@+2-)2#@7Y5@?A&nuIgbL%Ub6`W! z6xJ?(SPnM+7L9t|<;`dtQ`OFQNXb)qRtLHD>&=ax47strf1_kny2=f~>}!;(^qkR! zACDgl53j0`k%rLDhN${0sJ-%K`?1tKHHI{Kus-K99c*D_V$Tw?^>?k5eNL&6v#J~( zlu^F#-JKmVld!=^^Ha?eor0%aFc5;nsx`w3K%UM&tP74;0W0tI5}a=5q%_S)QEP|n zG`A+CDwc(liGt+n6=JT_WWus3-3ECt8?;5gR};btsB5D_Q|3$@v#vjg=KaZ9*7ORt z5G_nPlyY8CI_9(!2=v!W?>Cw)bs_993i{FVFq^0PsU38bYjGjb!40s4M3^C76=QL1 z-%!}2+u@4bF`9a?6(AR2usGQXD{2vw%##N>*HBZhB*z6PMjIeg$xW#?ac1R z>$D0Iz6%QdIofLODQb`)m&aFq@18f=2@ky{BrNf~K5W4<^-?{sdaohV%Qc#$V_YW2 zK+fe;Aw1Pyw5aHAItiNeEXg~N+?H&#!Z!0fuBgo}}vi-y`czQPM> z<`yuou@NfH76oCb_#!4oOW(Ipmi@lnJtoOvu$|4WscTnigJXcF-uNkDTM-n^;Z62j zAU9QJplzVzG&`~8{Z&(VG{d8KT1g@gdfK!pUct%4sUK4QOg(pP93LG*K>LtHK6!OZD7iCiBU$|knqB#tl8BJ0waI3SFOW69X# z@XR=}P9@xpb2D$TD&!1$))noB1KlzDsj!4)rC2wyQ=x87lgvyjYa-ydl*}|^5Rw*U zmV(W`^5DcR54dkEj*oG{&O*$(^2*25Qn(jh_7A^L45-tag_m9&zOVII9H0<72SO$> zrlS0mVD-0CF#ABOLtn7jo9Qev?>8UKMtw|iEmRK^!DfArlbLs994jL>71HYR;m|6s zuY3b+w|o~7GWGMBoIM})8cU3D8**9T}si8R8h;r!Rp*lW22SC(}YcIW{TgtWe1tA z>sVX7Q0vAK?odr!bqMS4ZpT+UiatBH*?oK1uRkn`J}8gXxx6&3&!dq|uKnZrKQ{DQ zl69gRqFAb^1$MFxPRosENlS|OJ0bC$NH;ezFYm}fjom+m;hfv9sI=&b(w-!W*#LgV zAS#{uw?`Z!#R$Te@gL%#huyWE(+WK-EB|iSdBtM&m1onc84LMA<;yWrCxfd zB%o#1>U?fminReW@Qm<~!J#WbsP$|q4}(picrCXq1#^4Pg81r^4jKbr#?Oz&Ax}mr#Y$S^DMpnz_jB?@4YSd~=Z8$V1UhU0A zRD7(WNyVm9-TNVqIBOTC9z;`$sHz;muLvJXgi&K zLC`reR6PjshvScJu1g$8FXDG+EeuuJ8?xZ}8~SN`3q@2^obE=l>=TFC_o0{DY7`@R zLoN9ssIECdzQ9q!>VXx>oQ@|ipmICoQ998$!|BN#Xc={3`06>19&HEk!+M!3Ur6s} z`S);Pk$RGrrIucZCR8cU-NXV<5E?d z11vVv?CM>Vm2)F8r||uaiIAk381ryWsssd5TrcN2oV?*7;Z@Y?YW!Y%L8>DLp!43SQ66n8cRKsHAK=OziUkJLoWVg#y1S#NEYV|d86}&@(NvDI{Fw`L9naK z%v@g;s*E99NSd3*55O{)%}#g5c3(%oa(7HL!AL7;vKittnIy#D+KrlvgRNl$&Z@u# zlABCMnyN1|9nxxwNsFfl580i@ut3#hC$AY;5W`}KTDWMKHjWJM0kOF?Bo7lwTth{r z5y&P`$g7fAd2&6Zp-%!uM6LR(yub76<59jCtfOjBI`MA?{QMN-j&)CCKohxQA;9^m zdJMocpjV1n)!(54={bBKi9xF{LUviMmup!HN(wrPy08Pv8fepsCI-Qia~@^465pZ? z!!b&~@5~3WWi(2i2;7jw#0WzkB%4=8Ta|e4ebnH}S~2H_w`l_8OgR)&N`EvwnwTiV zrurlaG`Z}a#flI3`vMf^(~}Vz+9nd>VJTe5QsDbxUaVh!i_AKhKr$6J3WZb93(1sM z4rV3wGQGqJGwTEz5JRn$3|TSyZ_o*L0(aSR0MB4UiknR)SdOt)W#rPc<%5AJ2lA43 zg0^}sIS~#L22xa$uFfP4(%S}KtfogEa~2*qokEkaa$q|WIu;VnVL^3v0G{Fd8lbXv zbEeZYrjuDEOl(cHEKOC;d9>7&w`;k1g3owi$Lrf2mY6B%^nt91i?cT0i2>_(GkdHn z#uClt$9dY?7{_<8*Cp4pl&s#PQ&7h!o-`W1MGVb@bAw&&q^+6+4bV3wNUMt=v~;pn+IVw9j}%V{Yq zsv`oKP#`c}B@dGhTZZMyS@Ga-6=XBzT^JZgM+_`T+0_oUD;8oKSPWxaFfL|ZkQfrD z@f8k@#E)eOG%fBgyU5zEWk1Ad+JQZw~Eb?W@pU;q9%g+#HRI`#J{b=U)gAk^Z7>0^$u zR)yWbDo);#S*CM$pS&LxG0v9>3sBx1p4XkM!JLHYELl?5-5jp`E#{o%vzTy3-R!TM zXP><)u!dH=P_q}If|>Sy9*Aob&jBab12|Z!VIz1!+re#as2vD)?>>lxC6kW&>PeZ=UQvh3_w%swt=6 z1T6%}rpUhx*|;z{WU@0|`D$MJKM#0l`MDN^7iW^LhMSM1>pcBKPHu366X(r|bI>wk ziPMaKd)KzneZrdnT$D|sCl9w0v+TY9JjnZvS<*tCJHD|e=kp)CvR+&KJ=8fQdB7J^W@YHuF)OmKX-Vg?F?t$YV&f(W$W|*^Wg=} zLTM;X*d}WK_GzuZyiMW=L-)e&Bx~pVD{w4E^}j40IbRUNY;!UVks{Cfl-9E$r=e+4*K`j5D3;Dm?D)40g-*K`I zzkKQx_g}yg0~2_AM&T*;-~w7pH3gbXZv`Gr4lM1HK@wh^)=W9|82bR0q!Jk$5E#hg?Y8qVB9iLUVuexM_F7&r^}z76 zlK*^a{>U)XH!hYF7p~NOTX|16^_yK{E_!eD)^qjO^v_OzCg!8P3FQ+?`atUYZ7ZnI zFEDpR3FJ>UQ%#NdOvO=#fLyyYYzJECRIo$w~Lk)pId#x5=FnM zr2X$v9^_NacxWl+y%raJ@?s-#wmXuaHs&e%3BnV@r(wV})_61ue@0966$#E)Y)M29 z`di|~4Gq)5d*?F$#4;)CeLD9nwt&jfuA0asjy!c)o!D&OnoN=3zW>|(0e`AA)YdXz z5RT6pqx$5=!X98vgjHZePLLZ(`;W6Ux}6~VdmA)W_BHo22a)GX^vj2wYq6?x-t3|cc9#A;_Y~ldM#yC7ki&lhq!h6di2dcAQy)C z_^gk1afMsamBY}(ohmX^rt7u<5nkt7~ zN_|PGr?ik{F8dvSH%3t7oa6DrmP(5ScY&#JrUs0q|0L}AklJCJymPSpe1FopFc=Hm zNROTyGnpR1SC8a_C;CiRx)@Dk_QuYK0|K3TR`E z?#L`>WHmi_^0Z;RzF~KSoOG_lu-c{2NjDH=`-Qg%Qz}JnFDQuuO#}OiFlqPQ^i5%* zE~4&A^S@wt&yJ^UtOaQiAvkYcU0u~ZpTF_I3X_AF&cbw$eSf>xQ$MU;D7|j-obn+o zi>I3iBk@#)(A}qR_}*j9O%YT@?wZ?;ib;isLaYf_t&-NqS*L48O*6lo^E`iiZ_Emk zE2eFl^|;(lCO;Vln)WiuvhT@>H3*Q&4`>VX@d@_xvqR3te$eR2L6_%hNu|cdblF&v z4ra$(8j}Cnc+h8Bippl5(Oc8M{D7hgjX~<&Y8H|Y4xV7c-i5d2s)ABWN=op9ZPl)1 zqsn2CZ2VPb?R0zR;9$N~wcXw)IPcbpWdfm5pyYr>tY^-2bBNXRL3_TVN*cJ6vRBM= zzQ)AO#^zZpaI(gxCS23s%6gL>VZ{|LtGRj#u6q;u$mp9iMx>1z%WAFjPm_; zJyvyN->0TjeT{FXs%hzFL$uSudUJgZ!gW>{Pj`34NJ#hn&cpTd@VDe8g-nMpJ5KiY z-4UTg#spCP-)RvwCVuwz_O`}98m^S%AGQp;Ol_FA ze!`#}k+aR&{#9P#3aG-)fE%DzOZ~^hZ%?+qbXWs7GDz#AV)OI!&HE3z2M7cf#;6|> ziK)Vx(M+bMrt@3?dQ9^7ey;** z!VD_L8)K}_NFZT;K0b0Iyv#!%ZDId{M1?-MRTOzN`Qdo!1gZ|sFfbeT7wJum6~@!+ z^COQunhxYT2QK5TSGC76-vU*T7W0>E0*|r5?rO}piga+6*6#BCfBhRkTUOhY!59h2 z$_B>EUrXq2tJmIf6qmPTRJf(C4`xn=eQdGt@ZUOETbpWqR)Kc*oNT{jmB9~EpGkW| zZ!H*b2n@tiefDai?_Ww`{moOiCmHzg zK2!J76k5@Wqfd?t4(p33(7`R8e7w@@mqA{kp|y2&UF;mLZt~V&U;^o}NbSC;mr6f%UMxF4$1o9kk!)tv4CbiHR z6Zr(gKz(ppJUahK{S`f;t@9$cG3Yh;aXkI&Y>)2&?DTKp6Lj}D>aMaLOo&9r9*SgT zXJ3tLJ}IULC&LexIIkCXcX#`=gyNv{MBx2dVS}$Fo=0#a3TXGWuX$+j%-3tZox#|SHgncG!OZw{&I67KyX}8<285isH)1INz3|I6G9!nN zCRaFkM?~bT1TvXYPhQd~r9ee!S|tBY1{o%?9;@~s8}^=^mC7WQV$t$m_5_ursHiA6 zDUQ&|+P6BT#CbnUQYM(2F$yTF*7lFHsK%HqXx=+#8bY`qEfv_fM8|ZJak`t=urWJb0LQeX&$Y>_S-g-%O;qcOi z+{)aXlcQr3aegycp5%WWjzlj63#6-OYw#+X?`QT#(cdy+Z`~fK@sJyopwe(HVj~0FA7R3YYn$Yg z<&gEcBSl<&vqw`~Q38hPNU1IpF@Lcg%6sRFC_LVXeQOuy{fgC)_@9=x?|3U|e zvyZUoCX4&t61?9Kme=Qfa4RjAn%}h?VTcfQ=0iA0>5^wCmSIf_;Kq zhYJY_gKINq65R8P%ScP#$;KBOD*;vQ+GPve65eV5(xpqlaumttEiw@7mEPg!@J2=3 zXzA+GTSe5&XXlFUE9dd` zb>=f)7m#Rd$WD6D;n9IhDX}G{DOe=J3ijAf+EWT+f&K8#q2rbE1;kQ_>u&$8=zeLY zp|#X8@Dj~D|2am zcKdp9d6CH3CrB&tl24R)dN2o_&Hb%^eyMl`+8g&;hpZso=yu@7THEh~xWlQyVIzf6 zxzOv~{sd-dh!7T01&PDIdB|=dhnJFrUHm!I!1{)0=R==-f`!%9i0W36wFlnX%G2fb zMf5bV7||~!Wgq~5PUjU}F4HK^3G;nRE?$LdXSQX5v8tnQeW-+RX3d;a{`4?JzR67N zj_WEpPK657*JGJnl4(FrxQxfWU`|#;&s*u_TeUr?lQz@~s-%9?snRk^>S2j{TsP0T z7}%XLl!H9tp&XeRFAe0{12$$_=!@pSD~Vwt@#7d_zJGd>klLeD<{0XYcO-0PC@>2~}WA z>VZ0%o0Bs&s1=#T0veED*6ZVAV_YWU{obgZm8laTgfxI&7|4E97ms;AnZiL=WS?}? zuWMUgUbYf>dd)<0I5IMF2vY~(pg|gl=^@E~(6?>Eqj+d^;*NEu(G738uB49jLe@?Q z96LGn2^D*oL^f`&!Bho2!dhWS95YQ<4P(S_aLN5x!+LQZE-7bgz`tILl8WS&5X~E1 zx&~nq8&G=vBOALZ=NS?b;_kjwL7DQOaH!kD@kEG-bo5hwW+ zLW>qBm=LnyK(RvQt6RbM1D~T5glQJkv6{}LC(L@aX2L{RN5J#8 z@m=k;TPHVpX7dwhzM@v`s}UJs_0Y9^q+sa5wq>ZO0SoWlE{S6aBzhu5>#^M33+47| z4{ectlbhcQkH>Q>7smQB-uw~qHFQtzN61~88=`yFS`A$Cwa?&oJ$7tasI^!64h9za zn2%Y*Mq^4S@F?eRnsB;d+~+NUbUo!!v1W#WJ1^ih3A!kll8DxPCV~)FY*zeroIL=Tp=(8I(8!%#Fy`3qCZb3 zVY1l_gjwxPK}BX&tSFkUBKBgms=YL4+>5%g#gP#s>s@i~lmuxz@%gBzGbe}>{e%0D zA3K()+`$9=ud%iRIiPNgWv@u-CQqWX4`C8}FgEz{Yqwc^J_@yM3E3f~*|4`*Y_I!o z!$96G-mX%4`Gtk&(FVB%RQPy!~VecjtOgeG)X9th7AG_4mNqpcr;xrd#rQ@B>I__={ zZj84X&a5??w9ZXr4@IE}+G&sQ20_rR@?3%8Ox}w{ds!2IAWSstv2S zlgrzs;r%HdDJ!#rrdd-RVH_8_T9Sptaj=X*8q|?a=Lo|vhRd~8(>mpHwfYAJwuU2; zx@|usqG^a@?<#>lI!WjR=mXry-kho^GUC(v{NUlEe;=$(T{yZ-JC; z67~2hw}Y35rnh$3H-oDM%C0BIGcr9)vr~aJAg`tDoGd{kIO1{kC)l>-u_DR*PK)@^ zlko_Kg3nIzJIk1_CB{9am)WM;twoOB&Bm!|<*Esy=a*M37nwKCGbt9&LqD;5>#Q}) z-F+axf0noCk;yu)Tp%%a^GadfW!2)^pcb&0x5*m`m$sva2t3Cf0b4cOy#0_%Ow{!X zXBnKT5r%G(C4BZijiZU!GPoj5LcZ`7{jK`Gx2z{u0R+{+tka{Ir~TOJ%5$yN zO$`nHp`mtUM_CmCmf)?0#by9|$jY|ia5z+*o0PF&COFPF?qrjw`wO_NUY_-W3Um9( z9Cc5M$jZHq$8d#@Y>#^bz=TcIVUTTTY<#?W*d+~YUpJPUd;OT*a&{$|X_zBveOcKN zp{(cNV0|T(j-b<0olLXXSXu2%s<~D6AxY6(Nqvb!ixy>17E1X?)>563 zk%Q7em?8;rWma`fQsipQM7@qzv~@u^r0L4u;o72R&-cBIrN+9JNv5QhtLN-zm1D&O zwdPf099Fe@*&C3Ao?!B2Q?$N@Ofhq+Jz}a8a)*2ibW3nh^o4TeCh=+|*67jH zccq-zMk$$w@ow%MH9^=<#O5CS@rC<_dzGZKaIlL@a&7#Aq)@ItwA4=HT=b<4gr!{B zVqO^VC}_4r)tatT=1YwaVW>J|%td9J*AKLRUN6S_V9e&3Qj1op*B+*+>E%>-*U^~u zL@;rQa155!Q!!?u;xF?)%3wtlN;RPF!Y-5%d6X8jFg=)HCWn_p=imj`w zP->8Bk^T3twrvxWQ;JX-nH!VcV(GnF+Sfi&G)h{Vnt;N_qMVCF3bL%j-q82IefwsJ zb==wB2C7el_ulHNS9o}`SdX-3i9WE-Kg1nv5j~oelb?%i6Lmeiw_M4M_oSqBbadng z6L6IC=Qn18H)m#MI*+&7tc4(DB#EX*DP3JxQb5HfotKN#;xYGEe|gfqW zsQBx`CrS;KYW$0H{ZQpaUps_0%2pjZqA{esBu1H!597OwO7zuVH~|-3?iXNmoxL(Y z^l)FjN0?a*CY%-vTyE<`>WvDOC1I zHyCnq99E*gR+j>UC@Kb8$rFy~n9DOE(Uj(cg9Cu`kSW~QvW|l+y~TNB0*_{$ng$s) zG$VsEE_0R^4%NHUx?(QR6r9F+Z}04oNGo-qd8~l8u4t#(@&T>$Orf)xELrx$p(_B{ z4+yh8=o5FX(6WS-WdlKf;%%Py^_EQe|JMsJHx;drP5nv(daA&RXJze*dTy2Tm5sFvR6OP;<2psoKJR|1 zsU~2^$IQ@F1XJBEHrbId(D7HV&&j+2q;c7QB5A7;8Z4Kxz0+Eib<3(+AiUT;m*5lc z&Xfu+B0i?Sb7>W6FxRop^T)3nbv7L)@-davA#=K#Hh{k*IkrDor2uWHfmzAxPrKU0 zErut^3CfmP;oIn zUQ+97Z%#JNF=SA&IxLG?z*(5ze=vI)Hu%3%67UX@ChI z%m4T10p9(YY|k8r!Ie6!905o`zQ;Pcy23=3+g}r!5X3V~sf9z}q9bhe?o~sghmmMN z=>G`Xe4Sq}8(0-v!IY7c?VZa2#r=gey06kY;qmUNEtJ#BBtg!j&oGrlzI?##4I@gN#v1Q=4l+7ILFx@=hsJ zCP4li&@r9KDY~%nQlrYS-Bmq{(KN7?fR?3IFvhVX;-plK^%AGm%c&o0D%Zgeh>%Wp z$Cmb{mKNSgpMT(bUi05NFbN5X)7B!@bqNp7V(K)Rv)?3WhD@)T%C`aB-L7)JOT&Io zPqe)$4#yuZ`9U@r7nq%S0^Y5`yS7=pa=T-_1;54=de$LI6nV^^%l!RGBzJCk~ z*GiA|iK>&Fa+AqCDiEkfJT6e>a9#2;>C>H0jRosmNQ1?_Vb&EGj&A|9nj~vIf&%rD z=`*EC7!?+NOByv+ z@I!S-&16Peb-X%r-X*!?!4a*B2mf}2-dGki-n8dNHZ<(jotd*6iuP($%tmOCnu*##20bqO#snH+}TCPFS> z+EyMR-aVUP@QZ=L_ED$-h~kaPBqSOk?YmCJlK?{3TKSJ57-*98I&jy2J4kNXIC-Nj zNmpBYk83)v%&cnLlCKRP^nAH?z3{rCY)zYaxR3I6&u{-aRF}oP8Y{d3a7Vfxm3!QZ z=<9F$985>F;Yipwpj*Co4`{UT1l{@qn!AU`e(u^3qQKFV<}BCq9Ns3Y$THWu9Gf(O z1EUJru=s*U&6H)pS8_Vy|^cdY9*6Zv@tX_ARWF zSvKSC=X?3;=P4`zaA z;48zge>ORE!--^V+N$$F3%y`6@(qW#&8zezQnR+YuB)dJ(tZw=9WG~o*!d94H~!E- z2>UTZ1s3-LrN*B8Fu&0^)UKdlQdrlb3Q3fZVWOTNCj`XA>R-={l}kxZss2uTc=L8P zNy$b%ivc|o@x|k075Cb{WoG5Nief0Ln*tzD7ny8(sa0L^2-AGRQ(Z^g+VgArs#CAn zeCIHn!4A7TX-y_C-M0p7NWQnC{jwEdD-)E0kl&Tqf^?nI4WQXFGz5gwwV>}S4QjBV zvNgP@V#M)bH|B1(8p`tPmYhZ@F>*H08_{HS^7_IT!ze}a5@5OkT~5bSw|52^9rvd{ z5{XwMX6{q@R@P6k%eKj|Yvu3n&!kYU#=$;Cnz`RkRs2WwM^qIZoBWI=jm4FbWbqz4 zy4gN0iyt0P=jObg+-_}4yoZkduLyDdt`ub^YbqL4y*1KnOr{q|br$??UCpo&%tBXWT?s;hhYn!9zaUb)qbQ zViK3=aPVZpBfp0={F<(K57G0a&9kp~=Opy$nwzI54=3k^!(pnHoq*qV>J>LpZh+S9 zj&yB$bMgnmuw~`%lj6_*48l9>(4%?xkkwfa2y!pB=BcY4p~i=CK|w=$o4d(oERUmb-S*;of7afhLkiIkWPF#$i9R zflGS)*(BInH$b?HX&=e4O4~7HU*ksAlCYqWKrZe_L?E)ksPGj9qeZes2Q=_wiF1c=w6#%x6s?FC zylQ(3z-}u{3cDc+#X8-AALcD=Dm91tzQUzA$1@^9oaJ;G_@c@gNom?%Xvd@7o69}y zLM)71!AAgX9PJBl4bS3Tms>&06JuV2doie;W-;wywRnc5NdFVDp&&rv%qJ*M%MAKz z6J4b87#I!+hW3>8HqY1h^Y}b>x{X*Dp{Gvwzqs0 zWFRS*wB^CP>G4dN{`nFrwI5koZxt$h|Iv{iJfQ(*Q7=-1X`l()h)%B1LYNZMb?w1o zm5FLnRRDfIVB(R9nOO(5u$fqAlRD&QDI;HV<6_%{k1&2Kp@K0#`BtA-^vBaPnIH6# zFv$K{Y%zoRm*Swe|4#dGMg8MXT5nSpwykjz$v#+}?h50TJOgwQ|7>69H$Q&-6aI<) z8snLvnb6II#_+Zwy+wfP0a{mje33~OugoiEpiKwe48BFWH_?_%fuiuR44qO;#f^YW z*EZYzTpogF1XDY49w0Y(0D&>u+nYB-Q;s_YM_DT_E*>6kh~Z3GSr$4Ont*>$>+EWt z;y?1v)F_c9++5ZQddYBy64@JnE4lj`MK7)T80lv=P2=<r2;O1mtrw;r9qa@a>c0Bd z><_Fl;AR3ZtcLZjWJGVJc2Y>3Muljj`22iNR73?n0Iyc7pOKa^@_tucU)N} zlIuv`v1)p|>+v_$-w0@>un`&u(FhzX!HCWKs~dagP$bT8}}wfU!N zT!`^Jp}jCEqkqM9hL7qakGtf$gC7HgK0fj23WnrAxs&~Qj$<>K+wDOLRgduR=>st2 zK^?Q~jVm+Bh9KL-+A&no=P@@2SJ#6M2EfM!c+S|FhNd5Hp63J1#DhF0pk_p-L!IP) zEhi2TTR|Qs0xWD#T!!PjV>)gw`Bes5U zV=%Jn5T`Ga4X-gS*1De14SN?9#Nf{O>6q^mHsh->;90ps;<4`>0#iuvSTM42~pPLiN*NOXvwt-o7S|Lu3 zkLK>sBy#JmgT@+{LKY2I7}U9Nh^KvsCdlz~WFXDaQJQu-!G1rcEW|QZ2j?x5Up-fJ z3}CpMx4-(yEO~ywVzEO#2v(wvyS8IXO^Bsd<%8?#4dSh zbiVoZI~Z*5d57`w^tPz-^iYl#tXdP4G6yZ7yaekBRv8JQ?JZGAKuyjg%D6iQmJ;bL z)ge;$;w1padGh)b;7fw=g;>qeX|t<;#$&66IMUE-CKlx+k!=xq@EsB5VELxnsmftt zM#$%^%!Kp^2p^kfYsLD~Kr+v@2H~dRTDVwlwA7D|{>2t-L8UWbe^DM?n_KOBFOtp9 zgy8lcR}9_Kb&S47RQ2wJZGt z2JkCLuI6_9VXe`QttY0vz8(fEH*g6I#QnnE;3GPzKy^pt#;gaqVQFTTW*-;3zK1di*^w+@FyBk* zzHHHBI|Rs|;0RM;*1>e;t_5foV2^nUIoHzDmi=|J>g`(#|H+`c4;ukf%ME6=r0${` zlX?Te<>jnMvi;Xa()|?c%0}Y+F7@1XIL5luX!yf0LnJ$VE$EPB9kB(dEVNAgFA_yK z8y`;p=>)0B zgPVG|KiUX4b^POPwkVs3?p@gfB{`?Y>P~FephdLO{^sW9duKn(yuw1Zl(vcG*oMno zxV6&IqkaD=?i?+?q9I3S;#(3u%l)dJR9-J_1Bqrzt*G$b@U1ACYel1YhKhCf1S*CX za4Ch{eEgeFsQyQoJRt?wJ3WbGvd2I^^ zGbWOGfI@NJtmBoXY>mz5^9f91RDl|T2GtGerW4k}9@k^1ZaW=okn`1ek{y&X%J?nv ztx+)S6Ckj%m)C!krX;Q-?pS{T$AO~l3QMUK4DvwAV$Dvn&`AgL;TO9tOkj%cYW_Tj%DlB=lm867ePbfsHbtzUv9So>SedRw}I7w>-n+FD)M4{Z){?g+EV4X%JgM z5;ZY$MKN+azt6yYXX{Kx7YW>RVVc}oCj%aX*6R6I)&ymY;NP?zNZnGM=GT}Q)tP5S zpTkG_oIE_L4FoNh9YdbdT%PTLKnc; zE1J}{xBD4h{Z>+<>}~mV<8!A4FLOGKB?YHkaZ?~yYoAUVF>baq?W6kO@%S+MO_N(+ zcs9b4XdjG@Z;emfNnj|tLctDhGhNgbnaogAnIwJpaR0G=<0v1nls_99Rv)!8MjW~T z3mE7%-wu};qlra9-xgWw`Ly;aL3Y6S7 zs2sNSj*m_2wG+?1Fk&6LW;-$^)JLUXZU;wKB*?Z^nw`f3jU}4waJ= zW?_UuBqS#2TgfRYN7exH0tB63I2)klj0B5~G&a@T7_%C6G71s&&`vI#QEktI-B}h-veDez-6PstUdSw?HHc3`=pbGa^w-pET~vB zFiQmsvNR~I&4e`4hGv5g#%mhP2_q_w0U`jHL)U-&c6sVs-bI{em4|7yJEHa@BuNy* z4%;LZZdn1gDb8Dh-a2)@H;W#5onl}p&f?qR;>mrid?egD?iX!fAunGO|Eq^#|EjB~ zdQ@?69BE!=q;*SBLZzi0iMKwKM<5EasNpB$78X)aesw@@$yZ!ysV;R^w7U-Uy@8PA zGx-H3d(V5=dDApN^Ih2COTUkR?3$;Pcjj0}6Qv4?UpvJ$*@vW1D5s-OI_ z*6YoeezRzP!__RiOCPYz#KBOpMSAe?@bIvsnSDuGsI#-W-cJKT)5_tF(3S^M@K=D@ z82d}U0;}%>PGDnW((^H9LqkARI~)(;=f@pK9RL8frA3->9bR8syABv{b}?!8^8mp& z<6TO``m3WYL_`_ybW_%VH2tH1;@JQ=_kqCtoOxmbSoxGcivELeD>VeO@b*QZi%Hkc zbUjahgk0m6Kq}Qh-=@uVHMe7*S7NO^FDz<^7UkNCuT6EZ>3rO7?E~O&T$xd&r>E!O zz(5=iasC@1iUZ0y;CIVDt(B@46da6x^!WhcMe+yCu$>Xs*Tg~rdv5sAY^z7P0kb+# z|JvKzIa6=|`+HPDQ0Orc%tYqpUA>kPRaI4WQ#r-6kEcSFCGnIF%b<7iwA)vkU8?VGUxN4~SO9jUrD_gDd*SaTmSu{PV7H!w>eRPRP-_u4VX*;N_Q z{bZtTVm+Vy8q_&HKCWV`X=rd~kA`xyu~`Smlmuf(=($5>slX%)q|sf`OXcyEXPQhO zHoK7gI5v8_=quB)mA#3t7{l^SvpXRHBAjzibb&(|$TkEt9wdmZcm(zWy1|i+Etx#N z09jBJHfWd1)qnmtplx}?p_IJ$nq$|{MbgzVFTUi_JLWfZed;UYJu%0Y#&KlCbv;5} zfoicvl|xlkBRW2q@1X0EJDL1_u3p7TQQ=o#m&|Vmk{RW(a+o?;uUYdMdt|6Wn;6z6 zk|*Z-MPJ07MZK$*aop9tm$$v|65?@_Q@9Y&OO_hb@mo`8MweO(6{XT{OLAu$CXpLS zF5}dR<*${0bf*B}cKYmsWw6&)eW2NwztQs^p8kO4)i(cM9^l^@rl)yp7#4-Y?q$HX z2I$HlU>z@!?=1zC5}nD7SL0qheEp8c-;0xf6m>)_)dglO62R)HI>1i`5Oq4bu7J%4 ze1Y;-)was0tvhOQVxl(IIetGQnPNe3gWR}yvhOdI7l(rbe(*6jAoFSQbqyvYxVyPc z`pstp2EU`DNTr*)j$)sb$pNhsK$nL^?`?I)mJ#PePdXM(<`9#BwMO|9Fii2w&jz&g zO98U13H!WiT)3mnd14g~XgZ7m3-tQ>L|foiFyNr$h-OMqK1$Qg+z>Pd@LG(;UW!v- z(;~y}jijFUKVF(lKXh1!&w7G1Bu3~L6%9j0mjgYTMw)tz zK7esxrO7j5T`}60>n;0cUPQ?OR7|<*wCp1gy!H6mFv%a}?qDs@TET~1agl7Y%Ui2dp z0tzzEBD;(}tWaKF_5r{y-w9b!y0Sj>|4A$cK$x@^?~v>hy2oMczY7_4X^ z{Sx=^Y|jtSE1r{uPOgu&*g+nSv`NI-V_}dPq3a>k9 z{{U8BH_^g*LqWbqM^{*Rx}v9l89bTtdqk~*O|rHQR!(M6Np1HB?E$N4foffyV~J4L z^dl(eLLQpD1So1ZM-kr}^E;3CSC=PbfkM)c`An%3md!Ecw8W6;0UoSN09}0vg~^CG=}uO$D#ni8H+wQiU~`-5JHLcl2z$6gsI{TwYcw zcBDJnQ-@#HPZSTrIS4$%k-YWpA4G*-1tx;+Yt+z5}R4P#s{-^0sDLkKIkZ~1eDXo=<*>|rf-^t}W48^DAxn{4(~r+ih-58v z&Q)ZG6zq_!c>qkXzdlhw2yVm5 z;iRObAL(6~zpKP!KL1}Yz)rcrr9-WsFW-IJ-*2TrTPzwyYv9OPV5U)I>ob-pNd+=D zkvP7%=qAU#Vy=vK{-rV77G(oVR;rBFg@f0DO}P{D4aYNW$yu zX*>cld6|^u#bvAI7)0^f1@A6E_zgQgMA+N&vj51OnOaTIs#@u;AZjFF|lRjCDD>? z7WurLU;Lyx2!yYVHvZaSJ;N!~R}d(ZZ&W!C-9f#lpn%H67$rA&HELuf@EFFTD?rlq zlk9qV@gd=w0mwx%KQhlxItJ*Q6gU&`FgtTAL=)L*yp=$7mSi>lM2cxxS?b)F)Nfn) z@%z;E`>wX^1Onjcj8ghgyXey3(-!n6JY!&%MR{^+YHEDE1OFtnqN0c5ZJLD~7>WIG zPFe55t)dE~)1%{6_q(@J)u5bNV3Cj9%K{gVm+uqn)xaOwU7N`HgtCMC0xa<`P_1wt zAm&M}gxyhRzL)4E@Mb3%YgVNI{=>hMa($|=b3!km^Vv%i;n{45HybLWU0ui;leZ?q z`!*kfvA}f9iqO!S+l)v@jfbe-;s!9aeJkx;gCCu*=foA}2RD zkiuLQ&0tIeT6}Ri=R#?{cKUK24Q9nt-~LpB zpe@*1ItzB)S~?*Latx@t%zM$omyc)kFk>9_!Re72vbUwnH>Tgekl-o*iq*$^uOH1V zk(<_D*%>wN}VB=7pJsZag={of3p z#k!IA4)=WD)jr`%H#LD)I<#W3bxlq8&|(7rdwhGRKr#Hu;B1l;(g7GM3JnfkfWlWY z5BpzyOsklbENEKiPMqv0or_C;6B~K88!|!I1MOD#Tfp#cG9#yKEmcx|E6T-6E zFQ(Eef+!#@DJ)$jggHxck$WnBOPs*V-D}`Jn*+IejmV;M;Ur0v1YMTUwI+JmgqA?g zk?Di_)2e?xTNv>*Pp!ieVW7fzFGT;)?e(xe0oRiyW3D4{vh6cm&al&W+>i6jD20tzZa zjTj(8fJhAxdI$kR;Juyac+Q;v`SQH)de`&eStnm$5%SBg+~vCVwfDX*As^l{Vimef4<$e+{*XzK%jDO-wFvAq{`CqL zI0N?8e|rr+_@7QT@2vjA{^a)2|FFUFyz*~KihVpbXXGSe($;D%4}?7L?RX-RX->{qdN|tACGn?>81G9F>T1f8Jfm+2m(>lX&abx`~G6 z>5&h%eyJCmIRE_;LcVok&BukiYJJ0O@5f)yv2cc0SQw@T^3^R#d54_*0Qvi&S5~G& z&&DWo5rLP3oxr#8*9!XS66Pgek3d!Z8-2#&FxURa&9H}~;JJq-6uP9iere)Gfv{6C z=Fc^+X_c7lthYK!gvHnqwmA$atdQlavlJR#Y?!NnKAC)<~u#a(%x$hrObACqMI+`avjP>p+ z+&pC$ccEq+{y)Fj34FuzIENcoZ%X)vA?}C01lSa~k0|HrLBA|#vi6~?LU9fi%hoHh z>tBXnC;jI@dwSuQzu$s=`~Eiu+P-~v6#v77rsCkgkFkCG?$`W>WzOpp|9%1BtN;HR z{r^3wznJ__R z%rYb)42fx`DCZZ{P?YoJ>hs6FDI)D-V?(gyWNwy!x89rlFyyh(gC0*8Sk0jqZ}fu8 z$0=tQ&Xt^wiZa%{PzTMtVCWc#D;Fb$Egal%8TBD4b4py}H*EC_m}Gps)P+?i1d6l= zi4c{6`w|h-gOyD3t)8a4{xey4XT!v#0UsZ)I_DR_yXF-%V>&jE-xxVqf{fE-} z=MG2|(HcznN9X59+Ivz-c}Xg;Vup2`kxR( zi4PqetNY!ouJD%b+%(}Q00bLf>PMD*a2B!0FdHZlJeWgs#|z_ zptfme?@aMBYdba0{c`c#Tc3g<&i2VZw`*UtpP2$Bidc!e6%5AyvQ=Y!h`@a0UNxhc zdoB3G$QA4&w03gy%5RS*-{0|*5BmZ!rZFvHHA`=1HADwSCfqD;ItC@%4rUG2R-$CP zRJu^xh-_*o+R!ER><7HK?x^S$-g~{rIuhLB&CXle4}(~no0~IHT9=c4E8^Fl3e{vV z84pr3wH*Js3C%PZpEHzoE+MW)-+8Z6y9h86F|m#1FnEtLr<&YBQ&|5S>vzhWq{dsn zUUY+q{f^=eZnyT0fQ{xyZm$pdMzP3byPPcK+Ehn5ra52C_#*^}WVWX|_#}X`TO6Qw zUG{bH@BKwW&k6D$cn^^IN=AK(dnRCw7T36`e|Ebl+CIl*AthJMfS*z2qBrAhu-{9L zbg9(RA&)%GnVWCWVZmU~n0EH`7%t!aicFw|swD;b`K_!)^-i%O!yK<3l0eVT5lfV| z$ji-Y&`f-VD#-3UU_{9!CXcV{^r>ql#KS^Q^zBgrIC70{f$&B)_;R_sY9gGUCaZV9 z{O9fHu_!Ndh0qm_w!M}KkmVvFqEFqbdsgTG&?u0SP-qSIsU1MK*@aD!lsJLAPYp98 zfI@WU%>L5SBTY`?;VXMc{O+eupQQ7`wZ|LMFSy+0yE17c-3`#++&+T|V5fyu0A70P zEk@i!NdWKyH8WrL3(N89U~Gkf8b)TZO`Jv0vQd5`$Q$QQ_Ta7rI0(iqLb<%3Hh~fY zjj_ZywKZNJT>wYo8oTN08U>fco}@rz6TkS25a{zqgK+~1lOdxFPuJCdn;TNa?&Kg_ zqRt`zfN=E}*_J_%^4$O_$k*4pRx##jTpu_SfUG*`*k`K~^lsXg{hB>i_*jaM!h{`> zIP{>;?Or+U;D|m*JHV?Be}efu4Vz0lFOn?WQ_S0{Y|!p+7io0&B$!s3SuKrnU6Cyq zQXFU7BX6>rni|@Z5q*lYt+8GrSQm~mSV8hJmn0jGinROGg2kxhmyWwCC*7l+h*+T~ zzqA#qP5UId%=Ii)xZvPgOAKx-PEQgGp2uhU$kL#D2laY^zr2QY)Te(|mAe~M&-GZa z*2o0yLlT`>004n1Se*M233Uo4@w1nY5BgGKs^sA|zm2x&Q>EvB0>T~S5D%<`h*fA) z#;SK=6*8~k>T-mh#L*hGA3~D~WCCnS%!qbGSN<#mS!vN#>s^x)_}i^o$GXfCVW`j( zV8dl=2}_kLUz-Z)wXU+MMi!va>dl*n8SzIYeu+-ahhj>d$U)@@2Sb;Z?ImSH9Jk;{ ze}y9RqQbLX;?Ik#tNTonf$aqvedNJAge|!?0o(Zn!r3+y-B?}ikXg)oR~@Vo^Q>kX zFg`QS@5F@zm8uc7?yW|DqMmF7g{e+>V{o-oT?va@vt+2CoNLG>KTRuhQjJ8v`qU|Q z9RriSiX?oV^S47klWP^pDuvyNr}ay;_HHIQswL5&N#52#PzNF^IKK|F`f@MOz4RB3 z`HSqWWwadmc~9Sd+Y~nhF+9%+D$H%kTDwp^BVQK)NHQ=jzs20b$Ma64TZ+|@6(v4M z=c%)23zFB3BN+ph_F;<`NC*R>LCQVg;;}g%AN~H$lE)2MN;tj8(k^rXnv|x(`TclP zV8-Tcb*JhkiyfBuG`SkK%qH|-meyNKwBHHv^>7o+sCpRi#as$MufIkALtN0h6H(01OHFLxJ8kkqat{io*jmh6@FFbhJ>& zV6WTbd~iwlF5IG^@3nUqq!Oz@S5MA&^WjpgR1+<7p9#%vc$)6~LQ*f~gFA9OzreRb z4roOoHiQ}j`7W%a-UPI{;%d3t?EwvRvnQ|tk~s~x^}pJ76>nB`tpSc=xo({e({6$TX&ArDAYe z%gGc>C?*R`C=b`(p1qTCze0qnn)jzVEnT*uU9-TCgccdg0zd?W7;*!(v@7l={L$}! zM?`xZATKi+ZPinAfy*|*kj72l801c#^Uwm>kO&NlYQ4)_QYN6e-iogJMogFax1@9- zQIc6auvjgddu{)amitQk5D@|vm%s)@XbND;S-=M7?)Bd`LiBH2FU`r2E;n*IyJz-f z|LmXb1ot2(@oHmG5xX12#8LP2e_|Dq9N8-Vk?REH(S)r#c5vx zjeU=}xFd(SbP%a7o~$?FHzN3kv5JV2PI?pIXM}|nkNTARxtj1Z%1t{L7Z41V{moE%qQ3J_Y;EPD8#k_%y9I9 zZNSHMCDG)o8h$4aTw$jq{4}7n)vQ`075oCzvkZn1z9Y_kxK<6*Nx?Z7VRaI45 zRz`8d!LMFPx&>t~V6?|KQY4>TZ{vBeeTE#gbLvLw=E{oO)`s8qR|u$_7dqr>ISy4( zFIZQO-?>FuIopNptq_bmCtP#R5Lfl;!i(&Zr@~LJH;$sVRjq1i$Q}#NAYp2XX|0ta z{`U;`!|jMzUSPwsva&K}_+V)6p81VFCL5@7S{Q?tvVJ8*jB%_=!2)!R0^TCk9mhsGW!8g31?6}ib*X(RXZMThJEG;E9 zI4Z{6s>hchxF3A$NR_tVY^5@kOnE?1x&u}Ly;v81qKYjkf|?UN0o`3qj;a`R2n&<{ zY=wDy`-$FO6};FzoY_bjuQWur8cYw`F$=EKYCJ!*-B5Br?3O>5W{^(O* zfz#3C6H*jdRGfx1WV-s@vX{nB6B6?uPu^w-Hj8IxbGl$Ox2FoV|9oOp64`3xqnrVNJS+Or zncU0^$N-?`>J#x+|6-xZiI3ysuNq!v+h@`~D(Ejp4Y-44K`fbJWO}o{2ES<26r@%q z3=#4NHZpdld-&lv;kdrVpq!)BvZAx{eNOq>c${z~$%ZLus!pK!c+U}T*Dh}DUT=&D z4_6QSU`QMp9nERJhP1;C9BH2%S|uQ?)0SC4H;ri3%jOom);Owp`EuqwyQ*eILDqTn zl9HfghVv!vcDc{s^lz>XV(c3Bt6tn@@0$OZbO3v415N@$`6dojheV59x~OBmw(!-CRX#2=CC zp7Sr%30`FQTH#=p8{5f*UoQp3bptuMzC)3p!NUpmQ%>(sGxhQDnU^m(```+1j02Q` zXIP89dv@^0TELUy&o~`?pVq*5k_}A~P$;9^s9HuE%^%4e&RNLxCVv`Ita@bOi6bx0 zo7}L)4b0!WIMX~8YM0YdK3CVhU+Xy%c5^OICEG*c(WmkCmdi7UYQqHy`xE!~$2bPyeTwj^&Cq}xx3Kih#BP+$Ppa##BJH~yb(Deg zncJ^o3V|!mo(|s?YS?`eQ9Cg`OHpWXl$fG2~(`E z)sxoOXVOBVF_FOOYMcJVg^smrh4g@Rb?B`A(5%;N-`T}2!zd}Cd@t`D-QxtkdK})- zcI0reyVtT8VR2uP1GsTG`@W{|tNjwU&Q$y6lNapW*Dyx=bBzpVtq?^j4H4wzs4SAsr9*aYyQr&7lJZng_pMvv$ zgrmw>zk^ajAmQK@Wmu73ON(Z(QPAj`yam6`GwQq^$TC{bqnzhdHEk8KvVd_d8}pEQ zT)5G!0w?4$q43EBRb;p3t^D@Q0t)IW)+hNmfAgN*M_l9m9*Zy)UyrckRKxFSP`*q! zh3CQVqH1KY`~I%Tiq`XLw_y8X;Fhobwm0y)C5}UNG7zWf^g8eH`N9 zr{188qV|}SL%sSC!(2@^Saw%t`^MxkP5DA!L52sSX4<7jN+>mFd(02y^Sk4_yL6)x zP=|6QZ#e&P(G~{#D_h#%rP8LHX1Y5{iNHrPrlzKhqqga8kollS`>nMMm>A^H0~g#S zvE(R5xqW>VbBhpFm84S2)f8Yl+5*B^jOuv;Jv!R1g+d{dN5{shROyR#EgLlZJ(pN^ z#qQST>Lik`ThN!cx03G6cWb$dJnYg`@EfmGAwjc^#tSK zs7pz}jlozc@rtt0lM@(frS&+-96bR;<(>!(hQ9u`;W|k#$Ed`NfT*8X3HreW2piTu zYxe-B5GVpnA)r}&P3I0vd%UaHPV|5n7a(A8?q8xMAH_aJo;Pz=vAi8}HsWcvqR981 zPAws~aeu5`sBI_k2?YGIA)`Al__n5|fIXQDZk(gUdRPt0tKEI_m0sCKn`8nOl5UFj zZR(f{WRChl8YPJk@?sF1Aekhcss~HYr4k1JY%;)*QcZoly~~KYFrgFrk55-kH$*$t zAcO_#jKoWY>5=UL6y5r9Xa(Pw9t-_S4}M$!K9U+ry{pwPTe8fXeC4-Wc`lhQD7#u5 zTB=Vn>9j1@h2asqM(pNA#T=!A*eqqtRd z*z^c#2I~ZE$zs|J||P-0u(h=q@AJg0yx=naB$${d3F0%S6BOU(0(F87e#9< zs%Z0Dz4UB1m}1p&Z|kXKGE$KDzrE>lZHIhWnSepYEV?d))xXsB|BZ`%}kD3#rN1_6}Z z;+fwD=jO%>3VuUS>J++CQ~8L%V#O%6P-f}gh-{4u)iQw9s8BE)|d0KnNk5qlUsPL6|=S|M2QhI_=Z_!Zak}lO3i6 z`3PdzraUq>W_saQQPAwccj@5t=4@%CX3`{JpaY5X8y{!b040BHZMN^Xny7V^FeFD< zKseA>0hS5Gu+Dti5$Ksw+Z`XAg-^!-w-&IX&0_(8kr@#(FXIFcntpw)B`8D3-_P&m zM(waANK@yBN4;u5fI(DLsvAcr7s=_fu>m0=ZyOt}QAL>sp{wYzhT}$HUwpFdfd~i) z7=P$G84q~67h^5Qb&D}^o_A^>N%2Jn<4Rcbd*Wcb>qNcxKeQ(?rW z<$@7tQk!yxnn4@HdNHVcw5n4jX;LOrQtxsY9HSJZW3tYQ7|1}koCaj)ffr=2n)b=p z3SGqLFjPuj!&k*9Q$o5c9RIUkN;b1d`)jRjFjBEnW@dHOKjOhP6Lb5Vk`d-_|E$)D z)w0gbh1zly$#u!=*UqXY%&&QEH&M5n00`CZ-g_%cd3${to!R-8U+0`i?qF+^g4u3{G%3S2f5NaXY$)p-KtK-O%&_}&La}_)HO9*BMYK_YDH^;-U%^pI})&R-w+hwB7Qon;a8b_>M9>JRA{P%l1SYqP*39mxQo7H*#f|)mOb&k4d1<8Km@mDpV1ib zPwhy`Qx7%O+U@a;EU+}wC$5A4p={>?sB0^w<_t4%bgVE91RM;yUdk@H1!y(FA+*3| zolHFwv&4;H*=r2)nB{~XJ74l84XiutpDp=g$HqhGmy2NA)kkUJ$SrFLj{8gJuM%F zRYbT`CB?YnBNSyqZMXgN(27>5qFmI*&Lx&d2Ny=K?ek=oGh7pB@4tP!qbykQn;GNh zO21<#<4j0a`Y9pv58F-n4W-6I!taILj{5dM-!GTiHm;l*1NLafQ1Ix9B6_%S%X7ez zbS319i;49rP6buQDlNp&I8#a}jeZ>9ot=uF&9UqyPY@zkzyIbW=MmaQq%Jj%y9Mc4 zJ#G}twsG4q;Xk9A^hfjW@|-DbdYyr`8P&&*V*5urtbZ6l|V=3t?o3)ql!U_JD&^6Gji3z z+n>-v$?dkJ!E*)P_&8+~fkVKA7#Nck6qFUqdg zR++`Pyb~Y&Bf`GcE;g%7-^rB3=@j-` zW&w;JH^wTFj9>*w>mAGE5vAg=t0y7L07jO;Q``QO48&eXv4w5fiHXb$+lS9 zecebl$uXjHMxV76Iv%3o>1iGKbEy2fV*~I{kIp3do_K1k1y!PLTTSw^4hLS=B8gP@tj@mEiH7jTCu0=_rksQB|eyAAW0($2dVWy*}_ z7r$*;EK$8@||Z?3TyUIu?3xkEfn<8y)Sqv0To zqc;r^+^zgY8qa&PYAcj)R2jF0j18XATj<%jKH=~<03frIUja;eXuU-y7G&x{b+w-g zOxOjd*mqqsQFA?8?l10=2OFX)Rasjg_p-1OHzcZypZV0cZeI)o`PcTXzvX$QOS%ST zE%IJN7O1mw9EeB(G+p9c3ArmNdr%jE#mCGxjdV$z<5a=d9mh!t8O}2XVRvu z-b2@e6Yi7>^wnd#2ad>}$csIsK@jGSuk|LGkp{NJNdDhXu3y!kdLkD@T*|sI7&2gD zhxZ0B%QAN_9Uj4Jz!DJi-+CkTt6Dy0pEXt^i*dG<`WD!&{ULCgd;SVQJ-Jw?4w)x? zs9i+36_x?FnNd%Os0FY-~>dN3FWUcRST@87@g%vuSUP4yKjzQnv`1;Elk(-}=r_7JVf zv#tn^ja+EWKoxC&t`~2$DTM71HGhKmXQ|M=T&3=T7iHC;-0uykp}?MZo?S6JyU03RyFd+_9@p| zmeu$*yQzt{_+3-Rof;xFsd39K=wuv<+PsGLZ?q7URH{Y?)yT3hUuMD3Hz4eyET~@o{y`>CZHEN+YtDn z<8Ql<$XjHryz#R3xB#7mR-xqxDqXcj4!2Q71U~`FqDQ9bP4=fC)|xC@_{k?{)mkNa zBs!`q!1t1`OTeR)d)w{3Ih7bRx&e~b>?ar}+WxEd?OJcRMJ|=9_6l7rRk3jIGIDHs zr;TvhzDtn%7oFT1vUk}>XiSxg4U$gOV=$TA~H{MIL*>Rg+my zs9gDUW*{pRe&bD&yIr|fwkd3YCu%baWa^7$v-i`m10Hzx1_{8DN>N+o=~_{v>)mf| z3*HBu)p0)vYsXo39F6Y(={b21^Er8L-m~0$h-4JpAwP`EJ!iG+=sRomcJfI##NIU`z(>}C4?@f z_H~?oqzOA@$)`!pvHtik9mw*gwan76kb)6N&zF13f}9`;r&YWI>R9L#_bMuZoZ&R) zzqu~*uOh~s5m3a4>>BdVKKST5$gNojv-cP9Vy~7t9H6W0t#rUeQLluW!gO_Yk6M7f zHI`ZEs#(DIOf$t~^66MoqHG;L76;|fa@rxWy#68=ysZz7H~5J98m3MqQ5vn9wF?)a z83R=~1<#9}FI{1-%T6?mhjA`d4%P8+wyRsw(lOHok3jYV@W-eGEE^F~5TPyCGfwMP zujdEok6i$FrEmt{L$6RMZ^twROy3-A^*a{F*X|DlcD5w{-qfBXS}l1o3?j`qYRRt? zA7T6AmhWTyXxs8YUt6M28hd|HBVqL&9Ds{1(SEn;TP;C4(d?G zfJKh<>s;GSsq{k`_VNf3B{gwH*7}w(ie3R=D?!fqtIWr_JD#;x?wMmlc@7mp$81Y$ zec+Zx)e+NYLf)_G*On4viR<6Ky~9@Eu8#NrASKGj1ag-~n>n|U8@Xnr>$ob$U zajvu-gsNRw`QUGB?2gQ)H$>`mm_)%49M>Yz$CK?%aNkfBmur#%(NyBZj$)E`&+a2= zaB6z|5 z6zVyw(}S-o(Yhq8`#j3mIxOIY+AItpaK?XI}o6PXAFOMNRC*<$U7PO$bRwMSx?b)5* zsZ(?5mUi_5=XyfyzE^A@K-^8 zplr~y3X|+j#_@UN9e);4HYAIWR_qFRadbLecp}sX<=kacpk!v;=>;G3I@YiJ82MmW z0E=0_XsxoLLfjr=5J@AG_o2R2U{Bwqo+QFh}d1c0puSg1qEnR)>Nmcn|c7R@pdRcs=t3X8Ef?qT#=4RiWj>HHaDc|fcr+P!=ZIa%^=Lzg5V4EM#$u26Maz!gHff#vLVNs_Vbz8MGYua(O0S{9Pl7Y zPK*r?BblR7n-c!ntfDB zOH((Bfz5!uVe4v0t?p%jkT8*qwJV>Wvo0+@+2}uy^i@_p*r=^lEZ?Paxp7CYZNaC< z{rq3W>C1AE!^Rn;NgLsuxq4&-MU`;mm7>g-dTvHSXs)W7`K^Hi5fqFu^{BAQ`MKAV z(9z08yl%3%2GU6_(CV9tbl;Zc4bYRV7;rTR$*fM+&6{(q@64y(-lQ>tfX*dBPBf06 zbo7xArma)jB$ql3Pb(SlFl2l|gSzgbM&!=hJ}BPp?ArrJfg5-4M(@&hKpmY*@-_iw z;VhtxXsoFzQcZ>$UAH=8TeDMh!tRd8Q}y8c4b{~q$?N&EZw@ghMBU&PlNHe5T<1Dd zL;9I)&AJJx0(eBf>V+ztH~D#RCdrbQ?B5&J{aXw#C>_nfQ&aC0qq^`Uosdpm9hmsW1(cbH1|%v+GGU z&S!&^K&XN+J?{o77P?wKph895V{ZRzz2sOP8z}-tBZ!F)%00j^$D+JwDMMe@mIMHN zO+|Cr7~Z=}+27D&uaGuM*&kN>pHKmiM9v3#GGrw;5dsJm;s=CtdH@u498DR}Ykb*P z>M5iMkM*fJUhdm95R6+FM$DHJr~?B&k46o_yx@p)IRfTLjR_GuQ_@(t5Y&j6YQzBuu%hL*#ULq$(EyV{f*A#>UvJXSw zeycMB;E=Qopn@aYvw)l!Ir&7jnNjJBzR0IzGJ3ZtZMm7X1PFu(UtcDe4WLG3+3!3Qx)BU40G3o5k~J?=x`A^AV8)t_qE$I3kJ@jBi$0g> zS_7@W95b~a5+XNnfGz5utrWTHYr|~90~u(4$NhTzw(ZMy(X+I)FObU4e7i`W5s5=W z41Lp1i}LC0*kfqybN2Wjyz(24mo?g`4P#4VcDx7Blv_FwAmf{NvwTKHkgPzEVN&Z| z0uC=c4Gps053^}D9-P{t6^;xI^|5~cZjNO1*$q?~N0;Wd0vxVp9~I7DHf~d1TY#J_ zV0KrjmV}Vgz|xj8;#D)BYCFJ0|8~vUWTa5i8_3TgS+$dZoMr^5L^)Plbke*Om{K~o z0N2q+6awJ{?S%BX1PdLUT;rFq`mfWlqnc`Sg%$1EV1iW9fX%czC0N7QxMi+d-2~wuU;YXFnza?aqHsJ;=}-;l^AfJD{@goiib8Uruaze=kN zVqw)FZSTKf8{!-Uw*}-Mb{CKQMNBGTv=xqw4VeT-alzWw7Er)U$mZ4STl_k}HKRpB z$Vf{66U)N78gQu9N%Bdv!Po+swKqqe1-G1dCN^{Xb#1ENZC^{?1A)|9oEJco3QiM> z(vYjKP7?|`&g3afZ}j@WPr%@|G83k-F5^5PTm3e5%@8lm<>(q*r;vbEU~CcT3Tl@w zy@>D?j5F(r+*pbfX_tF@iYw69S1BPMjTULI#su;ppdw4zqt8aihB|NxhGzJAH1EV0 z{Q7H2y?Ivdclc_L9<|%@odXJf?6D#u}(&i2k4DD_$Je{@ngXK3bIlo!7CCRchp zqh)6xxS8&K+*8?*z6w@NajmKh&&VlVHtJL7MmrdzfLFtpE9%1)0!^GYni6<$o)sY1`YYO%Ib z*k3EK3VEQa0m6Vo5`}3L));dF+KW{<^fNwaG+sRN?JyOSj=ozemZ4MqvT(`iSk9-y z!h5#CK6k2c^?(<&re3F@-(nylPMG6LgKd9r{R#35L}m}9CkgesALcv+cwzFJS5XRe8IaWbCHjveyu!s>v#XQe$(lF?{pI}(?x3Kn<`X@A z9>KtS0ZC5GFLmYhsTux5yp*SYVb&5hptZ2z+M# zLsMP7pU}DLHf8hmkK_b(KJEGFY(Mp8hcPRy3XfY7)3F{s8KH+u2$gR;+-lKiVAytJ zb#NmHhBECu=-vedV+=MhNOQ4=4U8aT5}n~e4cexfkvmWVU7-t*hciNbffHPJxwmZ0 zpE!f#vi1&7vz>=R)T^RXv?Yd29UA@q&Mo8d#jR#43kEO{_sp4Cms>z7 z9BMlT%EqIkwinF5&fWujrc8i3%`qOQLI?MZx^dn901jA$f-!bB;WX#f0gb9~Qzc(@ zF^(&K$XkVg%7@HmkBj~*$^15&QTy9&G*bj~*~Y_`NqTr;_cGZyhp8pB|Z4 zbI%kL6CKg~8q@1$_oDwSR^(WNMw@E`;#8 zKCOJ#TBT2}r#pw)boMjYw{yMGoom34-$(Lvra`}}P~0ViBWreZ(+YN@O<5#4j-kax z?DrK%>6|+rk2ai^bnyfcU5aFxF`v8Om4a6{D-KJnO&2>0Xgk4+Nw2HD)Z8HJ>De*k zqXs)oet^dvzg?a7rFOBhl8AN(Sy#&*dzoel$cr^rX3pd52Z8<{>^$`P)g?B2KigtE zB}H+Fs=< zy%^_?zWa;mx`ii(6*N?$|XLYT7rK1B`7;l0yoA*uW%5|C3U8M@wc_- zxokPmaRFnd)YD^}4+;+W{ncL9;sVD*BOR!O#siJHC9aS#eD0WueYp+{2I^_1$-nnQ zd;B#t&R-VcwzwSvR^APakffzEP%}c*mNYaqjcTL~y9PNf`SXvyj{ocKN5wjmi=7Ed zL7J>FMxLh9P>(JStP$IJ=f5cTbIT@9V6}{sxRX2Ab`;}6HPb}7;sYrvBqx=!H!2C> z0*48ByN3V}X?uT1-Io{kofDUBI>L-d6OJ428-MjV=mCV2KEb1&pbiw{BxAtdW^~~p zoFqD+ho8^X$u<6&VfOh47l3`k3#v{j|DvowuIlm_n<}&e#0z8UZdvY!=+MQDX7PWG z^w*;$&x@h*(xLZ4pkd+-a$T!#0AP=rt`uPJPEW1fMCoOVY_M?l<|jS^EW-Tf87t?h z_2V*Y;aA2>voO!|b;BoSwMR-ox4{O>^y!^Y#4@L4mcOt6b3i7iA1>x{3{q*9NdRei zNs697zo>|aO%P7&I~62)Vxk<5+6cp!$$U{+bbyL*85ylx&y>htd|`0#+P&?arn`2E zw;7A<$f#p+6B8cSQuSIW0!K-e$EX;6xiwI(#;0jC(@_oe$hy9=&bB*&}U<=^?(9MMOawJ?Lg_rVcs9nvkV z(PdY)a!I}KpIk=@bUv?qokv&S0|o2N4(Yt^i*hxJ-}Mw#tQSh{DaZR_cweAC`r8Jh z13X|b0C_wr*``iRZH8R=-2*_mSOl3u5$FD8x{1yPe~gNXS}H=zB-mjD+KIw;{2x13 zS09LDZ0K6U!VzKA&U&8Qs~Ck^yrQxaCVzr0ZUJb zk{|4X5I5D%RH@}ae4sU}#>$*u2QVN4tB&fN6MF(|d`!~H6`P(5Ns5b$_6SP~O!m!! zDoG#{(1_ycK`(`@lw{IED*3j6b!Vo{EFa4FUL|Wiw8KX;6BgQdJL^}wY_3z~4KVwW z^?Vs52S;B&2{vG0AECo6&m4-qC{?tJOQ^T5{x(n#uwtJ0wrDnc)h$iZKi9d>Nkxzo zG}1`CyF0MboE$I-)r3NCOuWq;($~q2om>T&d3L3l<>HITmvUWwZcr8qVwlX$!>BUW z^7aidwV$7`vs|pC&6$a)mB+0(FcT zv9nn%cmBK(H|*dABE*Ya1|Vj7mVh))p$lRtt7DR;V`6jSv&|E4abNK<<0;ZTw8AZYV4P%4lR1u~kNns%?SBrP^k3%$=RMN$h;BQUHDAQ@W( z3XuwF{cft8ARs)~daH4^P1CKf@V+5?xBI6^igCu#N?T|Ry)!N(Z1?*+Z?$9lSk53k zpGKH}y^(!fKHYRG^jzKX%E4qsf-)x&!Ua?UAmThj2yRmbXUj>~K|EGUaL+_J>&a#; zG*>lBc!=b0?5vd+Zur4bo3 zlaIo9C~7|x&3%CQ&BEZUv3^Vai%-qHb2N`J_@A<2Yp=1 zIBsPE9?NR$7k5wZPjHlNoeix5jkf!fIuh)k{lR}3Ygr)EfK9`st#zcT+DEY&%(1ZL z&CS*~DOI$=R4GF5jmF2TA?kxOp-rZsL%f;wSx1!@6^&B%DTN?1wx?N+IKyC-pZD3_ zQ8h(PAG!1#t3Z6iKheuLCRbj!vql}>m_}%<3rRmSe$QKst>Ge3$A=N zpC~$5wc#$m@Q!9GU%N)OZ~cpN9N$#BJN~AoVko8OD+GwY0Kn+QcE|s`J<^#8Zc}6H zIT&esT6KG20@}`HJpU1hmTHDg_>3 zfKLdVlEyJn>~drzXbGDWJXR&WGD^{UTLT0318=p$DU^kv0mn9F5af0)>H)T#TkY_C z(dm+%c@3ZrdvN{gp>brcgP?;TI^lT<78BX zUYMVs!|=T>?D}KS-)m=_XAgru4zBF}$4;y|@P>R7TF2D}QEcpWvv3amx@;D>I@W<* zm|c1OWd@?Es84X4f!DUQ*zw+}+P2Fk<|`z~Byrae zGBjEt0h$!JD5m`S0Wbgpn<3zbW)?dLdgOz6_|xP{L9*t~qHk246YfLX9XLt?Xq?OTIy3_=Jh>`)1Y&F-+J8xN%J~a^1S#Yw@}_I~@MW5N8SuKz{l* z=!ZM`#JCKc328KQ_%@W=j424`B9K{TUQCSxfpK5AoYi`TzN!H@bqpkCcCZ ziJe0K-4NyboBt;*26pxqMybIzuuRp32)S}}8V;Au1>w3!G@MmFPiWd(XLa9u;M33{ z_}ahLKg|hV9}uFMW_<`IYvp`0+_s$bxXCjwVu|nO>l0cO;eGoWwEyN#@lyWpCJ6t1 z>%Vv7U*0$W9UK3hDSz|5`G2)IgoNsF*#2`7)$)B5eHQo})q%V&jFJB6(W4M`G3`=w zGzG|yqT_jZ8o;~%>lNvfe@zAP`NBReYmFD(fByMr+z7)%jyd|K_T%YWOm-H&07dQ?uFOwH;=UvbROqU&f(*D3yx=WQ zKBEnz;kyTad}@V$Ty6H}ec$SZ#Kmb)F`d45@7@KT{b53LKTmZO@<)c{>1VS&R8`Is zM`8nt0!}erTSt4Bb>1w(TFH1tnDcvYTk@NhO=+h6GmO}iDn8uQbT(TnYIEfkS2XBA zy0DGZImoG{GQI*Wi10=5Y}dQw*kKIYkcRA|Nlk->sClTB(ofl(tIx{)^V663faRPWbTuT+sQuU@nG=cJ4XBJ81$`9*nbQFUb|m{BIpjt>2#i+l z&doh4Ay!9MO*r!>>XezM-Tc@&eZBg&)@;B(4*87=0^pE83=AGKnGA2irl3V+!PZs# zIs>VQsXw2Mh5G_)k`iLi=ZZA>=>T^Jhtl+)n zYGE$y8wEp6{*%`Wstd*fK(}h}+OnxCkD?^#Uoii)Z# z_PG;@NunBqBvM9~Gaz;Ie?-@K)SFwuZSe^DppTM6^lgR9;j^GwpWEe}n^IR_^E8g23Hr8vYHueixq5|%Z$$HuEoVcbuD5^E+*$EIG`{lc zD$tC1w!E`Q@jYMWwAMXzK3+;1v~6$CWNjm_9+EZ^!B~_tmqr^SCtdK(?kWo-^*HP7 z@**~Ja`i(|R|YBhUN~|7$tMO)wboWEhBwx4XLGfzjBhbfGPT32RyyWAZ)-iyH3Nmh z*fnl%u8tU?xFoXGLj&&K4R5dv;n|eT=L5w%wYc zDIK?sjX#_H*rIcvJ(pT(P1HU#{t`X7T+W+=`N_e^TjDn{CTXrc|~j zVt#$jtWjfrryeJ5l>K#l%1PzYg$tlC{%CG)PN}8gEjds_RX15AbUOX0TKGsr1ioc= z03(;)DV-PD(A0#jJ6~%wK+cL{<^m`+>z;t^EVvXcF-Pdv>Pr{UYY>H@|~ zJUwt|0hrQc#m2@aYi&8j+qwkH9Jz9x9-Cs+E|-2C-<)UsBPFxD*vk7Z@od6fKE6q^ z3xw2@9J$p+DhbNw4!@4so2Ut-_AV*EsdEVlnFaiQt$_LwZmM+ZBdy(WrW&Zzyz$X) zw;g4Eo9ZYVb%B6MF21+I%5jB|u9-m2om*v5_NpA2J^PvSKrOgEFW(q3Qf5An52oZ~ ze|?*^Wu#+bEQL#bJd-)uo`eULfJG-4dwa?$n=_jSWbER^nhYV5~2&cfk@y*_~O`5Fg_* z;m5OjeUrsBu++9Fa9apD8n}4J)JIdSNGtHc==}oIY=LkLEHLiO`UATl!yiRE2-%lA3uIy4Bf9CaYj-c z7S2XmDwId=y!+qRd~o;nwU_B5uU}e#XwDKhrui^O*YQDyh{a{62N~_JUL8h9Ba#je z4>Pb>#P^})JE4E0fm;757~HioH^<*|b_fcJ6Y0__7zT{yzCKr!4VvJ4mP*aKeF6@6 zOD_}!ILLX_jSk&X2SPPc#}ZLh76L36qYX-cc}ES_T{O%3^m%$6130?kAK!YLw|A^0 zBU7!`KIZBl9PIe~xwozN{glDW^z@XyB`H!<@akf(CDOB!yCLHAkzlGjH5(nM_~Per z08W<|O_wISx3+$KUE1z*s%@yLscCGqs4%KgP{3Mwb{d*(vbP3#>}@Yt!0X7hUI!Ne z%L5#Az(*lg^-c5YTFALHRW-6oK|n7XA=OF3+|{(lK(0iikbT`czrz73RJM z;s&R94roL-1*}_ul;V)pzjHsBY& z@7+$eUsL#t6pv5h5K3u%1T==aO~FKXyZHEY@&IcW661;ho0?bic7Fo5v0!RtOQSS6 zHeYXR-=TJMcwP3p=$3GqaesFgI4TUkv*f*d zRg~LnIw+gg(EW}0EUB`wqPv{}Q3r|ke}hwDW^F4=%F7xR;6eSiE*GeLp1(*pTOqU# z8qS+E!SscCl;t%Z&c(qACBdbnZVtOkBB5bTKsfh*UVpA)$nJ8Mmzc*J>m}cYpR}&Z zN)@YzY;n|8IFd%$?g=dhy4%w&(BmTt2T42$Y-OC+sce(RJ-@IpyV{RSD~3g~2_UaH z?Jdfc%o^~&^^*YaLs=aIS~$pcc2>2a(cTgg#%pcEZV&y{p^&xjGEccMhD$+^K#m=M zLdwU#ewZ(yc?b8Ol30P%1p3Q&vU)n=NkT&XP3I>)g|eVWw>6y`Czj+>6F6m(>3ODF zAp+?P(k8zK#>5!2U}u%+%gV|C*&ZV4Afa+TksD22(TlJ#$4{)+ID)A=jxMYE7cKUe zI)U;zpd@(xOrVuZjA(#)`%qkb#Je5Ryyx1pJyN9WS;tRV#|6?3D-$ny%ngny&*h#T z9c-XNEv?&NANmPOr-aHG>xRa(q02lHDrUJ)Z{EDNT;Cs%KXfqL+3NMprJ^C21T+e4 zRu6^%Cn6WV3VksbM(p8KK3FY_gM|B6qaH5xt*$C59xYF!jyV%=fD24P6Y4;U510`3 zKK}MIeRd_gNJhox(0$LIe6UxY;0hr5Ii7X>w6)EjTaI?2J^d?xdr0XNdtYygD==Kq zqA9!5QG#1R*t)f@rp79Cw`!L_yyQ0YbJ@Fb?BXjRWe?NY%CzFf3c4&xMqTg+0vC&P ziN1%_lQ_|lL`@+fib09@zOF5II{wd;*nJBB(GhcowrS?tFNQv6?DPL9{RaFYxla#@ zfsX<0%h17Mik{rLey~r&$ks#q)C&%hos{jxwx#K|63nD7?Bu=b#jfusBJZ8!ch5(T3 z3*dv}K}3mBjeTq9mi#w_O*MEg66M);Eu(jngTB#hVkYk+#b;*&*-x-aBf`Skq@^jG2u{ADWSb` z$RBFLUWR}Q@E$}=cYRDy_3f$z93vllY5@zGz|ciwiJR?MF(eXpP|4T{?Ge{5JHsbJ^@@+x?J+;+7q(yP5`9yBN*g-P1ji z5)(4M^94$cjqUwDuT0rnSFYX8cb0gNsTj5xlYxT9f-9Ab)(1E?*myZT*d9L;!CJ{@ z#YtuTSM3;f76enV#;$^b9BrJt((>M4i{dvpIX$?WPiNZ)O_%FAgCi`Jy< zt^gv(MK^Bkg5mW@o+yJ76;-iRP3qi!D`|aTv#RcFHIJ*z{fuCcA|-HS5<{7b(2Idh zn8We$>0Wx<@#^iO>wt?r>Z+$C>m$*WHsmg$Tz2;bOY~6n?s5>3SX0=l6ui7Ovgnw9 zW%bmiHsa6V9V1Wb_ZHfs#pBwc%VVn}!w)hhqD_yL&m$~qEe=0TJBb?!4fs4SW9#~N zOSgp&=`aTk`Cm@)H>$*dIj-03Q1s#L6wYwp>84OGqR>>+=|3oxT@BpBp@-T6EDpzk zKn5_#k(*Aj1_1{#X#&5vFU%E32o0q>IzC4i^H^OSRy`=XGBN0DD|HM7lJY(U$)2H^ zSq~fBk>q2DFx$vV{9LP9Iob3XaA(LGs7nM{LG$T!XteU&(C#k2Y5#4P-ElVi*YsSm za{oSe>P%{?MOm#=i`4!5N#>XQ6hq7`%u8|frf=)@-ZtW`6uGA7Xa2 zm(|rmD>@v+Ax$iMew`oaS3h@anZGO3#89pJ)xbRa4Kf%z#*0_{P@K5`=TF#(%pA>R zVq$W1d>rWi?Of=@Mzb}GGAKuWZ2g#R`%5%ktH2;ub-qo`aYMC-ms>|~(>19pI=Z^L znm&@#zMgYzmBKk#zIFgq2kZR~cb1ozo%DFJ24LBlvN8{WOW(z=`ID2A@4Md@8XBO% z+${Sm0%~og~B73`h3=h@`u5nSfm^yk9N-Y+lKn*KN(;@rd60^VJbx{ zxvyW>iDAkdc(Ks!DwK~cB_7L_@fZ5QFJyH|#Keri`F%-8Bk!Eff3kRP)!G=g7v{wR zUZA#+YlEckk$y=k$QeKoD>F@lghKzZ@hb0n{4aF(@+=Pk*_QiK`yQolMQU4?b)-2b z#%$axY#>kPiKL!Ig;op5hR+{t+xG-a%j`ra_xgoTX~k(ZSvUs=7bp~Bw+{opkU#GL zaE8Dk?%!kNLuaph zP_wnwdL7(7F74oulAbE9&CT2Q3r4m;>IW0u=4MtW^JFobY!?4A_|n`h1#prub*yQFfC!zaP)MKo_}N{elTy}SFyGBq zG}f1xY0|x*FVt-9o^@SWAeGc>#G5g-%lX9Fjwec$_lS^nmP64MS}-5$Lj7*B{)gtk zuSH7&Nza;cNXp*ZV>|u^6y8$?Fa1WO)VE>kcoTKZ`;{qIUl1P***QuG(wDdYXOaIy_0&mp4xnPY)KPX2L^3)gU@nM^`IOKzv+k5w5Rm2u4j?S;NId zjZD(qZ7yT5_LW?+GOM|?s;_d=FuCtmbz9!P{OB(qQezufPW`wJ9CmQqrlo-HcT z9U}vM;tHIe&t;hzc_eOpvVSZd^iTH`7}*VrS4_D`l%}q}PTKo!<&=JZV38dE99S&@?nNN31-N+?Sc!s@x}bm%-4)HR z2a~ulppudTWHaN4hC~Kl>vS?*k-)=b6Qo)p>Ny0y}i7!i~XaxV?OJf@D-)xyoT9UlZz>`GimQa&~`Fycv!x_%G=L3^Ap zbNYF>agRW7g+O@UcJ!tka$q8YL{ds7MtiMTq6r0)Bij)X>&Y5$seeP!>>;pYnaD{9 zO#gFhS^wfY)@nm4BhXlOuBNEI6O$5e6IHudS6j-+B?kKdmCVvl}2TpN*=Lx zxZPQKCQk1CgRci5e-CJR((}Tjz#zD=ud#gEMLtA=x;*4ZN(3c*Pa-GBjT@`dGFbzU z^>^h*kV5^4FfTj12h7S7k|i0NI@;O}JE+(k?P+yJt`CFR1M2$HVPE)jVh094*l)Y| z2`fl^xCqvvC9C*;{R2rDxD!c3M)F)B)r?kFNQu=0(K|)|y#DG;Q#M+m;$5Qi)!1UB z*nR&8QsUM&)^G|VUm_G%ZRAD0C!1+wQvoJ^G|lsM{$0b%viEgf;!A*Y z&haB|r2zLC`^>U3Ar$J6K2o2BQ`T>p7D*>(KDRuSe{4BicQuyb)GQ+-hk8O5t5cB7 z4Xub*3M{sO7fwnh0K|9Z@FFmmu{R5-9V{0sTv^Egp8&@B30EfMJOp_Hk(~`@seq}3 zYim1=)ApBbpVxk~cT*-2QwfvgchA{O+>l=IItz=0gaY-R@F&(%S#w8-RFS${m6$Bk z7R#0`O^`>Ni!q2)DRB}n#~*~igZGb%L?k&#P9V-7(}nNWh=`4`E#-Dgl%+mKOlsfB z_q!7?mpaYVVG0qIPd?U1I;UM}FG0+F3>^}=H zH#OWuxi7IR4zjtpMZ-IA=VoEC*u8dO8ZRl^*vSeSMi}pt!Tp&{R5>;63Ez?I`uCQ0 zfc_R}rOSnn##gqDkE@IG-x2p}eptoUn>qZ9vMG>B!{(_pSyb=iQ6R+~$3OJ-&c8X6Ls)Wk$ZL1Sc(_5maz9f#!f)?-gnZS&r$&~{K5KV>alTXsYd z$UwOvJmy_^qJo4arKKmL^I&5GSx5$M#VJJ^fWW_>5Grw8uqS*BoU)^eHkFut6m_-Y ztKHDIt#8ZA-`d*#lFafz2?DGWq6KnFy6L8fQ=n)3oO^TP2?A%KF@OlqAaOWz(D(9n>QC6j1ADO#kPbcrPktQRQ;-V4=w&TOmcE#{g9c33Okw*UnY6;v*<1V9>R;W6x`CzUb=DyX0aapwT@iP{+SXDdR=Or)(e^mDymR{D$ z5@=Nf;D7fP0$(pMcn*Z7b98gTQ<QmYX*@ z0fyE}4G5JN&Cw;+H0&K>Dj+lNCE#O!CN%KbvxUcVXU|eWuCNiy+=CRz*IK27^eivB zYFw-SUq~lL|lb}bq z!$|o;tN&uAFcI?a&VC6k%DS_)6SDJJrAinyOPZ;Bt%@{(>Dls;}gbpW;BuGO@0krC=0BBf~7DtVGQ~-E9bGYsWI=KyF zN|jjcq7huc+4WKj__$5m*RNl3y`#>#5#uiIm%Y2~tEFZ_d;u=aNE9>`9B`^tARkSZ zRaR7#iw5@1ZVaRfnF6n`sqJo?`WLo#c02Q3ab4U+Trn}PZ9q#727@JB8U(J4Y4@R? zT=GFdtE0Vp+fu-Qd6nm-*zgCnQcg7iVBvdWqpo8uypS*=rdIvoo_XrGVA zk^Wsj&(veyKEl<=NIeLg03-wVI>zuc#IHs{fErlm!6KelQ%URVRHai&?wBha>;BoG zMBpur7;*YV5n=8n(Q+`~4>>(DUGI6U@8{#{y81PiKp>=!jTuyb&@I|I43o^l^Zq3x zE@uf3(2cf1g?NBAT5TKTJP+s&R{Inf=oG*pFUX*<1L*r?4-he=k(5q-f#9pHx3{BX z0oG+{r=d4C7MSefH~hf@HP9#;;W!7H#h~?J3KSJ7A-qX%dKSPVqtQ0-3b_T>JBo6l zv<Pi`AFgn0(J2&9vKY#|7sOMPr$3?J7n*rO?aIWhWArbztHA{yapA6yc! zf86mXeWd-;$D9A&y_dOcpruL}bC>KV_=FAuAxpKPBfo`%i3uwAW*9Zdb7Lr9otc@L z(=;Kkxbo+R7r!Gg78h%s5Jc_+Y?HP@-IsLhY>2k2mKGQHJvkub&QSYO%Q)>bf9C2S z;{bGsT)AX48tt`r9&`tIw|8^BZ{^=YUmdy3BP=R9jSBRt)w;w3Ov<%EYpdYrgJS=r zU|V2;3ZNc=@xr;rXQ>2-E=9* zbHAt)0R+NDl{4;JSR!Q2VRCu-$?>cyduurGn-FIMYLTY^EatG3JR{5&2WG5i-Zo7c z0inGxAY_L&!B+qVvs_@y46fSO*SASwaUKH!)xSp(Wm8zJ3E|a>0-oi^@8Yaz8%;e; zt=~l(g304MJGGwlGcFPUBhEc$m4jollwXN`@M+MmkV}Z zO+Wj#iQJoe#ResQpv&5%0LIe7w+W^=UDCuoe@4aA`8YRB#pe3NIIf0x*)9EKf&27h z?o6mq4?rw|=*^d!NcJG&+pZ9VV9B9!u?a`l{N8<+e_!J>H@nQX{*7T|`UU`ZDcK@> zwJibbM<5{Bl#K<1PG@9b!H`C!+-4H?@*G*L(pN^Y%ihjrI-Kn zGPgG2d7a2re@>-RrSq_Bg4*hZ)GkO=ZRXrKc@@%Wa3z#d(`t63rs<&F;`X#0Bk zw{AHPW>4Eirvc{;a2k5Gpn!QD5{A_;F!4_is>j+!QvptEN|-Zu@1(X`l~|zgG{e z-sfgcx5F;J>9GSnRp2?RStJfXa+6Ao8=`ut4+oU9A6NiWfSKUxPq&=pxs<%;ff2E_mDS{0 z8(1ztD74mIXaMxLKwIw^BJ}I0e>~P^o{a`whDpV1YC`};TU=C?XMN8?1i_mtt7`PY_@Wv@I@0D+k8?ik4@9{fTO8j&HD^DD7Is()T zk0Ovr{UjG1>$Cs*ja8^Y)cBd8M`61|N+2}VjRYhQm7A3PB$-hKe&I-GCawTry7@=u zz!H^ipOI4*_@TobbAV+qpnsW^;`kN+P1?@9r1FB>mRE-104BOCE4{lE%DP81ut5b> zj4u{t>t43MesSCQzudg4TOfb!IJ{(UpD%}z|I4{wzWD!t>A%*P|KIP%o1XdY$co=ydID#m7cSDN+91wG zRuG6_QWh{;jD-k59P0<7xjuX^u-Eh*u^fpM%SEU67dVms(fW50J#+rW+Eh6V+nkvA zI?3(q#04)G-dt>Z^{V~TrzC`uVpve6neavgR4hgy%9jZ7=-R#%J%&Si-t<#b;#TRr z#mpRIp)}L%jW81AbXO27RG2AXHY~E!7mj*yO4~>C(gUeFO=STW%S>Ba-ad)jz3sInlmy|yVqL1 z9lM@*fhX#oq+&I#%}5YGCL1yBb9iFWzX(>d+EDvA+4q5j1Q0Uo%%?N!jdMo_-pvB_ zj@E|=00XX)nucjmF^2O+}AMUROE&_~rY$@D52@rwiUbWBt?6)@u zFHF{o9q@({#xRyjQ;oqMDyEoJ0^!r#Zfk^1$aE@I)!jS2t{!PU9B+!`fK;ceD$azi z9T=VGk;qCHg+hN2P8^K-3XEi#mCt`N7iM9ozwz&83IK5{NcZvM?mE0?P>{pgAqzPf zB>x}=T;sa#HcF}$A33gd+5JLK)*8#I1(Jt_+~XvQm13*3QtOv5L4O*f4g!4AVKZ@~ z(WXct@S8gs_2zCLsnsw7%>1FOEGXKSxX|OPxRZfjVc!P$thV_+xF=ojuMJ|GqGkOC z68Q5T(DojgZi|n)NIE+gIXmAb*X=x*x(&GxD+1AKwjC8&@$Z@N5+BP6?jm|>Qnanw zOg?uLZ@1Le_AF=;;=#^Ar>_5nI2}|yQ4vAcZC9<34U)?}KdbZTfLBe5rsqQ|d}lCI zog?Of?jN-I=Cdl96mUnO#m;D?Kcm=RQm}=%*}p2>B4$!ld6S;-NjAL}0FXpWVi9g~ zTGS)1a*QpHDH&wXG&}10KPYMd9>;ker$F_buq+7;y$>UL8U4Sv^<{20JE=AOtdbHX zMC5HA01uR}UFWnkH=lN2+S+{KsbPI#A4kX$mZPYHqgJ07-2h7LSlm^w7Iw4~a!h7>Gx zBdBN3=I1Z;I+Xgq0v0v~CEo|N0Se&Z-5ubDp#=p1a#03i+m~n)YX_9Wx+!JxAyB_C zyJyetvBkwO-JpbgGBdOK2(hv<%L2)ZUXCJ%@*Aq$<1}68K}ZmSLPj+Og67nCu2j}Q zLcE^S0|oe+ZtYO%@5D7efJYhR|;7R0u3Sf zbbYx0`un7$>ZG9|rjDKAVd`;UPY*v`%xg=2_*kiFr4?<+dYv2GUadPRr!8-tP$s## z5jzeW+ebw&4z`A-Teu$vDBK4U-o-IYeS{r&7DnYf*mXU6*?@_{F(70r>R+EGaO1{x zz{%A8%B%;;0&Ly8UVBU!HqhtBR9b5k3^OyQG*~Gf?IT!BOo>ZQab5F3Aq@+`LSlWFo8AW)^9*SKG0@ zs=U~v-5n&mUXD!q6Fxho-wpB+J@-!+dv|xieC%LOXaR+z=HYO4=}*SrTJ*TmZ?NwJ z>n94J**CDiS1^+CKjeN4DOK~ZcWOaox)=~gB_)S&IQF<6mGhsl<>RH%V`J)!n;4Gx zy+cbSDuGatWA#j)P0n{u`C$8x3Tn3y+eLtetv+?-y)O%X5_8(wS&9Lt#mY*|I-{G8 zFdNts^b8D$@X#oxRfI)}RmkoZjZMAFz8Zve*sOt=>n|>VyC`6|*j0~{j6_oli?~xY zvuK6?hLfNRpx=ULjdt<&wsmpgivk;SzB&k{@0FXTeaCP`n?yY1_qF^gK}Yxc&K*WI zjvIk$`hqzb@_r5uerw$bp?Gd$d~%7A&{Y<_uX@@!tLDfcmN?3;Lud#f1J>Cu5`KKT zbv7~*KGD}$s|Hq4dcTBiR(z* zROf|#l=YX*(1vrr>zdEdMi1HZzwPP(TdH(y)oI^365*zICq+r{&i3wp#Dfg^kX3hi znhIm9nLG@=zeGmGs`_|(?#=x1)$TMAU};`fsLkexPgkCaB^OUW6fZiECS46(;0us+ zJjFw0LzN2TUp0MZmorD|toaUpFAj|5z5AA)Z)ij5Pi3aK$MN~s2Z+?2ez7;dw_j@e zVQV`ti>*Km)c&_>UYCv)@T^0 zO5M5hPL;X|*+|WAYWYK51!J%spJd@<{%X)*aQCXmj99myGd6zPGauJ4G-qB^ zY9W}TQ80qD%qqmLMf7B3G-yi(LfdL8IF6!{1|0&BQgX&wN!4 z=T%}2`RncSV^t}GmEGZ7So^HaMv<1~LF!u0qbqbSjMI4T=Uiu_h(_Hms9{u*7xyf*byKIVr`~*ou>Kwnd zVS&SghjPdtWDA|K5YO56m94~2#NdPlm!vmLyjlJ9TKAo58lKrn+&EiPM`cknx3Cza z&nLFKNJz>d-)lNE>;)b#lr~fY)_R5;qegO}+Hl4b!5kR{8NqZdl$YNE78nu+xSy&{ zHAni)FudLjqKfq{br%*nhjM*jy`7|eJGn%YaI*ZOjm`u#jw~!zWbVE#?H>EOI$72i ze0XqBby}qwzdXOwM~TxiFxJs=5sG#A^unO|{)bifiZeOTAnjfRQTN?Y5Rn6MMhEq~m&1BrBW%wLnENsZdJ=oD> zqISQks{UqQo3-4X6vGkhcgG#HuQg9|OZYDBmW{M`eRH$yy+xv-k^l4H0{$O&qTZ

X?$eU}hf)>BqZ`PR{C9D7dk2`Ia)EYDE^o_nKyn+KFT&S@~3o_ z(YUae;`$Y?>uerf$;z>O!k2t@MmL#o*pgMs)Iph=D_Zbj_|UHw@hC0z;QeU0XlO91 zDZw}EW1+B?m`ym_pi2mh7}d9YC#56<3;S07@#D9Bd{_luwy@CIuyZr0b1?kaOTWb$*0UaFNcz&fRs_4$01LHRlr*Li^*0C*_3VeRZ8Zy;ZW1Gg08OA*&Yjc zh)>uuCiR`_ZdZY$626$@@q>&T6JitS52J2lcGaL7bu{mb*I6W|g!6&$-=EB4G%xYa zg(e6m%I{CNlx#CVZ~uugQst1M@kFn|qnrunSjTB`nl^8j>+jS(Gm6WET^%P7B6i(OQI!9|3OaUW3W55}t_eo<; zNg<}zFy+~sgXs-9p0D56!tSK7Du2PjUy!{aqEc+X+j91ZvZ6%=iFF=5%)M5gY@=sM~KW2)gB_&!)Pe4Qt%)D^2esFW&Ij44$PqRo!1xYxIb$R}MU zruti_^WDAqpG$v(aC~!8{#dbRd^1ncA$*A+jh?ACL}oWC2$%T=^C^fWX%7sF95h%O zk0tl+iX6is8!v?~@szTsx>E9niu-HaEz_8k^*@wkls&aBFi=#G+0*g|i)>}Z{P|PP zA2C~-?+dZ=AZq%_D!(xkR+MU;MQfOwI5`pb_X8s-J>7Ty?#KEAbvxkXDXfKE3wr-F z7nWfiaUAk(P^*IsI(jG*4}`Y4zC6!#GwtztkYs`95yb@F&xMO}N@6;?I>*jnvT$gE z1aB=Xab=3G^jqkX;^5A`oZyTI(HCSpxnA)cAj_qY><2l6upHR$1&Jd#}a*JC1p#jX&Bo^UQS2KRzGxN~_JhPNy6m zuzq&d>}&9q-8`8oui#FQ+(g;< z2&99cgugW2^m<}tF#b|f(`<3hX&#};lLrP?38cxo^+e4yzE;KT=aLu*+zcN;f<3M@X9*v7D#irt9-^r|{=}2*`-E;0w5pXu+rPi24k>j~NoQulp9e|BWoP6trtR+q=;|dh1ov_yy_sxx3v!+pQXmNRhl4821JTL$rJv zD{vc2>qnukfx-CSHC)_@j>xQpw_O#<&g|@|QeG|Csi0b96CSdTmdJWErq_BoODt#b zoO#AVe&?SItP?mq7n|(motz4iyO-DQ=Iq9xvE(k7dG)JFxJg8bWNY!~)5qPEC5+S) zKEp?A?t!5rb?Y$JJ(XiF-QQkkriM1jSt`Vb08v>ywsGLhUI6m=(qynQxK{Y_z$W8f zAl>7cRYZS?S7)A6U~;b$^$(2y{_*sncMdhO%rzQ2Re$ZXmEgHY#$c;GReG4G)}hyH zs?c8WW2XQPry#vrg2_ju+FDCB?B6X!i$#k)(Kq#f2z@p*Z6A0MxUjme$uT|LwB+pN zLeam;wMLOp+4PfrBq?zNg)4BDm-SMDy{VYsqei2s4O6GuE8+4JMsvG6b@`>4 z!jJ-u$j2L+5btFRcw@u%60R}=2{zX0|5+$!6m`I~bTeZD>0H6k)m{hb^-te4f7BeF zH17`TU=tLo7OHrKEEXS#4Rf22{VUXGD!4XZ-_3_6eFbu{xq|@Ed41(~;}1V@e+&ts z{pkvQtuSz7Itd5%Pm6Z>Hi2{$vxmL0&}t|iJzDb_a*2&+A)$xm#KW<*5H4_hPAViPpZw^1 z_cqT3f7!9Y=;p-l4K`)|vgr$#i#RIb;x2uNzssxmq7A*_Pu+G7qi++A76We*bu~)1 zx>&WJ80%B*GAc+Q!#iz%@o?aox@^u~8>$7Vo}G(a%81OYqVw*2A$%&@Bvc>yx}e`DfnUO!{N- zG&|=kUCS}$5;=FU}n{~G1fA&-sua1stqsKhWP0-d-8Jct%$K;(^ zbm5-}`EvKgw%ScM368<{oDv)LktIK#CaUl(RVmNy4v@S~LNaK#-iGWAO0xf$P;H}ug{^;XiG!sm~cR?eO6e5`!FzwYuCR^=xut9MIFZ^U)wSAXOhLOf9& zk!Yyo!Vxm@CsXw6(1ElJHY}|tve@uvJz{z7VDcH~Ef(LfH?}$xz#VNyNZ|dUZjxu1 zj{d0af?j}}A6y$_ywW~ z-P*P0WtdgOWSj42^@@#Z0Jfh+ULT@tG(VA=3 zk{^uQDY&9wL?@e~@_pV_1~DU$oX?8 z^T$8Nd%G)XgI~{Rmx;9+gxnh_TyJh#1C2^9ZuCqGbD&wo{jNZe$vXSW=rnmyjfTXc%oYy;Vp8R(kw(Zt}8{+#x z6F@TVUA~o@3(^c^ZyMe*2sXts;+{dk}T`3>?1?3>% zwO#%~w(1Vy-k7VSyS$jPv92M$CUa~xnyJG*BmBa!(F3T>U5?jR7PEv>+aDfotY0A# z;WOL!%U&@sSH!qV#!L$dmoe+kD!iAGZ^O7|gpb$pzpN0@4EGTPN!g{sM57Y3<)woH z(6tD2{hXZMFy~5{-%Ho5#R|h%D>UOZ4J6nSyXOy2J`fub7Ko?P7fd7A>+(Om_v#^`{lh_%$mC`Oh9>*@Cw7!)Yd8ABncx)xeUNJyPnj9{1D zc2_}aT;Cz^krP3hlw=w zk1lK^(lfqhxUj~>%{l!(%NXTcm`tZw(B_2(C7}0eEr<)OoshUHsvQZ*_zG(C)yse{Xsjf$i35P zfRU>5Xc~J!ZU0^F;}gC}om5X`WcyPu=`QMq>@4h<^{0E;w^K*;#K~qhs5NHS!x)T!_BNK=fB+y36g20~K>AXG=&}3YR0S@&| z_?=E$@mg}m_m@ud`{D`;9D{%e3Ir{kfa*X%f1L-<*SPdtiYfLBr=`BJx4q$xnfqV6 zBi`0L@=8cdF-Ef>@U!pDW2ou%F#aCz6KJ3{@ma+FQmTSpJ&Zr<^fX8W$0xaQkO*7*JNnBlm``2##%k0M{-tmTqtPR2t+ z<&ybsU+qt9+u%KTwEMj`xbto zIs8osNz!Ix)Rpskto8>+`Z1&1^m$Q%S0CE3+im^9HdQ(Gv^nT`@WXEa#4xSI+@M&L zIo4T<^!P_Jf$=?j=;a07zOMP*wQMHdt3$@d2oJe*4svdd2Wcs7{_MjW6!?I@nh8L7 zd6V9CEqwY=C!rvYahIH2uWO~w8ixWt{SIQmC8QT0;V_k&VKF2tkn_F20lb5p8oBMxtZn6DZBpEQmDlK(1JGBz94w)1EU3qpp)Gwq7JNJyI<(65Vr_cxY^Vu0Xkr9dGBK zEFmL?g_KbOfV$6y7DfQmg8pl{uj)1#ACy#w~rL9dTORTKZv9Z&|9e+kGV({VqGM;2+-R+^VRja z+w>E4P``SwfSGyS=cAg08nb-cYwg!BIG03zTbh`t=l(>NuN*o!sOi!x7+Lw<_?&n~ zyW#De@Gp~Xik)v5zC%|Vxr{!z2k>hP``zZ^gWDnqv(xPt%Lnxm6Q zTxqlkNc|OZUtioS@8Q%jb}omAV?o`sb=LxsB7?hlS-4&2@~6oSnG$ zIUUVmxsbKsr#nOk%;6y+`!YnD3M~VNA2%7QA;rEV%zBCTcLm3z9H-$wj&)s%93u6k{IvmDh1DZH@6#%-$A*~PYBE}|c50EfLg@y6q_Y~gZIo~Zm zW~yl(VF-}Tc~)$1&pgypQ(<&C!FP=IMdJLIcppymbVOi^mYAU>tmG zr_X}v$$*nD;LH-hQBhf5K`AoooN-;wkV$$2$za=SZ`=ioB%cw4tuMQ-CO*eRn$;W-5?89f+GYh-3-UQj9^9j&hRbCjmM*0P`W`Q5pw=n?OO+}z9Qs~`BDJ2~lY)}2Sn z=BVFQT9Hmr5&|^PgU0t!Pm07J@vf&q-=BRXFw&|U**~{~4H=jjm=$cPx9=f`-o(*0 z+O8_b*4CDBsDa!qslL>vM4)eeXH}(;dT(3RC+tK}L0DrLz`ZXFYs!HG-uSKu;`={s zi)(Aj^_PL%c$u46WJu>ea7zE1U|Zk}Eqs1Xs#|scZ$W(C88QXwM%Q#tL7d&_1B>#v z8u^D0nK!n$-;i_pNT7a>=L z#e^%Ooa;-AK}u#y`P5YMlt=Z`i>p(WPDHk0jL>J$0_fjD@?CGd!WU>+c(Vb|5laviZ%Ou z;epY1`Fm}?eEfK0qvtX+rb7YXbk8CJ^Z??$PDo{^B{ob2iAs5zbN1I58Pj8Y$}pvX zI3ICo^O3Z9edAtVoruO0fRKm(Mc#V0Nhm{8e^0bkg@o@#FG%MEXeB$UNc}yLu^{an zowDV$zaN0HX>Kf!5!9$QYbG+$%eia<_bY1*h1ml1)%;{fTr+4v)8^rb5l@bxVkTZd zXr^_Ura1yn76c-EM5|nPZdXDnSVo`7p5~6Lk>%ux3WpQEAe)+?iTIU3pRjA+Ga3%n z(EbByCEwn9T4fa%6`j4&GV_l`NfgHqh~M#pV|gA6r~dP->t!ZFfs-_ag!Qv{dH)%u z5s5PP)KSL^D$i}byILn4H6-(1M{LNWn|L0F1;UsN!hKxb!}3Nv0U6}hjh5hz&GjgZ zXQoaB!?mI1GE>M$kr7{O{5{WanKL#;BUfO=8Rnf7!-WOr1kz~fSV~GhEftLhX}l>V z&>DjxnSsUQ+DoL_^fTVWw?=Z^S{dd7_d4rZxUs418FD}5#{eb{?@lo!E5dDV#hrRz`YijMf zhGE<`5DN+lD1sm$y-O3wHVST$A|OZy=^(xLSm;s&q&Mk;6ai^cLKUeI0qKN}5PIk( zyfeD5`?{a+`vvcNJnP_KyOTw-*166y&oRdw!&qciAzOu1x|8XmWVoDkdXaUym$sEJEzpP~P48Ab8U0Wphu}lx(=V;uq z>I(X*MTG2xwn^2f{b-e=Dte{JDE?R#h6x<&9E z*Nf^_mw4B`0qJ9)l)D}_zOH%SmX0W#3^bw`h0*lXbXB(@5V9pg+yaY^AnmsrMosO) zIl91^oK*Iu6zNM5l=hXf)mEm*DKWou)3)4&v8k&|O>pBSOKb77`{_kHsxm!zupba_ zM4Y#ts@6Ws(6LbCY-?)Dc`$gjJLEo-xsUb9GAk>~>UlBK<`U#u9)2j6kH*#o=yT|%%>wrdNMLRs9{-(_*# z_oVM|;w}ECwX|>w*o!n4ziK`DQ_vH>HJHVfrFVt?K>kwyG*Tpv!xh3~d+g5r`Qb{n zw)_69mLOI18PS5On$n`mwJdvG3*l=3`lx-pq7WwX6Pp-w+Ell2ssFp=#Sjxihp71255bn{)-!ZpI% z>tvE64#J9|Va{bDukP!()+kh!0!V7#5;_fD#7?i*hRgaQbtsYAKCcp}@1+%pEcTvj z5w0e1&(2+scqJk?>Y|X5$~m%siL!yxz{T{Vt@{rbMLb8;`qoy~t>u!0#?QmEvwJVd zQ~LzU%Z2w|SC?7YRC_@hWnUo$R`^9V)UBo?KoMxwbt zmeiDbJ34;HyH<^Q@6QfHDy44j-PAi-Q>}!W6qW2-Eri(XEn;`>T>hV)M6${r-upbC z{@D1`dkzaO`hKDOp7~gl62!f&3ZM;2B)?_O8MTPxE4+FTTvor{zM%O0T&8)vHBEdj86y|~;p!vjOd^g8p^SeOR{ofU2nc|bKe&X1WHoxX9?dKc=NaJ-94)_pi9Na216G*VXT zg%#K$Zbf1-ftPtJha>R z9gd(&Au_kQ4Thad25D$?7pVj9JB~h9?c3BYar3|SZ9g0LrQljn?w3$#cJZYxD}^{P z54MJL97df103?2Ju>F@=1!B@M7&mZMqo z0n)a!m0t?N!sb9i^wYY=#B`t^+4!N7k(&f!(7e24kpJe@O$M$j7^%0coB!>XBqQ`N z#ktBA%q=Zj@)YLnKI{yz?&#z_uiaxQESovGe|_|Hn@|GuX<)(-!g8L7N6B8$E`fn- zU5=glP9hQVL|jl<_@Z}{({<&c|9Ii1OFX=ch4Duj^| zYN#lWfu^@5W~iLYq1eEKp610Z;94~zG}TN^JtC3u|NGOzGc3Zh>5r30D0-{@Gs-6< zPl*&Q>#-;&V#d0UFWKLC7y(9}7|Q?u z)1Z>%|2&QF(*KqQ|NWlKtN&G}@cWgzfBttp!ta-8$e=s?pU2Jrst5i1hCXw^|F6D$ z@QMF>Q6&Gjr2r26zkP~?%b zEvi*Pc=WuFe7G#d{cqywtAu}YuedGn6aQVepPoC^)O26?&Q|a7-+wet>Ex{oG@lYH zT+Zp=bmo=gf98vnw~pe1wiju#@*J;G0)!q^3W;m)ZR2CJ*&5LP7+)>N!wsaf$AaCTD?V^b2HRU> z*kMN)Jyd~mouvveFH)5JEo4K({b$0HBFk|!F>zNQeOA^HZ649}y9#Igp=+|KM)WP8 zEQ`SV#Xa*tip!>_B7SA?+XGmS;dl`a(4C398tJomld5K{H}N$RSA!+B_QG^ANx_fi zLn;@37nH~Z{GNVa%-MJvfU8ibwAY{dN-3%(=Z}U?Mi1#zVm%j%h<{#33VA8`?`ns+ zCUZjT8Ai>l-Cn~#ko(gEy}pvTye#Qt_uu#xAIG1GUcw>AQIoWL-ch^X>(8fkHFAb~7(b6`fZw3Ev# z&fkpn&qc#;DW1EB7hCL@A1YHxD^ba-Ue;K46z4%5{l#~6UFA1_nn7G6+G+Hy@!%%d zr&Up9XZSHk`oIi&+K~}t;pU-Lal!}s-PFH#u!PTBCay1H% zUrGX@kVqc9$*;X1KMYtSArBp&Rar1>Q3{n1t*!H|^YbcU=j&QzRe@qLC0c-!+Eo8@ z$?*F{w>@Nv>7CYkR=!y+?LsAlgABd#5}@Gc@;k(JUrP`;6`7C%FMG>0JI=Vi`} zPo;k=rg-H%SGNx~XoqA++4TLF3vf9>H$MI+uy(cgmQx8ghQ35k4t<5;rKK>Ax1wMl zbF^NVWxj_)bDHm`>#5(8nIivF4N4-xa&*Cnz|c-I zu0+hEr@m>Ks$U-*)Bxn|pan%(<~^Fk9M0S~o2eUFTx@8lF2Dt)eI8!Y%&)B}aj>)F zU%Y-!2erFy4DJzT@f2x&7ElW>VuRfhI+qfctf{Mek;wSgJKPgdQHjJmILte0Mr5Fl zwvTl3`>YWpD3$IH7bVv9pvmP*SbTOyS5SKSYW@s~_dgx%4fjhz;pAqC0Y8GD5qb3L zpq1h9>B9(Lim0~Teyry(y0b4TDkp~>MRe>mZYh2x35f!|quKHzvyC^rQcxNclm^AG zB?fjV8}#VB#I*jYE7YJ>T?7(tfl%+FP%|b9MIhqh^v)+pfgJx{uyl4Z~gFkIrlBDZNV}Y$$G8KXn8MAs1ww zEG&v2vq9?}WcT!UxY*fE;4xCSovTU|9M`qj~~;ey`dP!~&5$nKe+$;?FU&7r{DSu)|vA#h=TeIe+f4${FJT8fmY z?wF#kt-do;=q<@LNTz@P;2mrb^)nJvM#m!74bP4^o!6SCnc+?irHd8g7~1^>}kYKZSSFsT&d>h(9qE6u!<_TS#@%!iHpm&cK>ChoSYma z1;>{pFn16Lgt$~ezs0Rv*`c^GZxU*1>Slvhp-yd{xk5AuPE=MpIXXV!h_Yrg?za>I zfq(;J`5u^PzuFrDq3deMGv3OI3U!UjU})U#nwrDa6725!8+EQ(UQoF{YAMcJP2M}* zQnvKEv9YGc3k*FWU0$5V79w*vcG|(&!~}X_)ycBnWlfc!(tR zW`rnF5p#5>RJ#2ENtjR89EsFlMEP^VBF206w4V=!J9BXb@%SaGkf{v9Dw3R6Jai)< zzciSK*8bQ>*qlSJ#$Y(3Mn^{xhmnZ2qxGZRxs>bI8TJ*uHv3#&iGqmR*6^kis#2Yc zo0qr7eOH;3@!^m57~b05+2Q2!603bZ6oI@)Xhq~jsBu)=%<3ulwB!e;U^&F$uJP*T z?IL6&-nAP$R4y_=h&;Qt*4ot-imd>%a?SkN7Ea2wirn0Z&(Ggd0t@w!yVsW@+8B&e zk4lUOkpYeA=>}_y;0|1H)C+Yl-D`np&;Hk9A|klLaknuH%FZos>%w`^8COK@WrMY+ z#chkW<0Q$nE;}OpgwDq66=jXJvE+n|A&3Q7wO2{{};jXknK zZIu)iY47CB%&?&9@zr_ ziu@GWd$2RRG;Aw_r$1g%-kA?G=tBRYuQb%bw6(3L9POg^m!Ilwe!htv8#^BzbA|f# zOx%3V4Xw&@RDPR@zM)|w#%wP%RPj}Lml4nNH)B)!r&c&0{xI@pQm-7HKR}`I<*0oZ z)DarB`w>JXC;X3*ya>CHRAWl|+s5)$Pg!4X ztIi6xBg?CdPG*^4Jd7y1jBnq;+nwLjWXJeqdKpMTJD3%lFpa?l5| zE5gDehb`1q;qn-~v$ON5+NVeL=B2}As+UIz-;e&z9{FlG_|WOk zwsv-QQw7IKY)dYP;~wyLUbD6312f-DVtZQj1UhKCStM$gKh0j0_udEz25}>6rI9PwfYtg4UGYLWhxlgytpBCzl zed@Fn*2?dDwGf63ke%sLy|({GW6X)f#jC};8D#Fc&M+#sPESrErBcuql!Z71p*yT$ z;#)~cNoy+SOX5l-Rb z5RyE-s${S2VuL!GL+_NMkNi;|`WEV^-aLxgyy3wiJ9gtzAP6Qbaj2Td=lh4P794lI z->13cfB|PfF zyKYA3x3 zJn96&wyVy689FQ2h*wZRxfpsk0qwM>Y3YF!4V@C9y)fkIB7Pk;h_4E^nh(^s)!dPPMP8bJ3BGB1F}-bS?wU zJ~cNN_12f7<<_kWbOZO!XH9*n^4KR_1R9B+*IfJik?zGsI^r(F7V)KE4!_&l>d6t6 ztM)Nd8T_|Dj9Oz?BhY&v(Fg759gu;-xgFt9hk7f|GoDVa?HnDX92q`)_RQ0BhSi|~9mX%CGlex1uHY03nIKwJJxV2C|UQ{8`#I5C?vt|3eXsdI|??jvA z?QC8!|NUa1VxM3)Ie+5CjenFTzvFhl-3+U0oRiwFw~PHt*A4Z+9zB4k;5! zF`0t8_uRli}aXNJy6QeUZY^n6qkCnP;HJIl(#VqO|g4$AL&J-E%E{V5k8Wy-#J4)G;3 z+X6bo)+^QAy(M%BTxno3=ne}F4yL=~yx0-v7dsa($6ATBi=wW$k*~JDS?Hyj-Y0t@ zw=cKJR9|DOplUfcrywZShcxBpRT|gz*6go^J9sf%K>d5YB^DB{F8%Mr1)6B$&Qx6w zCSwPCd*7w6p)NWAC*2@nH`uMT9ayqp}lJ}ANlIM8ix>ojlb+?G(B)%*B|lQtmw zt4|j?Jd>Xv&*jG*7|cgDUc=dhKtUlL^~ayQJn}{L4Lp$pzgBQ_a}Kmx<%bl~R8*su`DKTvLYsBC#3SY{RR)`d32SOhV{{Qo zN=CAZyXIb64516&Z=|EA-CH%9@p>{^I@N$wHs*Uv-nKAw>Nte$^*W zu7G`2-BVQXgxBE4VwaTmBb#nJ-S^NUWvjpS8 z_;`!txyA{;M!w#e6wzASRFN<7>NYld#>T!I{~Xo*&4jU5dh{iZ4g&%nn)zx-QfZ~r z=SP0wcVE@N*UXRh4&2|{dujw)SGJ>nGj>+6rG4+t+`byL(tEAgr~#GYg6h(C{aCOh zZ94a{;H`}pw$5s}%xgU|<^81(^%3#$dz*!*B?Ms#@qmXHRU1U(2g_xHaEl$-uQ4RV z$Ac`+t856F37y!3%`{9>+J`XjjhkR|q$sg=0(G4#S=!uLo%&C6ljnT+5Ui)765q}2 zlh>mhe@TLoE%#5GUpo!k>rdyaQIq$LrQIwna$SA0Zhn-goSRihmS9=hljP?g92!#7 z)MQ!|IGf%xpOM|+CXsJt_2cF(h2#;mO^QKnRi+#WLGjc)1pmu1gdNkGF|XmV^mId7 z+WARW&&EBGBRBh8-Z}@Iz)E~f%zg}N_u+gv*afCPz|zpsIaX@JhQs&dN#hyg*L+ZZOj5jqa|7Wo-ql;6aUxTe13%?HYuqS>T)|f zYv$`h3=rE(!_Tv`77Nkdj=n!@qgght6oRN}emweNd$#ci+#|M6?-)kKF#q>9fOQ{r$zEE+@Q2`)YRaI3vIbsG9n8@((i|O?@ zgy*jm3h?tQp=RayTyp}#n+^D{o@;Q%_>%L-)byT|8?v;B;$Z3&6Qbi4pU3a|`}sx4 zvBt?=3D>>6;36!PSUR{wo>b5??}*RmTXNq2HQ>4tyMqzp6jb?U;D<~l5FRy)#yAR! zg@XU&Q?|?QNjz!mk=PZ4$Ch?SEIWy|D)O^9-TA^TB#GJ!7BOFnN&K#w2V)GG!$(`C z_{<+=>@EkTZu@$-*w4vzxWA#2?lmbJH_89n&^6d7^}tm%BK~YmN8Tm*o-m2^fSt7q zU~=!Z5raV-9SjV_woH-vBAu&hNxqLGMJOp=GNR7w{kN5K7R2q@Ry%L^ibYXY}QbJB@#)| zK>1^6=;zQ-*4y^ThzRv)h=EE9R6QIZeWU+6m5oWI=MI6@9M719WVrL5JyVEpcv)l? zn_=bMHn`z)lWwyAkw)jR4O-{U5j$1#9O_^y1yrh<=ynhA7#Am}!%aPu>_8_7Ut=)n zPjxLe1uW+0*1@EJB?*K_IIPj0(=)N*chT6Rl9WTtcI~##M5FN8MsNbRx8XFgD03$+duUt%wISGga@ik03Kc#rv)furk8u3AS`>eX5O3<;!S!$8R9#- zOY1Ne5?_K&q7`2{w^vch@N>kaQP*xC)K0@vq%5C5hoMTH5WF&0!>J(GVf+Cpx@X@_QG+>uU zeoG#$nvt*d(>lb%yha48f# zc)tebXypGqIFNW&RZyV&VFrL>7)E4_$B(~mu)=;R{hXG@#Lga=HNUpDHZc(nf}qkz zv!G)Pwu5qtiXagtBo9`MpQh4av&+h{JYe$pj!J8Vb8Th-qTPOiCv>2LG-sX*qlaH9Tbss_hLHJyF-NHN8Fj+h?4 z(6oOn0@r74G8LS66b>!jiyK=CWvaGL7@L^1T|V<{cn)7f*z1;7blaOZtzD1eB_EcK z@HFyCu>LX+rXoS2K>ZE{#~lX3D&h*q{8JqrC#;u$pGAnHug}}#BG+SMV|O5o;;P zAB>+yX#X1Vr+0ts%H;F*=T9}ptlfzVsMsuXDt!%k_nkpWw5Ozz|s?~41GUp`|0XvLTO2#?o0@w#4AaUnOiu&`Vc z@i!?gt%iaSUxSLGB(Std8M)d4pMWJ54w#CfjS;R`FZBK)L!!c5l-|i`BY24YXm8Kb zr^I~`g?Va5R^!CqGJh%s^=sZg^?=uH^Wg*D#l$QPm8ul>lRY?i`8Q%n8^QofE}=(p z_A?@$t@iuqtjsH%F)`g#t)-48rF+RKM!lXtG8AK!o^Pf^K=-*+j$2p|wO;#Y9;84yy!!NI8MgEp2YHBj3LMLGm=p9T_`?wnT+*zrfGGy3~6-sB1f+(!C(5v+Q zd;RXqJP-A-nIgv9D_90o<`%mGw}ud~@p7uvZb*l@g`dGSD(mLJ7ecz;qPg#z?ZX6$#{c%Yq03bc^Qf|ED?LxRGQLcmR; z?E*1&M%9FE#e`g=#cxH*f>Tj}?5MiOu8*@H#juRccwVFmfBtI-E!T#4{~RGOO!#5> zy|J0Qzv4`j!idjXL9!!X2g1Sb&T%QiS{T_iurt)x|C=Y$SUn#CIMLX+IO1l0Q3SoK zH_z^|wOBh7t(EbB?tIHe@4MTAD#3^!LWgk}&%Ha?-3R5v@}%>Ni$Yh=`n-j<3{m3@ zrlqGpzjN5I_5J(zG)!hqO-){&+(0eNGXk_8)8E?PB(sRStxwm#rpCE|!2aQ=3pRva zMN8|Z^_xx6%%GqkpL5A`R>H&6(-~sy?A($%9eT@yCHn(Kc(D&3?j&+Xf{Sy-e+KlE9kcROu7@d?;7C;kdVn|9o`wGLK_(rBS!?T+ zgianQ3qBffGD&{c`Q1#&hXRd72n#!JEdoWND8P-zPs(=u?`O|aDU_$(tet@CA z>*x@RJ(E;V#t2b_9>JfNtaH#j-g{>v>}Vq!anq-_uMZv#CDOWT>3ixuf1mm=sl9fV zK5JO$Hea50<)?7NcZv`_H8W=ppvADm!`IN~#2Kfd!%-T>-*IjVHD4Ymx;HTHMraC* zB$w|42z?k!P~b9)PfR@6#T?Z*OL_0Tyx=)r)Z)!@-uqYT=}g*Aa6MQ9IL@x$qSSk~ z2gP~+DXrfi8inmnw`oE#;hwNjx#RN7eLrK%tcIJGSN{k!zm5I~Z-~K>AS`*i>>sVFOtd8~M?IR>R=ZfoC&Y-JCMHmRDi7nAPhh*}`P zJv`BmN-MJ*Y$&$0w=b^Or#Q_S)ppIM8oIWVlT+a7=g*&)*KM9`2k2$TX8nqnd>j>{eV)xLF^NooAX7(q` znCC?#N@%-W?ULDQfzI*boXLkSd^RSOYBX!uJ>_l+&rQyxpBZcs?>Nyof7%+GDyVFNL*nv`xwMRJ!a!f%PiRi5;}b-Dv_zmIn}y_tG`n3oo=>n z2m4S^&o}(Bg@dwZ1Zrcd&~v7}A-16b86qPnB2v!u$f;_SxC4j$dsx5&_2~S(ybpPK z<8Iz<)+_Uswp$~WgRj{+jQ{#+V@mNkNoMC^=M%9q+^Y-P-WBeXhQ^E2m zt@=Z!$$m30{o#)o`ist)o1vK-n}LwZFZBn!AI&(%`VaZ8ZQW z+I_C?Y+08zqP@mnULfPIC$bE>6wrvr>gpAS54fef!F79Q8-4V8AfNC(^)*t)!O}7h z9L256sjq-S=~H&qTtLa;Pt1M0nm{f{paVwAa9>~4JEPjE(BaExr0?E6#%N@3u%0y4 zVrrVy+}sS#oUA@iKtz$h^VKU)#&oFrQ%n@)7Zy%VN-DL%N>yrm{~EuWji*iMWUYA% z9zT`ZE7cC3Mn=r+?DG($^Z=XwH6wy|1!)7q&jW^GlF`Y@b}iS-DUo1+f&qzeIv0M= z#E1wcBcbbpf-7_gDKYcm&+JuYWj~DsUF+;EoG89K7ye zFFb1B&V9Dga#+)SZ(}|ng_xdwVf?MNHN@@vgsmu@V88btb{)yv8}4h2#NI_h@@dR9 zt04sCD1pzJD7#rA@t{Da{*iC=n0*W(IYs@slsV|)HlcYmwkAz4HaATNi8{=70KIMl ztWi8wMy@bDe+4z7GghLZ``uyQbk_su7#L9V%`r_n=K1xPHI~xDq^_RvWeQcHGJdEq zR{4C+6tN$-f;z$?AfNV0y`ww((Q|?{Z(dfGCRg8X*PRuv&wgO-?9vU=wSFchJhcv% ze7_942KxqCqThl^g?3Bmb#nj430w6X<@wFMU;NkZ@zGErzk+9)Xhcd1@4G-NGtqq* z>BE*=kdX27^Xu33N}_1slT+<$UJ-%xhbM!$iAl1@vLeLW4i3p*L7XqyD|A(&vUugQ z;R>CNwe{NWL3(;RZ}n=L?RVU!)c%MAOes<+MY)baIm1+z@PRy!rC)_f=JMQBQR*(sy=t>NxtD1!6tB!RUs#ZI_b+%pp0M ze1#qrLxE)DU}0ggAQH4+WCExqa5aQn;)%IXynz&vy$8qh`gqryP|rm?)aWo5SLAjE z(DJnhGu;GA2S#k$)9MU1rvC4xDD&DCRG!xIcXr2^(nq?|{Ewu0v|L;iJBSX#lg>aR z_>|g@YyLR~tw7#~!TnmKDu45)Jg);eS6W(%n!1MdTq^CCNFIvEA7m;NY+QQ8M`K$x%FhrVmwZLoNTAa7Q+2iWh!p+D z&M)KN!hxnSQ%HKGrF?V8=>c0lhe>Gu&$GyXMCqiQ7T!4y_>So^ZgE7jUY5CpBpfU} z{}HZ`jn9EdWOwE%08KG9xuK!XcEctmWR)0rTJsnXEfkHj(c`fseb(dWS5mM4_)BtX z>N8}(XR!)>GqZoL#yeJyAe+@9*`4X`TIlPKm-g#|!}7WLQo8fm7#xcaGqm%8Ht)lO z**9G&Hc`u4+7$x>lI&zf#6404lbt|3{`lK}sWR$S-~TnW(!V*?Xf&Q-THPF@n>w=J zY~=MNSaTkOQxYn&R9iffJ$4PRZJxYo(d&2C7g<jxX2bZSN=gE9Tf+7xF`HBPjrVI(HlkPg>|-52I(k9RVeZ)l8f?*mM^gD+)EQiw@PGA`A;eKkaz=P4Ui+XtKdCKhkJ zw860Z%blrvJsrg{uz-3$UA`O@bK#?%@qQhgO)J`s<)A zW<}cvyQ1>(Hmq*iwZF!jq>Z}o!%VpM{_`S(v=S^RT8`fNG9`|R#7o>t_+hQ2DY#ZsP!BIxc{ zDtxHiGuMsT7QWy%mvQZU^ZpN}&~k~Z>jwfi9%9U|f=CiNTA{M52x=i<`-s!ScR(@7oXkF5Vy zPi%^(OeQiVXml9Gj{#Tfd#tzJlJml4{vGR_Cy9AJI9}k6D^?3mL?V)w-A8MdUi)>H z&(lORaqj=5mZmwWy7rdcCZ%luoJ$Yod8}ouc4Kv(Y1hprAzHtOva&%1?5^jy(%;@{ z)J;bvRB7`t7K06T=xKV_zdOKiqfGT`4l{qOUR-LKD`x=AD-GO~)^mNf4C%u#S7J<+wh?S25_ z1%z3|v<*^1(KQ+G?#1a;nP4q`!$|1(%ewLLaY$1FX0+?MJ>nozI&!rECPv~teq>f4 zrtfS!EPFHl@R90Hz5bWwTj%6MjxSR<8a@&qgle6}o3k07CvR#^aIjFxpN%VCK=aKk zfrm)S)`Z|#R1zXIyj!W=6SEc{ztFFTaPQ>dj@Wttwf~!&rdO`A|GbzOSNYTK2NXyq|*&vt@h6Ma8}S1_J4fLM#{($6`%HD=Cbt& z4Y-a%ALFu2L7;R8Xc!noXwJIVNV!)x8-SoL**5@tii-u1O5L=^zDUNH_5;F;?~jtE zM3MhEz6Yc#Z@lN?Fv>$>Y+fpdWV#m`IJX1FJWlIGzgpc4*~~Mf_Vv zgZt|@`xI9BHElFMZ}?*g>(sI-i3eZfYj_VE)tAr32l)qowcNFT)5%>;62v^ivE@0o zKHYeaQ)070A*FzmmzTN>Tn>`;%(G?K<-*^ z!Y9y>Mka3t_%XNcuU)Y}*r_s*6O_DpbF$m8W$dCsyix6no0C(ix)&bM>Zi7Y*5z8R zD{*Nb04L@jc3BDu4ko>pvOi*)&R}I>aYYzB3}fTtzf3-bx#NQ5#*Ox32m&WA#1eX-Pf99 zNEw9_Bw;g_^W+Szww=+lyY*+J(jT({zzK1llauO$2OgrH^Vf<$XE1xHlwsyP_LmGF zC8-@8T0c~vr@ekTjPvptWWcC(%=xbN_7I-T%I{~pFQIpd!;F*X)-9Lr;H(=a%7V9U zl^5C7vBz{qmU#eDJW=IstHiit%JvjQeJCX29}oZ z-pV4Cwnx0S-|*JJ6S{r1)5`xmhidML{*?C)b5}v_9-yCP^brAeRyIJJV~y;Q$cm>3(+%*||WZVR4OdGh2l3VSXPL&3e4 zKxB`9nhchSbaY9DhbW#ydvOgSsDDn#_Xu@<7n1L$^39XT69%Guiv!ToCw5Z)IZdKY z{h#8sfg5JgvfQecl9u19l-k?aliyw-Gz=a3?H@QOc(}YEZ~n%(CPCI=*Fvx=p1S;W z@Nh5jnowS%F1oOOT>?8YqOGLFxG1$TejHeE*5w|lYeMo2wJV=0Je-T>IqFa*GD=)r|_HjC|L9pq#1w?mnkowNu&fA(y^u)p;kDnu4c(F%5V((aaxA8un2 zo;!SuO%|mKj^h0Gdw{U&>?&s}BuXf$Xx+5LI`!+Ab_wlx*8X}1*(GU4VOi4MpXCHZ zSW8K9JH?;vKPa{aOsPGW!S?aOit>jG0MCx%dtz*?C>Y;wR2uNN-ydzniz2`mFNcLMIw{D3%5MOWb zB{!&cvbFs-?|AjB-@D#-ie3waq!`K|CZ8QosZ8a#of7pYklblC;^N>aR_F4+faUaJ zqadwb`+BWC7Ca3V*nZ^v?hLPe=8pD>(1nn&@EMoQvSAy_l#3V#?O00h?^lu-ha#+{ z;7QlDEv&3i8pf;%#=i>4m`$64Ni)MN-b5ohE3Vo9FKte$RJQmu^LUErsfN_Yq|f9@ z)ce)GK}A)n@T z3k|;QhCPUBr6yQAn%wyG_~VAt1k6mpUTrATPTiRmK|kZ8F$fh(h^$@PEDV%p5ewDI zAu-Sy&5Q_wd2r6>n~Be9sf|?$Gs!TWsKbf z4CVa`m1R_fE@c)J)aK+obo~rSmiynYXgdc~uenK4kOqf^)U3Cqpth^94-i$bl`>87 za&~o9KNy=8wT3-$)Kh|lkdWuD+(C~bLQqunA7*L*2Ekg}bF;6%=_Xx^vVXt@^q1 zEgeOMHn)Y7fftj1LNKO*{qWE$BxH^_R$nynb8*ISzU}rY4bGyi)UN-;23cktO>^7y z$C}?P7IlYSj?0YqJ32}7M3AhrlU>o1`92i>h9;M(skkXVmd&iQos;X*-P}@SnO8O@ zztS)rXvn6%J+Lv}Du(9N)%+(ln-gIGs4%}#TMj3|D5a+5Xu2gv<(6_64?1HGOfl&_ zSMS=zOjUg8apFa<2R&Ac%$g4l-T+HFE$hm-h!aosTnWC0E7dobrB>_wotM6-i>-t| zsHMUq0ipsXD)qB{h#$o5rvpB9@^v79s+!w(^_j@{Hp87Q1r-PUuU~BPJsKJs413=X z4QgbP=g?~*HnJ$}nDa1TcswR-XnYb%TiJiD(SK#M+$N<0x7H!KJ(2=cF`tKK@m=4( z4ZvebmaJ;#pRnC|uD9jAzX_FfnNXQMM*4{iY40Qwe z&SkM;Ktjj;X?uIS)LNioKvfMjkHp$En8=4vq&;S{uGx%Eu&LGX1bFdK0|?T8iRj-w zdGh2VNtRd0)ScdJLJ-CJ8$F4uqpXB@z}(I@a%nb&Kch+SW{WIRQR!KG`dm1{JRV$G z&ifZyhrWFlJ8kr)A4lmCs<-Q7UnxO#Mq1)7xb*eoOifLxL-0I8jmS&YyH7zQW-hnu z_arY&CO>v(h}YZ4l7O|qmGvJdsoSeB7P!(aqK*I#37cbxZak&b#LAj`Vdo5qeq$rb znix{)TR~x4T%1~Z_qXD_w>uMVQgr95w3myDloC2?hsZ}nY5X24Dn62zSLKKjl2@T> z#!Ix=r9S>_BZ1LXL$*RpfgToq5=Y`(+-rmpGY({t&e+bn$^mipyIos1w zpFP#Q9;Xc3!CawqH{XVdRbobG<%qE2s{>@P)$jGM{m;W`I%Dhe*(tj9atDuiud}nW zU&MhiN_?2tqM;83kSSjN-7!Z>0R?Za9k^=tZkP1L{1o|GdtDjYva{fxuAeKvhT&TDmIx9k=P362zq((qQD zCSZ|(qI}Hd0Ni%kzLLfyjV;JnBeGRpS-IF0V;$N0`3r7@M%b!ttj6Q1u5PjnNW95> zVE;#ns*w-yCc&OBkW8GM&7?%HpDSeV?r4-Y;Gp4ww0W#xKw{<$Y}};Q?ZAZGBcR z+%gk0S2c9_b3(lQ3!^@?&WlpR#-nt45`FIX=9*vI)I2VeJYqF8#%(8&lT;*6yuJwM zkbGi|mCGtFwt92kP@^o*Qp?6><@@*5+veoElla0HQ`;uBuRW(!XqmH9G zpx)hPd4&kdhFdEAG`^t)I{`&I3N@^5^G8|fq&KtM7zAdQ`ad(+-IkglbvJMkpA{46 zUI1>mp_s?*CEc&kG)7$dp; zYjZEwP&5>`xClnEDYli`Yo^c5#o!KDEJYF}ubF13a|(5>WbRm%5~=6OcluochYGkp z(HsZt9W9$$r!NIO1dFLv_Zk7(G1nKR)(`t6|Lu(hCl<^a_L_?=Z@jS9C;8O%I8Uy2 z=sB?^U)+9>uY3`y_UVF+=hYBEncW{|e=c`{fLb?mGf%_Z++12Zp?Q?@mI6=uqMF8_ zaC&#_jw>3A0%NFjrH}WorrgvDD!+uJ3yo9NQs8>|-QME$C)qa5Oz{mx^St=bC<*PW z$+wQV>|n4o3^r@N$H@!)(@43~oq-kSSfx;49POy%5q8uXc7fZ_%HFwIAoYx|0dRR> z!A53|J!TUUoT8zp7Y7D{+uga$H1i=#;p~hIwkX-cen9~N_fE}Q*UtI{1=)jpIv)(EIlHmTi zF|POZ!AQ(~GsWrpY>Q+1zT;DWdgdOa9D+olOaP=|O-)Q*)xQPbt&Y#}ohIgz)eQ}= zaC}*AGoLlB?#l>Loe2pE5d$F3L5(LSq4OauZuYyGiVo~lL6Fh!?(TkGJ77HgEx&u+ zrgwSYem%$t$eC2qRGPB|3>n+>DbEp;S0(3W416EBCHovd@IaKg)GXIdVSn_Qu)23> z&Tj8(X-+zB)h>vJLi6;qj?>i7JJ#a6){IjMo&dU5OLMM#c&UGp9RlT-zmLm_JuBOH z=t5b1dyf_H`!~J}CZY~?Gp@`~FIaFXUe}a&?b!YI=Cc+pLdQtduKd~jeQKjRUhViM#w6|!YBb0I}3zHkYt9u3mwzy#@cuf%EJy<6+pKVvU)`*vWVF?@4) zcsKl{rKR=uQrW2kpX5uBxwVm`O=Tq?sz*ebW~Pn#Hkq_KOU>?k9)NTX1Mr6_a(1ch z7U4mzp>obUe>qGzQTO;5dq8^c&F+p!Xl>D#H3-7N=Fp!?OJPGAoe6s8)ws<^l6U8Kp)*MxM~?+Br=>|bZ*2AFK}%hm(AZTiwpcShnsq$h zQCz2K?J-*~7QrVVa0w*|%NZ}Ph?rPhP_F7PTT$RRO42Jf*@ejHsHogrP8PKjU}w+y z^y%-j?CTN?7keNV3O3DG-iS?d(6z`b3<0AlLn9<$SGupSZ_@ddSBS=z@;6{AH<4+C zhK6QkXTSM)NjUFkFlWxNy(^VnN?M$1_s27 z0ZRO&8U*C{Ijt%G+pt6fZgsOb+vhFJMnXao;^JSFZt{9lyDZH0Sn+oL^c2Why~5pD zFhH)n!0ZgWCu0VI#GRF#my`|?#qs?qz~vdXzQZipfIlc?IO_ar#@K|f2K~%RZRm6P zYLC*VN&0m~>9$-Ypm1>xpTDI^oPL0-w1>R-|8VuzaZ$BVyD*O(q#zv%C`gxpq$1tj zAxKC|H>d~oqYEH zyR^ZQI+^LT6IPXeS73zQo>EX;e20dHX8tKtHzC0T~+X{@EYEh{Tasw`vxMr#=+PcmM_%ge~f$yY)LGj3(1HgMac<~90}2us`h zU-pl>OQC9=g(&cvtkkx>lI~HSYoAyBE1_8mK-YZtwuI6* zk;e7^3b~WfJd0+3xma#*26mVN`_V%$SfW``mDZNP z-xEn1Ndxe*YJxeF0UU{5d~t@zEZdqkVyXLGyeTU_u~INY6%HjFUjdDIkM<;%getlI0E?r_{;Z& z6oAVrDjtb;gB^bB0P6~pYfxgy(cE0h!6DeOSmbWFyh5!mOG-aoWaqX!vRXt$5&~d< zrCWc(%qZv9p(pssD3f0=PL>OS_;hZ`dq*b_eEAkP zNuDlJZ&7>oCGR5^*=te)W{-eW6KcNbSgTj(j14C$PB<-Z=hv?bIC;bX42D=@gJ*dw zw3(5in9V?|^6)BQ^tT}vGOOO|FTB}4Z?m6z@9dR&VFr=#)o1@Doxj+|az3G^9SW2(zKRW_jrjpRoTZEKC+-|0y@gR~{^;*A@daL3!Ulok5@&gnoL z?|_ptnAg+S$IZDX>cQ^iaV6%9si*{ zr8O!^8JXZ~1vcZr(aV$*O0k8d?CJSs&b~FS$+YbDZEM1(d8Q5_n;9?@W@#j#gAW>N zPz2m?Gfz+5?=hWl;Y=)cGO|se!Qjfw0WV*|;O*^CpSlmrmUh57;ns!_BNR{l6zD~= zi~W%w1Ne7sBT*81t$W0qyOzWx+K>Ktj{MJB%NHWhI=_mqhRw>xfas7G&WQ;nHat9& zbuRt8D-{XcCNeVG()Z}-WT+tQauE6~THI@iFavO>r8A4%7BQl+eFAIl14t5Hl8+AB zPt9%wNtA0dH#6;{9c5&?J31s`of;CuGFm-6@ivEf2kewJ4xxi($|@>EwJoI&xw-vB z*mGqVqPu`i3sMju{KUq@{NAbk&Hg4QM}~QU#2u`Cp7iYp`v@@Oc4|0?Jz8s2#2V2J6`gig(9B_ zs%YlPDJVjl{IRk8=88#w8f83wWby-27eDHt z8{+*NXke!EgIFQe7sb<*+}(RbGrJ!y+1J$TukG)P_SpIZPSo)ta&Hd@Yvjbf>tRU~ zS;PPPA?^NcDB3fQeA7N>qL!9AiJ22za%eOfuxD}d(HC4lE6e9izTIP)yKKUtKFLig zH)wcM%_lJ~?vdS3W7r)b)i}{+cF-tN`TkHw-nzir)&U`}mv${9^XD36*JN8uOJS!) zP#bF|zR1@vnl5=>*J&KWySm|e?A=&R#{T&k8$@cX%FB=c%x^&lpR~p&Y)NwF8|A3R zn50M6>6QU%v#G+GJUlsRzpDG(*0yM9A*AdTRu4bE&3Lkgvhj~k)MKVyq$USAqb z|2+TCXr2*K{b3lr#2SP06eX{u3PLaoiy-|Xv$2jwZ6`iGDXEfj>D2Ps8uh$$Mpi0O zD!nvI?BxqjL=fN&622usMfWBSF*f#{U1dRyK1kX);w`Rk6K)piT=ca|Z%`;f_+p4= z5EKL%Y@TZFZ$sE51RXM)mXJ&eka!yt8A)R`#FZ3feCsB{)I?8R*Wu-Q>0koh{Jg-; zd}iFOYUvF5Uyiuzg!@O)uw{C0n(nSt-M~7JX1(*G$NBw&wAAA1Kood-SK4;zj zqP;7cHUQ6kMmnubf&mN#=?LyQ&h{yoqSt>3F(n^_iDKR`lhE%j zSLD>xRKwJiP<$qAUNzfqVZ-(3 zv_f(?ir4$D#g567L0&(NCoO)R9a?Lu{hIDIi~bT!wT@#JMSpFL{=MBFd~ZNI53k}8 z;Cz67B9YH&e6}Xv(MVdl>vkVgLDPfxyW{#=-QDlobbqORv73Yq!RsV$YD#~>E<>55 zWdG%d$dP?6V$3fX!L71GvEp!~6fNJNiD|Nvk#W=S_bk&rJ95bK7DBcd|F5si`ES(4 zQ~l%h^lIlW>`1U_04@F}9#WsqO7s$=U%nx=1ISklX$Wp~8WYK2O6x=x>{~>y>goQWf`CBmZny zuZZJx*-apJM}Ks|5qb|skHF9nIsumo<&N|B^8dYX@&ENq@x=b1PQY`ayMG@hQADKV z*bY!p0V-ej^U7UXa%@ga8mp_mO>mFyG1K5)Ls&OF2r|;*Cb+?D?k{@D_lY^@Mh44f z7a-(;oifSjrKSFs9C7oqu?%)O-zH+bp~U$3n5kVDK-PIl_w?NoF*Q{edPb_GwX*Nm#FCbq(y)X-A&0-q=&kB7Lz-ncTg{- zpGdIHv@Ceyif_|1wrkAeeutSCFJ5FUvk6qBrzKRFa|7#XDUW;^Ym~OOii)0U`Iu2j z{yxXZWpVidrm2Dd=Lyg>`S%1^{5(f1gX=JxTcj+Y`jv6X80Y~Rv|U1K_Tb?A51a%< zw&#yCfYZS3S5{VTnSJ`SdC(Ac@4?d8!OLvtLbuYgGQekI;;)AOw%3QU;4LW)Egc<@ zKW+PyQFC)9u-zKfNQ+Q+OG-Y?3q(k!nHn2Q(#0w>M0a+^W{{z5G`5SInq;2H`WpgZ zN9Y3c{K-VR!zf0yBVVg^d}fu^*eyY*JQsG{Yjkb66K>wTS=h!g!Vz?TtnQo3u}AIw zN4ul{mmeuy{X&v|Cr-2!BgZWfC@lbXrvB;60p?_xe1d{{?uw+naJtOi3oV4k%#jx~ z9%2Yn27(~Oe{gwI6P&k6Z``wm z0q?i&Qs6fW3xiWkV7Pcxc}Vr$V3?l9PTh->t+X8NL-1y@SzB9&a)|)ZZF05d_jNC! zMn|dhL#E(f0kfU2Z)}F1-2F%{JDF=r^igoVzHs{_RS0KkF_dXLEx9P$p6SPP`(=Ek z!p68}sCCT!Z`r+iD4jQ4xO?mT(_VJ2`1|=s>mZv0Pyq8cEg)S%)zJ~$IPmm_z~vim zjsxv4c?CE)7*_4cN2jM#5)v3GJ7K4glXI$>#144M5=#R4>xZS>b5L6iqDDq4$Hz(S zG(IUVkCl12yN}OqFht*o>})BGJ=vI?n5YY(gPKcQPmg&OX6Z;T_cSJ)lo z_-=_q#dB|?53|)UfJe}Xd{7ohRXtab7UL;d za%L75+936*1_qNdAJphJDB|pa<^z$ruKfJ@b2qmdyiWPp?%UW7!7Qd@;}a9Wd(N2A zgO4MS^LsOnf`Vc!VY6t;XyighL?|lY`=~nQo`*&N6O01?E^!5kdZMqA>9MGPZ zJg=1Ddp3PgSARb%5H?Qj388GOt>vpjQQGOU#13#hy%sUTtgj`Ww(k1)o+xoYHlju7HPjJrW6f0=cBr3T zzYD2On_qepOk#<`-~Cw_MMGNeBkOAUp6)C1VSKKAGy40y*m<@ywxR;hD|xJ9F)P6h z7;@C1R(}V;+9gWz59AgU9Qyv9*vs?Tvts_&{mbJkyOou@qA{c@1_o!Ki6o=|ONhQi za|AX&H&0ayc?$H!9m8(Pwl8@3`T6Vi6(OGi=+ftP^F`jUU=|`CHntBxj=S-(9nM)q z%#odTAhjxMpGD>dYw2;x+@4BBo_LraH6(@r_drO?erz8T`k>k+ko4CatqOYV=I{Sfh9Ub{Syp~N6JMItH6?~ho7 z(Qg1`V0r0W5ChO={IjyLtW0?VLP9WebACgTU-&;CBo zmzqFRCNeShn*=O3XC1v@!6YR)&7;v0TvSA^0?CDitG`u^THIZ|BkC8{*E@PbXoQ8Q zjf3o>VfW(VDpwpFnBDj`n(}~|Iq>&P;c%O41G^ph==bkntO9!m&3(KL0brEZ)p;1T z8PdQcO3GG)mpnNxE|4=B?N;)6LS#%g?50HGE%rO)*gRZ`04&3CB zYQgS>EZXAcOg&+Z>_n6KCdLRe{qtUObJN~%V&)}uAx#S}af5(S3;qv;T_fOCSfg8* zlQT!q;&(e;kzO+{1h@3-+A$-o>NRx(eF4|j6;xfjRpqq_?0~eqJWFS1_4|?Mj18;v zYkU1J^qW_F8$Qh}tLaHyDtjdLo!5DpqR53NYxqy~4cC}3`u+P`cA{;i($Rxxy?QZ7 zERT$o>Gh!&CcsvZ8v|m9NFf_>C~0VX<_n05Q>uAXQ&6xG1jXFv_$YY!tr0 zAttgjTan&`BL+x;+IFJoWDqeEu8r`z8LPdIK9K7&$80NIcuB%>$I>yq*CewWU*;h+0(m2^R zyZWJpL|{Ib=VrhA2APFS66M!YgFAwW?q6=R#ig- z2Eq6uK=H>NddmoGRAy5yGBPp`50BP>^C1qT-$5y*s401Eto(r)Fi=d(^vWu(pOn?> zZJjgvFpQo7Vp&IrLCZob|`wU93E-dDwU96Uh!}EPBe<%b8&XOR^(KN z=(edE;!@L9W*``k>NK|Z6ZoO<+Y5AjnogES%zvo&)hq{|4J9QTjES_wnDTOR%>043 zu>$~doc)H<#UpR;?ct4y3XDpI%_PC~X!C<>ate&R<7-p1;y}%vv~J-d5I(=*Do9z> zE8e2|<4V|zL5|!XuS}NVX6Hb+@N(qjg%}giEo*0N zLg)cteUF`G!R^YJ!@oJPc?M`@cH)Cz>2LnfLhi%OI+Oz-7{9*ZYbDFxr+NFf*>FZF zS~}X8($C1>7!vPcN~Q1mIGXp66u6Skb@+h>FfuP?55TV=A71kQ`XgKUnF4ws|A$Z021+5XEpc>~go?^Q zIpVT8tj{f`bnjj(IB;91y+XmKIlN zdiSHFIXO9@CTZ0R754yz&&>s26u=XvrzcTAoTCp$@G?tPRQ4$jixUA}KtKRTSt*;mO$@uW02{DKO^{inXYCzRhooe<1#Q` zP~fp23JGV;SF@}*i6#;lm09ksjP5SmTSJkJ8N0jl;Z1urAcw7j5QfA9_X9O<&{z-c)kc`Kc{;6N#LzUnJQ)E$y>*H0^UR7aJzPs-||f zAbgTnt zW(~N?@*9e8IR>a>OOi-*chALv1j>On?E&@N=JNFEmQQl0@qHWb{XPj#csuowRoS7a zrUtU>aRclO0USF+!@Hg(4JF=^Sbh3Md)-x2?nf(Cz};KfZ~?3q^k304{CTWY($)|%Uo6Y#aMBh^ zBXJXhmFaJF$a~&;eeKu;rXND?yB%%alFyF1*^0u6?Me6XPKv4WklBGx?a;|>rgv=@ z(IfpjR3~-wk;|@>8(Uv`AbaY)p0vwAhU}x3aAKU>_(2Zb&7QSl-@2lK&^T6)T^9$`v4>gPMG#J-LXVvV~IAz!pAc>)9y>m{aYZA zBn$ONoSP=#MtC>wwF@^8t-eyRma@5+k~m*p z3;srSKs5rBDNm`Wt}ua>0BrtR5UHv3;6Rzis@HGHO$zIJ>qi% z5xMj-8nIVm)F8rXc(G%7uGqOQx_e$!RAtzhVQfh#kpOaaCOyXMN0$z!ekT^>(!Z8W z8+cI#;c6*B3cQ++fLj?o7ya^~+>p&=JxNlq$wa6)5@lmnRs(j~Y;|$c_qPr_c?BQLvEi4D_BuUyZS9i+Vy&KE&v7LiSCLz`7FFI;-Y1Ry2508t!AVjP^?j8d zrIsWJ&UN7vAMKRm08@|V9fj(h=NkhORC021_ikOstAX1eO2)&N)CXG?2ulH+wUwZ} z)P(Zbi;0N=G&CWB%;t_wyeUfxQG{t4JNwcBusXS=2cQhlZ=~W*(AU&N7{!kk>Lny6 z5&bp_8v800~W3)IA`n5NPQfG=|-P3@IS#(*kV2X$?AQwWFY)=eRZ-1EIp~PSsx92 zYX1K7Sig119ZA{7^)%-kDF~KCs-Lsfh*@-Xbn;XggijU}ZUz3DJf7TNb_1htIG(fZ z)1OZ?^Akmgd|C$y$eR8jSUP5VegT)16EHdjWpGf(&eAAg8sgmKhVgY}6TQAFA0%$P z`2n_R0Wap=Ar#IDWjR_HD4D}`+sl_(4@oMn4UX_2@%~b|2E{92dct6$P&%f|m(<{W za!6$02^5o;3RJKQ@=CmUOn(Ch1FgrGl$?|xXkTGDS|q1CwcyCjgPp*~Ke%qS zyW6)as+c#%6fI4iiipaT=ASs4R{&3yv}s|K{#y4$9dkPPg?5#dIh5hUs-zb+RP5gq zKHA2g#t}`|FM{Fk5|0h}8Id;brEZs)BE3dR>svg%z_2(ta2s{dDcBuRH~C5xVpUO7 zLej=%;!~+CYU*G3S>2>ODid*u+Q4haq^fL!(A>=9D7wgtS-_olfHXcOWwZh{!iDrc z+bz(US(2|C${tN~NK8tg0lO9azxfLbPebALVM`uXwgKwM2EN6bE z?!!4&p95d2<2#GNe;lBFbjNg1F)*@RgOj{TZmO|x39UL6%|2*DMO&(86Un_#0 zY-y=E8oT-A?W5Kis&~b;>4@Xgy|uS@J33%blg=>Whzn{Bc`6dX!9~J1sC5KTvJxd1 zLG;=2@3ipLkH){7afB07Qe?n-qzLn+i7MN*RxYaD z;o5qaEN}3ocuUgzZtVzMDuhqL<{dvGC+Gcn9nxR+m~zy|{XYx^Mcx6sbVm!vzDL?q z<}Rs}Oj+-y66m%)g>%`pa#W=~ygq}dQNk#G;5eD;Quh&hnjs+pngpA88i~N&`_zox z-G<_v-*xvhaEZSQ;Y}A@z_H&%LS@pg-w&c`Z8a{<-_Sxl4bX8rn!W9jlsMC?g9<%uniD|RO z8Lz{&1cT#xR8Dofmhd%WSOaLEiR!(&!eQ@0y}ov>m>oF8s8hQ2YTO?#8&V+E{y4yb z&WCEsi>HgCQoF#WDpEQ_;xJjFrWq(h8)?g`c{DPf({Oxo^=ew}v1I3x$}e1bqDbN) zFL>?ExmdgXQ5s|qh?LM%pPwIKeGv)YI79N?aBd7mH(OPCUx2W&Oa1L}6j=uxzLPa0+E1NGCoh}|3c-rOhIag4%_G~-u8(CX>9iw1q%$E6xlhbS8 z+dnlg>rBPYiRn5Y@$!fW;*|2^`3Mpp_DSu6k&Z*d1KA<2V87J!n+_Gyb3Rnx6TF`1 z(q@BMpv>H?$(Gt%uMe`GP|6lg$D_W3v_4A#BZ6c4$)P=hdeD7nT*{ zfkyE&*BbYaw_K@(bdr0GImf@!W+Bqwcg7mH&5abW`gdE5SPXB?xNzF| zXFc#>wrO)3Ux~Qq+jJ+y99zM|JicMCaIQ8@r9E#Cc(IrM`*HbS#!2V5rBL^z!h8Mi z^m~uCr+FHW#n2vS&llPf%xMafS-9uNnnntmiq3|ePYNl>X>3U@{d7DDKh>L6IMYB? zU_ZEeK)@B>3w{&esV3B6%mD*6fXARWGNf5P@bfz_R@dscH@hi-{hXaqANfT z>_TXI>VlECkL23zWQSCvQ09}_48Qh8(Seh|{f9!KL{nC+V${Ir1Wt^#Jr5|m0sI%= z4BptcLG@Cd?YGY!1>VX7%i__cBzIRDCmsd6-_3h#N2jnmZ@>{1C|M%_Wfm-u0(G$e zgVM!EQFLd&2Z>J=E)XPHRj2dlGkJnFmEl;74Kelm?m2msX8ps3pB{yI3piPpsr(ta zI)x+4HgsaB||eL0D)2^El6*3yHgHRMU%_I}wFK z)Ts;FTyp{&r5G4tfA1$oAMy@v-pa|m&&28CnWfK4W3S$+_oi{eQB#|Qufo|=hl7666uqq4c%1fD#ENDZ3!YLqOF@=D*5Y=a327 zI3K8cO|sVx0D=Be1%iCK)m`2=)#mTad1HbMA6%=w8_z%~>@~YHik?R|-wPDogc}*l zYEa3vbnXDe=OQ7Yx+knJOdTgH)Haj!^Q*++a#{Zs-_za%RzIxi+hTE0na0PvgN`5S zJ|H)oY{dPH#2$7)1@d2i^SN?`jlg5y8_0MJ(S#A6LOzQh=IsW1OTITxDNE>1iT+Qv zn`irP4;`{O(rX_^eLrXT%<4o;%*WKx8{uk8Zh>S*lUC z^^qj&hZ1Qig0~V}(BTy!ol(f5hZSs@n;YM2k`RhQcMA3|?HzTBiij$E;C(Na3PxyF zp3vh&$>r;iDK506N1-x`#_l%kaGMB41vW(Go@9?66zdUVoV^* zRzX2Q!mA&Q*UuXVX_KXI66H*co)Mh_$_8|J3wuY6K4=QPQ6R?w5vgm=o*2a`w-pM8 ziO}9PfA~1dJG1E$P+Kbj0n2ahTzgZTxBr}cN(#q|yt^BY6h=Q0LmL}s(@fpT1o1}K z4I}D^^KYcG%Z@L^*{cqx54x3%aQWuwkT$>+oheG2(x2ka*3K^Q`V_p?4L$vSi}HD7 zz+?&H8Nbnp>tbNA#tf=1d}!px)Z>}Wd{`{nLJ}Vo7@vqKlc_v=(`y=MD`}v)=V+IT zlX8@`*ruwkzTWd>d}qBISRAcfV#bzv_HG;Jzyds(R_$S=)oaUE!d-R&tTNQ>Gym6m zPi9P}nDoi2Iz=}{kaX$y)*Vf(2AowYHCj@YnYdYxogNEU2%q^R_>L@elO#vjyP3MX zi;JqOtJg+uT0Fsp8j~$EZhZQMIiTZ!J1l!NAdwVT;Owm1qc50DBR6J2M2^Q`Z2O)TdMifNYO0rFiYun8(Y= z$QaUXpUY9G*-Q2g?J%#Lyv!c6au(nw^;2h_;PVvD%Y&m^hPsqZ_^c_t#Y}RjoC@+O z#F+>$o%);CWuQ=*4jxKN&H#3qI4TI=q1{vPIyKF*9J@e!4u=-==YGHvMih0;_R2o99^O zbuK-%GE;Qwmz38XeY+3pnwD4ZUb}FeKuMHVXrYu=MM`gUqF^_z|ILNZTS0&4h5`YT zO@{1UpK(T})*82bMx1SQlD#Ga%RWaMoGn?`ah6Q<55>x6+Dum8r3Ts%ct<2u1GCC; zKeeiHXz%dQ9rsdDDie!7ha9JFwY|%nQXBrICusxM@KcCb_3M4kPS@*#Qa#r^re!je z0jXcqXyh|K` z<&3q|C%MF0zV5*4SpRR~9SKi!PBI>(Xfwq@lb~B;?{v_Y^qW~s3C338!uI`JUs}w1 z5UuzdPkh))zbsEqt}9ARS#u}&dFqP}E<`oP5<(z%cyjXc-c>^hr)IXG45I>VGVi^v zIYxiOOVr5oKBJ0iLla|NS2<<(&-=qr2wS@{Q3a6=c`Il8!q%!n6y(BbB&1v^pd?3t zvxI+HXe^7K_6M$=n(}gj`7P0O?E>t^xg+lnDv5Cq43O?>qV7nWvN89TyO50$zGG#sl(*@R?@Hq)Jo{Q|>7 z_Zk7t(iBLi$pTz*9yEF+E9ij$qDKp##9Ew^*2QXcDfQ2WH4IMv{RkIG5<2WqO0C(U zNyw6T&MoJV&acMx4Y2rwPg2%+4`R)1rs_!=Kmfiv6M!4B2Zmzntrbh7X;=YzNcTA~ zx490n9S3NM)%81!9=-=nWVRumWT1~|Jeg?p0$VY#JEcl-Kl^)~`r{Vj;FD6-1etNh+1KRL2O(a>J3B4p z7AAdsrCqo4QhpPVJ<~4EQWr_R(IOURxoGKu8^cKhq~~3^hgmvFtx)N@k}5;Oz)~;~ zYvx|NJ&FG??*1Ey-n@&uFp6|J4PQ($aN@hYcVH%9kRM`QZi`)~Gmed=%84>{{0P%` z_>Bxfo6v9XH~Ch8~G6oLxD7*`x7R1SC0qQ+hylYm65|SV5 z09&*xTt3@rR48QK;DV!u1~ibv7GC=^0ftw$`N0DZwu1S2aoi37swVX|!YYgI=A7Hi2PEpGQ$d|d z;QRQvG65Kf&O<>n!xw(*;$KyTYac;y>+c=)4EwJZ!%0bCH1@X0tZS}Vrbpex(%t=j z4=)4tXiUs8oVSlvaPoakb=1p-yH;+GCjzFIln}gVl-vO~%>E!TH+yCP4OJ6*-fNmj z?0Q|C1RqMiahhsul2jAS{y%lTTXI9m@1-{rLoQF1OC?xviHYLPjaOKD<9@HC2yRV% zeVMv_`SnE%);oWBYwJeWi~#_xz&UIx)5hK!K%Si*HLS6+ump7gT^(NgeCOA+J@QZm zeD3JK(>;AiL^a^ChK!ZHFO%^;*8-k<0L=&2>!^H=?F!WSUrfA6qB{MUO(qVt0o;0t zDLpN%985VbpMznIPE`xIT}n|fY=PHI^hCi3*q9x`dARu0*2>Bis_NSFViI1!EjWr) z5Hjc10bs>YZm6}j8(RH7cs~0QaD|Wmw}@u7J(ey5vN&Z5c)ZVs$)eSEB7G$3>c`D#2ub#`5ThI z-z1-Rn=(uB2FTip(^UNCaEZ0$&iIMP9^I;8mNpcpp$++?;rxv*=@nNk{qefj9wIbu z-?I@SH@;I^?+F2*?M}QHu6_S}ob(A^v-aDGtB87@SH*kNaGN%a;;0AL_NKk|P=O@9 zUy&Xz%|yeCeJz5b1?65I~J)SE{gW+6Ld);OoUJfohO+lJ^lIq zlPEPF;Z->6!)66u&m^sW&COk`Eu`<-XQdER8eAwZTxuWde}dTziSAqVf#I9&vm2t+ zcd3EUSugV~5X`h>`6v`e=$$(_CEh&nd?MPg ze;gSx*Y(>6i)yDa2;-HaK(g!jQ^>3JS{a9(Jm1R3#!6^qMmBTFogsP<3klXp9_{h` z%4+xGq~kKpC!DjqwrQs#z$J$x`i5uYumy!#kgQVlsJ@5bar77!=B}S86_MEcKx66% zMFN;6gTkfk!&UylXX}z>ZW0`FDx&V;+-BD>z_|zB(+6O!_1!j#@BbtbZk`Oa`(Z-k z0U4eh1tb_|oo)Z#%7Xt1!$}@Z%>!6g*sJu+#E8LO#dBO!77#M8;*1p7+jh2qj^ecjeJX?*g z0qKY}P!(Ue?p*28M=kzH@S#cDEcJV-EFNwis-sf{NY$l(T@cp6nB$P;~3;9qQbcx1x@2;Ea&hRRY+;_CfV7eFx<-#b4<(a(M_vJ)mjnmymRwN9#9?E(&XcT zjo-D%WRnShL(D4|Z%KYGqp@j|19CmkyR-sMXxDAoi|mfN{t zNLXJ@9K13@Ii;6vUYprEYg(c?IX=!u%MsizrgA%_4gI{FZfx^^wQRi47l$ZeUr0=a znkUQYWp`!gi)72frQIVh;3-iS$#Rn+!&*bwPWOAHX>W}dGGpNk;#{!JmM+g_C@Y%- zG{8J$wKbJKb;GChge&^r2=DwOx)v%zpqAUun!?N_>RaLM_<^Ee*nCjOC+)%2vjj4c;8bct$dZNHtM|3dfn~kvJghdrU_4{69qmmB@ z*9PH|Ma>?zQjf7D^}L6Z%9CGrApDouKhrXKX)Fx2hC|7I(IVdTe$x5mkgPW|GdIqv zEd<;QwJQaQp-XRQj8(+c;0_63Pa0J1ETMqCnsoJRw2~-nX4Da1o%9G=?W`s$>yiq6 zUVdkflZ5RW#YTYFUFwdU`ds?OkHb-FFLca-EHslO_}=?YQR+fOX+_0ttXWK8fkt@7m2zr1{(7-8n zlEaUPTQHxfgdTo~e6=&Fj=Uk0f%-L?3OOJASmi;+A6=#^{WaH^^X=vH7HqPww$dk- zGL)s{hQ!iUnF@=FsBYnt$H-@F9@M7_F==Fwi3?Eno0b)*1N+wxG}hnN`KWJQIpvbO z$>|4YO@t%@k(*;EtD-baPw;)k(O>05T|l34>TQ3AL_bfVq)q|yaGMVsuJe zy{gm40*U?cDEk~xr_b0p1u5i=7W@H$6BtG1TOE3{)o-q|IiheQoa-p&Xq@y?m}3Kq zLJWyJjTvHlhZigKZMm58%(dN2wTGxOg`JuuGloE|s}{A6s4avzy%)rg+8Lu4A0Nc6 zswyTB@qD`J_Z6{Je9Y(ZI0}!hi5tb&W=5NJ=N=YE+B+h|kyERV@?J>+m4jxPW~$cH zcW-qXv!qZ7UwY+0o4Zk8Q}akzn2x$ecQr2595^2V?A3SP!JMJ*Yk&gorBL^@VJnzv z+%qMn=HTb|ST%}A<4N`6{xjJ=U+n_1=g+bNf!Jcj;kWH_1buFNKf3)Ub(qY3d_UiW zbhENY(_0Ej@8GakD(O*WFySG6E-@W?U3=ut4Fgk-1qdiD76tE&R+!gQmJoi(HE$kk z0)on1+$PkOXG~G;dkne zQea*=M~Q{lj6QT4-)I%-LFD9G@b7*U{+^?bDk(pSAP|$vP^P|h2~6Bzj%CFDbm-gp z;9P$HQy+S(##3IDdxQrxD}=#0s$C%ouc^LQ>J_L1`8mzj9#?LtbPQ$i_`EriqDpR9 zo7SuGfcjZXbhO-6K!_Mqd;|uOFbiYCTy`%s(Hc%#bbaz0{zWAjFT%ZG%BG4lPPRmo z3$uCe1Q57Y$J*x?>0`UuISHYky^6yn2eMx2`;qaPS|cAPmMY>4o_66tY3eCtM$8UD zdZQ%US1a642==yfzC!MJ%htuSdbNvQOsZmBYM+G8Q?mZPl4aoFPoxV<-MxBoqSPq! z0dQOc&7pE*!+zIm()@1PG$WNB_FoFZlP#G_tF`QN6+H}T?M4c9mngWqF|TlCvxU-Ndy*aasCIx^udMV zwA#!ifEvdvlJ+lPT@PR4gPE-zd3#7JSQ3B0`-Vkh8Xse_Q>)ia3ISXUD}=@QYI&8< zgAq&BGxA-WIC;XA6Du$h-1ioU0HW#4-JsUNXT_^)_Y{GWK;XRX1@#~Hm5a@6gE>)n z!B|A^6M0|YUH5F9SQ)P@$j(K()7AR!XcquSSC%_OHn3xU-XGENDIzvvh#d0@R5LsE z@TR4+nx95Vt29(SB$l~Df#wUayswf&p9WljLu3QmZ9}yF9qZeGKB7$kr2H_^7~xOA z4mp}~zQ#!}xV_g?Xw=39cnilT_kwPV)wu8Enz#9nDA3{uij)+?F9kmo=>L8G;1z zbj6MUR;%_Ls^e^5G<4KFN%Db`LMc>*n7Q;_Fszuh`q zw|sUx$nRJ4n|5ucm~OPgj(A$B7ReNCl02C|B?4$@GQqK_-;)cofMTL*Zee0FX4e)O zfBxf|JxKKfP)c(SU;?3DK;dSRd^w1^HuKW!{U<-JqKiC^9?%D62W8**@2^$r`T7#* z|Fb`QX`F$!9HKm5LNFy?{d#(8F3N@nFWj|VY9L~-h^0GO|&XM5Quq1(2XBK&qRFbNn@i;9gex3+O5A565oarciDUjB+2%89aB-eoCL z%Tp?ln1HhnOtA3q#FXsEtUf5H5!{QG@1A<3!Jsp9uYxIWVgUrz;vW16G#`xaUiQ1_ z4Tbq!6`bDloVK%yQ04WXoot#JTHdK0MskIlXrc6rbXfun;K17n4c+JsukV{#Qnlwv z{I<5E?LqO@1KF_T&N(y`HjBw5qZEbj*NpKNHoMeq!#h9u!V1X@7a1d^ASe?egs_Ty z7S4HRndqyADJEjZ?iSJ)#y~uIIuPuKQh+;mmwLxtFvL7_Xrb9B8$`1Yt*g{a)~+t< z7om-*?dH0o=jP_xOFI!(+*SPJhc6D$ct8lfwkN!q|HUtu$e%Ob8#mkIdY#DKHD37& zZHj4~21P|$+=$1t#8b2>d%Ctj_crzt`!$$>I)4vJAqr~It=+M)YfRyywye6EyuXuU zf?AuK5Bo{Q@Z^-Rz4HII8RxhDvzrJcbso%C+ti`Dj7#l9zC=Qz@6t|fhpT!U#f^2C zc5Z|fwtrjN3x0x2C@q_zti+_C6xE_XR;*t|MmfRNoBetpq&AYcWwm9TJi=5BBUsHs z<%+)}pz>UQpc6A!3m1#}7N^{!YP^@UL2=r?O_IW^O`jL{+yjl3MU6b1P`5T*%SDg_ z#H%u7h;uHVnaewEkpw(X5cbV<>c&HV?I z;dw!~Q0^0zRLeN;{^QNjwc&BE*2?*2xpU_lfmr9917xbhq}8OVs>;fvYHMeC*=k>9 z?P_UB1MJ+8xY=rSJ~!rB&shL$!mUT)nciq~kI|h$iwa}bH5=mERA3NVa$(Cp^?%(h zZIUJ=w2h6~^DVEl zlp-roR@{1{59P`f>EB9?#l@Mo+i5>FdgJM$~q5LU?%S6Sd(MVryGE zrQc?*JxV)Y5le0jYe|kh5oLA01H~Xpb-g?^r6}~!w8glGy{OD&ZO%o_32_CttI9a)-5j*uGCqZPcTVs|uHtjBIyKk)~xNgeK+I zM{thDm;@vK6gNF-L^tX@U?{5O)lMI;#mhiZU3Q)!m5dHVm}o6oS|X7+{V>~Tujph` zL!Ic_lcPJLC4SdZCatNP&%_F9+EJ->$?yrTfTq`1o2q8AUwnNqY5Ss} zt2gvbipoF6q-e@uXZO|_M0GW2{KvIX>{k0Co^V)M&!c$Uq9WC!wxNNt)!~1iqaWrF z$M(wM!L>IQ6@181?OIhP^~y@@g%|ONc1Y3lq~|$sbs7gu@t)!3Ue|hIVua+k(+LMX z4_2%+thrt6{-GAkv?KcGH{NWt7`}X8Srn8i8rzL%#U?4pwJ^--4lpCSl+1HCVu3fz zoH7v?>y2;i#S|0;xlnIl>sI2Y_>beRclN)J)+pIR1}%y=CzVzu$5`{IcdHf&Pj;MZ zD+c+4!$|~*IFl)6`zF9s9bE^IPRqn2>@( zpd>ZrDA&rz6gX!g&sDtrrO!@VFBx#8fBPGTynUch(upXRJ8Vk&j)QN)#oS#uY(cXI zwYx#1x1QQcRf2&#G45osQB83w!D6|Ehu47^JpZmD<<-LCR&2fSYM4L}? zA|W`s&$uo2YD1AgrnY~K^-*$`MLYuNU8m1JGDv$CU3B#*0!o@J6EXL|#;5?zqSS?m z+*DVOq-iniV~LFizE8~Dt_CO!O;6i;?a@EEjcITMxSu0q=|r{X%6*A zWFIhsX75S~*>t7ezK1&nVtzyMNjjJRo&vQU{ zqQ8WBq9459Fio|s(wPqDeOgI(VC#G93GC!U|7+^21_s zV6nF2yaB{Ops)$dxvW^|Jnl94-}J(|D(7#RyF!jTdA;VT73gg>)|}))V1z~oCjUig=JOqfx;^aE9+|{|CZ8c z-swF=@DJTBoc-YI7y@Pc$eTYrmv-I3?MJpouJ8NG?d{Slz7hY2xVH|ga_zcDQNct) zQb9mm(ntzOii9*$BGTO@-Gb5x(hZxCl928a0cl}LcP@}FX*d(z`+N8I{?4E0`ki%M zimtU-@jUl4?>WaDbBrK$odTz2L79l-4c?xzTq^`XuO?=EeYeX%7vQ@024GhfD6*$x_K8rYd>&_Z`E7XxP#dt)F5fHE2Y|^I8pCL+Icud@`PZ%g- zs;gVUF$b+9TG1UEhm9B*r)G`36&hpQB5lJQks&X9-P?6%eu`M7-(OKl8gVPbxCK+! z#f7JeAsFPp8?l3RU+_}mp(I< zrGES3?R^@3@|mCl<*Y+YDgUWobv24~gwtKHA1Q75JBL`2a^Lm&P=;8V9z&@gk6-3oP?V%c&FF@aEb_dMR!!ma}P@>hiE z%ttwNSaAJgS(KDqJvfVTIlGwMSRXoXQ4t10*Y-Fn8+c+yag?|EcQL)R5Z_o67CQBc z^HCy?Wklp8nsq2+Bhu%DA(m6U&~#ZzHKnBVcXZ{71#zgRn2c1K`K`_cg9nFu77T>+ zgn_9vOSU6rs}dh6DU;T*4^Nm=bFxeThOp(n)WK@Y2YCCH^gt|!I3D8CO(lFb!s6ie zSEW3Oa~i)uH6f=+$(mFdSb}Y+?YO#lJXqeDYssIoO$sYUNh=lU%x~H~kwK7YM9oGp zU?fTQQitHOVI53Kue()ohjSYR`k|cOivrEvPmCj8ZRG^u`b+XtVwD`tnLu@eEw zUb|0Fz!)hpePa^)OHTu?ww9tW*s_0($#|@IWb+bV)?uX=$=ghIAHwa0V(9e zjuXh>FI$K@P**u`UXtIE3)opnVkbVEup;HjP0gW^s2{|`eUx@K>mQ#SiDsy}NGz!7Nc*WqZ~938N8E0-)U)i+q}Aq zIKk$FCcAj=T_-=NIe6e`0Eo){SOF0^aDc2H zx5z|3KBkotkxT7M0`d_s6I~NU)2z2YMk|UaDv2AiCfd8`c>}C6fn5uE^81drPg>|- zBQ$JRL21oSh!~|I^y7V4a+Y#|0so^o>RQ`diWCUjnIDGdPQ)dasfIQ6X{?| z1YnS2ZX=h_-n9PJZ{e~w=Q`R@v{K6zn3@9tFR|_2H38I{SDNE8)Enecy6ifIUsI$V z?+fDWI3Jl5+f{*fOWiuuqP_R<&jXRa9&5m|Q@$#XDBTW=3D$0HzpXm*rVW$#@S5$b zJm2*@KA}<{p|tA~Z6do)n_r!kwp-)v&Wa$!wD zu3~YXDLpdhN?UST8~8PlEotm?=e@IHmfc3MK!x;X5}r1}q+su&8ugn%SU&EK`KMI&nPFf%|R`wy^MEX@~N| z5K?^$_qylbG%G%TF0mDUy8;9`i=PLLUxA;4E{G$-Ch4+kyZ8RNp0%~LBc_iwl-+B= zl{_h4>$DuV%bh(Qxuz@wOJGnw+pT`qR=wUz`yQS0nAwjsH&JC-rMa1AH)Yj+@L8^w zbUry1+u6ny5WpT><*&(%CS-bloSnhT6W^hqCi%CS6Pll6zNFIA1g89DXIJD!uH-DZ z2zmV^6v+~{hlaDGsJ)rJD6-7V32t~R(mhf`6%DRJ{R)hLO}-;RkmCwy*1;E5#1}!9 zjOT<`A0_ezL6V!l{I0gR)hP*vrRHoZL(z<;jsRjDHo0pXhqqcy=le`Mb$VShuipZC zQ_+DBd#&=?4T|TT+&SW}(Z3NT9nBvwnZ=;EI|ywn*%w0O#s6>tsPNi^<&nD-8|I^H zdxufxvY2#t`4<$%1aXJ6*XFjpvj!6Vz6OChg)ix+VH2miRN64Fw-Q|zrx+&!Hh$uZMEXW8o(0yD|J+Fa$uZ}MEECogFODT({*0shYuE*L#+0Zad~LuyX53=m>922ihNfmR$iG`z`}vM63k#1x~Fp z^G!J|CRXf6fao150Yf6=A?%@$DEl9s$6AICu+4}A5i(q91-NAAD)P;T>(-lf3_62E zlAqUVc-U-f3+z!`U7M_SIoKi)33VJJy(3B&E9Ko}#kUTvu35}k>uVQPYCSxxtyyX^ zfu#tsV{~^Owywx&PlDvUrzX` z*}%qz%(zX2J6c4is!Bb6obK>k*j8Pc0EErghd!>`o!9aB&3nA9c0H+A6JT&W{|aTW zkhD8*b(sG__w1wZf%|6=IpR-;rKt9h$2y$3W+;o(hbTinJBtHV z@#53&RO86K*&pny3tc4B%P@53yLY?ZY1<%%aC|KHoyZdu5nRG*j(>gj-LEJu-JRxc z%^aE&1DzmuZH>njKlBTLU%r02Uk#V{O!Eyq&dn1oCnqPay5zQWCbbG2bU`3itCFnh z3vhB0O;iA>$!O!88G151T3%0j_71ZEst-*!J3}Mu4^kNq)oO4ikVc)ofzVLyfWj|L zE}84~?}NQzJHL&AdoZ&t+cGIHN^NcAjD;2g%B5BLpMH97Z#N+4kCK+FWcSx|w9ncm zQamnSd^4K{#W0cIY{iwx@&uZzUYqivA<^XMWwYOIlh5z-_H0w_(qmU9p~#Lc5V2yQ zW%DYJQ(gVU##^=sem#?Ya!;OxjTqa8o7={3q&?X~Y1kRFu z6(}0u2}BJJ41iL}*l|q;T~j<)@V3@2{V|gY%hw55?7oKLSE5;o0wHlT{ z(+%&!Qs=lPOgcI-G_wz8Ve2g^?%{lSfs zlzt1S_1u9^>sSLZ8O<@_)vC-(P8qrW>?PxC7YFT>l$3m{h^vE}1Pm{bc9*Rxq+1YfBB2ykq^Ju!ubm|Y`_2KK^$~hmw$-^YHdbJxZZ@H!=h#yK*t;p8tIgf1k~U&mW$- z{5h|gI3jZR59IJMgymo(>~x7IVI#iZLh8%XYEMj(uZw}ktn+8R zzCn7^1Qam@rm~M*`p=?;m(sa-&5On_RSdxsY_2l!-RBX8V1%Cdt)6$?RbEfLC<25L z;$^c#QSU!fp#>TLIq?m~f?@h1FZN6HRm-4iX?lJG_p;yovB2NUHDRG|2|u(vYCeYX z3_`*8n}Rq9xd=U#C_T9dMI}~7WLfS#l}dzo7{hkCEYyxIeuafce1Q!%ab69opT%>G zphY&C#`h5I%?0S$oWH1OG6Q`P174`UDxk6B^>_Y$qu)R9zY-UljTV^;F)J!XK2QlI z@I>!my;5l)9;Gi%N%o!hevTG%iyuq;H)~Qkd?z7}TkldNN-v@XG5=whX+?+^b+X0z zq{I(nU*`$gMc|Ji`$d$EQ^_+X@;4rBHl~3r^H%#JX0)=VAYiToYSdlsQWa z6jC30|FxgIDZX@O@Q$VBhRGI_^r1)uH(Oj#VG8-=k}nH1c3oR9ptazrm7Tw#){hNx zpOL5sI4QyZ+H=qnlpNP>MrT;M+zlP~9q7Ab$Z>t8%&Ip=l$b2FrOmAi;$)gtuw>b-rs|Ib6` zKMfiG_rrHjkN;mD_WAp_|NRjBTkGZju|58N1~bE-@BUv;M@PEu3f7bth zKjee)f9%n}pVD;k&zJqL=fC+A<{Dn6(n-i6QnP;=VgLK+{eHGHb;$Wdj584kq_eNVh&nK8K?;pDh;y9~I;h;a2vJnP#d_jDFvD;Q+;bI`wh4d2(`#RA0 zk^PaWwV$j>X{cj;W7R^lFQo({k%i%7{~7a=h2X{IX`j@G0GZpjk%~S2T#+;a;W=z{WHt=NAwbA6_UYI^;Pl_$+UNH9 zmyL??iM`_(ZvKYNbC%1I0BuK(f;dQ&{@C*`hYSInIh%IBS31mI~E{`Rx`{o4)3 zpc04K<_sK)54l&+v~thaRyR8kT7~XW7MXp@%TrfS0yV9@BlKG^B+4*qAB~BA9Jio= zuM&kAwUS2Ho;QN#EN<=fqrH07@zRJ48@duLF-VW07yxGmAb z-JXMiM@k=`Ug^p-2EZXoUk>D=Sa05sl~8$6-lU*Zy8ZYTMicWvaRJS1xpY52;=-t? zaM!kbyz~1x`)uDLMLMLK5UFKl935q~t(m2HUB7b2)P+2f=QToXu4wy-crA~*#7 z@JU%=EZv+OpD)_{ni1(AQuj|zK@3g_*`6jRh|fb#DbAnFgpc(o$*5D-BnqFXn*JW8 z$_w^nCemOagM#u>T}@L=4{DYkAH6Z2D+1BxR*{oE5tH!*-(T3zkdRM6@|GWHuq#S$ zuN0&j<70XQ?AUFnBZq%7oGePa=_n$Cp)d47p2K4}(MTosXvmhXe=^9Rdtg5JSHRYF zmTEbb7ssAx1VkVgvNe|CpiPvl8<*ko9bFLQ#eh$*E*eDuQ#rJBKNpSGjn=g?^93pB zwpXs=9_TlNLCo7mVan-l2i-U!$M(ukTUbg_1e5`-v%DEg55MDvxah`Ra*uN1>rQ%h zt+yy^VcW?UwS9CyRE#c`cX*`zeg|6S+v6Yu?$Jfw4|yP3D@h4E@_%m3CAX#TRDDT6 zL({zjmzh<|Es?_9+y-hfl_>i5j`2lptS%IssV;B#uGzhVuQds&h>qsw=Emn@-&9i& zZD3Q|N+RQE=+ku1Qgl0F_sYeb91eE&jdWG+a4d8$SFwp^*QEF`gkm7tQe&0dEp zA3s2vNS92rAL~qvw2y~JUTsWltzj$HflMUlL8c)qEIWSw&pZ<=T10Swa(S(1gt5Ju zZG=18Yi>&yh^32#&B1k$ROHJ3bNgtUXuy@9XaY}&d-aIw{Rgq zAX4b7t}|D?W{q1?EIQq2OwfOQm=Y~QFQ2XV^T*-W`=a@3a_U|2w`p1BdjI=f%k=tfBAuH_^0$&QrB+HLoYaoz_6W z*CzI&8Hth>?k!^FWR4aCnE0K!Nk1|}x*0aHOfo&G>0 zA^cT0y3-nfHK~rRBiEGYenej)^qQ-4-b`w$jSU-*uy%pEXs?};oL34Cwx&c8slV_D z4|mq~tmOy5Yo8M|=b0|{NSad>`%Bf=FF!1g(lZwKC*dw(U<(zyQOa1htygq^LQr^(g=ure9pFc*@F-)GI6{A6ZU+Hk z03a-S*4|7`M)vA4#7brK8Oz~Z^n4?Lv-mK5$oPAv8eQy<-Jnz&ef`7-k7dhBh%*F* zUxa)Vzp~A+=bUh$6PHn0ohpYz$Yw!WpACGW$nHrANrotiOn#-zNm0>_y@G2)eQUAV^rd zyA^d*l7!C~%ra_-EQuwaKe*zO4@il0E6Pn)689)`jlr;P9 zhH(L{8x1m(hL@D|66sl4Q|i#W{MM12XlCAV?ITMI?3-}INKK$gS>^glT;QCQ11Vh) z3#XO1a8*7}S=aK7IG^d&n?TnmAyq79k(Nd}z6$o!DJ1SOs(PhU_%rT~1LwgVTfQ`7 zeoD9uLETq4orYBtKsMfir3?-c!4JiZmE*xEaC;vY&V9Tvp56rD9DNU!G>EJN_jP#Q zk#fRRl#Lj(>cLa_TkbCl2o@Q`htR+!u-*(CF}>k@;;-eJ_;%f&-^u8b{DqM z_g4({E4Rm=r`iJub;qBfq(&vNmgNuUd8^H7h5_MTaZsuD}HI z=g>=-m2eIGVzKmpwEMv3wyDK+bZ&Ab!n?gO8HhF$<;AfdY{pTw?g3%YQFXd2kvwUs zLPe4)N&l|{{G>;x@FfKfv1{>bJwVFT&JS&DuJ4vR?5NoPuN()M~ZJ@dc$QiPV#-jS)T%Nm#WsV(X(8H zT-tYgDU#>;$qdy8$Kw(sBO@W}qzXICzM%g`j_9hRLWkQ;wH6&|JQHe%{CmVJm1rm& z`G{_!0^_*Y9oj+C)-uRFDTo*JAL*+I3jT*O3xzHVn1X{q!dr2Z40+@KIYuvaRN>3f zx<;F$x^;4^M|1;H-wCBWq4?ffqKP_u9eD3o$XxapVvz8BDX)Z2h6`8Kg9nM;bdRJv z7OR*>2h@7>gyo*&d;39%p$xUcODNN?d?wUw!7d=yt`gO3YSk|9>F`d2Ejo;P(8#%r z2a#J-x?3KTFox322cyu@2~^e;E*oZAX3WC#1p5L^C%~dnB zcU)7VfZ0nR7eUP8Td%&$_LC8Y4BNsG{$W2V2czcaRz>WCymD#6X#90#y+8a5fT7T2 zApDe<$QUcp)N~M#$?X(tF2KYB^TcQeN zw5D;Q!e3)7h`lJ@HQ~0mu%Fa*cURKNigO4qszvG&VX2J-GloAE{_@wJx>7%Qw3BAj z*}6@yxfgJURHBISrRK31a(Kov$Ncy@psxk#3^>~Ime;u1nn)+ zhAr>n zQ*~pt>pH14m%Z-wJn;5Mv=yZr$0fDd z5{>*iIOb)YD1{?Fcrz`!z3ZWfT4h1KkTJ|4|ZvQi=2iNd-fo#Q`y3=nB zVQ~-~=?Yx#LA{Q7o;_DXdUUgMDOQR*oCVT*>5ek!#yegsoSw?FA~dyF(-yZRT2iFD z8*JOc9;q16D$QCYQ=|My7jcze8V^ITJ(xFA!iAGg;ubEg#Po@LQOF&uds0Z|vFm{! zA3OlCXkn=jV|3h2Cl{q@y7@eG)&DVFKv@0#oK$&%_YJh17kgM+{a%5)!pMj#e=-Ql zvv;}u^rs>9U#v>%#?N=S!OVJ`lz}=4lX-CEc<6$SS-f7XpJKn^UM59hYR*JZ#w_y$ zN#f)KKOOFQ@y;7wljOGa4!1&Qxx6U0_EQn!{2o&g^Tm(|Ql^?kC;+5<%;JC+*YgZ9 zN6n<)vx}^*$uSNptShlqR_dxAEL-){L21zBwEJP!F0aBU4V(e2qU6$;f33qeeqbls zti#xAq*6~t5Lo(G1Qps7ELe|;?wJ9&At6njT`3AeitGUa7%4S1H7V1=9@XL4cpYU<{GluZ(ffau@8!#GJ6$SB*gIZI!{wS6ol^OwBfKQ# zv+joo2o*!%V{KPoY(&$EW3C!2(f=zsR+2L{?&y)E4$)|1}3;;JHde2S*2f%EQoxr_ow zmmypRCgSW0DE2Q2YN#NsWAZc2J9L6z$ot?pfD$h>$JkZz;B8MjGRhoR*Nf)R)m>vs zL9Vp!EBm;bBUNIVc{mHDCqjI|B_$`ocyUei#1oA?-JHiKscn7rkI2lQ{l~5GQnZ__ z$vI&6{JCaz<3+TD+hZnvoz}0n^a3bvxUEU@qw%V?0W&(m1w)XAp8oy2rW|JpobSw- z3${KoUxuGmetJy}BVnk7PTICF`R}hkm6Ma}7L^PLyn$7)J~BGuN0S8eMcC1Z%G?rL zv`=?#J(jLT4nIAF56$~%h)YBc1e%2!|BAOLF&n)ph9Q)a;44h2oqZO`bOkn)6zKyi zfetl@L9`F^bF(&FxUoiqks|{ONvW+1nGFAM0h;dEUS5oLk8Ht2e^wPth2oN-8t-2h zl8bmkL42L);F6$-lDCD%DXi+yn^deVMepnV{n)$KA6mvn850K;N^vh4u%E{T*hVhgMqp04OWwxZsTbFIbcrFerxl25G@;#XB%R z_Qngqvp2bp-BK^pFufoy;wgR-rOUy@oCWg^DNc|ndO?T=-YDd`MDuHT6@1l<^Re5_A#pt(fld{GHn)!N8}2xf!LIGy0jF`o8_n#DNZSI&hYv{jAfFFcCVbVC&bDOBip%+a>}O1H z)9abAAiFMH7i=d74dMsluSqg&GExlt#F0P7^&`yEC%&^~irX3fS?}k6zhTL%t8>3f zbP0{?MhcAKCaAL}z4ig5FI%y%%v?$Ck@T|U@E1Xo;O3khx(DJ^sbOJZGpVUT`FOhg z$vro#^jUA8{9sV0i~J?(SA&5IE-&VR1>fB&_6mc*F*XCvOr1loQG~LZf>QsuX3I-m z1-zTVO%T0o^pyzeRpeiR3-vVZC`Yao@(04-Pf?mgz#>6^6h^~BrMO-9=;_38#Bjh7 z(R{QI#!!Wmdr)MaWxqJ6<7fS;Z#8OtC?6m|zegJUt|>Hs+;)Xu&tHb+jY4;sxlYg| z2`%0A%Ws7l2u+vP9D_TH$0m9;)YP5|d(i}waLRDnj+Q-A3g=B6INGP@eiMrO{>2Y! z>|gqAMMla7+>xZcF;ut!rpY|O5QLKL1-_*=NKEOANN3)%;I3cx>iOofxwq)rADC){ zYNp9%Tcq7Qi!2_t_PnkZocmOSX53V(abX1#8K<`H?&|A#UFt9Kv%hQAN*1lyg492}L+ZRm14z$<;y&}B3dWw$lgmhfyI!K9G+D^JG7%i1}mNZZF4 zl$@$LF$AC2UJz`FyF;=qnS1k%b{z0{*Sf%l!+JlwKuy)9nuqaRH`qc%9LjE8^=c;Z z*AzHA2PbQ|-_ntrj$f+FGBT)6e&}|?R<5e*a(bL}b0xxbZzUAb5teJ@Bt2RSyMqiO zOnrV6T@dN&`Q$TwTH8=tRFqdN^PA8J2`c39>zLCg%p<<6Z4>&hbl!I5ViW5IYcFQ& zQR1$PWh$)Qc!Bec{Hp(O`L%M<3>tq=E#@S;7ezb1 zVB9#}^*HIMMCFsNdj7t4Fas6oU{|(vuw)p3X~wE*FpGMwei^OhV!77~a-uakIF!aJ z;7HOHCG1?y}{Yw92O5 zV-y!M`7OH?c5tC-=H#{fC~eWf`1rVhz(4}oK}$+j+uG8+yv(@hlNEw^F@!5W`B~1( zh;+CvqiTK_3vl$I@<@DeO)Wr^+KxWU=_uZi)!9ZtLC(6+`R5u>**Nf|@LV2H`W9v^ z7)UFD{YWYe;%bJr-i{PqBv#U4?yhyh3IDtw_lz|qpo_12juRSDmJSuk`Yl8LEiG0w zii(N|#~ID9G1|n`svwezFgT27zQZ6_sitw<>!EG zz>;khSXwsuVy%x=B9CS-5ZfTcUzHe5mnzKMtJfR3+!>tv=(>}!yFAzQ`8#dX_K zNY2g8qDcMN5#_#KJxQ`U9V8CCH_(+zVmH=NQi{wlhFaZsd3kSjbnh^D@aW9+-It6( z>0}mNQ2@!o_KC6sp3oXXF5tNMy=<`T=4roe91SC5?Zy{7JZfo(T{)@58L?6bth@Zj zoyZWLQ0QV6mr@*hFSE9?aOohB+-1ILA_|sRP%@qmr=9sICvv5L}2r)n8oj|hL#>U zQ9Yr+`9>d%6IcrWmb-lmt>NYGX3K?VA$OOLz5pw=SG8m0+&zryfw(+@H!j;vq&+F6 z2^~JIUuns6$!SfD-R~lYjzU5X4p6w68so|)Md+(Uz}hjs6O2@t_?VqNnkyta7(%*K z>+C8zD9g?vkxJ81L=$jMR94y;eFky_>e|>nVv_C;+o!pODV|sU`bkh(4VGNR~Mx$lMDtv}PwoTv1XF^rfy;*oe?rtdrFZ;Ff%vg(u zA;e#k`bG~dAM9iH7mqbr2UFkL6n=`2E+U66_gSjrDTXxH32C+fSBgDr^25Lv&{u$d z&%{*&3SvxjuL%v5@Lbe1uQYI+7LB`5PpmAJ= zxym_tpotiqSx`(7{Oe?Ak6hle^+(Vu@b64xXAg7i3A1Y-?+fN{kJ%_|*bnPZJobE|^%EY?l&YNa zD#hkI-Z)=yuko1a*rks^hK`Y*-UbDj{%t!uwx2%-@~WrGMlHzo)^f_q1`;1KF*#&H zz2?6-7D*4|fZI$ppN(fT8qM^zGNhARG^tucH~}51+@_XESd5~{2d|U1drE_f(fCAo za;mCFo3pLs2VN8#K~%URU#6k*U0I!_nTr84EzsRAjeY8*{QjB{{5B*6%kn zb&h&C}iJRW5stoeilOu1>2ezI3-SHzhepD&@UX11x0QJo^W4H_#f6+I!Rw zl6o2rYcmKmUAHw6xjH^7T;3e>AJs$D+iGWvHrvo2f(ejeIahqt`sxGA|!b5<^_Btb~mOv>0P$ z&t{0~cTVTbI-(ds(swywqDub*iI+Qg_{8&@kBC`V8~s@-gEV#038!9-U(WXLu#i_Q zQ6*=bY|1)>bS{v&Zln;{D4@6YDsuq?bB_G+|HCvUaix)fNH`&>XJqpjdw&O&kS*f;OgoVbNz z^A2Xr(L3#gbG(*x;zhHrr2w?l`6J@v*Q6lHizv0s%apea0_-m1~E~W8am) zvI}JIoc68Ux+>xVnW~JA_cw*pziml#j)O_TsnNzL49K=oCsR@i;(VF5GB$3D$W|DS zD+s5Su9}ZhbqCuIOn0HTD6VdhbW40}vj7?rT0d=VtJf*7P~no%}mYdAJQgqI;`!RbuEY?whC4G ze}$hNv~9dkudF=anLOx;EjC!2EH9{a6Rsvno=1pRP5UhS8qe!4@_ES&mir^$rP`i` zqt2y?Pu_EG5q-|Px33hbui{Zv&E^NTBg;R3QVk3c5)f=YULGtEQ1j43W`xrGs6A`& z3_07T9>`Ux)!&Zt!J`({3jDifWA^z?IQb4!|xCrSX&oUIq;XF@GQHl0qT+gWC=@w0FJMmn-Bq4Q&oaX`+N zaR=-8GhpD-T*p1Ql%mKwy~+zwU}1Z6Nx0@M%Yagd!YvFztt70eoE-6@ACubg89>4a zLuBU|5UaP{lEZ)0MST?^Ui3sr4NX?bEg%Oclt%pV>eBe@6bnj#e#np!1WI->4j&9t zii{#;ZEbDG>;?!93XH{GFL0WPFF6Y(3qvY^aQQixsuk zy9W@m?}Z^My8=~Ty>kCmJnC5Ea#jbX7prF|kJEh!5&l`ZkdD!??lb&QwX99Vi@`zH z?mzf6;nMctc;Vf(Sr|Jg)bAJ&v@jAIDmxKPv1(f!+3T+BCHoRn@+G=KV_xp_V;dAESB6vfjJrU_4j6;$L3op*nNV+q!z zBiO#3Z^Dy@DSy%DSA2;+nR`6fGT?%qm~V-f_VCsm3fv|ycRnfx<) zL+sM6h5qmr!x$V0zSxp>Ap7Kc(w%6fHx*L-^qr>0Z z*EeIpt`1qSiMjcF>CAPGWAIos9ms_oTs}R^@3D-k%aP{^_#AA0Ja&E!*WsnJ)vp7L zs^g>tsO7q15;4*?-ojOTNuWpmSNB+a-67f0%#e6#KCqlxfMAX=4Isq z6+Yt`VSbF~HKoVLmpucQBZ%(uJx)g-Ko)wE`PtcoTIwIo#{s zxBP{{7aFWRCWnt?988lytZ%L@y!Ab~vZCUTiGhLd-#0*jzFLGvDCPTm&T+A%>tErQ zlb)+e3K!IE(S?lT^OB6m$_ni6qzL&EGQKL&TY?fXOp3eK>)LZq@9}S-t^lV0nvAkz%U7UpIPoBF+;a1H@lDSY z%A9z)a-HS?NZ8&?lFK4=x(d7EIZ>K@H*TR%ANQlGIW3Qd&B6ZtamSCr!L#FE$sWIo zlczZcH9ilJAZ?$Wj@k6w9rDoH3~Men=+4Q`wkOS;pKI%4GXFK;m-p$DYOR4C`_ZRM zl!sHk{NKv=zcq!h1H!_jO?lXH$)io6t(GTViVC8Y#`)5FJFDKa?y=|6G6Vx^hMieA zo>2k<3E|6S_I)D!3nN6lhbWd!9yknrE8<76(-Jaiupj< z(PovD*sj%7mg1Svf1>k;B7Q;lSqR8K&tsa7$*J=6CgvBcBMA(yy6w44)*s1w%xTYL z50j@ls@qO`N7w9yLGhg2;{Xs57`*$EJLyfXezxWApS1hcZXKfyPDarPT8|-U;Qr z!x*p*KC}clK5Nwt;rsP#)Wt`4zESJ*)bZJ2!P(l{y=_zvXml^v*gyskTe^l-BS!tf zswMV{z*Md2z+=>ggc(%&J>tAT0;3J5-iC|u7H7s1zaC^poMVncG(2Cn0`haJwuw6H zPpigQq#%HS?q~@A;a;?6H=}8}W82K`pc>MS2OrSTc(?AyrUUu4s5O_v7?V4Am`y{) znQV$X5D`#g@nW{>B6((X&Ro0)bK$*Piz_zW_b8R*GNfX|6vB58N%E5gER$T=@G)N~ zy?ChhdCJP|q;_v?)Y_zN`w4{=Km|E;^tBx!keIiHJy>5Eb?6!21I;?j%ha-Q5p0Meijq|O403UJ}OF`zz`XG((Q4S@|L zmbZR>D&Rlfxc`{G=e9h8bb+Nyh0RbphB?X4%kznhRB>+Z3S06?(CFP5%hZf2XL$1- zfwN-;S-w^EA@z`?-oQY~Zk~0uz5FnY8-xrmtv0@=RIk+pc2hW2ca~w%ZL8!E53bujd0=$y|6*_u%*@bL(GEo~SkDOeP+>P1CVuD6ltd zq%x>X3+FSZ=yi9(Fqn(gAJ5+fh7c+dKDt7Yz%NHoQQu~Z8}rAbE?XZeG@5=&*{67p zv|0>(yL(V)JqvMscI^&sWJH8iJohdnBhsdc8YLfy*St+-aO3~3cIaOAj12}OEO z`aOG4M+d9rmFm6zMq}qY-Fwx_*YorRHCvMc$GB%pGL*3~FI78;D%MU0PkUtDhV~6=+P@eROO%!zMc~?3zhWB zRffCEJR0lkp1(=ai{Ot6u&QvHn8`)7ou1(%Z_s0T;^3&d-I9@!2F9~|ujjsn-Uo8u z*H^EA#?DpTPtL!{@nb=}YkDG8KekPHtSI+5%r$s*(U~eyVj+52w^Kax)`9*R@qNB< z@dtPlzC&e^5-r=%>xeChU*Ofh zGRu6lP47$hr%7Yts(eFIR1lp#7aD}X5Fg$&CstL-PSm!#O;^7g_K{31>wMMngyzOW zK^*?W(2$DTX^pB5(^bz?@RtC3$#?OXX7NisUr4zx3&(hDewJi|@-E+(l<(m52d!7v zjWj-Kz)?=_(bvaJ2Hj>GTe|-&7;{;SqwYHagN-ES>vgA|=85C?gI`BRdfe8EC-CI) zn+uLRlxsF=3#yio<1xJy>RS_%*OO|a)wYtFB?(5!IM(MYK%>84MnahmRF$7}h{bfK%~DLYK!L*gwV}y?Dv# z=G^`G`S&C~m!Or=Loe?e+e9x5Q;X$zbXQ6TH99KG*A4%oxO#TnL%wIgUJGDN-9|H$ zQQW|`5fRhcE7Wqq9{%O67Z23r7rAmZ-0I-HftY*PX~;jm&FtLlFc9CnlarUY(THvD zf-&@Ynh>6#KJ9a}T+#9M*?s%a$K$yw#Tf|IS4R^^Yb4VectX2my~WejYRTn4YalQx zeBRHZ>>xkW`KZ<%B~KnS_gJ2JoUNZ}?49mCqYRxULu2|V zE*!+N*UoVD3-;MjeT}tv0br_b%kh&_NHDmqIYQ!>dsGc#5arqpCQsUpe_AJTJ6h#i z6WD=@a#`JMDJ&n)z3;34M0K}-MmA?69ULz8b$pkt zweYSl@%>cCXD;1es*-wlHQJ4ELqP;7B`^$eof4O2fh$;nLdaOf-?2O~^gzOS{Kepi zS>U=Kg`XD%SEsg&?3H$QOeC|goGs6*FCQE?KSqzG&qB?<(4AQA)*3vh;kF8)ijNo0 z#n0r^r8M4%2I5hVsfJ(XqxvcuC62fSC-(zp03P-Sqn6f#3yl}1A}8+Lx$|pvbg;J< zH-x&1M99>1IqX4Tv|jzMx|O1iGRw)vz+@#wMc1ACI9nSOf$`h_OhM)i>;Bg9; zSN>u+@37q#-=1GYmj$MfYG8d{e`;xNzM9W-{CtyxfRUcjE|Z8!rN*G^4*xiAh~;pN zJ``r9rFc zYGPtib@D42uQ#vUJ%Fjk^6WG-$u+?5(2-*+Z^d=H3ouB(RM@Isab7OB?}{@oFrP(+ zip{~x&mw~gQ6L)sp3@%m^KP>ls=4(m9ZT3vi&pab{EAg$RXJoX7I=pKYwQQGON8hLZ z>JX$R ztOy1M$?v5mO*&ZA9bB4i4FR8yqcZa&Y|@I-YmGF4Boxb3BS@Qoud7PhZ7KtE-lse4Ul8fiDZ*I~p}ct0SeZr;lJOY`yD%rPY<05@6=15|*wx zZkOrenU|IIlG)=F+}HLxG$%H9*e*Q|a>KofPFH+sW8maufU{msNvSzAF;dktQwzGt+8E-o;V8(v&tm9X3x$K&z z9f2R+BU3_LCB+DrNsn>UJGis~tlD23%U@+4*~Ed+ePHvU#~*iw%arGO$c0Ai?HwjF z#WZM73jUrZS_}*SL0Y)V+HyGhEQZBkltV6=j`*h5N$qR1(WTJ=UmV?_LU*$t)(LEn zUa`N@nA|+fjV)g2jP0^Ci7R{E91uzWA|}die`8u%(`h%ae4<@oVR=wU%n>af)J=h8=OMOb990>8)(N!Px&nhgm9xYqdJf0zv zkd*W{8ZP=M%e#rbK2l>OXNaePEOOsop4?a(ubyn54UQkd#Bn*yEjPj@ZHL~BPi zMyVukP4XzoJxzH|89GH<3uQlV@*tF((f1O;O^4U)nJ_G5t3Br)FhHP|oq$ct-R9(Q z7XatgW8d|W+M}fE^)|Asab<9t-kMKrZfXf3*VNRU47ty0?>b9z7OF7NU6T8Z%qhJd z^=9xA_ObrVSAUC?3Mg6kYEU!he{8u=Amyz&-lBi}zS!RgnISD%Y$7-4$txW4vNchOV5+2)FR4s|RZyzgt0%!u}e_kgAracSUJzP;7RNVfc z(A`Zo4A{8KS|w_0wm5k980zQh&Gx%I8fPQ$U;#E>(OutcC~1>? zxffigE|E_$-EOsBt6o11C2#mp^K8d;cztlbO7kr?`o*>7!`*v_HI;U6qgciUh=_uU zfP)HxCW?9Qw- zmDwy)hU)XeCL{+~6T z)Y5rZVml%O52f9aDl0)|@b-K&-%SAr$VtVgoBS?R6A9^ z7K54Gq3-_lzg|*YoFwD@nztEZnz?XP|6U&kccX*dljiH0c-)dp@BqZCgt z8~{jHU;jYYjkc;HaBU$0w$p6BP)owm>O}-YoS$9*q5#1-*8np zBNCVii1=@M9i&d>T{(T@PmImJicCQym-(7=Uz0_w@ShP2f(9vm%TNsQD>Sy1-hS~E zS?hg|=Zyh47JW-oaK~o|>VBvTKWP*=;;t^cy3+in##r44S_4Vt6KsC^Q87-JF8Ii$ zOO?*E-l6#kZR|JunQgp{_Podl^8h@9$fq2HPJK_k1Jb_TqoeJKF)(_Bs%isk!@gDf zl#Uw8W>qHu(*B#h>dc1~i+xrpGT4fRr}P^NkFFG0>qUnE64hXawk>iu51n3WN}Z>}BZYb7L=SkJ#py@U& zpmgq-(>-j3*X=hUSy|Z!BnR;WR6^jDj(f}+5Pzob4r>*>|MNtI8&>?4ot$M$G~Ysv zMW?Xilf1JNpCc!D0nKvW|o`;U5bDU44?4Nu$DFCFl#{QK_< zR$($LTKf9>T3RgOx3g`tGSpKSMzi0yJXY2;)NbI7I4e1h;B(He**p`8I^GG0tji-b zAVoq9q_g!xs;%Qn2fhE=d<89;7xg@hI~CoUFOn)Y#={({=GQ*1WODu~YNb{aQ+#Vq=U*`>g_1ores>U zruw|>*piNdOprXmwbYk+?ocY_Yewx-xZ_b51DT5Wj>4RLFrBO5o4xyncj@rWW25W1 zd#*ai-Sc}s{e71OCaI!ghYa=SrfuGz+z33YK>Y6JoZ~SK@T_!ROLiv5Ug=KXap)Fp zn`mO+AiWq4d&PddW<7-}M@~>@(Lk)#&%Zo*c{q8b#`nIw$ggA!=BDY3|7bs~Bu+?3 zLljcsnsM$BER=?YZq1U!r201p6^p%=#?6`{$PCKPcXjIK`aAa~+eG?U#zsdo$YB${ zQulb~n@yWipyV^zB#Inuv9XGWc;3ZStOsl=9Ba3Uvf>h)w;YCr5`aDwovff(t>EuD zEd1V})DE&q^01$&l2Rk}YEAUj8i>z4!OV(6G`^%8??k6oI@L=jLVvNV9Q=T3d^Ggz z>=t*#Ga%ttwFd(Q(db$F-rPhD9c9IL zmjcG$q;7m%4;1=hbF4DYaj+Z(%S)j^2kh)KT^F^ms?M(SPywk|59s=Fd(+5&wFe@9 z&7BK*GV8cvl|WBX)WeoRMIUy?NY z8D_k>EbF-o`Vrh{?Mqi=75mw68y87K#zNm7d?%mh+Hqovlp!X$da05>9^^6%Z0o5m zo$S#;HkzSHfx9IOuWQ8Yx$170IgC_-qa}^g)+O2|^vZ5H)!t{R5j@h)r`^93{Wstz zgn=^0uq?R1jw@DWU8TA>l{YI&xO5y4QW1SDrEx;x72|cDe%(wx;Hpx-|}$ za_WhlBk<}V%$*STSTKL(&2~)5d9WD8E;j5kUm~mI9aN71VgVQ~og!xTwCE{B1+L;e zjxX(vlE90OD2%bEunqQG46Q*Z9=KaYs8Z_GR!Wc$9KD}QD9nNVXd5ihw%5vPT^GOo zDW`SpIRqn>t?^jz?{$0RWNmu|7e*w38VbeW&s6RFVoRyxYvJowK;x71?3ogEea zykI+Uxi*@I8G}c8>Obgy!dTds+-6?J%`|={;Ea)ZPzPWK-m)6pFpg{oA5Oa6Vd(Ky z?10^^1_Bl1-6?SnZ$aW6iE58|bbi2m_JapjE-?;q_Cv~%9-qbOu^8$cQ{dM5T~Y-x z)zeBpb_6s6kzZ>hR__m=jnlHz!5g%!ytpl|kiHY}L_1M0b>{{M8xKE@yWZ6XO3hGQnLWY;2_co0cn zs&p$Yc%UIGvrYui&MwsWyu23uNZXp%-k* zT}o`o^4V(gMzJZH#z~QqI--~p)ch&|usURww81UkeKzZaU1HMx=s5AeO!a!V*GG2a z4(8Pn!oi9F$Ki^s${Q^i<>mcv>|6ZP_N)&VbtG50Tue=ov1p0CVi4@HouE3UytF}=FH^H%r?I9f^yS+u%024zL#X8u z)$;XAAnAKB>N{fF3hUZR*E%jP1h=!g`$51~;dYGdG zT2r?geek_rA@sxd!PoQBlncH8@gOUf3PiQk*n7fW_pyR3Qi9EftRblp?rW3CA7NRcLODUIwcnGZ_OvZPF$zi~EPn+|;C$G`e z)KtIUR4N8!81mBnWjG0?^Urxxho$Z7SM=9M*5}9_^72V?u=_$LHi|NSG_*#lbyehN7 zeaG`e$BN0)q1lO7L#2-Nyl3QjYg!LuCm0!*O!Xw@OO|%X6Fd^`F>O#!>uOcT!rOW z&6uM%+IZ^y6R#0*raocSOb9`qcMKe=B5aGt1^!r$OWj^}QopQ)%8jf3(deU)oFR@| z0>_f=Imlv8wCbCykM_)X1`sXsrAXCIgX`NJM%x3F=g7kAJrl9-fL}_yXfh$ zdM1R{pwsz9nf$7%stnq{)M0XaHr0+f3KSixyGz_th~9FdGL$JBw8!VuR-#wGjf`+$ zM4HaL)?MG;>>F!v^;qy*aOIt&K(eXeezRW5%YS^lBz>M>LZE9mRbN19?Skehk;+A`&8q4wKf{Nf~7#MuvdGKV%z)KZt@ zg7G(x{YeG+X<|~06mR`{BUU#{O%B#>Xvg^YvVn8IC=OB4e z8O8nn6tL|c9^Q)Ztd`BHSPetBc&N+!zXf-CMZ2MZxuMa`o_s&>G5Y+dfc~nNnY!mX zw+A`Jm&C~K9c)&W!14=hKw0IN1zZ%)eD1j@8Y|G zT-w5hTYSO24205YAed3|cQ;45KNlUTS;1IUPhEd=7kBPZUd0r8baZsUxU09<1E^l0 z%>f5^hr7BLlx9e1opTy%X=wowp zujC-4sXPH5)Q*(vJ(inoftypda-MBt^}$LPSi@>&5NwK_b-e2f;hL@N-{4hWA0NdA z;WmI`{Eat0u^l{cK(RsS6=8dXAWN!tO@}1eN;tacEqM#)OY;3V^QNTDh&o6%7}5`P z8e;nN*Sowqt0d>!_C{+v)VVo6l@$VjzCSAPSyF0~kJK?Q6YlVvh@E+;2i1Rn;%Nwbsv^loW zETVkJ=#8D)C5eFUIgMpa_{|v*(5MG6@3Qd0U=qje-H4J5ZINw56OoB#Mxp%MpQG^Yqn+ncAHGE1d&6*TY@}e91u>Z;r=V z-fj1vR^Vdbg$k@YR3#4FJQiS-JC({TOm5oYmdhi~{CJ}t(YrV+@3m@QrpEfPThyMY zT{^nH4fbwVEiPv_jn&tTjEsN@q~-2Bi_TWP{LVy!;$6jdiHVC`Uc1zKn>cP4a$DJR z7M0BG{7qG5_QnyKwO`ziIxXZOWu~mkf=NJ=wndUg`HKAvfe35&} zONKKtSfq9}byqU=qkuztq|EaB2?;Ff<)wNdMIahwymP0utk6a?^v;T@udPCj=C6qB z!{9$cap9K}R8yQkn3Y#us8ckDT5$=9c)=5u zRh94DUUdIhRJ3 zQNNL0yV(k@4Pa13Uj#x0{*$f7k`JXzSpCP< zJL={pYgtiA7C6bI*6xgl?aB74&k;Y^S?%0W)BU}k8XSxuija$FwDbXE^cZ}Qg^K6sTC##O5AKqe->fA zQ^ZrVp2UDn#)B~Zhf5tH-&DD%VH@Qs8L8Vpt@1Z&be{8#61I~G-b-OdZr{IuRFxVT z7&x7rK!xpfrpHw$G#gGA2)z*X5>pU;;+7``<5VsV6&9nvkN_<8YF+0IH1nIM5Ix=8 zLcseHR$6hvi`aw?qUY{P2C;fMW~?5_3bdjIwVuLNJN}YsizIX*3;H$o#i&d=IXcR) z4i#sLs6;FbmQ;zQ^KljDpc{ESh}77 zt30Loa{XTSDE7SCv{HW$shF%bYq{+eJYnN=cu6bC--QGZwk=WdbXz5b?76)v&d}>7 z*k&#~f<$&+Wqa9}onI;CBX;PiZGMfIz7b!~=x9J!1V`rwf5PrmxOnfBMsM+8nVCnW z^97_vVzKU{u&ysqEZSW)mLKi6tI-t**uJS z%t&$>L}k24OD!lUKpDGG=jFrJbohFb+7=|18V1VXg)+eN^4|rQ+V@$CwoWc*$Zsb| zX1nA$*3{JeN{o6=Ga~a_tw)`kIG~If_b!-Twj;l4t#Z)wrlMVIR;#rf0IDasY99>> zJ+wDL+Eh+n9l=Aax|$y->+>F^ukPt-f16At)Ru@fh=sw@vQm_~ZRpd`J^#8@P#Y3C=k0=Ak4JAF zg0nZ}g6qz0sSMk^3bDZznCfcM^Tke^akbUdqSP85{ja6-^N`OE7W2Kl$0_HxG20Q4 z=lnu`b1Bl63))Tu&%`A(!z9J0?i8XmLiQoE~}ed4JD>c zT1Fjqu_DEjRI~2CL+%rIu!d3_?IYB$O{b|~T!8AToUE$Uz!Z^lW$>d(kg#?N5$WI4 z11GwHq=2x0pmQH`cP%vVa$M`G+0NGowe}!_x?g>suv-wh-CEC-|Hh%zWkv7W?nTdS za~-cU+8kDW>K<*|gEL3^pf@}7p=-tPi0AI?%gb`k^Cf+4+P;Eut;p4c>=Zetw+^^D zZ(tRUaBWXF*|2CtO!$qn?5@Fpbjwzb>mS<>H$n&LzMAYgtS22v!1)ulrpj!@Io3L2 zPOIhWK|_mtVdL}(_p`(nbt4Lmn~@wq>*AyZ0_S&SYR=ojr%t5~YuG;pQ6S5rl5BgK zzr{z~@bI`^X52Fl;oNq2h8$Aos%Px#b7{#E<**!yaw*26M+3Gdbf9n4N+vbmUpgzo zb^2RczW=2_-@|_^|+2ikuq}`^!HOXxj0D-;l_KRB} z?F7*q7j?SnD3_c}>zU1i2cQs;ZF9Z|%oiu2S2)O+us&D$B5>mw7wyq2A?b8XwYjYD zYK{>5>zU-2fwfcOY<2M9LEz#9eZX%P=i6_|B(0^^-I6!&El6np+_NQe%W|jRxS?rv zD^L|U;j+ITXYugoKv{>Zf=t@oX|D8nX**I6;SO6MMaOr2KHIksz66-jvd$r(s#}MhKY!l67AvbHv`?1v0W9l&^a+ke~N-=7@1c{-?bU?8E*GDZ_-*S>xGT-QJnqNt?gdTK`>#+&uZ znP+!|goGqyWMrsc+>xZ|X={7?Rhj(S+SJn5C7+~d`*_#_NA;mnd)U83uV0t^H9I8L zUwO%l7F9Hr{>0&MpBbFNpb(r(jdCASsZ=8Vhi6)}Cd9TJ$s7|C6TwG0(H)Wct%Xnw zkJf|}y7PtWl|r@zVue`L=EjCsVBoIHuBvgmC}M878#;`AnbzA~xUWpgsAu4LlboK0 zoR#zQl1t^R%!8t8aQ&6)k{`Ib`(@G;Pm~T^3Nxq;%%=JK0r5&Y0^ipsKKNHw4t{tzsm+r9#Vs@0#)RiU z`oBP?Y}M7(aR>Cbp>A>sv$vo(PG7_S4(iqM#n3(nhh~M_V%NJwmat7poc2;Xa~BsL_#9VxeLGNE<7 zjXeTgQ@w95-S={XVR0T1-}rLdHWh>l1$I4k#|o0I%N0)2vHn)V$3jz(?H*Vm>wH|- z2CQl!$32o!yMhsfc5$=I(kW(n*J#cH=RjnL?i{w_82p{1^jYPXzSE)dQc%hfE4*SL zro-Q}u(06TF3X#wb&0jl7_16t$Jg&0?tjwJch&1jPQs6W9PUucmuLMkKS-KXLgw=dT}k zN?KAnOqb*P3k#@wdHBNpcZ!+K@M#~1EBCFYjg6UeYvgHz*G8Z>6tZA1RAI8Ika3;9 zPcv=X+1ZKVr2loE>|5vFAex@OD3fEN#_(ap)V^uGXtGKFdG+zC!fEXFby_~sZ*qL8 zJVcv6#$x29#Q+-nfZw8nEE;}`r28IqwO-X1Wl3!AI2qO1Iqbsp+c`ks)_-q_%_h5V z#RwbShky-S{#>PflOG}fA=_HbD-=jZR-~|P>d4{MC&HV!QIM&kcWkh}yV$EMz+9Pc37#z{(`|yEZ3-`pOdv z0>=D%bbo0h)0s4G;CQ)%9G-7Wh^gKCSK8>q#}|ZGmoN-q1?)qQd`6;hzeAx1Pu)de zwEL5;3_H{5D*VE`X>aE;a{C|vZr$g;ul@HoFDMa0RRfg9eZ$^kPw&SO)p@Q*QV!{) zIf=^>m}tJ3z444oG|BD94_e)k%-7uNMH!e6KdoEezH!L*7qJ^Y|6}({f7PwmI}jh8 zxvi@rvQ=r$EYnA?2pvf4ciXJFWIaDxDDN?8%q4eN(}utWN0QDv&mC(4zf8$bzVg;h zqu&#a_RW1ab+bRE&I(wb39=aA9xrd_Rza!dcCQ=ifNhR((_IizbVIT+_qp?74x3yN ze&_>lqU)cQ>3i^wq5gw_0e;n{+# zm|9$synoe+sw#-TDj)O7BUX-XR!00fIqeTIVN7%$s?y>49t5+qp;hSVw!es#$H9pA zdFbcn*U2|Oc+^^HsDx^wHC6DR5+w}#E~XzgndhcGmyaKObRDT%XRQAwI`WNCfhgXy zI`*FaM$@{>eW&5F-xHBlkQ1;pbPhJt61k?Uxtb^yka&R3&KyUo$g7$*B8Gzn&h`y) zH(7qU3L`Igm9wUOPY%kDLc4c8pVq;44k zpgnEp=a~HZmSi!gN-Q5Hy4Okk6PkJd@%=b1m>MkK_J26~E1R#I1t{OeFtN@@6p^Xg zV)bhte7OC9fAVvJ$n$%>c0cyhJ)UHP_iVZyJoxy5h3rYm-)qCaqowMc1n7Tv z*Z=zh9bN1HZbwo0zlpMc5cp3?=ihh!KR?y0nBS|CogxA;5W`8kGO?sxa^O{inLkY! zsng247MS42W|p9FiV6Pp``G`X$>{D;$^7RHXNO94d=BZ>Z(RO$)sGu#@=O2AQTKm! z88jCpI4+y~=j4wWiKLwc(yw#1OfIYZ_CR@j{U6VgoX6)5J@lbXkA5c=OxHi(rZcJk zzxV6@UmUgnZ=UMcz09FQWa`RT8kCxzN+IdAOpZ4+s4yMTy%Mbnrbc|%H3T+qe(0+I zRY&>f4(Zmz<>>Ak)HiTPvPInj`7+kHa$22sf+|AY=i`a|ESI<;#LOe+em8mCgYxqF`!B%|%@`F6Ow&_FmA=(WZ%;20*Kdor zRdt;Hb+)?7AHMWBlp(^Hh5W@Zj~hmj6;>ozyztkrEc!?0ukOk5hcL!YU{HIZXvMBBk~7D@!u%%bhe4!7M&li-vP)EfuY>%4ZjTA#Jd8swNOvTw zgoeyjrkj~nVlg79p~CBkZ0+nx7qH8uXw|+~qHkgeb&9~w*yrYstpFS~Q3(mPsCcmJ z?c29Sk?IW-Gtt$|eZQpK5n{P{gqwdKdk#^^TDn33w{uBpCHuCL# zf!IjSP^>nXtx3pAiA_~HOhBIh25UN9IaQf5ApwN)S&7cQndZXaZyT%@eS`@KIpg{B zCBc2`+fjyj4%^L&+?J&$p+ey$ z<8UhI(xgNWn4Ain*v4!h3Had^5vfBHvf^bqj2D$9Kr%V0>3y?`t5X!*QU_u!P6d&u z51L?7G=_$PDrvL|=Jhpc)|5LjE*19$D)WF*DS(egv)q_+KKk4ZsebVd7Pg|(`=1cK zF)kIl0=EN;zY_hzMw3-aUU#s~2IZpoV^jx9?N8l4wm)y~A%D!RHXc^bB-@!v&h2dG zsH_S2a0TVv>m1psn&`Z_ckkc+E-2BSwXr|OeT{VWwE7r3$WKi^mXz%=iGeM{Bv%+A zqS_Abnf!6mgG1>HJV7X)H+MVSshd%DvSL^tLFfy+^MHdFfg2*x@NNW8XzZ6dO$+BCkvOXf|p>WQ%P6^6(5mki~y0}IX6 z?rMT+&~{+!q>HU>m}&f*i6nFg>-&emvpR^4HIGJ2y!-KDW<>QpBzWMDG{#7HdNJNmSB7C&uC;MaVGc+@s&x^Ugub&im z_qZJ%S-QR@n! zUezEm=5ejH^kPhlxiDmY;ogcvg&^*(jkw3zS_sViZ{O|s}?Zl*ogzoD+bG_L_ zd4C?n_J?x501u1@>W~M5gQn|o5s0476NL2{6a*&!9EUI4ZsM@0$~<4A8yF@!+i0v3?tULsAjiHtIHK@={y*Mh6 z*mj#zjR7gJ>^AG(!g*aQtBhW!V-Xcz0-P42wkUM(K&J+r@e;z;-u~W&@o@Dk+ODPE zgW|;%n2XHDb({7ywC*+o{^!r1qBi3h+>a70m8~*tWU5s_HfTm!(9jC&`WF13ucqsj z4So=w)C3z{v3iG>n)4hS*lXMKTx9w7X2o|fz)QxdA(s$y)6+thvJ$%ZFV_DFmFY~* z-26_(T}s#v)27pH1Cu+GHu@rmyon$5G(&(^=xRD*W)y_dFGXf*^So?S!3b~D^S7v0TSQ+p9=eW< zY+`B5oPAtsuUzscFVD*terdB3rS{h?(4U;lxueckZ7A5nWd$r;V)m}^Dy`X zb7Al9G-=kmSx%9LO$nD`&SqpOhK6Wn6{Vk-@}czZym`Go1 z#C}dosiobAM+tW27!_2d9Kx??ETkuSAAEf#h2#y7VTq=O%EjZMSUa(^3Ovc2XE;6B zTyQrh3noy!<0X=z{T=9xZ`)Cn1i6F=(AM!?lL`Z!n<2d0`; zUBwbP&Tyt!Bl6E*kg}W6=pz5z!*tm!kb2KO(aK$8Vt78;b~#1` zqdy=2vTYz1v^KZSEpq56o^3i@6pABCMo3SbdGFdf*nS`LIq%6}JZwF&XVLC_GjuGvRIq)LLW->wX01EbivT?_WKp zS@T4%X|Pq_yZB~|PSM=lt6bt5vziV^hJJ2wnP&*xI=(l};SpDz=js&{G*mxm^Si6L zKPkf=5F##!TNT;xSNF?*TiN1VN{*Z9Os}S8%j>twHgO@`d(d(;*8TpRO-*vKj z9u@TW^jx>U(ySj&ym4$lCN%WJBMV2zeEE}Z>>Wf#JOfKotgIfw^(N8a0{cAn%a<>A zR21{HDlkAXxERzEWq<%8qo!+hGh zhUEXxT0$q3d+tzlNSEj&)h~0uNgFNLkv+xEp1m!bqnTNr$08O~YG<%ad66e%{H4!A zREf6vGJpNdkUUpzs#;W3O?a-)@laqJwy2gUw--a{r)`Z z!;>%I;j5N$8G-~&qs`JOQ5j)j{38FPOLPx?OlwS6gQ70Zc?MZs&!1A_`njoTXmChL zFQY7W}`nW)N;_}G(BkJ-u#Vc_&%M0T(@PXbZha$vle zcmtz(SgTegv$FQCVbft=w~_l{SDs`=zqHAZWgm?O$!paMpPpNAM_Io@T^*NzQ00^M zxSrxN<(6C^L%Uy&8X6lKLUNrr|L^!%{-CDN(m;*-EOlsTZ>jUSkGk}MsLgAJ{;WOm z^AEl_tL%O@C>4T2gDN;hOS2YbJoV8>JTKDBR6KcET3Y&Yj7!1&9PMmZo?S~0UDU#h zsXzI1rm05m{GZuEg#(+wFDblCDnaWc>vcq!I%ePb&2C?t_ap*KCKO#(Q~eu1^FFl5zR6CS zM{7Hi4Cvp-_KJg32>A~$UUp@xDcmMY*yf~WM8A9*iM4=@p>0JUfoBg>zIw;(h-;cH z-qxjVMwLgF{8~dw#3xiMdFs1w3hzy!djxVq`yPxoh)8E>PQ4C$C6+bPhU!QdObEZ$ zM&Tkx0n?8^ky{1dMUzrzX6|!7(g^)&KRR+(mH94me`H9l{P!N-xUlGtLEYOzpQ4M9 zx5ogwW*dY$1uUQhES6#}s<6Gi{lX8I7m%jOAEoNy;bEDGjx~)Zzw7=%+%0JF=TsQ{ zdbsi8)#|gKEZgV}Tx`CGY)^g&spS=g6;TRi9=6$%YTn_(?FPTO|;|Ku53CyN7NnyCxlpc+q3n zmk@vHLH2__cf%$yna*4heQ{zRG-tqJEx=l2RuFIBhnZk?1=p}x@6{Ve%h_sr`lOPqc}N*zKNxB`yr37 z5oelgD?xszcc`x{dey9CET4u}{XPT^84LY};_9lW(X1ys1%8k#Iy=)-a#4pzE*;~G zX*E5o)mN;_!(t)D(%f(@6m{VE^V;AujOPn7Y@f_mI>gV4V6zeL`7HDvV)T=({HxB7 zyo~9J&YHU^KTkJhXc`}~D!Y5CNjI`&u~QTQ|T z=ebV3_n)womn3Gw#kATCBeJKEYr_{CMbocL(ZddZjvG{=N-!50SlO`yUf(`^UeXc$ z&o$7oJ{OFq%ef{hd+@P$X0DXpr4zF$;f;^N1wkCBZNSb-S-E;juVdXcJzXPDqYoSU z?aFv>s*QVLh#Al^xNdWImivMCxma)aH(%KpwK7jP=qmMwzD4qBl@jc8^AS1_dS>Nh z5s2XpW(#X#*9wAIsG>rWIdYEdAc6CPa1#9(qSw#$G4>GV*t~4~Ic=XDA0Lup4-p$u z7hl{P8>_@HaVMx;H;2AYEakZSlq;@h!II}qru1@99=z3QF!SMdqes3N@{KU%^;#xI;TM8be?sh zK=;J(iof8IVajOK>jd{dggKg`GR=)#?}f=eVCpK&X^)6_u@Dw=;z(mABD1~yXztXa zer!)y7w8FtRYB}%tM88G!1kq5Tm6R+t_+szN$*e&L2KUFHcyeG%t`QC3g_EoW%Gz9 zVZSMmNF9r5o&2g@DjanOFaiSElF#h){*QHaH>|9z;`3~69hsiK)x63cWZK=$$iXhH z`RQ9`^JjNA52=WBMIY+sC&?b0>py#Qqi3h55BV8K>nrMgyN}U4-8Na+2A^W?wz_)c zgoIj&&8ge=>WdJ3j`!9cD*Cz8zfq3TGnErgxnmdFl--jxS5a#5g7;O(ew@6VT!Jyf zQxj{ia({j^n*on|_UYtvhggj?O0@Yg;Aam$a7big3#PEEINsl!4!_X(w7m>6@WLD~ zVCI!_%q`3~b13s=jwt?_D%jh71o{3^+F$lIN1kON2JHBgv!X9o<_(o{G~T#}Y0UqP zGyfjp?;BuOPWM&E!A$^NYF6MT#iD-U(<{poeS1UP{Yz4vei%FH*gF>@%|)M?n0xgn z+FZE8oo=Swn=jfX+9o;lK$*YC=4xDaGK+=i+>~-wgouQwmwA{<F!c$BFO{D z43l}}X-Pi))3^DxfueEQ>LY*LEYX~qBV}hx>*hWTK5%dw{T=J><~l!c^2m$fFL&%a zl?mja;NW+$!{O8iS9J~?JeU;p3Wd?+oF+L6gh`0XXvl7JH5N8o~klhdd!#7d%_1*7Tc=xA2lyz>o+=pKhyqYDM@g}R(=%Dr3Bwsst&iq}TFaCo-IS)+yB&i_^CKCJYEAx1MO z&lgAPkp70XMVp>N1EGmnnJ4eN|6zj=0|G!WY};3G5s6+NZe$49Y@4ZcIEB{Co0D?z zw;^vNTCB$aWw+Aw&M}F+xi-?u`yvbS)Q5l{{r&wL8yiWjT-WI^0{CvX5okJho+7gf zjQeSE2cf1bufCJ%bB`SHMS>)0z0h7lzLc8(&dDYvZcetS7KT6cB4a*;rKIVtWHc z9uNau=vzOp`7IHh*mmtOP(C5{^XNUihI6%YhKM2EmV_|(M=^^*WmWY3&Ioc1lK89U_ zE=T5nB){(nVb z!yA0=pGsLi#gymyey@9i67TLQ;p0?)jt8WvHFf^mC4T+L8TEqCY6AfbRn*_M-IYo zz|aLaiv;fRO-iX{8a78pf>@{|?U@t%&2OkX@JRg+?xF!KAW*<9to(!KZ=|3oAT2h3 z25eZ1kK;whmo|!J-G1s0i-rqnCZJjvjvn2_5z4_fq1pVMrI*LVeFY6E@)z6H)kWf0 zTO)F?#%ryd!p@UNpoBr9E`-KN2PfP*Rr)FeFJ?)h14Vmds%*LX0&AFv{m``V&K@SDs!h* z`KJI>wi@j~!s-#UZ6OQSHg@-l^ z>@9Pm7DXjYMQv@aIK@yP^B|~DY-mjqT=xqc+{L!}=Sk97`Vvb(VkX5J;Eb!Zpc!%~ zGH~mqlT>1xSjWWuf2M5qM`&Ao_X^8(r^mTElipYbbdTGoAH~g;m#}TWQ#HHqY5Gli z_R(95A&uKwijPV$eKHIe-dDw*x_I%~_xC+g5k=7>b`Ge8losm)+!1q?3sDXe396Rl zskVE1V0*7C-m5_Q<<}hcc1~Yexk+ID3p)zU8rh`SK=w!Aqwny?XsWb%D|>+t4U+fm zeW^DouIav@z_2zZRYj3uO{_NF&8rF+*!T%V9t9@ZV)wa+%y%)G;Z07^{cZ)VO>3p4 zx-uypL|PtfO0>Osl^z|4G&T4_A!k@a}8Nq|JRhD)7>X96rn%;>W2%I(2j?M#A63~dSdQ0 zV5Xjq0p>yJ3P_YKjy}RT%nwD;`eG1emT(| zn8iId?kTNSXyLKkF_uOs1({tl(0Z+kIYQY|6+FCGLxn-1OrS_#c6M|H8V1%xj>HYb z15#;=UR!Y^4XtZW?CnFYQ&7h5QG>MQ0S;?5{+QX>Ss&=l@Pf6^ALK}~kmb3#^9>x* zismw@j;~NDZe0DCox;=4Zj*{zopungO z%|d;+wURzV*LfE8v+jI`ifYgn#)fp$DE5;|cCd8}93`i$&*~(vQ|274RpWjG^CnkR zcz8t65fevOm=wtzO_E-V-+_f|hiNEOrLDh-rW~#z4!a9;^F!4Y%8F=op@u4XLr7I2 zv9jwVfQSw2)zCO-E_^y{K;^<4waD;rj*cfFAM+rDwtLdm1+mbwsbGAGWUZt{hExg> zl66yIw4|@df=k6&HCVlSWqZ1$29~O|`P%{+=Dq?hBC%u@xMnqw&fe0o@cQ1>Jbw~o z(AW;Cxg4M>65|=v`BvLKaUwpa_TMZ{18IqFOHqFUs4R{Zo1O|>Vk7zV7NtC>%KH5s zj*K%WP3__8NxlU8p|xwLMSjn%hp|}1+!k3iOVHwuI^?+P zVVHma((~{xghE*aY4swar{T&O2L-S-F)2@^Bse<5!pTnaF@k)OQ8{#Fo#}6_nZ?po zsK-P_Rj_ZL3Nkf_4cX8A!p{iypzZrIoOn@tY*-d>|4gORK$*2qP`IbikS`{_G8?BW z@H{s{>@5hdP(aM^coaY}OaY5r&_h0&y1Qi+d{kD1ntiqW`%|I}QSz5Y4Xmi^Beg9= za-x{M6!m9Zs(Y^!DC0K!U zSuCx8;m}jyy@d(xknO~>qbnCbmH9#c&e1qW04ZWYj7}NUlcsPuIb@%@Y_pFcF$K9bd7W@&GhtD_Ol0`~{&|ZLTfpOV3?LgY$!^@==uWMkK{S~^r;*;ewlY-^n!^f5n9z9z=g|@BVnMxtbf<}{u z&N^OA`pTQ;vv02b-a<_NKt%Jr6R>o3UDN9bc<8CFE|vTckNl~B38U>YD{R)U>SyOx zi1Cv0_Y=JO$8mR&$fifU$!=Y}xdugTdL!Q==Y-&i)4xFzXQVSx(6sR~mq=_o6O57cP_UJolB{D=%*SnM4rn z`R;3HV=po@Gs7A+$iATTx4!!ti6Bpf$WcMwu@IELoHR`$fm}msPwqU3UUbRtlI0Vy76WT*^Fz=qvU@zZ43wWLH8WK* z!CXNy2}k4U_sGB3<`*A!dWJ;-|JYjeXR@?s5DU=2-A6XLe18@|Jd{!nO+9uXNluf; z7=Qdbvi|UCucXuW?=T#y_!G=P(2|O|o3S@ar9xOjR9D~xTg?K1AAHQr9ZW5gg@94L zICl)A*rzR=Ai&C2yZi#;4RMC^Ig^=+zy;uDCUg(XNH{>Y(H#E8ZarfkJm=4U#h@QF z{-E`b=NgoS+>znDmw`9c_>9tvwNM-RLrzSt0w4zKQ}|*5yl7j(;K@ms^QNjImP1hD zO|e1;*(Y!xhXpa*s%yrq(#*C4gqJ-ilUy^f6Et3Kmz#{%>e4!>h%bhPZXI;_w!jEr zw?3?$8;WJ6PUBAwV(*GdMYzJgCA11H@Vr-Lv6RL7$nG|vH&^C`LB}bKW-|FAM4cKH zz1E8*qW;U>gM}6%|704E-Rqo_YN%`1tzbDwywb{G#UG{nb+pjiHB(y-)Cotz2gu#S zGO!x!##gHVh6PLs;RF!5kDZ!0jfbA2Zyyz!wF^ry*Hc2WGbvbNap_sF%^M~9 zvJMk)AF^40{VtOU$Sx^P z4U`d(WQhWb3X(Gl3I;->A~}j6l7l1#v@J!lO3n%j5){dqQb3R_SwNB`0m(U^StE3veEdVqw1PvHgeMoinmdILj*P672$=1A1|fx%!2F+ysnt7j%K(j1 z<}cUg)>f^vR2uZ0V}5<(8sWg|32V5_6HeF6ie8$ThHH$Va=+I^FmR9>b8LQ{dZMMi zKJ`QG#;Vat{{tB^s44AV>e0UN^)6+5=s96eaZ0hym@|6CdotpQYyBg=+LT0#9Gujr zG1e33r>3#Vrq=zDUh<#UFgF&5=gA)Bdws6>%gkPRL0xQvRgJ(i15gGUm!IGAS^`M> zyWz&${*~;Yxos%-yni_}J9E@mgja4bWC*j!gTk8EI%~hofQZd^>Pv%P@UfUbKYr{@mS{+(i9jYT|R8lt?DDW;#TARx?<`l=f%^Jd+ zA*Ly(;o5LrmD<}y>x=5c2fSEMhqfqhGv2f3(B{p$I=>qPIb~bBxQJTh2h&l>W(5-+ z$l4D1qH_o^HFIX?BJPa}Z8bDDYFUcfpOKznAb!umJlWd|BySi|%s`Smzw56lPUvG0 z3Za)0D;JspnIVGY;^@@NE6+_$w=QnqzCA@z>+Ht|>fJI~+-Dt^J&vCcty`CpW#D|i zxva@)No{V#<5LebO;2%fY$xv9zaN=mH<=)w=RP?(?e5QaHFg&>Vf)L(yu`QZrVWiH zJrmECZm`V7;&S7C+$xGH-{#-g*qBVPvijcF*9Q+U`a5D$=jML5wxT?8a&vup{n(@F z!tW%OZ`$M?K-s)`@vnd1YB$oVbd`sX^rx0qhTRyI-4482Yb&kZQ~L7q@@I9=Lh9m) z40Kdjl@#0=zcPvK9*K;Q-Nn=$Uab7K&76D#O8vFc-B9j-q89=(3nZ6z5F480jc?te zb#6*C;#2IQ8j~65?`Kj{db{;usv@0?xHxINW^I|%m9C|!$uTIJl7cYMSXo=&n6RgM zNlxOl)~#sh>Z%T}p*e8iJpCA)_0lq!+DBeMd7Xw44jV%5LH%7i+@x;=NlVL#CuDE= zwZo2F4u{l2E*$wTBt#@VSY0I!-yChrO*%w=k(YNOWSq8y*SAbx*jiOZWj<<7xt^}- z$G00wzi+Zgqhz*Sjqec2a&x(JY6QP~RlApWnyW#phP(HcQsaX}t()ijrrK+K?A@RT z*x0h)RFwB-`Gd&pF>{Hild0MtF&18l;KfIJ59bePIT{zk<6TZsHZ>6UorERDJ7%pV(kTQtWjAmfFR@HfvoxWukPZ$!~Q-)`&y-=Ew6_#^6Mz~ddXDaqFy z?@?hE^=+wz4;$qQmAuT!$vJnJjr87Fx&Ff0%7%|?LOD*>R(pgN7Pig?W5nUd$Y7PI znu-c-yYmV5&&(4MjomO3-+y2qiQs-&`YXTKv(O7`4cVDsF7jAR5S++Y%q6FL%YRBFA6R*Ey_FzBe`x8EbA{m9T2WumuYKi~lo^m8Lf zG6Hl%Y{$I41N;I=FAdkUE>}FbXSirLaMwqtbV@k`*%ZVy@$ld*nEx~P*h!7|hi<=` z^K)6AD2*zCLFtMc)Q%Ymn|e?)Ds7rI8dSl-69C7nc4 z{6!@xeyg}QZ!XNG;cmqnad7Nf4iXJ!_*R=0z3>Q1#t{sngeQrW^DPUzTkR|YU!Ief zZ?DX$yn74$9%%Nux5hP$MQRE^P}6`q+%-QTbzR-Fst&3R9WH(fQ|Is4*~Ln|QM_VZ ztSiMGGRybt{p6z*CO7H9g9rWnVk}I@j~#Q13XLPQO6R=JBAdF{Eb%aT`0op37}|rW z+|6_nx~RrQ3boUkWkUlNYSLOaukE9uVJ;i&X&Guvh<<%^uUqlbyX=@3FAh!JI(zox zon}q-dt5BJjx&1|Z$Pu%DLHa z%z{1?i=P>^RaG6}xugxeB67Z18+yAxZgEfohE86K9Tz$1b6K#aL~cfgZQZMQh|E{Q z#;x3Mvjo@ZFnx~VyvHT;eZIRc?W%RQn2Xq*=_izjl5b^%Q8D+BgbS3~cnqs>)A0&- zZC8GVJ(Ni9$iHjn7+eYau8-G_lL*_fcLrfv2OTFo3@d{am6d6HK1ou=5rlUsj$EFI zx+n)vVOnz&3Uiu7C`8&-Ucmu@bJyuW=5N2}$L6x})rHriG^5m-mtVls0GO1Nrk;y> z8)@6#sM&%hCm9u$iw-gjrBy~^(Qv~49(2C6=a*{Czs~F5xY3j6U_DS7 zy!UN+OH1tphRVDujZKlW0Seeb47=Nr4dVjJuqK;q5SL+f7_sFG3r2T4AhHRi=-3z))j=M+0g`cPHJLrKkMY=q_?flSh$Go5jKT)iHTIiV!fA# zB*=#(*0yYpaB+5NTdjI`Pl_-WA)wZ<9pI`^9AEtqVkS?FE1t{9KT8Ct9PnIMTt zFicTNosfkV|A%9D)gA9T%7pRzU-AzKAQARtXP>;QE=jfDf4^H;7(volUEQkd!`8UW zO!GogIYILHep@jzhm+&kvuAChGsrH77=MOxS$^+sw*NUaBwi@uxi^9J5y8>X(OZAK z!lWuB{q^gc^|1=nL`=E@pI8){!7OToprxK8{WL`x*Ht3#^i(3&5;Xj-$_pJOJ@vgH z8!mjaBQG0q&~wszWyMK5tDE_8@6F~UZI|+6vFBb^!lMT#IbLpkN*92j$jx#;LgC|` z^k^1EPeAC-mUn)(&766{=P$Mhdp)R!LmRP{G-EwPb3z4gxA?~`EGLNVFb8*zHY$jo zc3EAGaug6Sl#3J>)0~29gx7Q~#=AZwTsnJJm+Ix~o4sD*yLt#qQVcWi zc7HhC3^}yg4#jI4etT=mmg8A{A2Kpxi3l*=K2{Y~2;c1}f~2;M%jAn~d)fBwKk%4< z4KdozvSta|F~@O^=-k_J1a6leO)bUUuSG?Kg?Cv;zE4f%31&FKe&RxBh{(9j;v&Y7 z3!6R^9+|C`gt_b<~@tT6dSjJ=1+5-Zr++18weSLXeH4r3oWTbtS z<5fhNBn4adJNR5r^ORisaOQf_uX&Eed$JvFXkzX5$lDZgBxF97q;mWAjZml)Q1pVK zM*7LP_u(cHyN+doN4AWE};=nl2j30xWY~+MDg*NcE6;*#h?g$~u-*-4N@$2Q(mB zsu@0A{{H?%5&+N|%r(lKI3yr2N4?rb9dJT5Ox4!KrBlIcitPERv%O0+5* z+2i2g00oX2_@BIA=K;NvrjMPt*00P3>lCJ873``Z>mBc2MJmh!n^`mAH>$li1I}y!jacu zYyan;U+U_t-YoYimQ_`~#R1KwD|wu69tXzk&lc->=FCzBI~PnjxwR&W zc^~vBE`M^Rgl@`%>l7j@n{U~n=xv*Nl=KoeM*HvsooOVp$Y`J2CjENfvh4OhRLoKV zN(9LK&$d#E{Zv*xdX*xQda&e`=U%2x94Tn#G!;-k@A1*(?a6~VeAo=rV z*7cuTXdHyzQEg)2DEs&^`P466Z&c;}nM>UCzgkCKO7T%qdQFMJ$Qf^F0=T0*^7M|D zP?&mJBa2H*r8&QqyltS;WSM46x^(H1yu?Ua(T)p`EP!k5*s(*uX9&5hVfdZvRJurq zDE%S+Qy&w)z+)gGferRa$*{f6%(Uz5$Uk{^4l1WJ{&O-;s2cLJtzB(w=cX~44;RR6 z%xvG0T}um*a9M3Qc2$y!T73FXC?K5@YXtuX2CUgYD(_?;}6Z-df6F*+;j2$K)>u3ZL$lBLn`V?rAPC5vH%gF&LPkQqiq z(7ZF9>^(LZ@z-B}#qsf7HNGt`*iAyq!VV$&hDyio5TVp}uU_$z#vuvAxJo7jLTPtx zHNcgN67VDy6lx%X2k^lA{AX-|U{1Y(=HJVPt!r^UC6z@C!#+ zm6aoH7YD)Kd+`GCX$wV)yd*<(eMRY1uKzWLt+1qkoh_CXJv}|zTcD1inF&I!-B?F^ zM+cJ^=uF5OJzKH5KuHlq`VWC^Nh*x{Ls;y>kv;1f%{kv4G6Dhu zrbST}BA_8gqdEbEa5*xR->8n_JWnWuo(GsT05`59ZiK?llA+d4 z@iu@2adi#nS6BjqICRYg)wy4pFERxT_T$~bq`6?Xb|lL9i%Lr8KYc<@2cL9E9nwus z`}A&+rS@n=j6+8I2k~cnTV0bagUMI1$E@;+?gwkcbA`fdcM#LkM_k4~ZiQ{wUxY$z z5Z7Yf8_8dL%NqOo_Ae|fKctgL7+DZG2kKewav{t(~XtE+GA#%RE=ln zObX^dDIwv43TklX1Zu2?xU0B^*54;GR+i8!=2o8b6we%VszkQej%$LevS6dtfSc1F?I$96oU$+EJeelN9L$u=5ciB*b>)YjX7a_ZEY7sN~UWv1#DWDL(@oi%A05X;k&>$_P-1 ztgLxR>|Qh1NyA^)l(7c9Y$tJt+a4^q2&dT=-0|RWXcfV9PX&T) z28QzT)pUk=tl__T?byW%)3w|?!%aVQ7gM3>Oqii}NT~*PvE1_C=s*<>ZRSDU5c~SA{q^SCs z##cNc&nUiFi;I<>2Kv=uLbZPcK2tf7fm@HK5hQhWyP>tlcVrKZch?r#oiT-6aelA= z&_0J<-hf-L$#ZAuX>|Dd0~dTSVtIMFoANyPN^Tj5jNIk)_@Vj4Q%?gbB2$fOj*ZdE zb_sqWDeh`4{%~-8gl(%)5z8x7F{?UXz=?ZE>)pN*6)oqER~MxOWOflD%BIiSR`~IA zGiqkoxGE}YiNhI`{iWcI5>HBdjRa}8CbUK#6JnYgP*F`UQVN?#j~)?8y&pb2OWZ~4 z@d;UJ9k^xK4$aMAZdZ%Vg|T1Dba820oS_GU14iHnPHDh&H6k$3u3E^j)3(k0ac`N` z9ycsnP)X{AgoJ>3p){wWV5otCfz&N+!b~+r=H@Q*-L8-t8yYsO3ANLs(uLaukp#PW zleUbviHRogBE*S7B!z^8OdoW=9B=~OQhyN9DiT}#aRc&cpFVwplyKyAb$Usa*yK2mHj*-R}o5|vo2n2tj)yebP9FkP(nPy@W#mLy@MI%!6`pT=Tp}mqZ z(%Q)TowXlqn=tEL`n&*N({c0z!38FPCjM&#-Djb>`eolKW`+mzYzCkIXnV#$Yp+)o zLh1Vu@abt^-=R6F*6`)a(+&Yq62WHx=fuo#vkZMF1{Q%HQ4~gMYax=Gb!XTbBLKb$ z2@2ZD@Eei~xh4jKd&-qU$BjsusuAIAom)ngIP=uJ^I0hB+6E9oM#sjeiSRk%RePPD zpT7b-gWKljkOhQ)h1EVDSX#(qYUS?TB@m2!fzX|A9KB@%;XN7YFqiq}`1kK`%{TwC zzKdwt)>Ft56~tm;>3~6s0|sm`Ty5a2GzyZ=Hlod)J0l&b1F#^XKnTgO#le-RuC7Kr zMLL3l7M;znUunbrwKS}U;nrIA>jSue-2)*dWCrGNR zw?P4p*69#LsE{|!Q3yfk(gG?jWnR;4h}7CL`_h$Jp3PG^NlWv}6;Y!rcN7%tR8?Dm zknwoHebgnig$H^n>=8>aRDm|w1BIDtWI6LMU9o5BB!li2ZiAYm#C6W|Mn;3i*WbFg z;-nq?3m}22rkK&n;?CO9Ug+)Mx?#q1|NcH1@wEuCyVA>Qa$$m~Lf3C&2^*z{b-$+! zn$vY7KsLqh+A4%xW0b@N@VW9hG}FW_V?07A^%P@$*fVb&6_v0R@vAh?9mS6LZe|=WK=J+ z7v{EAzyt$fpa=QtLlM2efB@-<+;EY|8jX1_|4U+-cZSP64m=`Y^E@u*)t=s>Zv*<= z-HMZ$l@VgO1(F;QiET117gIdQC3#iMWl2Y zGBc5)o-?;ZRD7zWgFycb6G02fZqu`~yDpka55Ij(h;W!~say@OkzjU;x>RvVyL@jX z(n6$AIB+41nezJ0P3fV;E@hm%m5{^W&I0!I`>R@KfM zS8Wt}Jx@0Z!{Na}RX}{>t60R{;lT-e9uqL{8081l-NzB&5aRDak55QD5YliTw(Vs- zSDQS$vgC8bE$Gr~?$jV6$!+UHv$so+1N=^o_qvbU>9cyWxD$=8xPs7ZhTqqK?82NBD*h9+epHg}M zA~RFKeJw^LkW;(h-ooVWSoqW;vr_P3D3I5O>(vuBTbms#q*w_y8nAMn#1{7mp(-ib z8!2OkGC|7m_pQDZd((d9Lu_n@i%8yL8vO#5_wC!~xu_6O^F41O-FzzbaBF>l z>hpI)Tz~xW2M;q-+4j$ufrY2TrU!{W&AxqM2!XYZ0q_{|(F>88E!j^ZT)MRD-WzV^ z%VKJSeJ811vIFIhf13scaDT>xs=CmF904|}rx>Z}=)U=s7){x)S(Yg8EZZ^** zPuZl7kkueB=2U|E^%E$EiY+Qm#oJbF}m z;!Lowbr)L-PRL+IxKJAGSiAq4CHB$z>n-bC(EG|%3F|d_a$QOtoFshgZ?)&#!Qm1e zWR3111t6w^wX7(K3wIfO2SsHJ+cqL-n!a)dwTYM4#MsR29b!~M=c=LcLAaXD*;GT_JK zap2_bTencB;8R5ij1_l3tZz%g8qr-{UO)nkH_1?N=Gc0mvtU>kc%nrcT3%DL{fR3+ zbzJQyUi5?JM%vYdbS0;`^0WHiAR~-MiHv1DVGnD%)F`npEEK(dBo|uWm!nf}Ry1LG z_{xVcOTK|gVNz0!Xbw;tWLAo@ZC}1v6mDZ95pE+hF*eRLZR5YLFm9iW%s474>ej~! z>~I`Q&*MsHcc(E`xmQS8UUb zPwT|S(gzJ)pHU^P^`9D0-^Ey8DLVG2^0uukmOFRW+|*+Czr@EYI)|b*@BP&I zQ@nW%L`GM~D=fcH!Wk_NAO5`hjo3T3w#zV}aKf^6b{VbByHC$=@_9!_fnRvNwiv(3 z*YU2+)M+4H_3lkULC^znV@mIAka^V-ctK0*Qh>VIMe~s-=g^oEQCZ=6MG}+ODi%#qWJNtzr(yI@Q zb0%r3+@uwBt3vpKSupiFMyB+h+FTW^)>f!r3EZY8qF2}bXAK9#tnr3`uIJw5b7mbX z%@jcY>NOQw$fiz>MfLWrRF8%ySQhe@mX^3n+S=L} zk+ZsY?-A^3fGMC$#T{&7ZZ5&9blw_5^^|_-$B%*H-3c;y0)D~H&JNV)ZW)k4u>Y{; zkb7b?6zT7b&ZOW1FUaKRRO_xsaaAmSp`q-jj?4G(Ir5l0$0=&!z1h@A*bD+9W+?fp-mx4rSZ^#vMWOEut8HAA zlA!hEA}E-w<9y=4c4BW|pOQj|-)K@?oN5}o#(Yk*t=-%*8B9(3&iVeYjrQmIYb1`v zyP#=)L$hMu|H2WtCVW>p(Uf(g6bw7@rat}JzqVlgVJ{~rOPp>>-}pP8r`IztOQQd! z^Iq&(bjMDdu)3jV1Y|a~l81LpA*AAAJq=keGC#~sIy@Ze4^UF!J!&WJ;V+?Ks zN~G$}9ynN%gZUIZ?kBTR04}cC)uE)-#Q=5le_?x$MZ-xsz0WWIv39@PRKl>{)U3jrN8*#TJW6#FxOdJxYp!b``e?`!vjEfA2uRThw7N2utYdRN> z3^#ZBxkqURm*5^)j9zb;U#KxV*mi0CxtmHhZ^X{4sBy-eYxpDmn9s%|2uf5_fVmGP;P0%zEcefsXl3ptw4YABMH&TJ6ZgK2lT^f_dk?q52}j zC#5}|E7h4O;-sjU=Rc$alxJG#mHGb4S3VD~^d=#JgM(va6mHIU=Ui5r*F5JnoaY~o z_4W3ee9fAGns4Rg&5G4=>P}$BF z9ezW7qp|hDeqEi9>z$@udt}FQMWibMIBbkUQhP!E>8T%q1@=X-eHerNmpWA4J}5mN`nYu1ha0?S2#l;7H!gpPCX4d#{4 z>Ya-LHfu-^;cq?*T8+@kZ-FPY81lCm)fUn5#4wi`+cT)9=v#tpPc-?KWtnKa0khH4 ztaDnp-T@~{$X_}0e$o``+rh5yaz`HqpDwTb+!J-)qhKX+ZFjnW$ydVp;{d}&Iwoej z1MMq9I~n-61It7U%c#dTGtc{0diG-oI|p@t-5hx?e0NQJ;+y$#*LNPj1_Ecsre6Un zMbVme7zh{nuFAZU>H|y$l(){#$kF9q?Ug-*#z%OyrTPt&6t`?qJEWBkFs`OEv0xAjjI*bg41Ay4V_PnJro zmc0(t%(iL_rpcR)f(;-Po@?xv+LF9m$@8D86nj!GbJB4;AWk~1{Cu;*xwbf?DC^9w ztYztt*5XLjy}Fg@Ua3guokjO%4Xd)g&b3wQs1JHhPAd{?^~$c1v|ElsscLmhM%=MH zj-y&|DvZ;4u!53Q)+(%xbQbrpEZ^j3V;ca`XX04wJC)=~PdNUpjkaZSlDLeUD&egQ zGA{Mnpv?6|(Vnz=<&_2P<(rQ2mrt!ak$9PWI_HbV_8$PD0>!n&>;zeGWLhaUynwQR zzgcm~Iuy}}GoRcae9YaqV>v-P(y4lZLpeNqh|f@L@^f@8g$alPhESMEo@#Fnvz(>x zusF1<4PAo}o@(bRIzxycE4jMt^bv`Tv{h@!TIk=+pN3nt%}}Wo-dVH_%=YMU}%IwjDQp@`zN(qRlKczIj1?*@n)jRe8teuGci6sL_DA0 zdNOmZwo&oR`|NB=VI3W`{HOSAvV_M$1&RDYDdxrcnPCAE0o*_sHW$otu1%WPzVzo% z1}bAbpAAgXWj-Ub6HXyS60%Qv^W`K7D11jtA(sWQ{nPkWN_tCPE8MBLRItRH)$cT> zz`Quryt+`ZH0sj|Pl8f7{G7fWX;pqKIH?F8tx}Zkmbt@l8@h0mB#BT6Ty0v$WxDzn z;};~>cHU{|eq?r9uFOP2SKx^}7R)<2Hjx_f;mRWNrKBTn=kz9fhbYvsyQrZNjMuN$ zearP}Rvox646#K?BR({!WLca|8wLJZN{K_np0y!gK(8(U77&*o5zy#Djm|2(7-2`| zupWoe>Onr|+0;;JfrTdrP6`W!90`^!SlisZOK5Rq>|W-}m&DuTo)H(`<>@5nnaC)w z)_N%HcLNLLysho*dIwMQv(6I>g8&T(pCU?1ScRco3-p zr0Ac=scfD%L5`j+W8-9S9&}j^bYZNs9tgLSDHo7%`xh6$t6n)w{N6GLrCUIA-q~d? zxABJN2EXEi{b`$2ethtf(B+3lpWnS3ePh{AXL!!*@J=;$oXmJq|ygfeLex~9aJ*PtBlaZ32T+j12-rAKJ}&VBf0T}8I1J?&v!G2*ba z*RiXtGG2(;?Drhl0q=W1_seXb4JEHM%%Jaa{``4-&-uF>ACW`}_tCnjJ$?=j(#`Z1 zH8#k49aN7rrnUSq#MY$YG}8ux+5Y`fyFk5e&z;*L(N`~Rn;QRE|Se9v3W%*?D| z-h(_pulrbOr-vqru3gMflbO5XE+l_aE03M@6sn8rl@tyhy4v;DNR}o>`4X<5_tFGy zI65tDnyThx61zg?*y@OwB1`@lI!KW;e5*a7otLQT+k2(_{20DQ=A+|U{7cQ)J@MN+ zI)$8YRf;h#ar50@4vFV-?~vbo(~z)ZP{q4KgOciHvSn#kSC>lQ#vkR7tHWqzZ9E1IW}%u>wx%@o#MUsv9SZmrA$7;^iVxNIAOmG zR9UPrF2mgXTY7>~xnCL3#f0l`^8m?2t%8a!X8rXCD|6J#?hjf6>09kgnDuJQ*kru= z`}=o$pAr^Y(XS6UrMZW%wRP6#U3?K@4_XAfh?v^-UQ{KAgu8S+@K<$NO%44g^|aim zZhM;BI-T!0YEMQoYh2xfgW$xG$ z@6Qo6+q||S!CmU@2f(TCH<+WXo(<3Eu;oY?Z+(xG9#ECFr7yc`z2k<5z7-5 zfPnOf4BVu+0-3@a6C$4+#H-OiX4cHI_(-$5Y7L%9|LGQUF{T=aL0?Y+baDxj7%Osd ztdIGp9{C%{@Bs~N8BKzzBIcY^j#-8ZQ1 ze@x-SjlrUboU=f)mreGw=rmjvXkW7_Ckp0AMIB~P(X&?W4^mW!h>MQCQ6FO%H9OPn zl9H0bJ@v!oUe7S@2e|hS9x$)<#uh0=f`>x6a0WFJ&V$S-E2Cy9M(t9Xb`7gjZJk~R zvEx>U6;^Nd1HZ~ky0>r{XvJ#a+JuMp(omp`lUv5h)&sx1jSsPx{T|UHg99ElG8J(p zW@8N#k|}D+AHFU%#J+={d&hpsC#By(TseC5sN#>4bsZfOqjMTOy?%D&fe`K0?*lOR z!A3{vwkE#NfU)JdGspcgESL%dYGyBou8*#2v!hj_36T1j8EQmX;c?|Tk+ilN$-Fbk z5Nmy+!+5o~U%TU)ni|ML&em;c!`n`=_=r0eZnK8dD1%ron)M@hm`8_)=_jVCU4G;U zkO$?cC6+A|EhozN$5MJ1E0j4gV8qnc?X?u_`js6_h6X)B98iDFj ztkwGhHA7C#^F*#Jzu~NHZ50MXl0s7YTH~_nyOr7ALPw|TvCDkj>ASmb46JF~x!I5f zT%$A%3K@9Z{}*MZufM-Kg3q{EYPi|levHqBTeRY9ZS6#pgngTW%VabzJaFIhY>|0C zdVP7e{%p$}+Z#Eb(7o5WN1|Y6#zp-=x^G!8R`uErW}cxk9zZm!-EHqy%Y0mbC?KiE zcu(~_HKonP~;$o zd@%RIa}Um(-tQiDGKd!xsw$Dghv{vo`D&xTves_NH^IU)JI(E#sJbK9`m`}RsIAt0 zV~j6Jm5vW{m^A;cHKyEK^&ukKHUIn|1H(%mfABrpa_z?8=;ipyKgorX<-M6kHAV+`-G8Ybz65lJehRNON8ly+M_nH5@g}3~`U6!$pOjGSof!`E6lYq+?+e z)Lx=57%pq6kxR>*E)G*q0_9&{QPx;klndqGIk-F`Hm8MjOG?tKmT8nox_0}=UbkJ0 zL)*OVe~gJwWm8g9^pVCO=ui>W zU}giA6Q|y2-U5--)a1mO|H3i>#I)Kd-`K_m8yj2k$#E9BTsxo4GD;hrQy2u0G9dNz z0^&&GzDyhTPLwjCjc;okac9qEC1n!5+6633&VhK}sewq|Inv%gJly%k z@{Oum(*X;V+OC3^p>+Kkzkq;%Nt>;Sq4PrcM2Hd`xdNrAs72?y?li9quE!n*7Zie0 zRG|?a_GxS-dMtM2hQF{_Pel0cm8AVKRx_l883rjT&Gyoj>lZ!<>aGXJ9xe3aK&udm zU^6!}E9j}t^`1=x&V{WJ6KFqJ+mba==0zV_*|Cf?X{WC7Y`=?;ren)%#hw7|PT_xo zixj^YB?p!^pNK-f2&TS3X6L`b50UGXym*uJ*jtzJjJ&*M*p7+RIo55GqTx+QfrFL zY{U`oy&`UmKK7htQqR*z$9!&RlYSnN*JELG5My4pv>DA-j^xm6*I5`rLcH;i`meqZ zPydVW1J{xN+%@Y@+_CMySV;WuzSRBt7wqK#+GKo~7)K?=L6YQiTI3D)js2|%roSxaDuBPtpzKcQ3kvDJuEV?sx28M>) ziA_nJl)*uZK$h!?S@wP9{*q77q5WYfargMQzV+8z|0nWqVWmP=0Rd&jeZ+HkSXres zMMgxNBB3gMS<&Z+Vh@gO%R)2<_U>g#4J!3vHa9lj-r?u(f0W*rO=0nyUI@f5fG@d6 zeI1#_2uhcnFPq$RFF(J1`C4OhOA?XK|M`RWALv{Zr2LQeK!euDaD&u^R`~UeWT;CF z?9Yc!x#RF#?cABBq?2lC?E3Yinz=V`tmMo@s*3@00mpXuZKm@`OlZNr6iSpxvHbCc z_#fI)v}QpYr0PP*Iz(_DJNC>pUn}zIQ!b~)G)y}|_m@}V=Mey>^nMsbM zyp?JZ@yH}hn0!kIVF+|cYR2PkPoBV$YNy@Ff8O~Sc7ye^{C@YRu{i-gzWlk4C2H|` zq~6bdhVdHJWm)zVst1*rWm5Zk#sKF$|F^*r1b5_CJam&^j*P}Lg^{U;O#t&mT~3s!qju$ z=Xy78Xqwr9uK+d^HKXvWo$T!FDg`D+HnN`gf}TIO8eq)aPE=D<2dzMfcuq~NHN81; zkL1tR{JXKi2xSbPBfQqQM?jKH3NaCt4>Fkeva_-(?1y_ zWK?$qvX1dXZxn^>zFE3Pv8PCIQXb}g<@+U;TIz{=wOUOw;6I*$<@}cIxNxgMsu!b3 zMso7RV64k2Uq2QZgYwwzacp8NQYE~m{GmTFGfU-W9CJ`;B7sDe`h1 zfZm+feLOQ^A2&L~>z_TgIBJ0M1y>?$V3C_upoy6JmjI=r7mRLcZ-1L!szAGja*M;> z;@Y(aXqGsgq|M~2d*|wV> zYU|q>seViAK@Zo-AXSwZRlzC#?F4v+FTVvO{AtNy* zvEbm~k91XM4!wwvzYZ{^!#G)`x_{q4w+s82pCW;=iFOoftNM?*g@jax83fF}DJg3n zZKJd_`>WJZxmOxYLAN3)>$?@P`13Os!-&FeX8v z@$vDY&^Jj0^t*AZug0EW5f@(t2<~T8fxb7yOx_l`QV-880_4$lYE)9Jt;Kl-^&|%{ z&X(Rei+}i!<@@_zE$iZQI$0vNiIV(@mX>M*Ffe4Nr(6plZ=JQZM3P0ehH+EkvjpGm z#CKYE()pdiS4x@a4^6l!eU+-VscDwHwj_(K){!4c5#IQD+0?{jd1Y)(CUn&rta9~? zX$F3~=~&~yv2WQ4^JkKqhZn#MjlaqJhycogsLhY3CO&jL{hk$2K~ehs;aRF~+gz8W zwoZ&OVu?>Jz%zQKt#d_7J|P&VA_n|;#5a14lsl<&Xd~o(uuxW2Jx1U9ye}>;?!aX~ zLR55g4^{v*9occ_c2YA7>4~Rj!|+T>{lHXN3GVJ+TQLzKu{yukWo1~Knn~1V_O)3@ zo{;?m+;fnI^jSDKE)R=Z^?r`jvhQA9a(VBvw)&I>I$&keW}|O-63#06{q@(cEvxmB zTH}uS#8Q{Fl?Y{%>aZ5Wdm98D%Dek;=KYU#5N?N^mEHv+siN=sPSco+xfs4TXh zSMHGy840Hru6Am9cX7s20KXG}J z;O>odfa}}QBgGYui@KkB*(WIRCte@UESRbC{TUh@eC$RD*nYK@!908S?tMf!aG7Ew zY*ltNaQui?z_dVGWo+!bGqpwZgVV`?h-cUVZfp^GljR%( z)xoCjPo9SV{*cIt<4qzdD(ZW%;VL0TeEy4@j}KPp(qR@BsYNI8$j&jJA1B8u&q>dQ zS)pC;Rx*E2E4uaw>C5npGkMJd6Mw8)KR7(xsmDuTc_wL1;K;z2QV4CC zo{VSFT7(7OFCl)6YT;=~}Hm531v;G$;|5#Y%SZw@H z@MTM?!AX_(XEHGBnJ@z(pfmh?_UtjqaPIfiNY?v=&N$4e`=r9J58siggM!$MB?I*K=TT$Ll_3!JlFq>$-VLA@_b(>k%#P1955vkC&XvhHNCNR){ z8*$(Hg^sxb8Z61YG31_@;ig!|iZA|9IB~#(aQM`zQEw45?L7Nh_x&6t-i-93g4n}X9VWRNr&?%{iM)tZGc|o1A20a?mKRT+Jn53d4AKQTxshCt>poQm^cSvJ7d_sY za@xEDNYJ+~IphGMVq%&Z4}Fs;Z*~3g;ZL2~^{kwVjGmCSoatMFq@o{Q4>7)LSq~%> zsPho@0|(aTW4AKRKa&*}pZ>BL+D{NrdlB#MhUwvb`#zrrx7A8GT=EH6T+uQ<-b`X@ zR1-5vo!2!q?!BMaG12%2^%QPy?%pn^C6Ba+%1TOQ(vFUc0424t#=N}bKyPF8^WFK| zuUK!m@_+8@tBn+$T;0l?k;WVQ>Xj$GfP97LV~gB&@yHq-t{*lzO9gggt5Ju^5)=~E ztcVI#vh&L0+Gv>yH=(hto>>66QBj*&eT^o2FJ4bj@&@bePG`30KPSiikLNcy(1kVo zc0cp=tsje#a^00bUKqLJ>~g^c6FC6mJn(@P&z&RH-a07ZygWbA^KffgMn=KvB7JL7 zv$jjm-Ok)*yqTFraOLGfc#qjzNJ$j|t!7+)9}^>8Ev)({|FFB?4P08O%{7jY{^5BJyM8I#tu!MNCnfGM-v=-W^O zZfz}sLu+Q^1+dy@PX}j{IBFshP!>ry|#)kgoR@L!N-~sGAltjf3Ui-@H%!uY$b)?U&M}vRnUy7DRWC z)W^B&pw@>i<=yXHH@?ogzwsvTbN#vR=(oR{_>}iTYqjxK5A6ub{u>Izce4op{JIj~ z|NQI!Iq*4P2}LM@s+y_>2F$D8m1FsSSeAKiA>^;tt-|y`<>3n??Fn zY%GWSp3%R_aCqi@o_{UFO}fb{m`?P4{#-9PX#e>E8{70uJHNm{0bX8GZkokG5q|Ou zoiIWa;9ThGZLn30D@h=6%j}KXs7Jp$ z{RrHHCPo#;drqD-H8s_Z`@>KN1xs|P=Wfa0eqHsR-9SnfqAKY&vT%^=CV1Ur#9z~HZ6tX%uoK~WG_uzHopdn!a zTCb9bL5j^D6}+hR06VHf8cu-Maj^frN#nsT8kV`98HE zz81gnX&gOT2P8bR7EA-!1-Tyr9wTwulPc(KS`35_|oY7al`US8Xq3nDA} zQuw#4`uoGJBeuCk-CxNrE?Iww49w?gMK;q@%|8@@2n2}rjwLi#$Ya$ymNS!3!!QI% z3-iXV-v_x~-P1~1OI4IiZOOBr`2LJVCZgpR&=4q-SD3x(>De0np@!EKV&#EsWWE10wtm=V z5z4a2xE?1{*d2IGUj~5q8(H~Ri)xB`{igfx6_xz?YAlIY_uX7fGfHW1Y00+iktUN3 zg)`3_!nkEqZEdp7$6tx(uoP-u~KpJ%$hv%|G#z_p>H8??>EHpFX7{eI-=(epAg+liP~`1QdV$opt$gmsQVun8o5 zk)Hh@YWB;=Zd4prLk)40N>!gfvtzW$$Y>jr0q;RyAZvOzriIY;65@ zqJeB=fo*$Em#%x%5jM6@CB*2QpbYUPU}0hMvGs!{w{CqYVRy$;WuP(idh!H0|NFKP9E%^fo~GR~>GKN&q%kv( z0vH<%&<@ri_^*A&;K=xgJlFHe1m&EMpZ_t#My{emi#XmD2Fo!lL|qma_v<#oGpQ}y zUBBw4woL#2kZ_nVZvOTC$IgL=UoZ*W+8Xlo=^+wK;RJ1e2K{Uvp4on&Qb9It3-xuS zJD^F!c}qjU%8Uy8}PI`fe$@blnz&1c2H0CM1 zgrOB76crdjs`;64C9-C~O6X(&JMo-_rln;vM)asv7mz=%EX@T%wZRTp8+1B8-%m0q z^=8C`%IVXmC7+a+$4`mB5|Kq;mjbU~&RO!wJn1*O_<+#5`Z{QT9h^Ki>yVEz&S!yd zW+ws>8yyymPFG!J>fVu-mf^iy^4@GK{b#oGJeUf@x!lF%-~>v|A4H8)%HT_G@~9ov zx#H|xK!|$#R?fqyq`3HmTH0rQ?k!`D-@fG;H=hFZ%?v<)AqQK;&_Lg_yvlzC5Dtrs z_qX@DQu6Y%4RQ5p?dVmwO#i6GN1=XyVf~Q0UlSZvPeCrK&u(Oc_qPXPrt#1r$G|t6 zPVv&w(WTUW{c01n(3pYg8UqYz7&qNoxO`p_gMKv6YyDO*v%AeL<|3|PEq6$37y1h2 z!K@EKU8Pj(hmRh;34OMYV*H_|O^K>b64}wxULhiO@}EDqSocpe1_uRYnY3_6<8b|R z^UA%KG4X7&wdc>BJE59##PN=j{QcMYug zf@ML8p}g0<$K1IcCiO?6kIXEcrHIU3^Xsd;RM$*y*^d*Y_}pACL8UZyMTOZ=%~*Keqja<}#M46HkaFRcKYl zy%uiMJsNV3jv)cH4br%szZ>$tMqxZKEw8tM)K4T2 zFgFiQGmeZvOS-tv>L$>XzP@7!qn8js(GnQHuy9lv11&fY`A(gZkdQz+LUkHAWP7gN zTmYkziVAxh#IZ$f6AOoDVvev?2pU|uVr5`pfD`NU=a8OKAPst%ZKnKffaK*^uL7O} zR|w;vJH8uo=4i&15Gtq)_TlI zp#&{@$~idwyA)pD$S6)LsivxmQON2Qp-|7w-NPgIOu(F}@vv&RsyP=Df%x09vXx(x zx1^*ZA|xiBAW$J%ozhDCti!8z0=*QRP%}ryzih~wy^ zw1<>~v0h%0UUm#pE^n)%g+8!^rEsOTe6wCSb_vsX7)#RAiy{>ESq1pd90}bze{r{D zacQY>y~}lFWh9}+gEld*U(1CHD|NE*3K2lP*e!WNJ?GlHyQ`zQV>ue9M)s@ZWwAv= zVA2KNA;9qeoc<%gpde0I7^<%B+BJ;O|!wZl@;vk2uw1C|;=T#LV33Dd}P8hF) zeF-+Nn}^3<$ycvm8%+spAZR<7t&YnDl>cIJYP}-7Z}EKZ?c?ZC#G)~+ajWu~0nk+u zn0O{(s<7qDUzP|}z}!9I;^EGpGCr8lV_?U}C9=L8<`ezRhj~U_iAE$4S2q^WP ze6+7!J7Q-i9F9~=SbX3dHF-O*#NzAJE%gcyE*Gx6rXOW&)hI5cU)ALA| z@YdJW_5Kg`{yd!O^$j0}Yd6_Vv@4RZHE2XBlyN7iwvZ%cY%pb>=b>H7E}>FnTxAYX zna5=aNl4~#k$GI^g*83rVt?P`dH#Km_xbDnIrd~{_zd@b-Pd(q=XIW6=N&8jyAFH= z+eh4@Bip`JR70cMXr@S2=c%9HYjvUZzcD}?s=9e`baZswkqVByy`;yrYxd^m$)!DP zT}kiX+d$Xxa{*Y`&Pif|;@8<;Jb!Ne&llDZB3+j7{V76FcIN~#A&gAK#l$#EclP(o zxFiFE+;<@WqvmV^IEYpM_>)r}sY9Ml&8t@p=ojLUZ*{>UI1zoJ;^2O?r73T5Lfdahl&w)VGwSktdDk^kU*1cqq(lwv6Ix{DLu zUT3yVJs{2<=ef^_no%ZX1kMZt3v(&Z6Hu_3Dn@c2TFoh-prP?vCy2$0WnHzlmD1%s z9S>Ggjv77klHBE3WF7YJlF3l%zkj=mOxdKd^J&S?!R#MHvodlo7TwoGD2q!oae&RR23i+P;EO6Qv9X z2V0@;H!Ztb_Zic7$V2L)uv?^NY-Dt?drCU(S<{m!w@S?wMR)~ct) zKB*QZ}9p1aIpQd20Rgu9zI<6(%7{?79Z%{$)?{>`J|AI z{ME#ygXl#JsynsY4;YqO!KkvfirnLN^(V#0-I~VGH2qM~JB3vM;iU^UmetBi`Zu9g~A6kFGbaC6jZQCZi9X92{Q14mSH8=P0^K8D*oYF5_Fi zZByBggc!B9*84TgnEm@_*OD?4V-gdO5Srb}=Vq1is(8U_SeO{Gm&^!r{Q8Zos~gev zRuuWNVRTN;rBQQJ)0bIOC&L)aP}izkLx-O3-Elr4kx3&o#H)B1oCd`;_l-+|ePH9sx0e4f>z^}0dMepa@@_F{3k%AoQ3cHT>u zDvKXx9Qui-%}=Wrk`Y}drx5Eb3`mD}o(nSM&;HW&JfXm8rfQ3qk<`T zMSRD3E`F=(Z{PmDoIbqeG3FmqwX;<68s=O*a3Z<7YUzY)sC;V)4!Y|onJ3Q>vyqHQ zOq`~yx_vvNyh?F0gA1@E#-my3G>`G|-L>5xjlHmY5=(uQ+yaa;Tg?&IpGL*R#nptI zypVE6cuQa4OAeA9Y?g53-nLDEhfh^5Sf_|=>|gZp#~KBpXdOyQQ!@#yZKR@dV$G76>g9+-Qf>++LgH`sDdB=hd z-3-f9O`QG?Gp))mw=ZA5jG}K+a9pe|uF+diNJv?HH&0kPpODLS4E;hh()zTdl+?>W z^`$t{l9y8X0)5I04hr(2ueM+a11g#_ATA?%i`$d<^LrO;-lZMRd*Jj4MuY znDwHCAE7dc1EsI=(7m)><+Hzk;@-SoH1syozIPuK@Ovr)@D@^2scP;Y-rj_3;fyGc=+H&yta|CvCUmOcz9eZWR=j| zib{%MF7=G2Y z^UPu~&tMX;u~zh@!%y5TM_qGnJcu3Cwv+h z2>O26m!o8GCc^#0JU)A|FWSHY^#Xg>DYR03I=dP=jvY*riZHgSsjPfaf&IF<>(#56 zg5Rp+9lp=#0lfgEZIUhJ{G=pZVw{XE4=frO@QDqqkee_VHK zhx{(T^&u3jWO6<=B~wG~)z^!5U;Qn!q!2%?jw1uwp!qs9)HO(>XY;PjkCFRVg}tfj ze^q=|oBW_tNT?b_>mTbYD8jov|Hi%!oOE>)kqf*OUULv*gy)eY)YqeZkl~rudW^b3 zO-U(f^Ev7o&k5(1hbX;|s66t!$;NllVf6R&ze^9)h?W!+SdpE`OJjAMDX zH_x9xfBl+QbiGm986c=A&Zpm%_9T2r3ba5$#RDX)&G}(56n{OUq95f;tv^@0O;SoO zB3%TF_{51*=iIe6uP;r%r*4?{?vonZyJm{J6S~A1DBI*Wo!DSzaqkif%iJM+W3t$X z|JyyCyLavw)r7l zXmB@ObN&6@WdE5OCCG_k@KLn<6+up1&dXfeEGfEk8y623;rX8x35mIeRh$;V9#o1d zK~|UT1Xg)cqZUNZfv7}82ywwHH&1@x!yfy_#)_GliqPtTH!Up)qObU+jI!DRISHz~ zNdWeA=dQME^WM}H*+>Gx>XQNvD+q`{0}q&);K2g{d?yvR9uksC=56YodUILuyc(Wi zYfHak?Q?8uH?rS;{+yVT(`uAvXy`ZQ@zXTE{!C12ku|4rMoox} zHrwsvySH!u<3aG^*0nU~o;4QM12lSW(+)|H^}qcC94|XN8^RXdVqe67Nc;KuO|yYl zhS`Th9Blgq1<}_Zwl@oEPUDb|uMepn@b-3&P!VzKdzNOIg}hg4?_LyM=>1>Cct`Oq z^sXyw`P(TbRNtppuU-XYRBVzz`%?*lnB!@y`GnLT4=r(CR0Ahf1HdRR7&M;s#`ynTVX}V z%T&8hzxEUku$y@K``X_C80&t#_0Q!Vkgm4>k$xYz1<pG{^DW?&0-551L1H(QU`TF{sf(G8uQx+rYgWeHXwEZN4e;y~t~ z&IY*D$;5s%*lq9Bu}-yT&yb7Yo9DEP5T5t#+XtqcN_;IMtJzy6fX@fpMoR<+Uv94J znt)7HTDaEL#MIQ_lWB?y3Xow{9i>p+i+fbwlbi<8%@8dNdSjyf*`TsA!1@o6bm;S3 zC{{H!s~n-poj<^0(@NjH^JjOnXvE9wfNmVhZKrjxx|qIIK}G+~e)pkJFQ?>z|*L zWQW_;TD^uAg9>8{kN7dbse)v{xyRtKSZ|qCWxdFavi&)={N@KBYIb>@4&?lO-Ylt{ z+qd6U8=c(cH(mcuO~awWKZ2%;mh@?^#e6zVy4`pyJ#s=|MFL`dpfLIy_$XRe-8+?x z$4BmxK@MC@_au;U`T%*z)Hx$@16T)&A7+}(cbI3Of}79#GXA7QvY2k#z4q=B4=N9^ zQZUH7%QhWZD&{3swL5fpxIb^rBMlxsas(|Ix5*Qzj{6YGBS46eF~345SX$XrjKj)qd9voyc^!n@uy^&r&oR-{kS z?+ zhW;$~3&T2l;I?OL1?T{-Te)T}L3^?4$X3%H)1KAyTq7qh*B^N+sj5FQ>4T84Fk_)t ztgT=+UG}gnfgBwm+m-1sir*mF*3PqggniHHNep2w($`$BP4YO3;6v*REcoZXzATpW zsa>0Yt#y(Y05hu>M2Ti_X9tt1ZgH}y<%=Gg|8=A9TdQp@uYY62dWT$WzOBc+ha|}B zHuIn;v@Ql+7X+T@Iu64p zqPzUiJ}f?y$WYvk5hruxTpY*m*aX z_`_n3Wr`?7Ului-qMQx_PY27OcM9T~;nTWON&v|?eanXJ9UUAZCJHhAcy-5ljYbKQ zyWJtv(&4K+4hRd^+&aGe)m~?wu}*tHbX)mc5Y?1Wxy@?a$o}*2;hSuqjH-82jkgol z7>kGbDL$+p-ss{Op@IWu=eBKi;8wJ@UaElrM|gB{le2(A<-0W=5+}k0SFK|6MPP(< zWDLn|O;ORO|A>BEU}YB+c-()ep@HOE^5Ms}Kc`(i9DVNI+E-v<5wG&?Tj1{QG%B6( z4^ijzHbQMP=GmUVIOytx{spyWQBpz0rTT)R;=tgbv5^r_YCuBgMpb!E$O}K@6Ww&I zX8$i}8oL^g_fAH6$mMOe>y=sj%jD#QmP`*f()o7aA#a~NJGDt5G>jT@KcC{2ET89- z`6mc+#epPYSC2w#uHU+)i_Jq>`(RZ!?OmcNqBdf6)FCjEH8g^&c1}cDzcVp0F*jMb z!M2T?8zf~NVXn$s%in;1{Kr4B=DVuVIBfqoZ==rJHznNv{ps7fM|uDI!vFq#e`fpt ztCW@hZ`m*20xJQ1)#Kf6? zqS(%>UDIIABgoD*c`;%ohLVmXVd{^(d3Za0pqY5=n9f_7@726>Eq5Vab@I1!<3VA> zr81rrayzND^=3NJq<%mMMwWuU&jh9i!cws>TxBAUrsfKE{3q1Yy<^AuZSs>xMOQss z_I6mc^e%Dr`8tS~Jr3Kp@9HBCHO{K%vQ-GkeBpIFg!=5KyhE^7lwPA^g>;BL@c)lTxl}%tgA9+dtm!y}848rWyeGg+X+E zWNAaaNa#+=su(FgrrFB1+|q4dc@DdD3Qko2g(YguSV?(3*P>=oX_io3)h++gzVc3M zLSmvT?FoTbMoYY*_)7PF^q=@V7tRVOpc@A@k28lVHZ%6E9p{%iujV;dMUY$g5x^p% zops?1-{3i0$`1wi-v!1Tskw7J>nYvmY%Esr;O?2C_yLYVAF{giGDbE{ zi){aHgxDl!_CNpbY!1L(cSBdliLO5GyfXMgzw&5u(H+F^)Ml!Cp>^<@aOU-t>;+hh zAiX^iR*g~|BGDmo(wZPgzSKpB#kM&j%h&oSdBRfXtgY?e7cRKDEPi5_TUx-)OgMe4GyoZqVb&8>^2K|tfC5r0MpP7u zHsHh;FsM)=a%h)Z#W<-FiHDz`jifGUnGh-(wIa?~e*Fk#!edSihX8WU2xUR%x;J;U z@c7*&B-a1J$}20CIHhXQf>lM%rb}Uj;lznL+;i0DY1mA)e>O}KzlE_5{k;Bxmh2mg z$I-yo3*6%8=hQi;Yw@P+4vP{Tis|Bn@IBFWH?*}iwX~Mt5Sf{txs?`ccFzJ89j}CC zILDo`GA<^Gq_?#zv3}T+-X`?u(Wa~F>c=>hj5Re~ZZ7gidQ24kv)%Ke2vnrPESIjr zT0}1ujf1vahjzPKrpfy+!DNdRej3)}SHV9B6Pa{wNLjsvaigRO97A z&kPSYhruaaWX+l<^l8)02N%Dt>>!={pmeYhmiIj=Yl{{YPV7?dNnv56F1d?)7+CVQm@a=0F9xQd6;phMpdaVqzVvxWLG-pn8sfy_3 zClE|2WG2~dBCUN~{$GA~CIe&indDso6(^na-kA>$4l*J3rgbdn`3b#LN)MzBSQKqn z$QDldif9Qh9dk`ttR<3O5x!LLd5JFU%%)9Oc}~)))dOD(^B_v!gCIKE&RmkytE#Nr zI-Hy$%b1rUyN`yEIOJ)Aa#k|afrRdB;%zK2O^vQ1S%5oQ9DFYoM@yC11tG_h8`?lP|^?Oz1Fg&C}$aE`rjJ%|m~ z+x0rI-sw9YbX%?0R8n`Ou2fd#Qhe!aIb!r5%A3lvnLHHvugNuLHQKGn-b&G-HL#1XP?VTFOH%t8@6nrho^ zX|U?mF6LHFZBAPEFOYscFM7tSzP{(Wi21Vz<(l{~dNVxn-mdr8A~lT)%&3##=$6=!Ge%pC+` z{pH`tVl>3+m!QqVzc_VHOA$jj7#uS_fPu-$4J4vm-xaufSYd=S!v}XOE_(8$W!{|G zn&iPfwz=ezRV0t~(imBy{dV1dO=(&cI@ENmn;8(H4Xg48b4x|nEwqznFE2VyJyjYMxpB&? zcyA8OLKdwV56;(0&x~CuSi5UKu%p+0TnyT;{KZYdLi#6+Cmvvtdl?R*`;V;NP&>Z9 zVCfq(1XHBmot8v0ga3P|j8)T^i&KY-laiIf*l>L0skMf)skze|h4iyss+z*Aa#+`q zHu&9ZZ0exl7r5GDWBO39#~%6{>)(qsQxK9iQ1j-@U@VcQ!DiDM8{A<#quGBSN`Zrh z!TMrOdOg#=*BKw2BBlUld(I{4bIRv0{L~*1xnYl)jVcBvnOx55*_>Bx8!P7_9ugq~ ze;*|-#OBOwgaTpCKNC>x!V zWqb+rJekh)EdmgVwnXcQql8SU>OH3GIQ25N zDq~YGu2Z_w*YTSfHGQJ1c=P&)RsFfsiDq~n>GrK<(ajLDdQE8(3+LNhzHlZ%4at9QKhLyJ=1H zlVB`<2~@4DD#S%J6Bk)F0U{C}GdxVO=iBu&?cbZz=AD@8*RKnUB2oFT{+^QEwb+^TO8ZM-= z%gx@;f0ENV!DE>}jI;4o^G^_mF*NxhUkBjFLFLe0S6?@e7RUO z!DBge>4s(3XG3MO6!@byluio9)L#ejc`o*As?yscT3R~_Qgh~WLqm6it3Ab1A1F%v zM)m5hEoj~UeC==E1(fxMhkjWmH8wSBS(vq3`E(LJ&4?Df7P=1Yro@c#taC>jg|$aB z+j6Zx`W!pUar5?iw$<_wHh6zp2bDKAN?0TmF80wBz>lBDv~N&f{4|g zi+e+o6H~r@`~I||mpdfH0o0#p@uHrK2mTSa>{yt|^Q^lCVVW*Iy~5rX7x?||=xsSQ z!Ngdt*VtW1Tl&k)zu7R4R*S*c?u4n3T88FB1{6AFTKF z`*-Qd^Sm~pjKh1z;`swAK>hk-ynyyJ>BtesX0kpWUZ`2Bs*;i$l%9D=M^XzVi3ad( zY%A`fZMc#~c~Nj6S;utJv%Q!M0q-(jeX~h@ z8(?U{hYqm`JmZ(J1Xd5hYtWS33VHX<0-O28$6~n%UVU{H3406I3n z>sY;kzCMN4Z;;W3GPr)^@!K>mh;PcWk6Xtn?#)^mrWx@A z1$L4U7f-RVKK|k&SQEY*WkXNV)lavm64fzct);~#5OP`ZY|Hvc=UF22S{B#R7GxQ|$Eds>wY z>=FaVm)%|4f6tj;7I#A-OVy6~xeoZLamd5#>JfBj@%Igwa7_1G(R$b^^qKdM1?s-O zIxONj=vAocrG%hEoMRTc{JaGF6h*(?E@eAO#Gc1tSKX+y!!wPkI+7S2F~JbYP{X}i zw+x!!PU_espoH0x#+jmrd;Z%f7pAw;A0L1 z4V7^Fk|%*G7X-8FZhGhG;Him}fyAJ-wXH z0`MZl{M-s7nDV}o_3-$N$$C_a@* zmy{`3eV_6H8|KC_?;kNtbE(T#bgNRQ-e;?d++g``VWDfWcZ!eU^?Q*T3!}XM5b|zG z+wnZbrcg;c!}6u#&J;{5?mtEyzpYvh`o2FrQfl4au(a(>nH1zQ_ahG+7~T3YcwZT0 zHfk7ObH>{;>615&`Mf%8&OP3YQTeR`U+#Q5D$Hbz-L$*@L627+;?%yJQ;WsysahVCRpL`-m}PGNK4Zd8-!f=>V+tD+ldR?_Hw6j&mplT+`9n%d;b0_bE8>rkW|ob5!%%xXMOL*g%Zen(X=iZnSG@H{g6D_;r_2#{ z5>}~|*>oROP_-}>odNhymS=xr5k|NB!M}s*Ma&(2r7mY}V)oX}m4#-UA{dD74}{0C zTJXjFBO_l<{^R7s;yrB;;+98O1|LdXzfl9tCkNedPKCM64sDa)C28}cwOXZnNMgK{o)Sekp}(KY;DUA;vBtM9P7 zo_qUh%@1v9O)lu*&A0ZvwQM+aWH)c)t2BvD9I^oLIOT_0-j!mcUDD)75l6|Jy67-j zc^n;x8nXklBdvDBqp1YfZrf`9IyKg(6#)sZXF*r+T&KQM3i~ zX%%vOp=a!_H%v4YXg9o(a?)#9XjwN1e`&}8Ns#PIV=f)U>BK1OuB$*M6}W76!%lEf ze8_;@=j-73%Pu{w1p1hN!%NbJ$%Wp43#^Ps7RpN#){7J(HCDvq-8r9mKc}+Zds|dI zem)5VbP98Smq^4PQ-~lTvG} zp4UCA=$&g04v?PelZ&PtL5&m?W@Y}7^7LpSX(T~AYU!=)qlffa7-!{RA|%11G$7Ti zgQ@D3Z`IZiJVB>-(wD^Uh5me4usG@)SD8#&lmdN&%ZYA9uR#k)qSL(!gI!U_7c{A~KborZ_g9gYZQH1fN$UF5{Q=9lJ7yhO04I=?3acm`^qxs2LHZtp^ z`@%;#S`VeJBgCvZNP#E%i2zicsf7pBfyFVGg5}Ofj3!|sjIqcSHID;y8b`#R8*4y* z_Zs|cg-4L1{J!t2?G-|afcp}3HZL}uUhE50k+iu=XK;D^Vo6$KEMPNqk?v@oS5K5_ z36ow!0+X1J$q5x|QZ3Dmi5O3ZQt&(cw3MBrC zEduFQ`m=q30m>eRBhwOHZ=7jUkh=jTW2?aaz{(Abc}l_zpqM2n%#Z+m-ecCf5OB zt%O?WQI85Yt`qopGxwf37sHWsnDZ!( zMY<{woUB$x?<7eY2cnVGDMlc3>q5hDb+jt|ZZ15E+(CPTp>)k78KiVcH z>9{n@?YC(c6cpC5)6UF&)=){J(Zu1G_Ff1^3|R?Nv>6fHD_ksaabB{E3-~gNiW=U1 zkJ$;wZ@YVXGGtRHq?j`Wa$QWH)oYe~IAm?-Z}Oj^CYyMhSYc;j@opz2>?$tX{KTVa5`@npkv= zi{{42U0Wl&SZiq21uj;j>OSX5FUEtTDYUbvxV04(%b`GO2NR)~dBMO+Aiu1ECcc`( zkQrBEGAKkxa+45jMJ5`PoKmxnJ=MiDYbROH^K|cw-ejAZ63#MNPg*vIywChNd@ceS zNMYc)~8r(!V}H|-29T*ij8Dul0MxPQ*!Tx&=bsE2qd^p zl0o)0K-vIbO7RD&=2Gd8d940EPx|A@7wAEBSI9bgvc2=5MqwRR%}HUtZRd_1r}+BRVV`l1xu6X% zyr|&!&%mosVKGS`ae2CXk-u*nL7YCfFiV^)Q&J}z+t^gB4}6(&Gi`p9wBV(jI*;>F zpE=+Jph7uqMCPugY>CR2bzvqa!2pr%Xq?+RoV2ohP74r6sx;6#cTY4CjBFCV5aK z^f=rRl?b#3V^3;c9*?rY=X>wP2Avp>xCm59w{F;a< zsZepZ@}g4j#e10`F`3KKXZG^2u6BtsX;Z<=C4VD-A%i`_h9%q9bt@dTI1;S+Cy>jO)2#K$>g_|42-DjFZHKl7ahnj>@Hf(5{hrDm$NS4uF6Q8igs9> zmViG4hWd@jsrQ%WoveHwy1T|()+t1b=#G54(mr%_l0ZB?GEW^}-g(`VWj{}fYUhFy ze&6Z(X9nS+&t`UkSFbJ1a$G}WoXC1;5nI;B&4HAp@8Q76v>;m-qt<81i#2CiX*e`K zSO?5mn^EIm>!tt=DD2t#6pQwK#*s!Jbqf?blRc%m_7nMb%_-dV#^xRA!$ow++-TgmasvW=-T70_ z?myn1eYjyuhwjZqY_a@aeFBGkzyxbvl1o)7?4(=GPsJBs1atcbmLnHO35lNucZ7~v zf6kWat@F$Ew?X7D+28#OQMAuDZUK&@sMmW_!g4*#oRcd4VGyILD8=P~}W7YyL` zB&oA76%gV4D<;)*oX5`zChd25+p^dNXnhBrPI-iY>wJ1-SvdDX)@+b4>$P+rvLTbn zn4!PO)>A0g;Wivh4Amk^@dfCkFpGklanB-GT>6bC%dfB~Pic90xH|%(Mfr!~&LE#Q zCb+nEF3q9iVo{%~%$fi?Nl7*qHESBf+%l)o%GilBC8n(Yr`GbjH)<$6SHU5VX(W^b zd+3OsT_3cw5c3{${F-w1^z_Wakp~bglS0sESu!veCn(zKiohIdD{E?g7XaV?#9H4- zR2&xsSh2kO5GVrqVUVa_^kPy&Fi4zk+IR#B0I<}+N-Sa#?MxbMkiw)F3xkBA(%ogp zl0>;5t$j>pUs^0n*~Z!Uz$o*K^VdlZ`J1hoK}j2&nfMX$QFok_SbD?cd+XN0D!I&e zz-O6XvFFh*p=G_%A~mJ|6fC<2|L=-0q5luf+_V*~mE|Y6%47vgU-@KJwfu?%&GM&j zZ~n)UTK??Rre#LO$`{@@T2>4A@4J2+`#--eoAgmWMYU0|jH#6hL_L9bxRPvSbL${Aoy#U{CJFfcTXaG$<}X>(}W zq58VK{|_WqItVx0Ri$&F`{?xUKD0yE@Gt%Fk!Oo1crHPlk|rF!ZDrdnYp?!Q1>BQB z>nnq^`g`Ih{2u&;A&@@QMYa{ZPORJ{_M6*R#A1ZJ<<21g zIN^Qe=FQfhkH*enwuVWoby}Jm4Q~5vHdup(0a8OnGdma=5@2+x6kO=pCnzRIA6AX9 z|9R>CGb2$nND^`N@5?IMq4-Igs;DK%5utK8sY;=fJt%MPLKo9$7GCJOUT!#U@j%b9 zrJ{QTqs^^M1zb?R`sXw|OtDK?ZH7Su?Ww-G7adpTe{5Ox*W?5e7)5jpqUKS7&A=fN zZZbptsJrCm-mAvO$H&LUdcboJ9al5$l<()9&_h5aAZbc&`P2)QxDfb3&wfrw=)7qh zAqJUB4tYn%`DJ@B`p`&2Kd~1=19YU@D0Lt^&~`a~h5eK7>qR5wwGoGxIMGpLpH8Oz<>(qUSNLm6|iqc1`i5_Z6+&ehQK3G~FkM zLWe_MPp=C=X!_03)(o@YX8^ERA7s&GdE)dp=)xqNa2QE1cawnsw@Fl|BgQGL}5J0@lb0VBsjt3H#S&5Qp%|d zPYAub1{61;BO@s7k-+s}7@nf3hleRU`Av) zr=)bjK-aETh6p#(hSNBP8Dqx6zY7=`8J;JXN)$3OIOO++&^pNzDapx~3)s=Hwxn5R znKq8h)~k*}A^=92u$;i1>mg&S5+QbE4_wp0uR)&N>H6*PK`7DXzkT}_9iZW#u^x9!DvNn-P(JZ2xxMm(m-^hsN?WYm$Ii4 zJWdNx`PF3hFF^t zHCeE4f(@#G@srWqi-YQ_5yywUG3f6sEo2Al+R`#t5Idxih{6V(Fe9=kJUm^(clMMFDFiff zKo8ZZT*q-(;l@LhNCs}bCf0r^mBs>9&!AApAU571x72*g zd0$RCgTfjipCDJW$YV%~E*i50pYC&_LCq;9T)6NHQ$Shc#M`Bhho0X!CJsEgoL5j; zQo!_kq*#1$N-xFeRA8k6-F*;Bka7#f?2yyGN`GeLprLW(?;BUHSeNY#hH?aNb_1V` zE2`ATEE`=e5zp~eGWa&r6SH>%WHN1hd_@Wmy{?1#u!;p4PYCuUSy7JY^ds5BhpAP+ z9#HlTr`@nTMvPBwf1;4i=Ef$lZ{N)4Dq%D18CiB3`lh^wr%=m{XwK!-dSupWuZiaJ zr1dUGF!XM;O&zFsh5(EXZoR^{e6y=ANdC7uq4qNSQVAUkX%l##>OA!7_23$Qe`^hnxb8?Cs!H#fEO4EbXO|Yy^apUcYweav4;Kr1`9A zxY_aPZo>@-o3{Cb=x!jC}{C{bFhro5O2p|F9>N%oHlJID)wMSV+;rS z>p-os0v*Ku8VVf?7j~rOa*vJ z?+}VX_oD*sa43Us7C?AjLYYOv25-N zBjuH8Km5}`^rp796zUWyuX$n}mDLu6vvJ|nCyX=4g<1NGh6;G^Jld5%80i-6hy{BU zotN?5)kj$G<*<63f=#W$-V+vWvs`-4x5wKufL>igPa(QzWdol6dpVg;kJ*5#5J-yG z`^MUHY#2aCJ2M|9td<3HK`<`-j`y=fhbzq0lVU28J>E-s{=h^Nrb=FM@esh;HbvZ= z%L0)chp?b2Wu)<_sr^X9;fx?)$+W`aKhZ;98rA2|?)8^KRI6fl*ToFG8r+3wMKb5u zaBw`^jT+jIGJ!J|LdPZ_r*NWL?1=teTdNu|`W9f**@x@T!;W;`X-ktL38w+h|D74A zahn$=4O2zTtnVQO(0WzE`i2itky^(Jk?_DRaE>ZB`=d0A#0Z3D==(#SE7~b$HuzFeL8lmIFw z4VYv%Tzs^9RLSttXi`GL#n}CM4x>w%@g~W5S!!#=UtDa^kCry93C~fB_Mp!DQG~tj zy7c;~b)Dk$jZHDZ(tPi`RLq{T^evc(1@?ByF8IG=$bQD_F@j9j_NG*Q=Aaz&fcFn9 z06cEX67Q+H{V&iKB`ww%vX<(#S`ZtOQWC#?|MsoAY83vi=@aw6yBRm>U<^;T)PL^a z*yVd2Y2#ho{LLS9(IpJA`#}8^|Z^n#K}rSWviMLrDh<_GAaE z?~I$#g!#8S{Tn_yj0PpV&{CnVTF>5}F(CE^zHlM1gT= z?V98>dfIu$2WHnR)$+e$^*U$cofPi1y~1&a9_Bcf1s|9U0s$+-H$`rQWtU~Q1}xz3 zNXw$8W!TL5?{3fH|2yiGSb<5NBUKns`pJF!mU{y@Vz&0|IGm)J zS~#BBo|-?MD90SG#ZzuCaI1Yfi8k0t!s2C9QMHvb#$R@s1Siz%ykzu&i)UucJrpyL}2$jdAGU1R(F4}kPn zHfYyh|Dd%q0|E5cn%O0P*VR=svwM#$ z!tx>2Ge+Nspk>KX(w1RH;kJ`LghYg8FW1JhdB&K?2)STrJK-yKYgHAGw8@ogwAIJ- zSQy;_HEM@l?c$e%!sga~xckECZ&hdy$+JCC_yu-l>)>g$Ys~biru5%M;H)5$-Tfe; z0C&6e8veQpehoTrHXJv!YM9IJ6=Vs8FjBDWg)&-}kZ4mf&yCjtGH31D7F1X;T@Yy` z;mpOMwL3%K&7x8ufF*VbB9xoXN_9Iai|jt@R`COqz2C9F^_@C1z;h6~sr@o2vI*xo z9(Qa!dGUosPst-3GU`aof{)!4HTm(@gO~|EMT%~2jC_KC zH-xW6AYV!%oksMNpe-z&_tigo_@@wUMp7Oxo?ZTjmop}O4^?uPp=**AxjTd({M+w?LYM>xwz(hK$R^#jT zC%Fwd^J;(X&Bnv4UdDj0~m5uu%pwovE;M7q5ow6`Wr;|Q*pJ~#S61aXTc z*;Lk;CW{Ap?wAL8gr(nc!PkH;w}G9TPyW!+_9ol8QyS=P2k>>CV>^01KgU8laAVG$Me0NIfyU~ zbmVt|4lgDh;&EFAc5rdA0w2O0{3&p4b47y)B1aE>MPH^BNtEoq#4V_j>{mz&0^U#_ z`=C$sBz$TvWvSU?*TVjh<jQRY)C?0cgiiGmZvwdn9XkjcNg73MxEFV9q zrv?@ux)QStz)na^QA<_7sM{=n;=!!-vmv>`1exb3#>k1D^mn|4*h_Kx1K1Sod)8RI zjf*pCOw{l@$lAjE-$Xknl=!v8rXma!+;NB@oi#K{aBitUPDsMa|<( zUfGhXPA?Cq-rsi#tUDZPc=Ag3UDe1s;Knr1p1sX>dnyXPiyTT8{^Kl#<)Rk{ zx_&N80<7HRo{0Znpye@H_N>I7d|`2Moscf;^2qA#S-~0hctESj`&M#;KRJC@{s;cw zUui66-YS#TM#3u{^#8+_@c(oU{$J~fSkGcA zY`8wp3B;QAc_b6SD=y#=?s}ByOon~eP-BuYm_1QCL$JkM9-I; z_XW4S<@4O0R{)P4u(43xFRojxRInWdP66&HSb88IY2~IzS4`e6ZOgLamwzMX)-*rf zzrn#A<2XLDv+n@L?DaDDtt}`-IZD#st2ckp_quXW57I6Tq7KVoSO&C4+kdSaX{RMiU9q+SGdmndbOFzfg_X8Lh%lg9m z2hod(Ii{sfX|eR|hG16!fjFnkJ|c5+gDc(ey?X-QpT`Z;jB8ya%&MxZ$013|!nQd% z<6`5%V(}Oa5*meH9!`;WTUs8}F3*)a%PlW)XI0?ue<1~rc0~Jct6bbo)T=r=d*pAV z8O;^PEp7ew_UsxUb2LKp)Q^=Dl|m+Y0TN*~4GYzYsXH<)!t}3j$b)|_*>V@uMet4= z&Zf3$_k`;rt_9jSPhQCxlsX$OBmJfM)QahJX>afo@=ZK(U}c6%m5>Q;fv1lfX^ zm_80g;bX`CRrI99r<>Os)s`NVkPv~$g>%z^VSECHib=pw0OIYaFVqcCOwUov9%!h)P#LA zdCbw4MTTsd%bUBPMB&cxs2NC`eaO;}o^Ikrfm~v}QiNL9^gL=m(aWEmr!jY_@sU6mK8V-U8>shxn zd~VH+hyi_SDagBnKE7xu$CHZQK*5MzhJf+R)8mk4_VSD>?eOfx9@;k+B@?|;OB5_cXXk#sQQo`;2@AfhA`0P2R^ zo8ma|rJmBq4#RC?-apX822}>_;js+-F>pw+SYvcJ-YKtdRk%=XkyemA7Gg|LE`SL+ z3x)mAp8mT4xX}=XaS*!RTAcLZgGc{sO|9IG&g@Uh?o{wf!1zecb@AI#5i1Z|I*;Az z`*)k#U9e5mXEguyg}Kh)L`92(Tn9a>f8Rgp}Kvh7-KX>MIzwc zRp2V-e-9aNZbHH#?~lkyrl+%#@3LTLjyvE60zgyC!WW&-TbiBN?pqdE`Q_W|q!Ip? zaLd9nMS<4X)buKtd;?$vQ0}v@SwMHfr-I~TJ2N*4j3Eq^e-Ggw?>Nk-deppKeBZw4 z%uMl}=i!89_|QQM1w&Np1~XGr@TS1O;Zu&gf#DNe1cYK$A|(6!`oP_>z$ScukBbLP zQm};7Eg$jFe*TXOU}?#A8&x61Upn+_qZLOyA^KB~0uF5eRwrOt%?yHOW~0^QUGhT! z_FY|F_rAE1VcPf)`8l%I3pabvfd`J-zy_u?$eI>fS@&LtX(JE2emxV(&AA)46q5q1 ztuFcqZ4s`~n?ZLY725dV4XZ>vg~u8)Jf!)0NIjV27C77x;||El5mQpYTdrn>2jg8w zL1e((0$K^^B^kJ2D|9`91Z(%iY-hhyW$jcr^zGrm z-?FDtj*vX^ps!&c32FK=h|x$_l<8VomJyr*Rw5!KxDq@J<&pMm&oI-}={RxpsFW+4 z0(m*VsqkO-XdU(~B&_RYPo^RQfnj0Q8K-PyG=LkIuv=R&-0gt#`aIt!eKkgQ2y*Rc!X|o9x7N)w=u|*2D5jA99%yv={-$oqSxYoT zXJ!52PaVc?>_I+$RH>gW&wfJMwgIf|3DRt;vFLXPpv5*h7-Mj%6EXcjdDp$G+^=F|;dPYAi-^oYO}iH1l| z<~7Hwl81!avTe>m=xL<09mGG+jVC1}C^3O5rjt2PX_jHqX66Vg@7?|{_TDlo%JvH% z)z?H6DV0VV0YSRK7e_#(yAkP5=`cVVq@@J}M7kTKL8QA&7`j9H?6H3DI%}N|=fnAO z)_<1EfN_9%?&rSuzV;PR?vodZ+nAfvGfM`4nX zvgDv0P^oq~0K(d`*6d4QG2S5Pn?mq@ZA+{C@%+uth}bDnT#H3iQ8KYE%Q}&D{~j7y zSSGzu?#Tz@2io9J6v(?)dKtgn@Ce|X)ygolW0m!zCE|1p_77w)k@H zH*`C##qqGEDCNY<=rpR)V6OJ0*u2TrKxx*rZzLIAxP0A^NF4U;m0=SIS(B)Vr5FSU z9Z(jCGTe>K+znI1<(9#j;)$gvT3jB39rIF2PtKA#-vl@ z%iTIs=@ylF&)p+KVZH*sJ)EDupBsI26^Gj2g6Q5Gil?w9FJlnl6#+YJfNPrggni_0 zGQLm?oH_6vYHLG>0P?c#64b=3do1E!oUdPUPHQ%3@?p2@B#`X{O#t8=ta}}q_`nAA zi4Wa1kPsL$P?d{k1&IIv(`LshaBJ@aHJ>nOIOQpF!oqa`%!PJgb8!=9?LqC4&IYy^ zWY-DUEH|cV({WNxBaFsV+aZoZzJ?O6)j2MqC{*n32dc*Bd27xEig0t2dBBwrM*9p0 zFQaPV0%nto4vaVzGx2zA4a3gGuo~E%%yj^MfS=W(uB67h-me6xG0aL)Z63TmZ!smg zrafS8|FF$~5HH3q?DbANr%0>T8LUSk3e$V$s4SbRxNJTKOWf|})sVdH`p zl^i5ktZUvn?EPk9upzWI1@7WkgSGVxC(hO`7FWAg&|Dj4`Il*VAz-~g`&J1Q`7 zgM`SSP6Av2H7uyDdLt6;z-K1ncrfO;jRF~=f`oe?U`W6@;pYQh1KXPW6z|7Zv^9i9 za1_AKIR<Sq;otqM-ER+&^2JLwJcabHFVm36-H?Q}x!? zDhR|;`zakA0TATiE`nJKO`PpauhdyaEv_qUc%azX(rf!_zry89lRsw|E=mo@BCr0p z_X~67AtA7#vaP{ru4O@qz-~SJJ-5xkulCpL`svxqxV-~z|KXJl`{GE`C;5w2(*Jm1 zKlJUnh>Llt0pr?hVwv@m@r>u|nia4!k=y;da_QeoDd^s0n5s_e!;}@n?ZpQtRvh)Y z6=>&QlT9Bvx{!3lbMxBh+u4yHwmTm-HZ);(!@W9?eKI^}4f@{vcn^;sD=Qc3MsY&1 zRg&Z0v0)JlxRip?B?1>8pBqe#VF3XE0{CoVOWsf`fA5HUhhfnOaC~!vuVCmRk#``p z#Cu}{i$cVj=+5oiBzNv0gE`pQSBLWIr!7Bzq}*TZjr3ODoQDex`)rk_AjEaN zseOn5FA11TAwKpldYHPxxW?Q(yLq;Id3UxsAhdOkAYj0dtynJOH}C*AirVjRwsRlo zJ-xi1=&_I+8yRUYzlWXNna|t@@mZek(W6IFwvQKQu|F@MEoOr|1yrwKgZ-xVi$jLgy=Y0MQDX3)1&Go1G?7ShJWq_&gfS#6N zr}Kr`P;T%oLck{qRPV#+j|3}ERZm)%_SWC|CRb>1aU>XM#(Zb9=3c>psjFmW+_^V);mm>5F@N(8V!^Iq_v%Vpu8 zE$%ifL`uaj^bU7*Z2-UsZzCE%NXP0_3M^v5w+>_(!pYh(P{g_XGYs`A+&a3eP-|Tx z4B)AX_ZE8eNX6xIY3Y!@NuakkIBnuED#78G)7Llk4l{6e$H^6Jefy2g9>m-*)2f0x zqPQ*$yt$LRv4fjuf%oAzZcdW~zG#qzs`u3s+ebd*#&Z#@nvCLNedxTd8VYfyNVhb{ z+Q)D7Of;#EW}+_GMCqn|OuI1Rw%=T594`(2b+Bm48i3RkC^KR7Jn&vW39~n>RTm2@ zI8#G;NM9h{8)kh9bW}&d?N;hw#w;#=9gF>aJ9k-`z`BH(m~KFzU~k}2EF=VI&)v5H zp{C`Riq8D4E#lFVAR=~OZ>RmGxf-J5rU1e?NgAxx$pm6j($1|N*p?yL2q6!SIzSwb zIA!yEn-3}45vcbYf#4##@8~!|@CEEnMXar1Ne_knkAnGf4dXYl@@00|`vr}ig3?dk z><*|XbiEf@VBycpnTn5#+aP-feAm<;2O$q&DFdqvJGfQ%IdgkyY3WOP7O?9>K0r zV7|wE7B2enn&)c;Ty(TO65GkVe@h?)6jtKx4~v^$+vppfPTszCEAM@(ro}?oiCWfx zdUsmARjgu$-kg$;XmWS#0*3R3na%?|;UJRTX3`jsIFE~0aDwZnH`3LBd(!+o`tqCg z=I@~{bPROQQ#d^#(zybxWb^aI@F*hN9tpiJ%0lll=`*&&vfkc;=+9398IhCabmf9% z|GxO%f)&xN3wB@A^&&$dU5SZ_0?h3o3b9EzXCRQpA$kl+)@6l-eKh0XbvqQ)ou6;L zS@0Tp@cQ_8=hX!tQHXd1K2l#F7ZHZ1P@-bSt`q-}#P#V`6&ab@8Go~BN4Nd88Yt)? zwFrC)JTKMW5T1qc89?neD>m~U2}aGX9apiADY&_3g2CH$CGm6bvdf-Pk!k~tf~smn zbhH?Pon0hH`$f@y)HgQ~&p0DjSN^uQEVAkHIfGtaUImdfn{q%i|Mi#>fAiCQ9U!^L zV6ha~h%y20Z;v3;H@n>nPM(tm20>?HT{QO#*`2659zB5UECX@rcLRbCg%M6Qy25~H zLgbG+V-Waf1^Duxx` z5ocTvbG6$aZ89!`7BQemkHyhYR21fF#zm?bH=-YC*8%GC~r zXd3}R0%2jIlp*I&jtX7}GUw$1>n9@OHo0}hI2eO73}O=!%1KMNL?d3;2qSx`P8s{aU=sJXWHg&h*1#wE z&)(iGaQ99tuS&Pv65wx^&~MYtx6)}Q@Nb%x>Y3Xrb3)5XVY4~87VLYe==OZ!uxn1p z#?C^^@OfJ%)ZT8l@~&-8E=@f6t1e5K%R-knAYFGZU)2h*`y@Z1Ro>FsX~5k6!^5LW zMTIV$j*IKPx4LASl;ilGBOi(4!~OM|v%sJrQXX5{W-H?&YC1YN7=HYI>(5xaFv7+9 z-6XnDGc##1v9IatzkzvZQT_jL)gMM;_2{pPib-w-86D#Ghqm%WN8ntWU9_#f#jHSg ztIeN-Q%yw*1}ielvMcA)`;9q5A>71D795#Z+P{MEScjP_Rkku9@PaDApZbSKMo!@48KmO&MqzGIMfZ<2Eljf_ayK5AojAXw#xC z*skSyzNxRP1I|*zzevbUr_hBX+@k5%|rQm=$+dbUOI3KLz@xp zjf!udnem{i^Bk>COa%EZ>y)HNQV2&(R&})i7ngFPG?;>F<8Q(^c`q$dn)bUjH&#($ zVW~RfCaRsR(wwZYw;;cU&U)+4orF|_==K3H1oSq9X|oxBD#V?qlhQ)KNsA$rs^GQ4 z&c>$9ATd3Sby`FAXPKYtlK4aM?_$Tj_E=dN&jc*cI7!q>Shy%XvYbgsNXQuI==w5! zef__6blkq|<>6ts@d2CwGRZt1Ulfv(kTAQlZwK_Vye|W&(+3eZWq2xy+Xx_=nURqU zT{ui-by@PP{pa-b1en7xAQ0NFLL)`?Ubt9_Y^yI53#=!01i(V>Bg(Shd`IalR&}Wdy3?n(o(L0++kA)t!r&> z!#OK}tTZwsGJjm-5qy8)0O9%(+4MpHaZiu#JSVDK%4k@!=8i*rRLmF_%k)=gB#jQP z9U%_VMC)(7e0?EDHoYMR+|K>8=vkB$6?{0suo(-h8D#^Y&A-Z2Jyu;lu+q{J+}t;| zG+CnsFb9~VgvQ6a_3*9_|1&{$`aNrT;*h~E0iq48n^$W~0)&&Xs{QMHo9gm_lFC3r zL`VoMwM+o)@*nP@1-E|B)XpP1kp|pL=#lH}puco^&a9G@s2&w1rN>*68?RwqP*PGJ z`k!CGSMSitZ-bd7=h464tj3@jP)S4Cxv3*?iLg<}4T+$wVH4FIEzm0)TKQHL7KZVg z&d$yX2?=?Bsx=ib#}Z2%G7}O?lA@k?)|Ey{Q(&iJlDFEsDV~wFd)oG}=^dHuVt3Lw zL4f}JH~dfh7)9t`p>9Qgod_>d|9VJ&pH z*A%zj1;99b``(C>wDdb50RI6ETO6Tsln?7k2tgt2-_qWmm6-|de^7U? z9AV?*ml<@DY)V4H8eDyLf_2~T+-1#YUk3*VD`F+1)H|%kfSB|3>sRG*_2gPi9KyDy z4L&Bm%Tmojbu%*|;0o}$-#AXw{nP`^@!$Z;=A6Nlo1&4TA9<>(i+7boBxUsUsGL9C zz-IxY2jwh92%vxicw^G+=UPDhR(|i#jJEtG^gNFDuy3_*$tWwgpvu^Ple=>fD0)2T zw>vH)U@9jpj4k5|9`AJ8hqoY$!l}nV)JyujvaRjsuTsT#;^tsCx77VS1I;Jg6 zhjQ~~(VsvK4X8yB9`oy2uE1H3sq`$EZCmS0VIJj z4csS0D{?OwK!08OxUEAKb?NKD#MaDA!tm1*_0|w?A`GvjqON(gMdlK4C(=VFKiY5@ z1Grm%nF1$x7^G^B+rZoKrlq436O~{FDeWnJ4XKiwo4`}{Jkf}*b-Oak#7^jR4ZvzNn!~I6BUyCXehbGuqbI z_Sx&*Oa`Z3b3poFTyo7*C~fd20h?%L5fGv2>6a1v_|lIbUuyeE7ycE7f#@e@{9XUM zUKGD`?ay^x@(7oWiOCX@c|;1(iSe#E_5eQlO1dlx*h#rv9D3*5S5k8Q*-=L( z@N%CJ-Nv#egh?eZudGQ4n=?U%kgNU1T`b2Hhz&qv$jQpubQqg)i^<|fwgf{@2aUv; z{hY6{Pf;iyPMn0v&CRTsKyx@-fc)TRDS?;KpAY!g7zXbBWr2TUoz?hHPb!=3#ntS+ z&pN>Kbp?mo+|Y0cXnG=n*wR6jX6lj#FJAP6BiCTgS)&2_2E4`h)i{n^dNm}G0LK-Z zaubM}&Fb)tFny~5dF=kA`yDN+c;r5a6+&ZXT^CDmHtCR##1&3_ofe=m&&{2BAM_px zR4^DeIhh)$9bH(E{AZ#CID2)GO3H`FUtYa|2?b-C9AA%d(edfg`soXLpdYT-@tQ=2 zg_Vw*FTI3R0=Q?Pd^qB}2}psX%5dlMK;B{WYYc&2p3_(|@``a3uVZQHvyR9X(5?Xd zenH}Vc*=`>Y_U1~rV~F)t){xx^tL^01nWPxJHOccr9dpa<%&Ai71R24^?zS*f3OPeD5(`{Ty zM<-c&hW-PbpNcqz+1Zk!Mov4ZQ_QokMD{lIA7TGc>bNwm}KBz(2KzyAUkgb=m z9>gQF6isNd(cH#j6Yk!>AHdF2GLq7+&+EDwOp=+!+i(Twp*k6HFMJD@iu1s=R;Eg_ zyQfDMhJ!x5*IQQYI5{}t*OJfK@)9326X4^wvP5<WvT>BfeXg@tiin!D+*zG5_{$ z$9P%|4i9Koe?4BVUHYT-{NV+uEO-I6iDYC@;UaVkhM@#5capVCtq0HT@nCs6Vh-C+ zy>nusqR;rDVO}1&_lsQuuk=vqujTqF84%a{4GZhqVC&fAo9u8nSBLula)6FND9J{C zad9dj8R*ErXY)BoyZQYM{h+ZVg3*po%c^x0;WziQxM9mfC27w!jFKDYY~=_7-Xa|X zXQN}XAch)NxCTGPpP%F00!yrT_QDePuMgNVY91TZoL=y0G0k2tKluHuhcW*Tmn0-R z{_hL@=PwUCJ$|?E|M?*N^^4J~|BpXTw!DNQ_rN1|mGW9To$~!&x{ue4lsZ#*t$4>6 zGwL-hwz*{+gOCx)b7ZtjBs;YSGAXg+@Yn5E4U#XwE{);ktMM8)wykQ1n6FXLMbuTv+j zoH+YMz@w`s?wa<|7{qr7+X$w$ zwP#K}JUp~rzF7AD;R4jZ?RanXL_(r{R*J94aXX@y?Nu=pLV-k97+5E9WhEazJX|2< zVSA&;=406O4gXA8T#h4t|76X}N69F~&}$n=E5+w|TyOYaPppo78OxF*O%3dJWka+KuK8UjA>} zIEVMY%1xeZb?M&DLxXw+Viw&E!ZuADuO@ZI$mZGLwmAm*2CFf!;2HoAm7_K156h{; z?24JnFm`xM)I4ljOzN&mzjL;y!l;mdD{@ z{F|Ya$PV?=DW@%Z8L))1gQ$Bp0>^l*yqObsQvv4gZm=LahXou5$%+N+%~Ug}`M?Xw z8`PjN@cGq>y^%8e39E_??(*?9@CJsXt>0LsGu9+qlCc(nKEUMX}TPD^Sl1b7a&}< zva96jKR;kL3J#P9Gc(xaA)=JqNUf5o!)3@5z|wH2{eEHi%Fi^2*fqiI+)su(Whhs+ z0(%QZrFQM1jpXpV@a=*PDLDR&1yghY=!sx+pLj9vw2i-2CLU|64Kyt<$AXz$CzRMh&AlC>evOAx-~ME(KvjSLiIUXsy=kQ330I0t%7em#AZl6r z!$8Ktd&4q3vMI7S*$Q~_BOUQU)a0Vt(&_bu&7@AZ9S&0N+`4uNfFtN$Z!&7S+-WmJ zjV&D4tM=2xt3D+qh3o=Xzr{d%r{Gon^g^9~>P^4Kd>dpoOuv_B{0s&L2MaoQ*VT#e z@rR3Wa8@R3&aSr_vcQpLAPT@M7^hiBblY+fg;Gml!TAirqUvYU0l+!Y2llh6-Jm#@ zWKc45`@l>ogq*oUMjK!!uvNK$lv|LU_xH~P^+m+rj+W4pt(fgr-_bs4Nek5uUTtmd zBQO2jJv9rao2710N0l8$b1%D{K4FY}ngXrAIx3wTr~A?!as6ciQqUZM8R@orGJ;&? z;I!hJXNWf#z3h#Y^Jw=1W!gf^7F4FOl6U&Lx}>F*f54UqolCpH%|T6G`@_e*-V3j; zkXjdV&3`L91myxd!3~ggl!3Ybgvx1zWEw>hp+$LFUfz@ACM7LbZa#)s?+9>@=`>$g zv+e}`yZ1u>peBrS(Xse<`*7~Hw%S#=P8?qX=amZZ)PH-UU79YOsj6_tk6jD9n}*b# zHe3wd&v&i*XriU1C55R*6p?ufxMPC*9vbS3fhP{MP*<C-0YB*j?g0j6f!ei zEEG|S#u-blz_VK0hk6SARIK_Zd&^G694A%#$NSmtCkbb{i@i+cOJC{h>g#c@0h3q) zIKyDErKzfT+cJS5zzKF$fL0_W#X{Nu$eM#ordqrrF2AWX07lT#SyuR9( zgIMTfGqNkm>3F^xK7iO-=zN0&4@_4_5xCeXBaZ z?lGvTwbvIag&Ev_`W;BYbQ85hx|ZQN-9IgqBO*d|Hv9mQA|?PN$$C1W^K(H}h2AM}%bG zj%SUy&Yuezn=Z$+GRSnFk1r`botcTr9elIg;4W(}a~Y4q?9I$hM?*)aNP71Ulg#LT zmmymwmgN)MK=9g!oNqbW@7O+lisp-RFp@s;-_`wM$q@|GSHRS^Vj%0C&_w&MwQ3#ZyObpzc`^ z+s>|tV28deg2}xkOFJMyqAjw33E(4D6b3_!$4Q`u)+1lUZnNWch83L&dQ3*tXbd62Q%E10PDy&c$?*+PT` zXcLx38hSkV)!Lqn%GOnf%D;4AbAM(WPEnaKBA0~=-dzN&c7)C zaCVBERML2nvH^G*>syTW(yh<*`rk_XXxIial$PLJ#g&4IFaS;h2Ms#*6J^SHf(~6D zUXqHqxDYwt8xw-1y5(bp`XnrTTGYEq9l8jT;4;@u^0R~3hI%5Srcj118q}83H(y9z1c3%*@(wt14xw zo~+m~T|I&KYlRN_ecRf)<@)+MWp`0g?+2-GN_wrJ}*Eh>O5Dbd&X(W47~Mga1q$S%sUu+q|cvu7&$bxN`kNI*=C<%L{+n8b@y z%l-TBtIikbXlM!<{RmwS;K7AbVYhad7#0Cn2#oI-BioRe)@6Lqg1L0k;`)BLs{ugE zlP5m?zK@6gR_+}Pzv4EaK=yiY!`GK2^wZPp)a2=6w*?re9TjVG6Pd47u}nEcsgelr zacHZqhYg?T(4>Bq zG!p||(KBz4^eQ0w%ebn!Ez1-{ssz3B&Wi|pSp8fG7YAW_r=K}|MR`_ zXr>CQhn>^mxy{r>e0)u7V3o&qA-jk@v>s z`YZHGS7m78k)A@f*F0xl9Yy*Ru(M1V#d}y(pG2_B)AfIOwKyZOp5vfI^jYUlfHzlQ zh3&vM=ktFMI0)KB|DgCH;tOUBXBQ;NVp&KU;iR%rwzB#ak{ zh%v5Amhad&C=VGVxKWba3vG?4IZ1us7>|sJW~gJw4T8)dsG#ezJr4T%28sovM$Ic8 zL;4o7zplPc;Bezaj?c4r<<#V+2^7p@PRs4Yj_BZc`M^rJchUBm2xpY|di8b$=DH3f zC2-Mx+pe^9wKKOwQ4)Y`@Qi_Jd{U#oiXkD(}>Hd zX*ECUY>2DK$9<*63d+ic;YB<7tuO}+J~mp5Q_JQI(oj-f<$U=gd72BByUf++EXLu! z>@%~o!vI`RWtMdOB&&2LhKuPzB8g=uph4P|2y!1kKO7pw-_9c}Xp&$gpE6K~}`-Z@_1S(syr1k2f=@AnoX7`R? zYSrP=^2{c{LdrjW?CM$MH$Co6?Xb9Eo2{}v=S;5%L$Hfiu5>2YuYzHTH?4rcDeMn! z8?P*80%p0=dJk4?I&;+a{TgTPv+N%rGYr0!dZ^M9U!(RXWr`Pea8OoIV0Y#&V6Tk| zzcs}%#g$!IIWr9ES75Z9k=Ft6d0K`Hph#LB|flD(*rq$1xW7(Ql&9 za;^C^ld9!zG(9ev{1;I&ZilY6?gq8Qy8BcjhGh8anHQ-$h@FvOF)5U&e7NO@jAf1W z#>U2e{pOA5r4P`LITpwAcWzrSxg(*0(momNh_eA5ZtkXVaT%B!sAcgXijrOqN)j6?9hRx}Uju3Nf24 zg;70S16GW6nag4u6JzBxHHRj3sO#QvGlQ*3!SJM$^8rf08Dj=V2HZ5ulQpDR?a|z` zEDK-a~oV|bC#u#;hR zdt)I190Sf^p*wyBv6XnJH>ABeIB=oPR^Ty_eWC-K(!f}xqg8l2)X5z24%MH_%k%QO z7j0p}3AC{M0-|R8fTr?+q(2C3;XN>XK z5OZB_PR*%4%)2Dhwp-IqX>{3q7V06ewgfz6UL2R^(eMX=ufdrzkd5j=6mw_P0E+jg z;2H}MO|As0kdl<-S(Gybc6Zt1!fbm(!-e~tlRM4pHCaao&7jeugsN<+g2a6VD`JA4 zjxL(h{XG4}WlOH=)A`XWq)r|IC@O-uiEBfdO*WSAbH?(MKyah-9zO@JH-qgJ)i7X1 zorA|)!>7&V$apF+>7wf}jBi-&i-3bSQ(4E=^&}rQ%%l(?&YXmk9`E#yz<>=d9j<$` z^K}{VUNMBwQ1C2Qgs8s9!bj=02yf^GIFp~C^j2zWZ6xM^WdSUI^+Y3H;zEt6nP zV&W@)PlxzBBzIL?sQdqw? zy8FGUD#vtm_s8XR7cOk%zs?#_9T8kPqguO4%Q9k|^El+u z1&Wm!yly&MyahxP^Co!Ftd}=wxvy%3JAZk3${-5V5JyaS z@46TJ1ER4S-aKvl%2;YSa=(P}aI-l<()Ba6rQgz!C6gTaP2Ry2h&aM*Ez8*!8KmoO z|DeFE=jgMc+&vQ9RXnZ-apPV-ybfYISB`4StkE_xrx*v?uZq*PPE<;AI_VV z+T3SkW7|nGl2dX$ZQY-Aopm?PJf*^FkE!`$&^$WIZURl(Kf|4%aL_ocNLerGmVu^W{QCuShMt5`rlCgeHSn{(YT-e zwROI0gzGR99Row373FkdY`n#dfN@f%^Z#m`>#rVn{`yz>t9R$I$S#l{AE8$ZDp!qi zVwbE35R-UuCdrf~bJ@xIBB;9&jwUAD1S_!S(AvDS+p>!loNXvcBGYVj+`j6a_)th7 zq;2My*?ZI#MLLiwnYXFer`t+!m#_og_DPpXrgz;VmT0DYdNJ_=g-?rYkMzdszljCb zB6$M$hK8CyVhn!mvyN7rM>8Yd7Y-VUqCF$F z31c(;?(&lLoZ~5oH@lm(-I=ff!sfh=g#}tgnGoc`t@Rw;IGqmOAa*{IeL#HnCTkEg zCqhB~}0dcgXIy*u|{4132#kNI5xx7Wc`A_987v zvi=!pJ9b@%WNdYBz<3WgZSN$V+-Ii;==8R~{oHSKc|?V|LC_bG1UCM}3R2U-i7B z{_g$zyDm49lgKBXY#=r&OBtY<0UThOP;LkpOKOS_@!WO&!a3CbDAPZG$u+ z&h;+u(Zer3myR2xX6%gH;CqK)HG)O_^#6Ir)quS;IZRtunPsNKeSFqB+gL;^S%-?UvUIkP z>5f$(saQ?n-?&*yXBCqB;g+15v&6%D~0bfV_Ml8XXg z(X>r?aJsAZC&oJ-$azt?HtSv670wiUTD54L+)ao8pZ2~5ndA{Cie@VSHb9Am*n#R? zDwgZjtv$JnekDz-gK#DFHS02KNZmc&NG=kz7kXJl)iq~k#q|#c2i|p5)C8<}4uSw; zDQtU$Z6Rmfdo5`^%P;XYtl*yTD5;H>D^ZS%(W^es<)8vE9{ONW#`k=SOBp%9mLlaH z_C(KSV#;~eh`_;~@hmAkYkVTHn;peC=HaZ`)^6t@CVAEoS{gS3&cT{6xPXYhn}krN zCV zUx!~;OIOcKnV9EIEspYbxs9phX-F>Iw1oX8T$sI0uDD)xNexe&E1R(v??Gz1)HVG8 z==Lc|2{&>{xYV*WpzbRnB3(|@Rf~+7QYQx<;&t=}z zusxV{Mnz5@>uqhb?Y%I%UY)?_h>Zm!DOJ0@SA~Uad)Z9Y%DuHG2_6{w*XFh)kAi6K z-D}Mx%N)p(Kg=eWjF_6jyzRg3z$cfcalAlr6TW6O<`&@M&{{ZdwKiLnYEQq|p6BE| z61XB63UkIFLDlr`l>{E``7@z%Y4OpFz;rs$7x{0b__56IY;A>BUl=Jj8*ufi&G3^7V z)8J+v%<{=Unf3L`-|e8w=YN-!=*In1mDZOoUo|h|a&og<+a5D(@RboWrn78lVG~PK zACSc(`5A){)G`FFvnu{{-(r}^0+sW`-F@#~!n*gUvaOhhz*UE8?RMV_Bq}jqNPi|m znFM7i;*%1x(-`gD2Ocy)&h@Q?aN>V}vk^@0i1EtZ~(X%;c1TN03#A65- zK)Z0dyM9)8JSAoVI=;!aB`ROXAqaYcLJ#P_;p{wcAn%VX4onNXHul>#fsLL|? z>Bwie)~c!Y*CuwAv}L;QbsT(4l&2ex1P(?)c>5(Fqps9J&ley}aZTDOfpFy!B{@XK z$=!~I=n&yIue_liwvH9T&b^Ye75Y?YxQg{O zk9+Fg?Y6)*rynZuXoIb!Tz?XqjR zH4=b02~hF8JmxzRF<+e^S8`0n3!}xnq@Xmsd3Ld(*R&0VXRzUwcM1ikg|Dz4s?opon z4O^Q6i8OTbBrN3hv-#0=Nvn}G2i~HT;_NjDusoc46Xb0OCHelOJyWw4QFD8g%`Vux z_Ns_1TCesM!@SO}B91C#*QrYSj$F%?0`@K-sn}f^E319>Y&m9dVBi|Jt?Q9*@t z+4La?t6IrvTEz_ZXL!FIlHkI2C^xGNVf?znPVc9xsRxGk=MyeXl4J@hx6gz`Z+s}8 zz{Xv!==#h!(Lx~M`HJGb5P)Vy5$ue`Ks(a315Dj4v35)d)l`<)f6y z_?tJ-(709rNV$%_?bcvXRW;`RGS~mdtw=2nr!daSiXWeP4XE-I=o`ER0LfIC?xhGdiuoW|+{T8$4sZw7p|^;lqQd?16O4ffv6Rz{cLn8% zarCZV&JCbS_Evxgys;=o9CHxX#|JL^CpQ`V^w|hJH?r??aXIvS^vOKg?p)^KLSg{5 zfI1YAK@NcTiq$R*UaZ>kZBwa-`;)4TkTAyM=m2~Gx7^!qDXH5{hBzxnM+|T8lME;q z(teRSeKAN}VP}4})Yjj7EGhT_rz)<&W$oRc8s4URI>{a`b_*ZtUl`ri>8NKZ7TneUQjg}z(dg;M zPhxSIZEBF4k`j?Km~goLzYbXP%5mhc5%0?aKY1z|@|jjm8*w(u=ejYkVsiZr^>S4m zTA!4Dk21=<@4?{e5Ni&N0zwAa)W&9=P<5lsS^TTs1zaa8tTJNrl6nb5aPq9mO^V?VL(U3QPJ_i0 zaq-HdnzJbWqn;oEb;rdNRuyPHvY!QXb#-}>x=Hg@ORZ19Wc*gM)#m1AZ4-vxfYgp% zQt|q`w0M^pupMh{X;I!gG?{VpL4@>`Up^VQKgz?Bv6gi5USCItVw2B@JY+79JLi?plH4cXBUEk(@D|W28gU=0BQ!ret+22y zzw0TqxvQi_#N}YwHlM}U8AQlg3=p#EH{iIKsL|KI=t3rBVH;y&cMndw&=-Pb3IQP@ zAkofc&h{}G1e-O=Y-jr)Ex|`?g4DjqO$YO8z3z(j z%0?@77xl5G8#TvqW%j_P0nsBIqSUy;U}UQ>K+8bKV@;W+lp{~>w2~*H-x*(Iv>nmn z?Jbim(%9IP&kVNf_g38ZwIi+5e~EXJ?`RP=b`q=ZKUWf@kp zmKGa3CTPF5(og?l~ffZBsZk8)u9?sDHNz3{=7;Z;~MWj;F z(4}LTJnp z<0-ub9xIXeows52lR-duynyy`Y1U{la{ha2+D)$YN}I9)V?WrVj6~*Ll1gxjT)n_c z(T3EuG{n2EP8|IFPKvWet*vc3dH2Vlq5s@Jky5Ty5;4DeK1__NV#K^e?W&!hBVYX6 zCgC^J3pd3w`pHSU`uaer z?0O)jse1qv&DSUn1TlaQCFy4V2q}2A?v3>RmhE0k_G9nkLv_`bXhMyOc z9++D2Uio~QA)crt9P~8g%01Z}@%>@domp+N8I|hvhlE+^YlNv?_Zmg4Mm1tV6|Y0) zovi7)y9=;M#n};Q1Z~gaYse!-DLzJ)=Sy(Zot+OVEUH0E1n}N=r_wMVBJJVGw^6&V!=(gI%@A-vNl$vM*DEcXBSIL z^AL7zElP60+<{bwDAYL$gi&mu_k`nq)u&G_;EIGP1My;DES6ftSSE?!>#RAL9~DRu z9*v9*!_7@VLaJ4b0}P^0IQ8`PCu}-HAkQIsmMcrqd2K-k8Aw7!k_)MJR`I)e%?Zkz z6THC0rVEEKGI)4j0Z$)+lO5K&HgFgKx@YE|CXmby_tyCmmG=nL$oc5#Sm@|_4E)>mwMsXd9(mpLEor!CbvE&gpz zb4@Cd1NI-RS+Mn}{ru&vmuEXyaXfA3HVhZuN*5MgF{~-3l2cNm2{ck=X!eIt4bU4t zm(nj%z5kIl3Op2mRA?2XIww)#`{unrC^`B$8!zz!37X@|6+$RSu+rs?!`(t&e^lSFw_ zNyn|qfu{YI#FdHRM(4n_=zT#(nZ>5#o`3_ANRhEcQ)BLpiM1tuy_t?Ng`=gLihj)EM=herx-EzBxuzK}R-yaYZSRES_Owp-nF z_y+?_wck6hx)dLly&qjYo$+Hw5$BLmV~izI$@hU-qaQFf#+M*5S)AHDX1-7AZo1{p zH0hME=`zL5O47+}{|y@2c=yxCo9y`auVwR}Hpqcff1dkPCTPby#vIoxk2HC&7?XBx zL)8oO+>?DlJWjXgU;L@Jmn{fMfE_n7qMG0q(|!uT>bUhXxs?Hc7Wd@RNCh|uM1k_N z4SjHo+opH|b{hQck)2)f1}F~li*iTH-V5A$hqcDJ8L$rsen(7A7tL_f_Aw*@obHXT z{|KTtzci-A6) zUQmLppLymFo5D$v;I`@i$c@wkhDL`=Wib0f2Dvh9@zp>y2RdUc9d0fz-{Hb606431 z4Z+9*!7~&scm;Z*#NN3rM(0(dBYI1rpF1c6%!>@-T|3+rfn0@dQR>)uL_Zq+(Eek$ z14Ynk1KX-yg(ds(Y&eD&g`nW1{`L(bkbHp=#}8e$a51W)2(cS%_%}?H8JcldzB^Wb z_|Rp_apVufZkRrSc+JRQ>rcUPuB(VEO1-<^=GO-n)GL2|2}>CgqfKc z_%7(IQDSXh8;nL?Qer;=hq9W&YK{umwur3V-BtcMF!zT!V3?SmjCQvVqrxPXaIzIl z2%V}#vr z3c0v|wKSmgJX;!aw7BqH?~6&8SrzK)t@1)yaI%T*L&?uyC6%Cw2usj<7hbfE+ollT zwc6J~j7>zu2Sy%%U#wiX0%k`e*X%C9h&JrnC7NKMdU(}$*NShT0W1LmEb34=5FtgP z*Xk;8&)ws@@x&3sNBh{0?osao&3^3@wkE#;$cLS8-p>y&oBBcMI_j}=?(Zkw{u!hE zy1ajWmqh=AW|Y4ieMKe4OPWph=X0n({{v_K!irpz1|RCWG{%uuH823`2bq;3j*|A_{(}EL^BmXZpPs4kF^%N1 z{MKQQ$K||U1+Crc!+rm^XKwsesNb1RPcJ>s&Mp-PuPi_I&_${9FOd-S;$MO?GiZK& z70cVR2lKwvBFP%Jk|K<5VdJ}nuU&LdCyDIW&M7F1&KvkGQu+1l*u=lE-}7w!w3Oi| zh**#1r7~NZ$}799e|Knj@|5_`Ol#B^i~6VR(Xaph>-U!=m(iF0``kaDjJ^FI(D=^> z;m`jUA3qj!-X}J&S3m}xjqz6L>$9-l3l+Oc78mi(BjVglHa-30^DmTe)iu!9-1bW{ zGQ5{Z(96pk!(U{XNBb4`t)K&w}qxX{uIYzKj})-t4x0Q@qr zMsA9d&X||f6Q=OhV!ZhepRL3axvoyR-Kiqg;^ z-UrJZ4@^{6Q(#~qFrEYt7eZ#;6>-WvmZ7{de1_$(B3C^ljlvTTx zM#2tZFNqq;kIGqhUa~rc-pt3Ya6)< zLN)%lv>WyBo`QP`9Ris)uo@x#==N0l`Ba(vTA9ezB0l=k~j*4j3dE zyPad8@1%44%e~>47|=p_S5~41B*(o(8*YeYk-US}f`O`#oib@N{<$p}YF!=;dJV!8EQJ0vX7)k&f7=!`+?Zglj0e5|K5+Fvxx?Ja_96e9lsAKo3oB(PP#(CBb9 z^~?o&v)ju6{cc7^fBPRpbxJH}>Y-lHcIFCLb9q|~b96>+M!$i@euoSsp1maio}bTX z$`&-H*ixM3UmO8J2~vR=C%T_%j;PyF@Ep$!R60{V__!TMQO9-6f}+u0o^%1XkA_vD zRZjg$Lo>*7%+*k_OmY_sgt(opF4mJk5h#{D^qAKTSyhmy$R(fhDNP>;*(%~PZ*3-&La`N+9V7o3@4aLO9i$7aJuHyNznC9;7-QJ$0I`i893hWH@I4cX`IImytDZ`2xSm%_#;Pzd0#TqJORaHxc7{+^7##9mWvSRI`K1;7tHy_TPL}6%|q~H$kBug)3aA znx#71wYONak)|hGl1I81S3#0%vPM^T%IM+4r4i@Rpi_TPh~IMun*PZvsS{2fjwp*d z?jxwisGfouMjcr*$XRdo_&W8$HuuWmIqcw00gI&(Xc9g>saMKrsBmhp8&bHFy}n9P z)5UwiL&ev7=KJH+et#S&F9;Za9e4<7BS9(WBM@~)-R@Ywb zq0^89Q9v&@EI#s02WWTV9UA)lwQPoLb7n#e!?f;{`>uMMpG%YoiIL7XFBA?`o$T>? zN1LsyI{UcrZQ(oRObZGddA7$t%^75u?#^E`DYUqg5$W?jCaQ7QlR^IsH8xvo>xwWE z6yoC~<{R9htkl?Q!H|KZbvdVSWw1m4bExrn-8vqSHC4EiM4wXn+N`qrRCY^D37nJB z5Yf7dJSVRkYzUYS&V?i=TPyEc~;)?K#`HcofP!`V|bSas(=7lxm>(=^(vkFp6?na*aL1~fH`#RdcbjhjD^SP z=s20aG!TJA=DC}FlV8MgmK)+x5hfZCSadG!+cLxhveIoLXcT23s9wR?eX=px9cC6v zKDlFN7F^QQbLv&w_^%z&$&oZhU7lx#`hBvdnLP3*IRRJAqK%1BCJT3l`#_94n?a|1 zRn5%E5Hk2ZB(4thCk~t;j}lnXc&ENxmbPh<&I(1tg7*9K4_RX=8klm3 zW1;|19(+m0EA{6Wa+fVO!%VLs`dEDWe&ZUcQ$0Kuvjt+M`? zU!XL3WjMev^i-(a>Jxmv$kf64bFi*z4*!sth`2LQ0mK>wdCD>&D+0$(2SRe41|%p?6%JU= zOvhzSCl968H#WjS;BJ)%ZR`ScaK)kOB+ClZP!pktn<^sF?^sw&Bq)Bbx<>uWoe=Nd z5HR>@>PrZy_>k;?4J?);EypuvNIE-%YrH`6+UBw{Rx>m(1j>`~?1da3GIeWvd;1X0 zlY_C0JG(?SdcG0l24jSCWnwbodK3Miix2_#7;w_1({t8_(C$IO45etDNMTFO61pCjyv-I9Gl0pWRd*6$~D zSF*BB5qdt~U%U7I6TK6^IR5X#;s4+MDbd}52y)}k=0Eh?IJX5q+C2aWVAt?|{Frr* z89Q!3&&9ENdHjNS9ba9EtnW0xXA|Q8wdw%x_PezD4S18Qm;9!=f6F##hyHK!y#Kr1 z24(M$mH%J?h{65Ot%S>*9%tcID>y*d4*9zF`Fx95 zwrgDP-yKBm=W}&gX(dXQjlakLsC~%6(P3FT_z{q0YH7E-z|s5A_@bP7A7qozd8(+$ zf9?Ir6wbE_0e1`Gbp#ym`+9jbPrvIqvnz}5!Bh_)n2na6AM9s|`b0sO0TRROd7(J& zhuH4wRYlZBMuUUd^B{W#=9=o-+T-;mPKPQgD%jviMju~|mzcS;qhA4=+4Gc@7hT9p zaPuq<`-wjzL?6I@rH!Lc;XrFk3)1opH8oGAU!k`cWIRl93$W{hsu|85&Kmdx$?56) z-JSsM1llsE#Yt#7z#oK#PR-18oV=fyl!VjzD!$K8K~zMnsi6V=6(O!o4_~8mUKO?t z%)0mzWXz8Ql>fpTY&)LL20=F0r%**fqXdWu$H&IZjEzD6DOK+uiEHEa@#DwHNc5RU z!=ZlVQwhOy5#uWW`m(-8yDmt$LqbA^))snm1%-sP*VPfCav-ro%AIZJwTzo(jTsrB z%zlP|hg}Az0tgCNdB>Z#B9p^2`egV0&h zuEh$64(Rtln}$nm+_({IlI!Sh`U65`fKI1_j|db>ICcSxjYokuH+SKqnU&nUA7QrQ}R`L#%4<>>{Xn!PW1>B_WzU^FFDv1;tT#_uUs7u^b>~sn7a4 zJKGsLEa~a#$_%(~$O3ewq@+Mk;WsQ>Yusf*eCk4K?n=8WYd;9VpnbD7@`4_;J)GcE zIqEnWoCwaiuAxCFc0)zw0Xwn2kKS;yh9s8n0mVx^VV5F9oo$v19|zS+KrL1x8S0_~hn-y!!I-fQHsOUwElVNxVynOpnA~ z$jETOx8e+ny>`yNG;N^SFziE2%nneypKvLCehAg6rRhF69+$#IT?X+-E<(pgQKc^C zOWk=aLqf#>Ec7`o_$qg9hl8}HbJX=w2?=+;+*>!)17FQ$rIli1ZB00kI2z7fTD9uh zLs)WQF3SP$q~Nl=+tV(e21&z{5doJXyEU6IBnZYvzw``Lg>e|3*o!{tVBvwRlM$RH zrIk6Oweoe2@aqt`Nf6BbgaTea`UhX8-cz}>tUdtZyhkf=-phYL*hK^fBkz+4zdS7} zCT2L?Q}EH&C(bM~<$c?>t>@5&?}!Qd$q+6oLYH8KoUWDFnuIoEG35rlsXOO|wTJQC zQa8?8&mL?|UC%481z{Y4>z|BHpP$*kEX&HFV^!lyhi{4LI^auZW5S1ARS&MF zP9R8|n3Lmz8&=LS#?-J$FLu8EN$KU$*ID6v+^U;eSHAW5AY9^eJBmySqx;EMuo_wXCE(^=J= z<2Wb$UOU?ulm}8$QhQ@!tHQ*Do?f_e^(vOF4a!oSEn64sOwi$e2$B)MZX5HtgiQkv zQ@{#G>Y^n z)yIJBr>HW7*A2!8`b$zf(%}IEkP1AgHxFriG^y%mUawuJ5)m*$Rc9y`kpdxUljH0N z7xawMbtR}MwYJvH%nDbbQ^xVz$3%z=o*Q^6q;~rYG*O5JwG^xKfITj~KagF<))rEN z6xx=g{aZXR^5=Oc`upDwgy}%aSwmg@lwRR%ZLKbLAtw4RgONS;BVAftpYh{)6GJ_j`5+XLPgc!sDzb7I=6e z1cZ?^>u7Clg>{C-$A!+*Ak*Wu1Gy+=z4qlfOf;_>f)S`JNW$p`@lADHdnTJ#7`sSg zyhbV#R|q;__z(mW!q|{R3JtA&_Uwn)>riQ#?kj_OB-$dpd)p?_ie^s9$&QLjO-ZqV zl9_U%@Y4%l`6ch7mjB?vIp$$5$D@^qHG+^CF)Wds!~xGPqpUpDsdEy8LI~`@Ld(kL zqiwYLZYOmX)*?cSX$ID0NizMy;9tchhy>c^p;CF&HRVmTa(c7-%j%p$eaZ)htKK{w?>+jcy|B>%4fJrJo#PphK;|6OdXCkewDr=5J5rsaL9 zZ<6+U4ChKDBV%xMR5Q~?tDf8CPX$0}$A)-PP1|>f;3V_5Vfq|vCZ{{AE#Z6k7C>6( za?r_yH=j-fl!J!Cl3U{U)Vm)M>v{2zkcYq-dN9U*X-n4xY_JpX&xyO&r z*q7$-aM>N({_Uty3&-%pHFKvspFTxK_PvsSlpoKW*2zmfxy5+G%X@rCQ)lac!x@65 zIb5I~$1a0__olzL!0|Q{`W-%3K-dj`ZYi-$kc9CG54Fql_Kvuq&FxoN`BzkU(ZCyy4KYcMY6UFDvo;$Z zJt}-%`z5oUG?=>Tt!Cv#Gc_x>K-@t))n=?$xDu|EWo0v@UDy7ExZDzsB`Zh=&5+bb zR`tUNWYazvhKM-kxq0y2-p|D~wr<@6UN>y14F|J1u|p*OQgS0CFFC^g%)#rp2SPz&n;hKbPy-%~EhvWYs;DT}|<%zlV|%By~Xb2WPS9Cwm)QdaC8I;`SNJ*?LR<%to_MI_j%0dpplRF*f{iz zhKHd|x}Fz&<>0#V58e0l0{l|=_;`KL$`s|}bHq@fw};mazL-TvRyr(vQj#!~*pL~( zE6x&PI#pF+Cx$*D#BFG5;yJv{d0+RvR|zp|S^U{5op`R9nT>t**ec5ki5QI(Q~R1v zSN*15>Zu=Ou9B>0Cy6)~RR9Ww@%68WDwZ(G&=6#0;qY`S8`0((2RD9*B zl~Ei*X}KRiPR7J)FT|7yh2dcFaNa{50!9u*Dd>kUc<^9_Uz30vO*Jg9{h=?ZQkd(vO??i3t&8CI+g>;urWd_g z8o;4tMc@a02CTn3eT#axZe6?*D2D9f(W7qzAe6OVg>An!1CmPaY&_fxIB>CDbw97l zm301og}`#292x~@JB}I%25~vv!m3ba+*`N)+IzdW++6bF?EOoQ=IRbAdyT0YQoieOrV`FfIQDH)k0_Qbq8G3SZ zMSpK@P%4Ag-y!Q* zSX`U;pz>)eDOI68z;3C}A1?ok=PwYrNzjl&Y=YNj`y&qv`8baJ2ovL<7D$;+OQ5^0 za|DDG2%{S0kq^2ZHLibmQh}3D+d>G+%#^{ugIWx-@u;39PM?c38yOj~9qZsqMpF!# zu|gqM8L!(k^Ti?1*=&fQ%X^>!$<0gh?vLZ5FOt9HbaVhb{08;(anR6~p{re%6+ROu z5}y#`3v-$-xqmqg;%LZb<0Q~OZqohLqlRgBJ&QCVL<3prm3hG*^ZK;nu5>eEJ;2M0q7r7A+UOuwWy%@E%J$MjE) zR?mmlwzl!=NzBBW&jpZ6392XRe=bf*X(Um**f8^Ux*urnOFz2brwv1WuL#eJJXd!p zib?J~_HSSd|mJlJLeTJo37QhleBj^rz=RL=`fEXZO@}bhvz@@FJ}a%YpTT%fltX5iBIdy=IN~ zC6G(A>Nb>a<8^!Tcji|29Vq7BHon8mB^&~yxCxd$InZ!!c2-nWgmx=*9bXiZ^FN3j zVv9kX$(nnFi;F8@y;N#)GS@tH_R3-FUc>hbb8{kMVmu403c#Iy#mp)lb7`zu!}$-7 zC-Ltmn>P_k&1+6Rn1c^8HxHZd;PCK!o%QqSRVYo=M|kmAaW~(ouDTt&f|={<`xpKP zGexW4_}~A+?>WO@ukC_ay^r{{tqXfgFtTLL%=xWhi&x;)|1R{s0ps#9=EFpJWlk*L zyk^tbD4;=EN}Z@2yq_~`p_4WkzP`r?LZ|Z{N=}C(l-x)OaJ12?c5V!_jD;)v7#%Kl zP;6n<#e~2DlEdd#2SbSC`xoQg57{35~iN( zBK!9K>!>HFRH}ecD*DPLg_$cjHGWNnxrUR>7I+Se14`alzp=3+N~zM!5$)__Ci7f5 zJe2O`%;oc_CmUO{zD8_)LG@pJ+71fBZoflA6miCv{O(6V-V&?13vb1{?+6as&n4&& zb7M#P=y{Ese;8uZ!3p~dk>Q~*areEC2nu@dFf((P+{U$ft^Mx^N9pJ+eY8O}YwEEW zg0%2guU3phWN7=lL!AEIJ;*mg2#oFF`LgrTja=1 zn|aq^L`}P6VV6IG+{H2ID2IlIV);ta%BLm97q64aj59^K^U35p`EyNIRaGG=($Lr# zr;|%3(R*@jM%(P)ExD^+p|(?UE&9ENkoCc=I4+E7Ob^z^cTAD8v$Kct>8L0SCzGcF z+4I~jRxa48E(B4ih3f^=UcEQ{7U3hf^qE8+EM72#n4}K9mV=OtJ2eypI_wUtICEoT z@q{4Df^G2`OK(#jus6O}pAq7ree2}JYDmpln!^CI=b^sWk+HmtvxPi(pNEx~ItoU& zDIc;!g@|hVZJIUwVHgsA)wt#M3GOt*sdyhtVV%p}e*{|3&E@kSMz%uX06GsfG*}Fd z^*n`C$NhnliV6XK{<5m7DkxM>OpJ^Vn;V&)9BlfCqNH1ObF;dtDiScNV0aG;3q${2 zORGj}3w$XRmLDV55-CT}%x~Y`-`o4<4_XLUh`@&r_nTIUjDtUIX+D)Mn+@)3*RA}1 z^np)9NiwXDA8(XR4fTH(5<>F~W9UOK?Y__l&Gg~7L5u@ZhZn%jh8zkogmhqW|ev3Tz`2><@j7df|Y14h_sl{6Cr2B%?p#{10VmWDt zULos-5&CpK552mR4~zy`Js}g&>r`o2VTfQ74=8V1BM+=a)1H!t}_m@2_Ixb?WkD%-c?6?!WZvAv@OV+>4!*?a4m+ zWQ4vzV^Al)=*$nBq?)z5RLisQkpC3~X#DJi)5=a>H(21IoAJix=A4oxW~uEvWCn+Z z0>l`3?0Mieo$Jyd{U(z(L8mB)BNkT*JJI=qLL2{Uf!uljev@Ty(9+%G05rT)=tqJ8 zZrL>g*?2@YNFK^PIVg_$b2@65`@L;SQ+bt&}LaoLqc?1MXx*b9+0NPkda=a*a<8>CegF zQv;EP?2Zl&-BVa4It+?Lw{XZ#2#hdaJ&qD=L>234ZVhIt6hvwwE;pbstfZt=54b&} zuqjv6j-^&OaH{j{o;wu{sZ? zw|_)09+FEVp+N866722GAZkmm65j+M5vQaQmE+H$TGECztEHR%=Q%58 zLw@Gfv}ulHQ2$zB`_0KTXz4h6Q}O8F;NPCFp^Uci!eJnv&p*a#I7`<*eo8mbje{_! z4mT1J>cXdcAeoC7}h`E zG2sat0;-(Hg;k>V>z@lIur#VUfxUH8@t(ie+JoZE(= zi0x51y@^+IYPd=BcGrFmU~#M<#dD5FC~fi?s>`u*^gqP1?vU?ILPa#A`wMI{o=>O?2HEJIHW zJ;-~4WanZ$gSs&I7z=mm3!Agu_|p1*p|rubL6pq{J0gzzuHCoA14dZMWw_4&NY-f9 zsTp&Z6$x)+GF0w=H9Pk_Mu8FxJD^}%sb$;FB@!;%S_cu-f`a1=lWLy>aPj>vIrj^P zdD`>~F{X#@9>hD3dA=3zuaG2i^5-ntk;sCgNMqx6Lra$WbT8R*Gc%!G$3uO6r2tS- zj!BG&Kohc=2{AzQDIa(;9{01*#zY#FtPvpQ5g52~A-I)g zg^krnHP>Rk1-hp?JUq7ANS;zPR!?c_&#Pt0$LMh{jQj=osEIcE1EKTh_~B)f=7y^1 z)Bd@S1hwq@Ojsz$U(?6;@+=ws`fYf8+@&d#qM@qFp_S3w?b)Nt!}ul_vE>;qmOb@B z?A!oyOtzGzGM#ptPWG9k%0Mm4k9(VZnn4@nvtz0j8$^&K6XWq{Air)2eLAt&}TFXqGN&Hi9r=}~Gmc?>7 zZ?X{4mp7NMbcqHI#PH|3h}L1Vej@eBrgqHxqSoIMz$IauGo(o7QoIUP9PPxZmtr$l zIGR$tjP*ZI~~AZQ>)VWe<80BhRY;?T*D zV~A&wH}jBxkpei7n3&wytV}3o5`?zEPTAO?Qg&$5v-#QCuRc&KsVpful@r4BN!HMR zO=Kfvnp`*hJ#t{YISFU!2>;qRm+=`LBXjem1}$5&wzON5+4qY`lb>bbJR~zSda!t8 zR9V8L1&}gn4Eo6{7r>D=r@GegaIb+7+i`E5G0D+;e28tS?CYpDV;#ws1N2!n9UYxt z>5d~Bl5YaHD2{IB^W{L+=!S$sFMS0 z7vL?ka3j>5hD!MvdyJ{n0ozS3n(%;W3ycHVQE@pgKyURF`LOXGQ9H``i-mhbQEEU` z#!07UkXt%IDwMsU2Kryf`hf=;P>%E-bemA4dkirc&r2S0^_2|O9R zV*(v&qoicP`uf$Y-TSuGNGdO$)S5sZrpNj6zAehfDv=>3unl%+5xfJJqphudqVw$N zs&n~7eYGU3w>%rI+=I@q-<*=+AIs~|7w&g_Yi&i9aQ=r7h_?9bxXQ9gDjqp*83SH7 z`wdi`EMaDKVJTuP>`;DF!cFtjwFT6nPtC5f{hpV5h>1$vr59>!vnEhTC3 z72kaTPWfFT_~YyvUWZB`^YHGNac}Xv?mrLvIrKiIuyI3vAf8R6M9)V``qjW!=IFBL z+0rL6iH#}C>aU$~(EAoN-3~i|{AYRImTobrC1JB`pK^vt)A(Szh{%d?d{Ghx^vkh| zS-YFatr01KmP5VDH5C_tM63UXZYI|?H}{Qu9S(g^P7y?Q8NAB z(hQr3?w+T>{eZ!kviNgPMCfAh;NGSNsoQlAr&U8L{=ow1lf9iRWmpM(%-+=YKwn=K zH8s0N^(22GvZ&kSd@5y^mR9=RtGhKADt4^7?Y zWC4Lg&3+1iCvtFb$oZr5D&jnv=U@nj>o><7pF3KDTKs);Gjvem$P{ z+~5tuDY8`k*>JcC2?+`Bj2Knf$<~ZwyEfJd-m;El2Q8wz6dF)X9Vu%RDi@>4x}@%>^e=)@@_Y^Wv}g9wM4kd3@aU z9_{5S#jkG!0vn6uw(?x*^mHPsL@?Wv-F7#fS{6Hp-#kTX>)qz269QmKzW0*laemabA$Z|0uC`y-zY=v~pPZJlfoGJKtJ)%NC&e2wA`h!32)0E_-urgc-zS{BU^QM2K#K0?_*_|oYU9k!-3Vq&RZ<%DyG6vZ}h-)^^# zXH>J0j#>`~6p1p<00=`6sS+V0SYKmi>3wBkvLxq-h(Z>+zcec#<;(m8#}lMgwUKYZ<~@_ zxK{gQQP!(JCwuh@>-YJVu**2hItSl=+!M<3_}2FAzq)a7jC%2G<_eWQZEkK3dq;iD z9GNwjfBtUgr@D3I&Lkjqi>FnQqjXBEsuwKE3llcE&fn(wD(Arv)A3YtPrI_&m+*Qp1*jpiS>SeuRc-2Ml8v}761IWDOJ@7w!a~%RSGJQrusb1cBMuS2R%1uAT$HxbawgJ*g$yTK!8Y!bC z0Z9g-w&SPZW%(3RM-5lXWMRK^XDq;2$jILN^n%w;iTT$oIxm$mHdisi7;}D>m8al&0#_{L)HQ>HP(9IVD74*CFmtr_kV@s>g_3jibrLq? zlFu5r^XVwp+jf8b8EZ=#BZj_BvB8c5 zinaTMb4hO%+>b;m&Q$F4Z5o++ZJ0A+XwW_5RAt#=2`En1Vz)erZdX~@)-6Ypp2}Gn z=gMd{NKku!*Hhqd>bE_X7AP2^Fp+tz$zspb3vJVx8cI@qz3egcCB11N>XuVi zfj>97yJWWPB9fq%mFb`@xq4(fJp5L@h4%Sx&Z*@+I*w-DByOjJmSsMSm9J#UNd|Nu zcgg&A^c7>XJI{;sg&v;)Dz#UoDYtVY&B;8AAOX&jcKiMMb%)6>EDzYV?U(#mc$N*- z*mf>=y=lKQpe3eBl5Q|JHKn#@lXVzkY35@qx;8F4ztx!<8L1^3U&VkA-|Uz4=XC>I zN=Pf?#5R8~5Kgt}Ujm#S%cL&$1-WbNdaDG^3usZhvENAeb|BlqYWq*V581h2z=q)zXVoq`n}5-MJpE@JUD5L<@rtHXFK0J+d+4us ztcyA!Dte+hht6Z5N{EgI@+O0#D?7!`Qrt#D$uz)83cYMwZ&NnXZfm;?E!Bq)6mc=~ zZ94)IU#G6fU?KHqsU0D7k(tTNk&%(Tza&Ae^=)`0M!YgI3v6sBnqpPYvFZ*#2dI=? z-oiWC2B4kOO?!y^b#JI3XPsN4)5KszrKF`Mt1iH6D^AY2rvC8Gsw;{5qHCK$4Zs&` z2D5%*+hJ9EktCnYpbq33q^=er*N9$mNnye{uTK`|v-$ZipqI*{;0CXoAHQmcOHoL( z;A&~Yb>m**ifckHqq4xVVKB@^T}Ox9*qmE@W7WM_^XW0O3C~J=+qUc%N7Vngem&#v z&4%&?18tWjzc81Kqpjyw^AR7vFbkir>H<#9WIHcN>~8(uM*T6NyLq)X$UIqgi!oDD z%%9h+Is0FrzFU|F_V+(M{ilDK`1jxcrAc+)zXO=}{CiP}{pWuq|L`H#3;*8r`+qL= zePFTB{?7pZkFoe~FN?F^x73<7#W|>r+|2yf;G2gVW6N!b4W#w5nP_wP{`!wE$^ZM> zgITNBtUd$ACciPFSK;oH|G>4En0wS!1gx`2GD4^mpuHpGhSp<;0xq05aiSh+&V~lm zl?fws+Iz-S$!6#WJh0Va=9X>d@F|inb9nx%zkcSEHb0K4vN9pyscRw(70oJQh7Zg7 zVXJ>hk_x%U&5q?~$h31$h*X7?e4=YiOQU}VAHQ?wVoL08 zH}*%K@(O$ytRVZ8D3hAC@ZAROn1iMM`;{xfV_Ve9ntmYu`tnWLlpKt8^{N3)M8R@* z>;8`~;@7Tm6`eVH(Z9zBIIvgunPyX;n3oj!KLvCU%9{1-J`*hB5x|JDFtOgn_tYeX z{wJS3(z@u7|KfZAP*P89(Dkd25?8r1fS^e6zMkhx=;@+!ID21N5HT~uy zf=MpT1~Q|{1MOa$m>q&*VwCzXwk()CL2e%&yXr5F69zchSyNa+_pQ50?7_f#QHEyt-c*eB|8!16>9x8eccWZtN-FZg_fU3E{MNl>&KI zuD67=kdVdLTQx)pc$p?uh)Q&RUdy187bHo#GV{Nfocn*1El|I zCv$5L3T_vq&L+q){L=Sx`{+22Eds^$kR1Q!gUNE}7qS5bx)6(rj7oJQJh-9}^LZX{OkCI|jx7-J$-<+79j`uTO}(>)Bj zZT}BYp?V_A)@~4F2JjNF%hy#@l7L;4qc2rm^zASn3-rqeDC_HH+6vo2etslHG!peo zzG9J%*2wvm^g3L#E?*!YMeFjF70_Ke^>(?p&i2CsHtn)m+&olroV567V}q(zL$B+@ zhY$Ioh=LncqHTvOs=Y1SQAjIspW9?#yN$$Pr>qQX*$csJb8504MEm07oj(BMeS|xA z_z}PKvXRa59&DDTjuoeDd=!A9vKInD=w^ywIOqdN@ZoCmh=0y(gVe$>7$mTz5cwg} z2@RX1`YK6=R{Fd(2gZ70_7F*8XaM2KCf>F?tvu4y$$Z2fgYCjM1#i+n(-xwH0}o-} zGA1S#=z~R!5QlWM=H@+Ezp#S7(u@J^Xn|bXTm>Qvqq`OG_Gg5$4sxTI-vJe@74$$$ zJ1+-|j(gR2=xE=Ta_)i!iPn5Edj1RxmsM4}tvh>4+uc}Zpt;QU z+wIOXEaZjay>&$(M0~U3TtPvTrUanYPGfP;o`L3V9F=^~NV<#&q@Ec15irNmH@-?k zn3n!2JS|0{|K-Fk``$i(O)C1!3_HYUK2|;AeCd75e6YRA?DOZpD#WBox_L8O59pgm zLwlvkrZ{y|_842P#of}Jl`%1^!Rjl>No%w5q7VCx5~sN7Ag5u7)}*>k%9}U()vwMt zl4&Di+T`}$i@t%H#)H+m99nlTIw;Pw%Ru|s6%r9UgbmP_(-WWWK%)@Y9W8muR-(J+ zi6S@&bTVj-8WwL`gDesXd>8{?%e@TVVqP^}`hL624HQ zL@_`~B{(@NKB*nC8M^6j_;#Q0W6q=*p-L$sOL<@#pn>@$poZGkL8Y!2%6S6|%Qa!7 zH{JnZlBl<>=pru$q2$7YsH{oq3>vhe=P&COo*?}hA3qjiyieAy_o-aqs8mmRQY~=_ z)~FEaIHZXz^$6Py=oj&DW+~16_dEsZdB*Ul@GBxDt5&?aiHA<(*%ibs5iD+PtYu~v z!{u2}7-DZQnzWbVY+Fd;aT?5T=0Ra-*^P((j_8@I&LuOx$UZC&5$3Zl=cR~SRb@B6 z-}dd>x0Ap!5i38GgM`d1_X(rh!-0JC-l(WBhf5}NquEtWY@}`plei}rH0_%s!(65> zI_BQOy~I4+(0rslbY?2pnuj{fAO9(Ze=eAU@3ZXB6sClzU%!4Fqgdwl^#` z2%>d<(^JuM1$@yNJ3X7cGP0JfjdZ8mM8iC}LD!utRGj{rg$G9ZI%`*UfUt^&=9@P`RJHBxOC=^o)9NmR$0a9vv>!P~+vc02Up?YK^!&TU;Lxy;8lIP!xRl&uZ$I>_ z!Ev`}l@3mFg~-re5MFjT+V=nbA!W2VVnALfd(mCPLeY#o=cg+DQe-4>%H*1Ao4vo* zAIB=}BwYq|-6NH9mt$fLDxJif!Th1~vEiD=19peG;pB$mrxTSgYqCxE5boiSUum zSj=1h$5?0{c?;y*rs4-rVRm6p=7w5rho0>>40gG0+yl1FDzx5E zC^n8@C}7nE(u~(F#*bfkAYDOA)KY#YwgwO|`PMz;JM?wYD6icAX`}e?-~^ZT?83Ec zADkR(d(mlN*U^@)Sn1G7U#XojGBDs*5vm(=XDt0bBLQZXSn^Vt)xtmtA9pUjFbI+n zth#^^4CQ-E4!;AK=n68r&HkEJx-n8P=}^+13YQm>pR4p<9Jgh*o8Ns#WGzmM)pl=j z#E}*vJ!Tn^Wu2T1?G8QG*J$d@$&t2fg1h1yruaFj?}bLB==hXh{F|aPd`~NH;m8RiHCPvgqBg_zhY=Me3}hg>Wha7#t4_|0Cb4Yz?PYqlp-*V$L_*QH^7D^%vgR z7_}AWF-aT$D-kFhQbkk^wY&1!NKOzL{E3b8cwb0r6PFC(xQs9fM+OC-@tzPp@kXbA zAbw~IoY!4bAroF520nO1K*10q{%3Ea1{-H$b0_cpRGd?@CxX|7Y3bGv)(ol8 zY2Wk|1(9^GO{$WNNRAO5YA|WzG~rOootba#u%pdwbTWkDUx|rr5^UwN7+O#rnSdW- zoOpAvT116Zcq74LG*ibn+u313JxR>1LUiYHjhu;LjuN0GXTx#c5SQi>HHE*KFXwgP z<_TH;+^r^Y6}A>NnBOX?f#5UuS;#A`?q*42DbXU;btw9ft;ZHU1y7PJuUDX@bRM$R zXdm3Z9s1NZ6InAhth%3Fe~2D6VC|ao*s77GI+HaDf=g`3S)pbbR+K;#L||&r1KrU3 zTw)^4xqX5lH;iLa0=&w6dCa+`LG{DN8!!C)#&8fX_|W37wA@7p0vw07b~06O*|nzC z)bd-GoT;*Uz^R;X;pi&6vX@iFm~(cnski&XM)HqXy9+~nVQ*SN3u$pDe0lEa27)lS zq_F%*kFp$3ws)PJxzus4=c7#)b$flpjaRsAE(qM|Ffhwp$*2gDSa?C9A8`9!Svg?= zsG5`&Zs!%3?c9%xgfbSN`MNCo78VxPzaUFdC(p3(JX@anM#o}(bc=iXgKV9uBevxA ztTOD*OcHz)#gylMev#xCDX-i29R;S(W?eUZTtD)U6Jx{m}e3t=#$?4xOr7 zLb9waUhHf84(S@d?hoH=ut4YiLTSh*S;Upiv*j}hLR2Z-64JIl%%3sURX zI+3m6CrIt3*Z2JE~)H=r|vxT=8GgY z-rj+Mi4z9p&k6vj@>IzL@%xl0<%HWuyQ!AH2cGZ-nUzOkKnBB^+0=|oCDPJ9kGX&$7GYxi0wB z_-t3cT(GFQ=5QaKW!Fg*zu+LH%xxq_AyCwMc)rzwN9N$+!^>Y1iaP2pg-^YU@bNBa ze4j)sJaq{Z`OKM_}v3 zGUdu$tD5k0h9Sq|mVQ{jy<903eQY7=BM9L>Fv6CvT%V0~9KU)s`FL{nv8Q&^9x496 z5_C5}aYb{=vTWQ@Pj!V;;y6DD0aRZQ1{JmuTljL>YM6XolACgKG%&dmWlFSf^T@md z0>9$L+3=EsLyZyVMRcA{4l$^F?b73mTWe+W4oOTTmXSd%w>V<4NHa^d$j#rRSgDn$ ze-S3)%|#0-TD{89<0v1Ai1+UaB^FL@r%t++W0=M0N^<;IJM|@v?c|>b+m(_LSV>uz zKA%gU9@*MNtv`&EKvnjZD9;1 zM6`eWL-dE}iz3UQb+s#g($B(-0O!%M6*%fV^H}T;0xJkeWngHT*HE39wA2#Z|EL{^ zVsw^92nRtvbb)tz5@Do-XY-Nev^g&s-*&slxlWu^E>IZN9$f*0$; zB3n@UL{E{?hZGWRid?rg68|31x~&^T!KvN*23=*5hDBZvZnyo+7fkLtw>PyzoZDxh zukY~=spV&7f)a2hB7Mkh(o~?0kjA zIQh#tj;IVai(Hz`va3{Xil`dFAlT5*^oB#W>XYeEt<_4IPKOyB`amF@BU}BoT?&Y^ zoBp#pqDJ`J{T(Z#zS5lmQDNqHm)9;({EbmMf6MnTS`lr*{qc*XbGyiSY^gg=9dGb1 z>LHQ(>M<4UGDqCbt>-YOW)mCC?Fd0%SgmE6J@-z6vEVauvXjV47z4c5B|(uo-oR~J z7=W5N&hVwrf8Af69ouQr*H(rMPM}Fq)PaI#-6AfF^tlDF%Atr8y}9VQM|}1*RgFyV zALFvRr$;QZqIZ)>Zbyx(Us)gN!9s4Y<1x>+E)z(-B=k+{#@D}ff*rLz<#Lw#gBVUm z&U%4B@aNJh;+4dgo~yAYuwRz$t0$_QY9C)g#;}e~tIKx%xk^go>eX#BY8m<$(KAGJ zpLFqKnKWwn1d_-I|0jM}`%~{gs^t6$GM%c=8ZA$pbrba48W#?bSAuki(|xDILSq}P zh%}ZpBN*NA4Spq#s^#Jc@3`1l(4d+8(ST)0LT16Yj^l{hN4N;(f(pp;lm|@2QRLDD zjttlj*cu#@9mbEZ>5kc(K0_dAtLh6$4>mld-Wb&E4BVU52B}{e^NC^D-vV=yazl zDKNJ?EZ;# z6OcagaHJ4CeGw&9VVO4y9>vCGB`zoZYzl{}zr!9l(&IQ4@JeTw8OyL`d-))a5^J2LxXvqsv=D zMa8Z%KzJZ;Mnn5|7rn1H5_E$sq>;nHjsm9D`KZY?-*+ZOMju$}Qy3hkS=!l$WmxfW zn|R%3cg1ibk>V<-NYqq{rEUb89wq9l88;Ms=fNaWsk=XsW$fvwH0Mn zIJgdxnCTp>#nX+Z@Ty~tuc4E?d*{lye+v|6ee;>zsNye~wPn1kz3EU?nD!G!I&V@Y zW46e28!-pt9)_9t8}Tak7D#Q2xp;o2fJ563%G*g-(W}Q~ZYx zscYpre4(yWLc30EeActEaN^^K{wXY5snor_Oq|DwTCf>w(#x3#K7Jxz|NmB;Pj5#= zW9t9;dJYbYmh$|4THd7V82n8Kh`0*$F%RQ-J%$j9uhUxMwZ}X1Qzq zFpvc{KfmvTi~FiVQlYkQF#-=b_~&ZH>7#?S*8ikxgv2n|`Ak*Muo5lxq9@d**-(3$ zHdSg0Cn{joQ%nyrQLiCp*wp_tYYvVW(LlLN8SLaZ;ue_Hk-H^!?AQ?#bIl<0(Rf^p zaioX-nl;}ppe%QIwJgUh^zVie&b5HzeV*4o#Kc9b`;8sOLS9~M4bZiofvzy_rs z*RXTpvp+FE``wrt)>Qvass5cOMwa!<@8&C)h_VlADCS?2q?#j{gA~my0a~5^sR5=$ z%q|55I#+YS&@ot+e_nTe|5@<(&40cK|GgZB?+$4KL@7~=xODXcX1w$L7Irfs7T8)h znOo~my}=f2wRBlx5&f69{PVB>_MUhe_Ro_hT73IhYU)pXL+|dSf8*BvZ9Rk#=C2IUgcBM!{e+$Uh}e^^yHaB^#ND3g{QiU} zgRgOY%X|||#BM%j?c$VqL1`ba8!9Dg<)&b)SX1qR0|5V=R3G@acg4k}*c3eKOJL_0 zJXB%>lfUNk^@9ET6WBEpZrE#?jdAd7#79M#Uzu*v6|Mv>iU;RF#L^r`3?eIWg>dw< zPpYR9->TYIFf*OVJV-z7z=6JVr{nA>+-`8U;pZf+&G?L!33}a8N#}K2H#2bcgJyz( z$*3g*f9Pc@GVG3W7EMfwF}NzZ{Zg3&+TIIqOcfSBeE)*DUi%f`0}mZS$Jo!jN3JiH zy|oxVAcI{&)!5h@C@^yQ~w{pGxn$Y%cLQ){3H2gvzA=Ls_A5wi^kYir!k7jU1fk% z9ih(p2DSuN%bZj>PaKjW#6mi~Nj_!T0<=_zgeY&`zn8;xjIZP1T(esoNh^$YMusuQ z8+0YnkKfk9#Ad7|&eh$i$wyxsY=y|}*A`J${T-L_iHso8xmUg=XZIw;nFJ6`2*p~f zSdHC(B(Oh=W;o4q@Q-oc#$FxbiY7Le)$^9K*Uwtt2vpACvM^H!?4cKO;Q5FWVcqjf zGZla(KZ8|653rkdAs1Y(yr@f>KihTl$$|+#L8rYWJYK6^t2q;xf=krF7Ji>7c;1JX zW2?x?nC}4-1=NB1muykZx%q1eXv%n}7bv`6ghkEwDE`YdBi^D$w zfW|iTUXN^^Fn6mSka+@JINyz2b2TL8bK>H@F8^8mASI;jNm+# zm$z5kI)8cS#oOMy=H!6R&v$Tt;lk;@(+8-57o6oUsOk2Zq$(TT)N_v8G!N*Ji!TpF z9@UGn0;)|1tC*1aSj_sp$<4F8sdsom&d+Y2xA2@QP#$t+$+g_aO|y057WhsFdZnT4 zLSCfTLXi1ig&=DhV*RXnU5@gA4tTuKcxyAT-T^KV*{}~>5#L(yw{0;`4oHge*5=iMV(-Wv!A%MWtJ}RaEi5; zLx8DuLbFvh+osLefy@g_A+xkSeg>xgPl%SV+9+*%fzZ&z zO6Bl8u?QFt47XZKK;aEZCKoto#(=bM6TAQl?-+i&*Kucn0b(#V77R}B8*>xS#gfyPT zf0r{4q)69kCQ#8%H;@qu?GUjvh#0srw;(!lzM?~*AJCp&^(Ih`VgKuXg+}k z1jA^t0u71LQWzQ#qxA_iAV#ZSXh4iMB%lF7X+vVK_`f6u2Dam#E{-9i4LwMpj#kCc y#5GzK!vbQoDu#x{XjKdih|#JT8W4l2DrRZC{$02-nG-Z5&*16m=d#Wzp$PyS>`xp3 literal 0 HcmV?d00001 diff --git a/docs/images/secret-syncs/chef/sync-source.png b/docs/images/secret-syncs/chef/sync-source.png new file mode 100644 index 0000000000000000000000000000000000000000..877b104efeffdab52f1fdfde9f0eb3a399b4f55e GIT binary patch literal 212306 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 literal 0 HcmV?d00001 diff --git a/docs/integrations/app-connections/chef.mdx b/docs/integrations/app-connections/chef.mdx new file mode 100644 index 000000000..8e22b808d --- /dev/null +++ b/docs/integrations/app-connections/chef.mdx @@ -0,0 +1,142 @@ +--- +title: "Chef Connection" +description: "Learn how to configure a Chef Connection for Infisical." +--- + +Infisical supports the use of User Private Key to connect with Chef Server. + +Please access your **starter kit** to get all the required information to create a Chef Connection. + + + + If you download a new starter kit, your previous private key/user key will + no longer be valid. Please make sure to update all the places that use the + previous private key. + + + + ![Chef Server User Keys](/images/app-connections/chef/chef-dashboard.png) + + + ![Starter Kit](/images/app-connections/chef/starter-kit.png) + + + ![Download Starter + Kit](/images/app-connections/chef/download-starter-kit.png) + + + ![Extract Starter + Kit](/images/app-connections/chef/extract-starter-kit.png) + + + + + + + Open your starter kit's folder(or `chef-repo`) and navigate to the `.chef` + folder. + + Please make sure you have hidden files visible in your file explorer. + + ![.chef folder](/images/app-connections/chef/chef-folder.png) + + + In the `.chef` folder, you will find a `[your-username].pem` file. ![Private + Key File](/images/app-connections/chef/private-key-file.png) + + **Private Key:** Copy the content of the private key file. + + + + Open the `config.rb` file and copy the content of the file. + ![Config.rb File Content](/images/app-connections/chef/chef-connection-details.png) + + **User Name(1):** The user name of the chef user. + + **Server URL(2):** The server url of the chef server. + + **Organization Name(3):** The organization name of the chef server. + + + + +## Create a Chef Connection in Infisical via UI + + + + + + In your Infisical dashboard, navigate to the **App Connections** page in the desired project. + ![App Connections Tab](/images/app-connections/general/add-connection.png) + + + Click **+ Add Connection** and choose **Chef** Connection from the list of integrations. + ![Select Chef Connection](/images/app-connections/chef/app-connection-option.png) + + + Complete the form by providing: + - A descriptive name for the connection + - An optional description + - Server URL(optional): The URL of the Chef server to connect to(defaults to https://api.chef.io) + - Organization name + - User name + - Private key: Your Chef user's private key (.pem file) + + ![Chef Connection Modal](/images/app-connections/chef/app-connection-form.png) + + + After submitting the form, your **Chef Connection** will be successfully created and ready to use with your Infisical project. + ![Chef Connection Created](/images/app-connections/chef/app-connection-generated.png) + + + + + + + To create a Chef Connection via API, send a request to the [Create Chef Connection](/api-reference/endpoints/app-connections/chef/create) endpoint. + + ### Sample request + + ```bash Request + curl --request POST \ + --url https://app.infisical.com/api/v1/app-connections/chef \ + --header 'Content-Type: application/json' \ + --data '{ + "name": "my-chef-connection", + "method": "user-key", + "projectId": "7ffbb072-2575-495a-b5b0-127f88caef78", + "credentials": { + "orgName": "my-org", + "userName": "my-user", + "privateKey": "your-private-key" + } + }' + ``` + + ### Sample response + + ```bash Response + { + "appConnection": { + "id": "a1b2c3d4-5678-90ab-cdef-1234567890ab", + "name": "my-chef-connection", + "description": null, + "projectId": "7ffbb072-2575-495a-b5b0-127f88caef78", + "version": 1, + "orgId": "abcdef12-3456-7890-abcd-ef1234567890", + "createdAt": "2025-10-13T10:15:00.000Z", + "updatedAt": "2025-10-13T10:15:00.000Z", + "isPlatformManagedCredentials": false, + "credentialsHash": "d41d8cd98f00b204e9800998ecf8427e", + "app": "chef", + "method": "user-key", + "credentials": { + "orgName": "my-org", + "userName": "my-user", + } + } + } + ``` + + + diff --git a/docs/integrations/secret-syncs/chef.mdx b/docs/integrations/secret-syncs/chef.mdx new file mode 100644 index 000000000..17daaf37d --- /dev/null +++ b/docs/integrations/secret-syncs/chef.mdx @@ -0,0 +1,154 @@ +--- +title: "Chef Sync" +description: "Learn how to configure a Chef Sync for Infisical." +--- + +**Prerequisites:** + +- Create a [Chef Connection](/integrations/app-connections/chef) + + + + + + Navigate to **Project** > **Integrations** and select the **Secret Syncs** tab. Click on the **Add Sync** button. + + ![Secret Syncs Tab](/images/secret-syncs/general/secret-sync-tab.png) + + + ![Select Chef](/images/secret-syncs/chef/select-option.png) + + + Configure the **Source** from where secrets should be retrieved, then click **Next**. + + ![Configure Source](/images/secret-syncs/chef/sync-source.png) + + - **Environment**: The project environment to retrieve secrets from. + - **Secret Path**: The folder path to retrieve secrets from. + + + If you need to sync secrets from multiple folder locations, check out [secret imports](/documentation/platform/secret-reference#secret-imports). + + + + Configure the **Destination** to where secrets should be deployed, then click **Next**. + + ![Configure Destination](/images/secret-syncs/chef/sync-destination.png) + + - **Chef Connection**: The Chef Connection to authenticate with. + - **Data Bag**: The Data Bag Name to sync secrets to. + - **Data Bag Item**: The Data Bag Item Name to sync secrets to. + + + Configure the **Sync Options** to specify how secrets should be synced, then click **Next**. + + ![Configure Options](/images/secret-syncs/chef/sync-options.png) + + - **Initial Sync Behavior**: Determines how Infisical should resolve the initial sync. + - **Overwrite Destination Secrets**: Removes any secrets at the destination endpoint not present in Infisical. + - **Import Secrets (Prioritize Infisical)**: Imports secrets from the destination endpoint before syncing, prioritizing values from Infisical over Laravel Forge when keys conflict. + - **Import Secrets (Prioritize Laravel Forge)**: Imports secrets from the destination endpoint before syncing, prioritizing values from Laravel Forge over Infisical when keys conflict. + - **Key Schema**: Template that determines how secret names are transformed when syncing, using `{{secretKey}}` as a placeholder for the original secret name and `{{environment}}` for the environment. + + We highly recommend using a Key Schema to ensure that Infisical only manages the specific keys you intend, keeping everything else untouched. + + - **Auto-Sync Enabled**: If enabled, secrets will automatically be synced from the source location when changes occur. Disable to enforce manual syncing only. + - **Disable Secret Deletion**: If enabled, Infisical will not remove secrets from the sync destination. Enable this option if you intend to manage some secrets manually outside of Infisical. + + + Configure the **Details** of your Chef Sync, then click **Next**. + + ![Configure Details](/images/secret-syncs/chef/sync-details.png) + + - **Name**: The name of your sync. Must be slug-friendly. + - **Description**: An optional description for your sync. + + + Review your Chef Sync configuration, then click **Create Sync**. + + ![Review Configuration](/images/secret-syncs/chef/sync-review.png) + + + If enabled, your Chef Sync will begin syncing your secrets to the destination endpoint. + + ![Sync Created](/images/secret-syncs/chef/sync-created.png) + + + + + + + To create a **Chef Sync**, make an API request to the [Create Chef Sync](/api-reference/endpoints/secret-syncs/chef/create) API endpoint. + + ### Sample request + + ```bash Request + curl --request POST \ + --url https://app.infisical.com/api/v1/secret-syncs/chef \ + --header 'Content-Type: application/json' \ + --data '{ + "name": "my-chef-sync", + "projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", + "description": "sync to chef site", + "connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", + "environment": "dev", + "secretPath": "/", + "isEnabled": true, + "isAutoSyncEnabled": true, + "syncOptions": { + "initialSyncBehavior": "overwrite-destination", + "disableSecretDeletion": false + }, + "destinationConfig": { + "dataBagName": "my-data-bag", + "dataBagItemName": "my-data-bag-item" + } + }' + ``` + + ### Sample response + + ```bash Response + { + "secretSync": { + "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", + "name": "my-chef-sync", + "description": "sync to chef site", + "folderId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", + "connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", + "createdAt": "2025-07-19T12:00:00Z", + "updatedAt": "2025-07-19T12:00:00Z", + "syncStatus": "succeeded", + "lastSyncJobId": "job-1234", + "lastSyncMessage": null, + "lastSyncedAt": "2025-07-19T12:00:00Z", + "syncOptions": { + "initialSyncBehavior": "overwrite-destination", + "disableSecretDeletion": false + }, + "projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", + "connection": { + "app": "chef", + "name": "my-chef-connection", + "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a" + }, + "environment": { + "slug": "dev", + "name": "Development", + "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a" + }, + "folder": { + "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", + "path": "/" + }, + "destination": "chef", + "destinationConfig": { + "dataBagName": "my-data-bag", + "dataBagItemName": "my-data-bag-item" + } + } + } + ``` + + + diff --git a/docs/snippets/AppConnectionsBrowser.jsx b/docs/snippets/AppConnectionsBrowser.jsx index cfc65d1fd..c74d9149a 100644 --- a/docs/snippets/AppConnectionsBrowser.jsx +++ b/docs/snippets/AppConnectionsBrowser.jsx @@ -47,6 +47,7 @@ export const AppConnectionsBrowser = () => { {"name": "Auth0", "slug": "auth0", "path": "/integrations/app-connections/auth0", "description": "Learn how to connect your Auth0 to pull secrets from Infisical.", "category": "Identity & Auth"}, {"name": "Okta", "slug": "okta", "path": "/integrations/app-connections/okta", "description": "Learn how to connect your Okta to pull secrets from Infisical.", "category": "Identity & Auth"}, {"name": "Laravel Forge", "slug": "laravel-forge", "path": "/integrations/app-connections/laravel-forge", "description": "Learn how to connect your Laravel Forge to pull secrets from Infisical.", "category": "Hosting"}, + {"name": "Chef", "slug": "chef", "path": "/integrations/app-connections/chef", "description": "Learn how to connect your Chef to pull secrets from Infisical.", "category": "DevOps Tools"}, ].sort(function(a, b) { return a.name.toLowerCase().localeCompare(b.name.toLowerCase()); }); diff --git a/docs/snippets/SecretSyncsBrowser.jsx b/docs/snippets/SecretSyncsBrowser.jsx index 3598bf68e..c7b5806ea 100644 --- a/docs/snippets/SecretSyncsBrowser.jsx +++ b/docs/snippets/SecretSyncsBrowser.jsx @@ -37,7 +37,8 @@ export const SecretSyncsBrowser = () => { {"name": "Humanitec", "slug": "humanitec", "path": "/integrations/secret-syncs/humanitec", "description": "Learn how to sync secrets from Infisical to Humanitec.", "category": "DevOps Tools"}, {"name": "OCI Vault", "slug": "oci-vault", "path": "/integrations/secret-syncs/oci-vault", "description": "Learn how to sync secrets from Infisical to OCI Vault.", "category": "Cloud Providers"}, {"name": "Zabbix", "slug": "zabbix", "path": "/integrations/secret-syncs/zabbix", "description": "Learn how to sync secrets from Infisical to Zabbix.", "category": "Monitoring"}, - {"name": "Laravel Forge", "slug": "laravel-forge", "path": "/integrations/secret-syncs/laravel-forge", "description": "Learn how to sync secrets from Infisical to Laravel Forge.", "category": "Hosting"} + {"name": "Laravel Forge", "slug": "laravel-forge", "path": "/integrations/secret-syncs/laravel-forge", "description": "Learn how to sync secrets from Infisical to Laravel Forge.", "category": "Hosting"}, + {"name": "Chef", "slug": "chef", "path": "/integrations/secret-syncs/chef", "description": "Learn how to sync secrets from Infisical to Chef.", "category": "DevOps Tools"} ].sort(function(a, b) { return a.name.toLowerCase().localeCompare(b.name.toLowerCase()); }); From caee0b34e88bc28f3a2f8925565fd97b8ad5e94c Mon Sep 17 00:00:00 2001 From: Carlos Monastyrski Date: Thu, 30 Oct 2025 14:54:07 -0300 Subject: [PATCH 15/79] PKI Syncs ui and removal improvements --- .../v1/pki-sync-routers/pki-sync-router.ts | 2 + .../certificate-sync/certificate-sync-dal.ts | 9 ++ .../certificate-sync-enums.ts | 3 +- .../certificate-v3/certificate-v3-service.ts | 4 +- .../aws-certificate-manager-pki-sync-fns.ts | 131 +++++++++++++----- .../aws-certificate-manager-pki-sync-types.ts | 1 + .../azure-key-vault-pki-sync-fns.ts | 58 ++++++-- .../azure-key-vault-pki-sync-schemas.ts | 4 +- backend/src/services/pki-sync/pki-sync-fns.ts | 31 ++++- .../src/services/pki-sync/pki-sync-queue.ts | 36 +++-- .../src/services/pki-sync/pki-sync-service.ts | 4 + .../src/services/pki-sync/pki-sync-types.ts | 4 +- .../src/services/pki-sync/pki-sync-utils.ts | 13 +- .../PkiSyncOptionsFields.tsx | 4 +- .../src/hooks/api/pkiSyncs/types/common.ts | 2 + .../components/PkiSyncCertificatesSection.tsx | 74 ++++++++-- .../PkiSyncOptionsSection.tsx | 2 +- 17 files changed, 290 insertions(+), 92 deletions(-) diff --git a/backend/src/server/routes/v1/pki-sync-routers/pki-sync-router.ts b/backend/src/server/routes/v1/pki-sync-routers/pki-sync-router.ts index 204f38aa4..45e5464f2 100644 --- a/backend/src/server/routes/v1/pki-sync-routers/pki-sync-router.ts +++ b/backend/src/server/routes/v1/pki-sync-routers/pki-sync-router.ts @@ -93,6 +93,8 @@ const PkiSyncCertificateSchema = z.object({ certificateStatus: z.string().optional(), certificateNotBefore: z.date().optional(), certificateNotAfter: z.date().optional(), + certificateRenewBeforeDays: z.number().optional(), + certificateRenewalError: z.string().optional(), pkiSyncName: z.string().optional(), pkiSyncDestination: z.string().optional() }); diff --git a/backend/src/services/certificate-sync/certificate-sync-dal.ts b/backend/src/services/certificate-sync/certificate-sync-dal.ts index 174bc6141..904a18a75 100644 --- a/backend/src/services/certificate-sync/certificate-sync-dal.ts +++ b/backend/src/services/certificate-sync/certificate-sync-dal.ts @@ -184,6 +184,9 @@ export const certificateSyncDALFactory = (db: TDbClient) => { certificateStatus?: string; certificateNotBefore?: Date; certificateNotAfter?: Date; + certificateRenewBeforeDays?: number; + certificateRenewedByCertificateId?: string; + certificateRenewalError?: string; pkiSyncName?: string; pkiSyncDestination?: string; })[]; @@ -216,6 +219,9 @@ export const certificateSyncDALFactory = (db: TDbClient) => { db.ref("status").withSchema(TableName.Certificate).as("certificateStatus"), db.ref("notBefore").withSchema(TableName.Certificate).as("certificateNotBefore"), db.ref("notAfter").withSchema(TableName.Certificate).as("certificateNotAfter"), + db.ref("renewBeforeDays").withSchema(TableName.Certificate).as("certificateRenewBeforeDays"), + db.ref("renewedByCertificateId").withSchema(TableName.Certificate).as("certificateRenewedByCertificateId"), + db.ref("renewalError").withSchema(TableName.Certificate).as("certificateRenewalError"), db.ref("name").withSchema(TableName.PkiSync).as("pkiSyncName"), db.ref("destination").withSchema(TableName.PkiSync).as("pkiSyncDestination") ) @@ -235,6 +241,9 @@ export const certificateSyncDALFactory = (db: TDbClient) => { certificateStatus?: string; certificateNotBefore?: Date; certificateNotAfter?: Date; + certificateRenewBeforeDays?: number; + certificateRenewedByCertificateId?: string; + certificateRenewalError?: string; pkiSyncName?: string; pkiSyncDestination?: string; })[]; diff --git a/backend/src/services/certificate-sync/certificate-sync-enums.ts b/backend/src/services/certificate-sync/certificate-sync-enums.ts index 97c08b339..7b9eedafb 100644 --- a/backend/src/services/certificate-sync/certificate-sync-enums.ts +++ b/backend/src/services/certificate-sync/certificate-sync-enums.ts @@ -2,5 +2,6 @@ export enum CertificateSyncStatus { Pending = "pending", Syncing = "syncing", Succeeded = "succeeded", - Failed = "failed" + Failed = "failed", + Running = "running" } diff --git a/backend/src/services/certificate-v3/certificate-v3-service.ts b/backend/src/services/certificate-v3/certificate-v3-service.ts index 6f5870f4f..1cff10f3c 100644 --- a/backend/src/services/certificate-v3/certificate-v3-service.ts +++ b/backend/src/services/certificate-v3/certificate-v3-service.ts @@ -51,7 +51,7 @@ import { import { TCertificateSyncDALFactory } from "../certificate-sync/certificate-sync-dal"; import { TPkiSyncDALFactory } from "../pki-sync/pki-sync-dal"; import { TPkiSyncQueueFactory } from "../pki-sync/pki-sync-queue"; -import { replaceCertificateInSyncs, triggerAutoSyncForCertificate } from "../pki-sync/pki-sync-utils"; +import { addRenewedCertificateToSyncs, triggerAutoSyncForCertificate } from "../pki-sync/pki-sync-utils"; import { TCertificateFromProfileResponse, TCertificateOrderResponse, @@ -885,7 +885,7 @@ export const certificateV3ServiceFactory = ({ tx ); - await replaceCertificateInSyncs(originalCert.id, newCert.id, { certificateSyncDAL }, tx); + await addRenewedCertificateToSyncs(originalCert.id, newCert.id, { certificateSyncDAL }, tx); return { certificate, diff --git a/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-fns.ts b/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-fns.ts index 774da6000..0e416f016 100644 --- a/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-fns.ts +++ b/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-fns.ts @@ -15,6 +15,9 @@ import { AwsConnectionAssumeRoleCredentialsSchema } from "@app/services/app-connection/aws/aws-connection-schemas"; import { TAwsConnectionConfig } from "@app/services/app-connection/aws/aws-connection-types"; +import { TCertificateDALFactory } from "@app/services/certificate/certificate-dal"; +import { TCertificateSyncDALFactory } from "@app/services/certificate-sync/certificate-sync-dal"; +import { CertificateSyncStatus } from "@app/services/certificate-sync/certificate-sync-enums"; import { createConnectionQueue, RateLimitConfig } from "@app/services/connection-queue"; import { TKmsServiceFactory } from "@app/services/kms/kms-service"; import { TCertificateMap } from "@app/services/pki-sync/pki-sync-types"; @@ -182,6 +185,8 @@ const generateCertificateName = (certificateName: string, pkiSync: TPkiSyncWithC type TAwsCertificateManagerPkiSyncFactoryDeps = { appConnectionDAL: Pick; kmsService: Pick; + certificateSyncDAL: Pick; + certificateDAL: Pick; }; const getAwsAcmClient = async ( @@ -240,7 +245,9 @@ const getAwsAcmClient = async ( export const awsCertificateManagerPkiSyncFactory = ({ kmsService, - appConnectionDAL + appConnectionDAL, + certificateSyncDAL, + certificateDAL }: TAwsCertificateManagerPkiSyncFactoryDeps) => { const deleteCertificateFromAcm = async ( acm: AWS.ACM, @@ -415,11 +422,12 @@ export const awsCertificateManagerPkiSyncFactory = ({ const validationErrors: Array<{ name: string; error: string }> = []; const activeCertificateNames = Object.keys(certificateMap); - const syncOptions = pkiSync.syncOptions as { preserveArn?: boolean } | undefined; + const syncOptions = pkiSync.syncOptions as { preserveArn?: boolean; canRemoveCertificates?: boolean } | undefined; const preserveArn = syncOptions?.preserveArn ?? true; + const canRemoveCertificates = syncOptions?.canRemoveCertificates ?? true; - Object.entries(certificateMap).forEach(([certName, certData]) => { - const { cert, privateKey, certificateChain, alternativeNames } = certData; + for (const [certName, certData] of Object.entries(certificateMap)) { + const { cert, privateKey, certificateChain, alternativeNames, certificateId } = certData; try { validateCertificateContent(cert, privateKey); @@ -429,7 +437,16 @@ export const awsCertificateManagerPkiSyncFactory = ({ name: certName, error: `Certificate validation failed: ${errorMessage}` }); - return; + // eslint-disable-next-line no-continue + continue; + } + + if (preserveArn && certificateId) { + const certificate = await certificateDAL.findById(certificateId); + if (certificate?.renewedByCertificateId) { + // eslint-disable-next-line no-continue + continue; + } } const certificateName = generateCertificateName(certName, pkiSync); @@ -451,44 +468,47 @@ export const awsCertificateManagerPkiSyncFactory = ({ cert, privateKey, certificateChain, - existingArn + existingArn, + certificateId }); - }); + } - const certificatesToRemove = Object.values(acmCertificates) - .filter((acmCert) => { - if (!acmCert.arn || !acmCert.Tags) { - return false; - } + const certificatesToRemove = canRemoveCertificates + ? Object.values(acmCertificates) + .filter((acmCert) => { + if (!acmCert.arn || !acmCert.Tags) { + return false; + } - const certNameTag = findInfisicalCertificateTag(acmCert.Tags); - if (!certNameTag || !certNameTag.Value) { - return false; - } + const certNameTag = findInfisicalCertificateTag(acmCert.Tags); + if (!certNameTag || !certNameTag.Value) { + return false; + } - const isActive = activeCertificateNames.some((activeCertName) => { - const certData = certificateMap[activeCertName]; - if (!certData) return false; + const isActive = activeCertificateNames.some((activeCertName) => { + const certData = certificateMap[activeCertName]; + if (!certData) return false; - return validateCertificateIdentification(activeCertName, acmCert, certData.alternativeNames); - }); + return validateCertificateIdentification(activeCertName, acmCert, certData.alternativeNames); + }); - if (!isActive) { - return true; - } + if (!isActive) { + return true; + } - if (!preserveArn && isActive) { - return true; - } + if (!preserveArn && isActive) { + return true; + } - return false; - }) - .map((acmCert) => acmCert.arn!) - .filter((arn) => arn); + return false; + }) + .map((acmCert) => acmCert.arn!) + .filter((arn) => arn) + : []; const uploadResults = await executeWithConcurrencyLimit( setCertificates, - async ({ key, name, cert, privateKey, certificateChain, existingArn }) => { + async ({ key, name, cert, privateKey, certificateChain, existingArn, certificateId }) => { try { const importParams: AWS.ACM.ImportCertificateRequest = { Certificate: cert, @@ -549,6 +569,13 @@ export const awsCertificateManagerPkiSyncFactory = ({ } } + if (existingArn && preserveArn && certificateId) { + const currentCertificate = await certificateDAL.findById(certificateId); + if (currentCertificate?.renewedFromCertificateId) { + await certificateSyncDAL.removeCertificates(pkiSync.id, [currentCertificate.renewedFromCertificateId]); + } + } + return { key, name, success: true, response }; } catch (error) { const errorMessage = error instanceof Error ? error.message : "Unknown error"; @@ -644,7 +671,8 @@ export const awsCertificateManagerPkiSyncFactory = ({ const removeCertificates = async ( pkiSync: TPkiSyncWithCredentials, - certificateNames: string[] + certificateNames: string[], + deps?: { certificateSyncDAL?: TCertificateSyncDALFactory; certificateMap?: TCertificateMap } ): Promise => { const destinationConfig = pkiSync.destinationConfig as TAwsCertificateManagerPkiSyncConfig; const acm = await getAwsAcmClient( @@ -686,6 +714,43 @@ export const awsCertificateManagerPkiSyncFactory = ({ const failedRemovals = results.filter((result) => result.status === "rejected"); + if (failedRemovals.length > 0 && deps?.certificateSyncDAL && deps?.certificateMap) { + const certificateNameToArnMap = new Map(); + for (const certName of certificateNames) { + const matchingCerts = Object.values(acmCertificates).filter((acmCert) => + validateCertificateIdentification(certName, acmCert) + ); + for (const acmCert of matchingCerts) { + if (acmCert.arn) { + certificateNameToArnMap.set(acmCert.arn, certName); + } + } + } + + for (const failure of failedRemovals) { + if (failure.status === "rejected") { + const failedArn = certificateArnsToRemove[results.indexOf(failure)]; + const certificateName = certificateNameToArnMap.get(failedArn); + if (certificateName && deps.certificateMap[certificateName]?.certificateId) { + const { certificateId } = deps.certificateMap[certificateName]; + if (certificateId) { + const errorMessage = failure.reason instanceof Error ? failure.reason.message : "Unknown error"; + try { + await deps.certificateSyncDAL.updateSyncStatus( + pkiSync.id, + certificateId, + CertificateSyncStatus.Failed, + `Failed to remove from AWS: ${errorMessage}` + ); + } catch (updateError) { + logger.warn(`Failed to update sync status for certificate ${certificateId}:`, String(updateError)); + } + } + } + } + } + } + if (failedRemovals.length > 0) { const failedReasons = failedRemovals.map((failure) => { if (failure.status === "rejected") { diff --git a/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-types.ts b/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-types.ts index c9770c5b2..8b2b8b87e 100644 --- a/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-types.ts +++ b/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-types.ts @@ -56,4 +56,5 @@ export interface CertificateImportRequest { privateKey: string; certificateChain?: string; existingArn?: string; + certificateId?: string; } diff --git a/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-fns.ts b/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-fns.ts index b423f42db..f2ae23400 100644 --- a/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-fns.ts +++ b/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-fns.ts @@ -6,6 +6,8 @@ import { request } from "@app/lib/config/request"; import { logger } from "@app/lib/logger"; import { TAppConnectionDALFactory } from "@app/services/app-connection/app-connection-dal"; import { getAzureConnectionAccessToken } from "@app/services/app-connection/azure-key-vault"; +import { TCertificateSyncDALFactory } from "@app/services/certificate-sync/certificate-sync-dal"; +import { CertificateSyncStatus } from "@app/services/certificate-sync/certificate-sync-enums"; import { createConnectionQueue, RateLimitConfig } from "@app/services/connection-queue"; import { TKmsServiceFactory } from "@app/services/kms/kms-service"; import { matchesCertificateNameSchema } from "@app/services/pki-sync/pki-sync-fns"; @@ -32,7 +34,9 @@ const extractCertificateNameFromId = (certificateId: string): string => { }; const isInfisicalManagedCertificate = (certificateName: string, pkiSync: TPkiSyncWithCredentials): boolean => { - const syncOptions = pkiSync.syncOptions as { certificateNameSchema?: string } | undefined; + const syncOptions = pkiSync.syncOptions as + | { certificateNameSchema?: string; canRemoveCertificates?: boolean } + | undefined; const certificateNameSchema = syncOptions?.certificateNameSchema; if (certificateNameSchema) { @@ -330,13 +334,19 @@ export const azureKeyVaultPkiSyncFactory = ({ kmsService, appConnectionDAL }: TA cert: string; privateKey: string; certificateChain?: string; + certificateId?: string; }[] = []; + const syncOptions = pkiSync.syncOptions as + | { certificateNameSchema?: string; canRemoveCertificates?: boolean } + | undefined; + const canRemoveCertificates = syncOptions?.canRemoveCertificates ?? true; + // Track which certificates should exist in Azure Key Vault const activeCertificateNames = Object.keys(certificateMap); // Iterate through certificates to sync to Azure Key Vault - Object.entries(certificateMap).forEach(([certName, { cert, privateKey, certificateChain }]) => { + Object.entries(certificateMap).forEach(([certName, { cert, privateKey, certificateChain, certificateId }]) => { if (disabledAzureKeyVaultCertificateKeys.includes(certName)) { return; } @@ -349,19 +359,22 @@ export const azureKeyVaultPkiSyncFactory = ({ kmsService, appConnectionDAL }: TA key: certName, cert, privateKey, - certificateChain + certificateChain, + certificateId }); } }); // Identify expired/removed certificates that need to be cleaned up from Azure Key Vault // Only remove certificates that were managed by Infisical (match naming schema) - const certificatesToRemove = Object.keys(vaultCertificates).filter( - (vaultCertName) => - isInfisicalManagedCertificate(vaultCertName, pkiSync) && - !activeCertificateNames.includes(vaultCertName) && - !disabledAzureKeyVaultCertificateKeys.includes(vaultCertName) - ); + const certificatesToRemove = canRemoveCertificates + ? Object.keys(vaultCertificates).filter( + (vaultCertName) => + isInfisicalManagedCertificate(vaultCertName, pkiSync) && + !activeCertificateNames.includes(vaultCertName) && + !disabledAzureKeyVaultCertificateKeys.includes(vaultCertName) + ) + : []; // Upload certificates to Azure Key Vault with rate limiting const uploadResults = await executeWithConcurrencyLimit( @@ -599,7 +612,11 @@ export const azureKeyVaultPkiSyncFactory = ({ kmsService, appConnectionDAL }: TA }; }; - const removeCertificates = async (pkiSync: TPkiSyncWithCredentials, certificateNames: string[]) => { + const removeCertificates = async ( + pkiSync: TPkiSyncWithCredentials, + certificateNames: string[], + deps?: { certificateSyncDAL?: TCertificateSyncDALFactory; certificateMap?: TCertificateMap } + ) => { const { accessToken } = await getAzureConnectionAccessToken(pkiSync.connection.id, appConnectionDAL, kmsService); // Cast destination config to Azure Key Vault config @@ -648,6 +665,27 @@ export const azureKeyVaultPkiSyncFactory = ({ kmsService, appConnectionDAL }: TA ); const failedRemovals = results.filter((result) => result.status === "rejected"); + if (failedRemovals.length > 0 && deps?.certificateSyncDAL && deps?.certificateMap) { + for (const failure of failedRemovals) { + if (failure.status === "rejected") { + const failedIndex = results.indexOf(failure); + const failedCertName = infisicalManagedCertNames[failedIndex]; + if (failedCertName && deps.certificateMap[failedCertName]?.certificateId) { + const { certificateId } = deps.certificateMap[failedCertName]; + if (certificateId) { + const errorMessage = (failure.reason as Error)?.message || "Unknown error"; + await deps.certificateSyncDAL.updateSyncStatus( + pkiSync.id, + certificateId, + CertificateSyncStatus.Failed, + `Failed to remove from Azure: ${errorMessage}` + ); + } + } + } + } + } + if (failedRemovals.length > 0) { const failedReasons = failedRemovals.map((failure) => { if (failure.status === "rejected") { diff --git a/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-schemas.ts b/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-schemas.ts index 4aac20cc0..7e2c875da 100644 --- a/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-schemas.ts +++ b/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-schemas.ts @@ -50,7 +50,7 @@ export const CreateAzureKeyVaultPkiSyncSchema = z.object({ isAutoSyncEnabled: z.boolean().default(true), destinationConfig: AzureKeyVaultPkiSyncConfigSchema, syncOptions: AzureKeyVaultPkiSyncOptionsSchema.optional().default({}), - subscriberId: z.string().optional(), + subscriberId: z.string().nullish(), connectionId: z.string(), projectId: z.string().trim().min(1), certificateIds: z.array(z.string().uuid()).optional() @@ -62,7 +62,7 @@ export const UpdateAzureKeyVaultPkiSyncSchema = z.object({ isAutoSyncEnabled: z.boolean().optional(), destinationConfig: AzureKeyVaultPkiSyncConfigSchema.optional(), syncOptions: AzureKeyVaultPkiSyncOptionsSchema.optional(), - subscriberId: z.string().optional(), + subscriberId: z.string().nullish(), connectionId: z.string().optional() }); diff --git a/backend/src/services/pki-sync/pki-sync-fns.ts b/backend/src/services/pki-sync/pki-sync-fns.ts index 7fbcd0773..be424a37d 100644 --- a/backend/src/services/pki-sync/pki-sync-fns.ts +++ b/backend/src/services/pki-sync/pki-sync-fns.ts @@ -4,6 +4,8 @@ import { z, ZodSchema } from "zod"; import { TLicenseServiceFactory } from "@app/ee/services/license/license-service"; import { BadRequestError } from "@app/lib/errors"; import { TAppConnectionDALFactory } from "@app/services/app-connection/app-connection-dal"; +import { TCertificateDALFactory } from "@app/services/certificate/certificate-dal"; +import { TCertificateSyncDALFactory } from "@app/services/certificate-sync/certificate-sync-dal"; import { TKmsServiceFactory } from "@app/services/kms/kms-service"; import { AWS_CERTIFICATE_MANAGER_PKI_SYNC_LIST_OPTION } from "./aws-certificate-manager/aws-certificate-manager-pki-sync-constants"; @@ -184,6 +186,8 @@ export const PkiSyncFns = { dependencies: { appConnectionDAL: Pick; kmsService: Pick; + certificateDAL: TCertificateDALFactory; + certificateSyncDAL: TCertificateSyncDALFactory; } ): Promise<{ uploaded: number; @@ -205,7 +209,12 @@ export const PkiSyncFns = { } case PkiSync.AwsCertificateManager: { checkPkiSyncDestination(pkiSync, PkiSync.AwsCertificateManager); - const awsCertificateManagerPkiSync = awsCertificateManagerPkiSyncFactory(dependencies); + const awsCertificateManagerPkiSync = awsCertificateManagerPkiSyncFactory({ + appConnectionDAL: dependencies.appConnectionDAL, + kmsService: dependencies.kmsService, + certificateDAL: dependencies.certificateDAL, + certificateSyncDAL: dependencies.certificateSyncDAL + }); return awsCertificateManagerPkiSync.syncCertificates(pkiSync, certificateMap); } default: @@ -219,19 +228,33 @@ export const PkiSyncFns = { dependencies: { appConnectionDAL: Pick; kmsService: Pick; + certificateSyncDAL: TCertificateSyncDALFactory; + certificateDAL: TCertificateDALFactory; + certificateMap: TCertificateMap; } ): Promise => { switch (pkiSync.destination) { case PkiSync.AzureKeyVault: { checkPkiSyncDestination(pkiSync, PkiSync.AzureKeyVault); const azureKeyVaultPkiSync = azureKeyVaultPkiSyncFactory(dependencies); - await azureKeyVaultPkiSync.removeCertificates(pkiSync, certificateNames); + await azureKeyVaultPkiSync.removeCertificates(pkiSync, certificateNames, { + certificateSyncDAL: dependencies.certificateSyncDAL, + certificateMap: dependencies.certificateMap + }); break; } case PkiSync.AwsCertificateManager: { checkPkiSyncDestination(pkiSync, PkiSync.AwsCertificateManager); - const awsCertificateManagerPkiSync = awsCertificateManagerPkiSyncFactory(dependencies); - await awsCertificateManagerPkiSync.removeCertificates(pkiSync, certificateNames); + const awsCertificateManagerPkiSync = awsCertificateManagerPkiSyncFactory({ + appConnectionDAL: dependencies.appConnectionDAL, + kmsService: dependencies.kmsService, + certificateDAL: dependencies.certificateDAL, + certificateSyncDAL: dependencies.certificateSyncDAL + }); + await awsCertificateManagerPkiSync.removeCertificates(pkiSync, certificateNames, { + certificateSyncDAL: dependencies.certificateSyncDAL, + certificateMap: dependencies.certificateMap + }); break; } default: diff --git a/backend/src/services/pki-sync/pki-sync-queue.ts b/backend/src/services/pki-sync/pki-sync-queue.ts index 5889e2210..608162ead 100644 --- a/backend/src/services/pki-sync/pki-sync-queue.ts +++ b/backend/src/services/pki-sync/pki-sync-queue.ts @@ -27,6 +27,7 @@ import { TCertificateAuthorityCertDALFactory } from "../certificate-authority/ce import { TCertificateAuthorityDALFactory } from "../certificate-authority/certificate-authority-dal"; import { getCaCertChain } from "../certificate-authority/certificate-authority-fns"; import { TCertificateSyncDALFactory } from "../certificate-sync/certificate-sync-dal"; +import { CertificateSyncStatus } from "../certificate-sync/certificate-sync-enums"; import { TPkiSyncDALFactory } from "./pki-sync-dal"; import { PkiSyncStatus } from "./pki-sync-enums"; import { PkiSyncError } from "./pki-sync-errors"; @@ -57,23 +58,12 @@ type TPkiSyncQueueFactoryDep = { auditLogService: Pick; projectDAL: TProjectDALFactory; licenseService: Pick; - certificateDAL: Pick< - TCertificateDALFactory, - | "findLatestActiveCertForSubscriber" - | "findAllActiveCertsForSubscriber" - | "findActiveCertificatesByIds" - | "create" - | "findById" - | "find" - >; + certificateDAL: TCertificateDALFactory; certificateBodyDAL: Pick; certificateSecretDAL: Pick; certificateAuthorityDAL: Pick; certificateAuthorityCertDAL: Pick; - certificateSyncDAL: Pick< - TCertificateSyncDALFactory, - "findCertificateIdsByPkiSyncId" | "updateSyncStatus" | "bulkUpdateSyncStatus" - >; + certificateSyncDAL: TCertificateSyncDALFactory; }; type PkiSyncActionJob = Job< @@ -303,7 +293,8 @@ export const pkiSyncQueueFactory = ({ cert: certificatePem, privateKey: certPrivateKey || "", certificateChain, - alternativeNames + alternativeNames, + certificateId: certificate.id }; certificateMetadata.set(certificateName, { @@ -427,7 +418,7 @@ export const pkiSyncQueueFactory = ({ const statusUpdates = Array.from(certificateMetadata.entries()).map(([, metadata]) => ({ pkiSyncId: pkiSync.id, certificateId: metadata.id, - status: "running", + status: CertificateSyncStatus.Running, message: "Syncing certificate to destination" })); @@ -437,7 +428,9 @@ export const pkiSyncQueueFactory = ({ const syncResult = await PkiSyncFns.syncCertificates(pkiSyncWithCredentials, certificateMap, { appConnectionDAL, - kmsService + kmsService, + certificateDAL, + certificateSyncDAL }); logger.info( @@ -462,7 +455,7 @@ export const pkiSyncQueueFactory = ({ postSyncUpdates.push({ pkiSyncId: pkiSync.id, certificateId: metadata.id, - status: "succeeded", + status: CertificateSyncStatus.Succeeded, message: "Certificate successfully synced to destination" }); } @@ -476,7 +469,7 @@ export const pkiSyncQueueFactory = ({ postSyncUpdates[updateIndex] = { pkiSyncId: pkiSync.id, certificateId: metadata.id, - status: "failed", + status: CertificateSyncStatus.Failed, message: `${validationError.error}` }; } @@ -493,7 +486,7 @@ export const pkiSyncQueueFactory = ({ postSyncUpdates[updateIndex] = { pkiSyncId: pkiSync.id, certificateId: metadata.id, - status: "failed", + status: CertificateSyncStatus.Failed, message: `Failed to sync certificate: ${failure.error}` }; } @@ -699,7 +692,10 @@ export const pkiSyncQueueFactory = ({ Object.keys(certificateMap), { appConnectionDAL, - kmsService + kmsService, + certificateSyncDAL, + certificateDAL, + certificateMap } ); diff --git a/backend/src/services/pki-sync/pki-sync-service.ts b/backend/src/services/pki-sync/pki-sync-service.ts index c3bda528e..920b7b866 100644 --- a/backend/src/services/pki-sync/pki-sync-service.ts +++ b/backend/src/services/pki-sync/pki-sync-service.ts @@ -610,6 +610,10 @@ export const pkiSyncServiceFactory = ({ certificateStatus: detail.certificateStatus || undefined, certificateNotBefore: detail.certificateNotBefore || undefined, certificateNotAfter: detail.certificateNotAfter || undefined, + certificateRenewBeforeDays: !detail.certificateRenewedByCertificateId + ? detail.certificateRenewBeforeDays + : undefined, + certificateRenewalError: detail.certificateRenewalError || undefined, pkiSyncName: detail.pkiSyncName || undefined, pkiSyncDestination: detail.pkiSyncDestination || undefined })); diff --git a/backend/src/services/pki-sync/pki-sync-types.ts b/backend/src/services/pki-sync/pki-sync-types.ts index a9e236470..f42f64a1b 100644 --- a/backend/src/services/pki-sync/pki-sync-types.ts +++ b/backend/src/services/pki-sync/pki-sync-types.ts @@ -73,7 +73,7 @@ export type TPkiSyncListItem = TPkiSync & { export type TCertificateMap = Record< string, - { cert: string; privateKey: string; certificateChain?: string; alternativeNames?: string[] } + { cert: string; privateKey: string; certificateChain?: string; alternativeNames?: string[]; certificateId?: string } >; export type TCreatePkiSyncDTO = { @@ -176,6 +176,8 @@ export type TPkiSyncCertificate = { certificateStatus?: string; certificateNotBefore?: Date; certificateNotAfter?: Date; + certificateRenewBeforeDays?: number; + certificateRenewalError?: string; pkiSyncName?: string; pkiSyncDestination?: string; }; diff --git a/backend/src/services/pki-sync/pki-sync-utils.ts b/backend/src/services/pki-sync/pki-sync-utils.ts index 3a62c1d21..3e278de48 100644 --- a/backend/src/services/pki-sync/pki-sync-utils.ts +++ b/backend/src/services/pki-sync/pki-sync-utils.ts @@ -59,7 +59,7 @@ export const triggerAutoSyncForCertificate = async ( } }; -export const replaceCertificateInSyncs = async ( +export const addRenewedCertificateToSyncs = async ( oldCertificateId: string, newCertificateId: string, dependencies: { @@ -77,18 +77,15 @@ export const replaceCertificateInSyncs = async ( return; } - const replacementPromises = pkiSyncIds.map(async (pkiSyncId) => { - await dependencies.certificateSyncDAL.removeCertificates(pkiSyncId, [oldCertificateId], tx); + const addPromises = pkiSyncIds.map(async (pkiSyncId) => { await dependencies.certificateSyncDAL.addCertificates(pkiSyncId, [newCertificateId], tx); }); - await Promise.all(replacementPromises); + await Promise.all(addPromises); - logger.info( - `Successfully replaced certificate ${oldCertificateId} with ${newCertificateId} in ${pkiSyncIds.length} PKI sync(s)` - ); + logger.info(`Successfully added renewed certificate ${newCertificateId} to ${pkiSyncIds.length} PKI sync(s)`); } catch (error) { - logger.error(error, `Failed to replace certificate ${oldCertificateId} with ${newCertificateId} in syncs:`); + logger.error(error, `Failed to add renewed certificate ${newCertificateId} to syncs:`); throw error; } }; diff --git a/frontend/src/components/pki-syncs/forms/PkiSyncOptionsFields/PkiSyncOptionsFields.tsx b/frontend/src/components/pki-syncs/forms/PkiSyncOptionsFields/PkiSyncOptionsFields.tsx index c646d6ca2..82b11fa33 100644 --- a/frontend/src/components/pki-syncs/forms/PkiSyncOptionsFields/PkiSyncOptionsFields.tsx +++ b/frontend/src/components/pki-syncs/forms/PkiSyncOptionsFields/PkiSyncOptionsFields.tsx @@ -71,14 +71,14 @@ export const PkiSyncOptionsFields = ({ destination }: Props) => { isChecked={value} >

- Enable Certificate Removal{" "} + Enable Inactive Certificate Removal{" "}

When enabled, Infisical will remove certificates from the destination during - a sync if they are no longer managed by Infisical. + a sync if they are no longer active in Infisical.

Disable this option if you intend to manage some certificates manually diff --git a/frontend/src/hooks/api/pkiSyncs/types/common.ts b/frontend/src/hooks/api/pkiSyncs/types/common.ts index db6a6c4db..77dc785ee 100644 --- a/frontend/src/hooks/api/pkiSyncs/types/common.ts +++ b/frontend/src/hooks/api/pkiSyncs/types/common.ts @@ -61,6 +61,8 @@ export type TPkiSyncCertificate = { certificateStatus?: string; certificateNotBefore?: Date; certificateNotAfter?: Date; + certificateRenewBeforeDays?: number; + certificateRenewalError?: string; pkiSyncName?: string; pkiSyncDestination?: string; }; diff --git a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncCertificatesSection.tsx b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncCertificatesSection.tsx index 2fd6aad3a..3a313a33d 100644 --- a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncCertificatesSection.tsx +++ b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncCertificatesSection.tsx @@ -1,6 +1,11 @@ import { useState } from "react"; import { subject } from "@casl/ability"; -import { faCertificate, faEdit, faTrash } from "@fortawesome/free-solid-svg-icons"; +import { + faCertificate, + faClockRotateLeft, + faEdit, + faTrash +} from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { createNotification } from "@app/components/notifications"; @@ -49,6 +54,18 @@ const getSyncStatusText = (status?: CertificateSyncStatus | null) => { return "Unknown"; }; +const getCertificateStatusVariant = (isExpired: boolean, isRevoked: boolean) => { + if (isRevoked) return "danger"; + if (isExpired) return "danger"; + return "success"; +}; + +const getCertificateStatusText = (isExpired: boolean, isRevoked: boolean) => { + if (isRevoked) return "Revoked"; + if (isExpired) return "Expired"; + return "Active"; +}; + export const PkiSyncCertificatesSection = ({ pkiSync }: Props) => { const [isManageModalOpen, setIsManageModalOpen] = useState(false); const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); @@ -128,11 +145,12 @@ export const PkiSyncCertificatesSection = ({ pkiSync }: Props) => { - - - - - + + + + + + @@ -140,6 +158,29 @@ export const PkiSyncCertificatesSection = ({ pkiSync }: Props) => { const isExpired = syncCert.certificateNotAfter ? new Date(syncCert.certificateNotAfter) < new Date() : false; + const isRevoked = syncCert.certificateStatus === "revoked"; + + // Calculate auto-renewal timeline + const hasAutoRenewal = Boolean( + syncCert.certificateRenewBeforeDays && + syncCert.certificateRenewBeforeDays > 0 && + !syncCert.certificateRenewalError && + syncCert.certificateNotAfter + ); + + const daysUntilRenewal = + hasAutoRenewal && syncCert.certificateNotAfter + ? (() => { + const expiryDate = new Date(syncCert.certificateNotAfter); + const renewalDate = new Date( + expiryDate.getTime() - + syncCert.certificateRenewBeforeDays! * 24 * 60 * 60 * 1000 + ); + const now = new Date(); + const diffInMs = renewalDate.getTime() - now.getTime(); + return Math.max(0, Math.ceil(diffInMs / (24 * 60 * 60 * 1000))); + })() + : null; const { originalDisplayName } = getCertificateDisplayName( { @@ -162,12 +203,22 @@ export const PkiSyncCertificatesSection = ({ pkiSync }: Props) => { fallback="Unknown" /> + -
SAN / CNSerial NumberStatusExpiresActionsSAN / CNStatusSerial NumberSync StatusExpires At
+ + {getCertificateStatusText(isExpired, isRevoked)} + +
- {syncCert.certificateSerialNumber || "Unknown"} + {(() => { + const serial = syncCert.certificateSerialNumber; + if (!serial || serial === "Unknown") return "Unknown"; + if (serial.length <= 8) return serial; + return `${serial.substring(0, 4)}...${serial.substring(serial.length - 4)}`; + })()}
@@ -191,7 +242,14 @@ export const PkiSyncCertificatesSection = ({ pkiSync }: Props) => { : "Unknown"} + + {hasAutoRenewal && daysUntilRenewal !== null && ( + +
+ +
+
+ )} { */} - + {canRemoveCertificates ? "Enabled" : "Disabled"} From 5a8f684515f290957f17b832553cac22ad1df5e7 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Thu, 30 Oct 2025 23:27:49 +0530 Subject: [PATCH 16/79] fix: frontend lint --- .../forms/SecretSyncDestinationFields/ChefSyncFields.tsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/ChefSyncFields.tsx b/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/ChefSyncFields.tsx index 1c1b50485..ad80e75de 100644 --- a/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/ChefSyncFields.tsx +++ b/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/ChefSyncFields.tsx @@ -20,7 +20,6 @@ export const ChefSyncFields = () => { const connectionId = useWatch({ name: "connection.id", control }); const dataBagName = useWatch({ name: "destinationConfig.dataBagName", control }); - const dataBagItemName = useWatch({ name: "destinationConfig.dataBagItemName", control }); const { data: dataBags, isLoading: isDataBagsLoading } = useChefConnectionListDataBags( connectionId, @@ -34,8 +33,6 @@ export const ChefSyncFields = () => { enabled: Boolean(connectionId && dataBagName) }); - console.log({ dataBags, dataBagItems }); - const handleChangeConnection = () => { setValue("destinationConfig.dataBagName", ""); setValue("destinationConfig.dataBagItemName", ""); From 3f1607d5aa2aa9f6138b07d167191c6acdefeed7 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Fri, 31 Oct 2025 00:09:58 +0530 Subject: [PATCH 17/79] fix: review comments --- .../forms/SecretSyncDestinationFields/ChefSyncFields.tsx | 1 - .../components/AppConnectionForm/ChefConnectionForm.tsx | 2 -- 2 files changed, 3 deletions(-) diff --git a/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/ChefSyncFields.tsx b/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/ChefSyncFields.tsx index ad80e75de..363f682fd 100644 --- a/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/ChefSyncFields.tsx +++ b/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/ChefSyncFields.tsx @@ -79,7 +79,6 @@ export const ChefSyncFields = () => { onChange={(option) => { const selectedDataBagItem = option as SingleValue; onChange(selectedDataBagItem?.name ?? ""); - setValue("destinationConfig.dataBagItemName", selectedDataBagItem?.name ?? ""); }} options={dataBagItems} placeholder="Select a data bag item..." diff --git a/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/ChefConnectionForm.tsx b/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/ChefConnectionForm.tsx index d56a7523b..3b97ef9ce 100644 --- a/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/ChefConnectionForm.tsx +++ b/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/ChefConnectionForm.tsx @@ -60,8 +60,6 @@ export const ChefConnectionForm = ({ appConnection, onSubmit }: Props) => { formState: { isSubmitting, isDirty } } = form; - console.log("form", form.formState.errors, form.getValues()); - return (
From fc10089acbc50a7aa43c0c4ce490b8653f52ab2c Mon Sep 17 00:00:00 2001 From: Carlos Monastyrski Date: Thu, 30 Oct 2025 15:55:51 -0300 Subject: [PATCH 18/79] Small UI layout change on pki sync certs table --- .../components/PkiSyncCertificatesSection.tsx | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncCertificatesSection.tsx b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncCertificatesSection.tsx index 3a313a33d..7dd3b8884 100644 --- a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncCertificatesSection.tsx +++ b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncCertificatesSection.tsx @@ -145,9 +145,9 @@ export const PkiSyncCertificatesSection = ({ pkiSync }: Props) => { - - - + + + ))} diff --git a/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx b/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx index 413f379e2..b3c287380 100644 --- a/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx +++ b/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx @@ -1,8 +1,10 @@ import { useState } from "react"; -import { faChevronDown, faChevronRight } from "@fortawesome/free-solid-svg-icons"; +import { faChevronRight } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { twMerge } from "tailwind-merge"; import { TPamSession } from "@app/hooks/api/pam"; + import { PamSessionLogOutput } from "./PamSessionLogOutput"; import { formatLogContent } from "./PamSessionLogsSection.utils"; @@ -45,8 +47,11 @@ export const PamSessionLogsSection = ({ session }: Props) => {
{new Date(log.timestamp).toLocaleString()}
@@ -60,21 +65,30 @@ export const PamSessionLogsSection = ({ session }: Props) => { {formattedInput}
- {isExpanded && log.output && ( - <> -
-
- OUTPUT -
-
-
- -
- - )} +
+
+ {log.output && ( + <> +
+
+ OUTPUT +
+
+
+ +
+ + )} +
+
); }) From 050bc2d66ba480e80d35b9d3f9e7e54f03ba5ef2 Mon Sep 17 00:00:00 2001 From: Andre <120525481+x032205@users.noreply.github.com> Date: Sat, 1 Nov 2025 16:00:09 -0400 Subject: [PATCH 35/79] Update frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.utils.ts Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- .../components/PamSessionLogsSection.utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.utils.ts b/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.utils.ts index 4696331fb..d76145655 100644 --- a/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.utils.ts +++ b/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.utils.ts @@ -35,7 +35,7 @@ export const formatLogContent = (text: string | null | undefined): string => { return match ? match[0].length : 0; }); - const minIndentation = Math.min(...indentations); + const minIndentation = indentations.length > 0 ? Math.min(...indentations) : 0; // Remove the common indentation from all lines if (minIndentation > 0) { From cc52c2c713e89f1ea3e25a6154fc4c4c6b56438d Mon Sep 17 00:00:00 2001 From: Carlos Monastyrski Date: Mon, 3 Nov 2025 08:25:27 -0300 Subject: [PATCH 36/79] PKI Syncs improvements --- ...dd-certificate-sync-external-identifier.ts | 21 ++ backend/src/db/schemas/certificate-syncs.ts | 1 + .../ee/services/audit-log/audit-log-types.ts | 12 + backend/src/server/routes/index.ts | 5 +- .../v1/pki-sync-routers/pki-sync-router.ts | 36 +- .../azure-ad-cs-certificate-authority-fns.ts | 4 +- .../certificate-authority-maps.ts | 4 +- .../certificate-sync/certificate-sync-dal.ts | 9 +- .../certificate-v3-service.test.ts | 2 +- .../certificate-v3/certificate-v3-service.ts | 2 +- .../aws-certificate-manager-pki-sync-fns.ts | 337 +++++++++++------- .../azure-key-vault-pki-sync-fns.ts | 234 +++++++++--- .../azure-key-vault-pki-sync-schemas.ts | 1 + backend/src/services/pki-sync/pki-sync-fns.ts | 14 +- .../src/services/pki-sync/pki-sync-service.ts | 127 ++++--- .../src/services/pki-sync/pki-sync-utils.ts | 30 +- .../documentation/platform/pki/azure-adcs.mdx | 2 +- .../pki-syncs/CreatePkiSyncModal.tsx | 13 +- .../pki-syncs/forms/CreatePkiSyncForm.tsx | 6 +- .../pki-syncs/forms/EditPkiSyncForm.tsx | 8 +- .../forms/PkiSyncConnectionField.tsx | 73 +++- .../PkiSyncOptionsFields.tsx | 47 ++- ...e-key-vault-pki-sync-destination-schema.ts | 41 ++- .../components/ExternalCaModal.tsx | 2 +- .../CertificateManagePkiSyncsModal.tsx | 53 ++- .../components/CertificatesTable.tsx | 2 +- .../components/PkiSyncsTab/PkiSyncsTab.tsx | 42 ++- .../IntegrationsListPage/route.tsx | 4 +- .../CreateProfileModal.tsx | 2 +- .../OauthCallbackPage/OauthCallbackPage.tsx | 4 +- 30 files changed, 835 insertions(+), 303 deletions(-) create mode 100644 backend/src/db/migrations/20251031044512_add-certificate-sync-external-identifier.ts diff --git a/backend/src/db/migrations/20251031044512_add-certificate-sync-external-identifier.ts b/backend/src/db/migrations/20251031044512_add-certificate-sync-external-identifier.ts new file mode 100644 index 000000000..69e15795a --- /dev/null +++ b/backend/src/db/migrations/20251031044512_add-certificate-sync-external-identifier.ts @@ -0,0 +1,21 @@ +import { Knex } from "knex"; + +import { TableName } from "../schemas"; + +export async function up(knex: Knex): Promise { + if (!(await knex.schema.hasColumn(TableName.CertificateSync, "externalIdentifier"))) { + await knex.schema.alterTable(TableName.CertificateSync, (t) => { + t.text("externalIdentifier").nullable(); + t.index("externalIdentifier"); + }); + } +} + +export async function down(knex: Knex): Promise { + if (await knex.schema.hasColumn(TableName.CertificateSync, "externalIdentifier")) { + await knex.schema.alterTable(TableName.CertificateSync, (t) => { + t.dropIndex("externalIdentifier"); + t.dropColumn("externalIdentifier"); + }); + } +} diff --git a/backend/src/db/schemas/certificate-syncs.ts b/backend/src/db/schemas/certificate-syncs.ts index 6f10e4d79..78a8a6e5f 100644 --- a/backend/src/db/schemas/certificate-syncs.ts +++ b/backend/src/db/schemas/certificate-syncs.ts @@ -14,6 +14,7 @@ export const CertificateSyncsSchema = z.object({ syncStatus: z.string().default("pending").nullable().optional(), lastSyncMessage: z.string().nullable().optional(), lastSyncedAt: z.date().nullable().optional(), + externalIdentifier: z.string().nullable().optional(), createdAt: z.date(), updatedAt: z.date() }); diff --git a/backend/src/ee/services/audit-log/audit-log-types.ts b/backend/src/ee/services/audit-log/audit-log-types.ts index b58503110..c6ac6ff3b 100644 --- a/backend/src/ee/services/audit-log/audit-log-types.ts +++ b/backend/src/ee/services/audit-log/audit-log-types.ts @@ -426,6 +426,7 @@ export enum EventType { SECRET_SYNC_REMOVE_SECRETS = "secret-sync-remove-secrets", GET_PKI_SYNCS = "get-pki-syncs", GET_PKI_SYNC = "get-pki-sync", + GET_PKI_SYNC_CERTIFICATES = "get-pki-sync-certificates", CREATE_PKI_SYNC = "create-pki-sync", UPDATE_PKI_SYNC = "update-pki-sync", DELETE_PKI_SYNC = "delete-pki-sync", @@ -3161,6 +3162,16 @@ interface GetPkiSyncEvent { }; } +interface GetPkiSyncCertificatesEvent { + type: EventType.GET_PKI_SYNC_CERTIFICATES; + metadata: { + syncId: string; + count: number; + certificateIds: string[]; + destination: string; + }; +} + interface CreatePkiSyncEvent { type: EventType.CREATE_PKI_SYNC; metadata: { @@ -4329,6 +4340,7 @@ export type Event = | SecretSyncRemoveSecretsEvent | GetPkiSyncsEvent | GetPkiSyncEvent + | GetPkiSyncCertificatesEvent | CreatePkiSyncEvent | UpdatePkiSyncEvent | DeletePkiSyncEvent diff --git a/backend/src/server/routes/index.ts b/backend/src/server/routes/index.ts index 386db0e8f..4375e1cac 100644 --- a/backend/src/server/routes/index.ts +++ b/backend/src/server/routes/index.ts @@ -2193,12 +2193,13 @@ export const registerRoutes = async ( const pkiSyncService = pkiSyncServiceFactory({ pkiSyncDAL, + certificateDAL, + certificateSyncDAL, pkiSubscriberDAL, appConnectionService, permissionService, licenseService, - pkiSyncQueue, - certificateSyncDAL + pkiSyncQueue }); const pkiTemplateService = pkiTemplatesServiceFactory({ diff --git a/backend/src/server/routes/v1/pki-sync-routers/pki-sync-router.ts b/backend/src/server/routes/v1/pki-sync-routers/pki-sync-router.ts index 45e5464f2..0710a91fc 100644 --- a/backend/src/server/routes/v1/pki-sync-routers/pki-sync-router.ts +++ b/backend/src/server/routes/v1/pki-sync-routers/pki-sync-router.ts @@ -93,8 +93,8 @@ const PkiSyncCertificateSchema = z.object({ certificateStatus: z.string().optional(), certificateNotBefore: z.date().optional(), certificateNotAfter: z.date().optional(), - certificateRenewBeforeDays: z.number().optional(), - certificateRenewalError: z.string().optional(), + certificateRenewBeforeDays: z.number().nullish(), + certificateRenewalError: z.string().nullish(), pkiSyncName: z.string().optional(), pkiSyncDestination: z.string().optional() }); @@ -233,26 +233,26 @@ export const registerPkiSyncRouter = async (server: FastifyZodProvider) => { const { pkiSyncId } = req.params; const { offset, limit } = req.query; - const result = await server.services.pkiSync.listPkiSyncCertificates( + const { certificates, totalCount, pkiSyncInfo } = await server.services.pkiSync.listPkiSyncCertificates( { pkiSyncId, offset, limit }, req.permission ); - const pkiSync = await server.services.pkiSync.findPkiSyncById({ id: pkiSyncId }, req.permission); - await server.services.auditLog.createAuditLog({ ...req.auditLogInfo, - projectId: pkiSync.projectId, + projectId: pkiSyncInfo.projectId, event: { - type: EventType.GET_PKI_SYNC, + type: EventType.GET_PKI_SYNC_CERTIFICATES, metadata: { syncId: pkiSyncId, - destination: pkiSync.destination + destination: pkiSyncInfo.destination, + count: certificates.length, + certificateIds: certificates.map((c) => c.certificateId) } } }); - return result; + return { certificates, totalCount }; } }); @@ -294,21 +294,19 @@ export const registerPkiSyncRouter = async (server: FastifyZodProvider) => { const { pkiSyncId } = req.params; const { certificateIds } = req.body; - const addedCertificates = await server.services.pkiSync.addCertificatesToPkiSync( + const { addedCertificates, pkiSyncInfo } = await server.services.pkiSync.addCertificatesToPkiSync( { pkiSyncId, certificateIds }, req.permission ); - const pkiSync = await server.services.pkiSync.findPkiSyncById({ id: pkiSyncId }, req.permission); - await server.services.auditLog.createAuditLog({ ...req.auditLogInfo, - projectId: pkiSync.projectId, + projectId: pkiSyncInfo.projectId, event: { type: EventType.UPDATE_PKI_SYNC, metadata: { pkiSyncId, - name: pkiSync.name + name: pkiSyncInfo.name } } }); @@ -344,26 +342,24 @@ export const registerPkiSyncRouter = async (server: FastifyZodProvider) => { const { pkiSyncId } = req.params; const { certificateIds } = req.body; - const result = await server.services.pkiSync.removeCertificatesFromPkiSync( + const { removedCount, pkiSyncInfo } = await server.services.pkiSync.removeCertificatesFromPkiSync( { pkiSyncId, certificateIds }, req.permission ); - const pkiSync = await server.services.pkiSync.findPkiSyncById({ id: pkiSyncId }, req.permission); - await server.services.auditLog.createAuditLog({ ...req.auditLogInfo, - projectId: pkiSync.projectId, + projectId: pkiSyncInfo.projectId, event: { type: EventType.UPDATE_PKI_SYNC, metadata: { pkiSyncId, - name: pkiSync.name + name: pkiSyncInfo.name } } }); - return result; + return { removedCount }; } }); }; diff --git a/backend/src/services/certificate-authority/azure-ad-cs/azure-ad-cs-certificate-authority-fns.ts b/backend/src/services/certificate-authority/azure-ad-cs/azure-ad-cs-certificate-authority-fns.ts index 4937a5331..26f59a402 100644 --- a/backend/src/services/certificate-authority/azure-ad-cs/azure-ad-cs-certificate-authority-fns.ts +++ b/backend/src/services/certificate-authority/azure-ad-cs/azure-ad-cs-certificate-authority-fns.ts @@ -192,7 +192,7 @@ export const castDbEntryToAzureAdCsCertificateAuthority = ( ca: Awaited> ): TAzureAdCsCertificateAuthority & { credentials: unknown } => { if (!ca.externalCa?.id) { - throw new BadRequestError({ message: "Malformed Azure AD Certificate Service certificate authority" }); + throw new BadRequestError({ message: "Malformed Active Directory Certificate Service certificate authority" }); } if (!ca.externalCa.dnsAppConnectionId) { @@ -776,7 +776,7 @@ export const AzureAdCsCertificateAuthorityFns = ({ const ca = await certificateAuthorityDAL.findByIdWithAssociatedCa(subscriber.caId); if (!ca.externalCa || ca.externalCa.type !== CaType.AZURE_AD_CS) { - throw new BadRequestError({ message: "CA is not an Azure AD Certificate Service CA" }); + throw new BadRequestError({ message: "CA is not an Active Directory Certificate Service CA" }); } const azureCa = castDbEntryToAzureAdCsCertificateAuthority(ca); diff --git a/backend/src/services/certificate-authority/certificate-authority-maps.ts b/backend/src/services/certificate-authority/certificate-authority-maps.ts index ef844a1ed..bae444cae 100644 --- a/backend/src/services/certificate-authority/certificate-authority-maps.ts +++ b/backend/src/services/certificate-authority/certificate-authority-maps.ts @@ -2,8 +2,8 @@ import { CaCapability, CaType } from "./certificate-authority-enums"; export const CERTIFICATE_AUTHORITIES_TYPE_MAP: Record = { [CaType.INTERNAL]: "Internal", - [CaType.ACME]: "ACME", - [CaType.AZURE_AD_CS]: "Azure AD Certificate Service" + [CaType.ACME]: "ACME-compatible CA", + [CaType.AZURE_AD_CS]: "Active Directory Certificate Service" }; export const CERTIFICATE_AUTHORITIES_CAPABILITIES_MAP: Record = { diff --git a/backend/src/services/certificate-sync/certificate-sync-dal.ts b/backend/src/services/certificate-sync/certificate-sync-dal.ts index 904a18a75..a46ae8e5a 100644 --- a/backend/src/services/certificate-sync/certificate-sync-dal.ts +++ b/backend/src/services/certificate-sync/certificate-sync-dal.ts @@ -72,14 +72,15 @@ export const certificateSyncDALFactory = (db: TDbClient) => { const addCertificates = async ( pkiSyncId: string, - certificateIds: string[], + certificateData: Array<{ certificateId: string; externalIdentifier?: string }>, tx?: Knex ): Promise => { try { - const insertData = certificateIds.map((certificateId) => ({ + const insertData = certificateData.map(({ certificateId, externalIdentifier }) => ({ pkiSyncId, certificateId, - syncStatus: CertificateSyncStatus.Pending + syncStatus: CertificateSyncStatus.Pending, + externalIdentifier })); const docs = await (tx || db)(TableName.CertificateSync).insert(insertData).returning("*"); @@ -184,7 +185,7 @@ export const certificateSyncDALFactory = (db: TDbClient) => { certificateStatus?: string; certificateNotBefore?: Date; certificateNotAfter?: Date; - certificateRenewBeforeDays?: number; + certificateRenewBeforeDays?: number | null; certificateRenewedByCertificateId?: string; certificateRenewalError?: string; pkiSyncName?: string; diff --git a/backend/src/services/certificate-v3/certificate-v3-service.test.ts b/backend/src/services/certificate-v3/certificate-v3-service.test.ts index 11b51ecc7..d11cce056 100644 --- a/backend/src/services/certificate-v3/certificate-v3-service.test.ts +++ b/backend/src/services/certificate-v3/certificate-v3-service.test.ts @@ -137,7 +137,7 @@ describe("CertificateV3Service", () => { certificateSyncDAL: { findPkiSyncIdsByCertificateId: vi.fn().mockResolvedValue([]), addCertificates: vi.fn().mockResolvedValue([]), - removeCertificates: vi.fn().mockResolvedValue(0) + findByPkiSyncAndCertificate: vi.fn().mockResolvedValue(null) }, pkiSyncDAL: { find: vi.fn().mockResolvedValue([]) diff --git a/backend/src/services/certificate-v3/certificate-v3-service.ts b/backend/src/services/certificate-v3/certificate-v3-service.ts index 1cff10f3c..51c79f135 100644 --- a/backend/src/services/certificate-v3/certificate-v3-service.ts +++ b/backend/src/services/certificate-v3/certificate-v3-service.ts @@ -78,7 +78,7 @@ type TCertificateV3ServiceFactoryDep = { permissionService: Pick; certificateSyncDAL: Pick< TCertificateSyncDALFactory, - "findPkiSyncIdsByCertificateId" | "removeCertificates" | "addCertificates" + "findPkiSyncIdsByCertificateId" | "addCertificates" | "findByPkiSyncAndCertificate" >; pkiSyncDAL: Pick; pkiSyncQueue: Pick; diff --git a/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-fns.ts b/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-fns.ts index 0e416f016..ae4cdcf55 100644 --- a/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-fns.ts +++ b/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-fns.ts @@ -92,43 +92,6 @@ const shouldSkipCertificateExport = (certificate: AWS.ACM.CertificateSummary): b return isAwsIssuedCertificate(certificate); }; -const findTagByKey = (tags: AWS.ACM.TagList | undefined, key: string): AWS.ACM.Tag | undefined => { - if (!tags || !Array.isArray(tags)) { - return undefined; - } - return tags.find((tag: AWS.ACM.Tag) => tag.Key === key && tag.Value); -}; - -const findInfisicalCertificateTag = (tags: AWS.ACM.TagList | undefined): AWS.ACM.Tag | undefined => { - return findTagByKey(tags, INFISICAL_CERTIFICATE_TAG); -}; - -const validateCertificateIdentification = ( - certName: string, - existingCert: { arn?: string; Tags?: AWS.ACM.TagList; cert?: string; privateKey?: string; certificateChain?: string }, - alternativeCertNames?: string[] -): boolean => { - if (!existingCert?.arn || !existingCert?.Tags) { - return false; - } - - const certNameTag = findInfisicalCertificateTag(existingCert.Tags); - - if (!certNameTag || !certNameTag.Value) { - return false; - } - - if (certNameTag.Value === certName) { - return true; - } - - if (alternativeCertNames && alternativeCertNames.includes(certNameTag.Value)) { - return true; - } - - return false; -}; - const validateCertificateNameSchema = (schema: string): void => { if (!schema.includes("{{certificateId}}")) { throw new Error( @@ -185,7 +148,15 @@ const generateCertificateName = (certificateName: string, pkiSync: TPkiSyncWithC type TAwsCertificateManagerPkiSyncFactoryDeps = { appConnectionDAL: Pick; kmsService: Pick; - certificateSyncDAL: Pick; + certificateSyncDAL: Pick< + TCertificateSyncDALFactory, + | "removeCertificates" + | "addCertificates" + | "findByPkiSyncAndCertificate" + | "updateSyncStatus" + | "updateById" + | "findByPkiSyncId" + >; certificateDAL: Pick; }; @@ -418,16 +389,38 @@ export const awsCertificateManagerPkiSyncFactory = ({ >; } = await $getAwsAcmCertificates(acm, pkiSync.id); + const acmCertificatesByArn = new Map(); + Object.values(acmCertificates).forEach((acmCert) => { + if (acmCert.arn) { + acmCertificatesByArn.set(acmCert.arn, acmCert); + } + }); + + const existingSyncRecords = await certificateSyncDAL.findByPkiSyncId(pkiSync.id); + type SyncRecord = (typeof existingSyncRecords)[0]; + const syncRecordsByCertId = new Map(); + const syncRecordsByExternalId = new Map(); + + existingSyncRecords.forEach((record: SyncRecord) => { + if (record.certificateId) { + syncRecordsByCertId.set(record.certificateId, record); + } + if (record.externalIdentifier) { + syncRecordsByExternalId.set(record.externalIdentifier, record); + } + }); + const setCertificates: CertificateImportRequest[] = []; const validationErrors: Array<{ name: string; error: string }> = []; - const activeCertificateNames = Object.keys(certificateMap); const syncOptions = pkiSync.syncOptions as { preserveArn?: boolean; canRemoveCertificates?: boolean } | undefined; const preserveArn = syncOptions?.preserveArn ?? true; const canRemoveCertificates = syncOptions?.canRemoveCertificates ?? true; + const activeExternalIdentifiers = new Set(); + for (const [certName, certData] of Object.entries(certificateMap)) { - const { cert, privateKey, certificateChain, alternativeNames, certificateId } = certData; + const { cert, privateKey, certificateChain, certificateId } = certData; try { validateCertificateContent(cert, privateKey); @@ -441,7 +434,7 @@ export const awsCertificateManagerPkiSyncFactory = ({ continue; } - if (preserveArn && certificateId) { + if (preserveArn && certificateId && typeof certificateId === "string") { const certificate = await certificateDAL.findById(certificateId); if (certificate?.renewedByCertificateId) { // eslint-disable-next-line no-continue @@ -451,60 +444,120 @@ export const awsCertificateManagerPkiSyncFactory = ({ const certificateName = generateCertificateName(certName, pkiSync); - let existingArn: string | undefined; + let targetArn: string | undefined; + let shouldCreateNew = false; - const existingCert = Object.values(acmCertificates).find((acmCert) => { - return validateCertificateIdentification(certName, acmCert, alternativeNames); - }); + if (!certificateId || typeof certificateId !== "string") { + shouldCreateNew = true; + } else { + const currentCertificate = await certificateDAL.findById(certificateId); + const isRenewal = !!currentCertificate?.renewedFromCertificateId; - if (existingCert?.arn && preserveArn) { - // When preserveArn is true, reuse the existing ARN - existingArn = existingCert.arn; + if (isRenewal) { + const currentSyncRecord = syncRecordsByCertId.get(certificateId); + const oldCertificateId = currentCertificate.renewedFromCertificateId; + const oldSyncRecord = oldCertificateId ? syncRecordsByCertId.get(oldCertificateId) : undefined; + + if (currentSyncRecord?.externalIdentifier) { + const existingAcmCert = acmCertificatesByArn.get(currentSyncRecord.externalIdentifier); + + if (existingAcmCert) { + if (!preserveArn && oldSyncRecord?.externalIdentifier === currentSyncRecord.externalIdentifier) { + shouldCreateNew = true; + } else if (preserveArn && oldSyncRecord?.externalIdentifier === currentSyncRecord.externalIdentifier) { + targetArn = currentSyncRecord.externalIdentifier; + shouldCreateNew = true; + activeExternalIdentifiers.add(targetArn); + + if (oldCertificateId && oldSyncRecord) { + await certificateSyncDAL.removeCertificates(pkiSync.id, [oldCertificateId]); + } + } else { + targetArn = currentSyncRecord.externalIdentifier; + activeExternalIdentifiers.add(targetArn); + shouldCreateNew = false; + } + } else { + shouldCreateNew = true; + } + } else if (preserveArn && oldSyncRecord?.externalIdentifier) { + const existingAcmCert = acmCertificatesByArn.get(oldSyncRecord.externalIdentifier); + + if (existingAcmCert) { + targetArn = oldSyncRecord.externalIdentifier; + shouldCreateNew = true; + activeExternalIdentifiers.add(targetArn); + if (oldCertificateId) { + await certificateSyncDAL.removeCertificates(pkiSync.id, [oldCertificateId]); + } + } else { + shouldCreateNew = true; + } + } else { + shouldCreateNew = true; + } + } else { + const existingSyncRecord = syncRecordsByCertId.get(certificateId); + if (existingSyncRecord?.externalIdentifier) { + const existingAcmCert = acmCertificatesByArn.get(existingSyncRecord.externalIdentifier); + if (existingAcmCert) { + targetArn = existingSyncRecord.externalIdentifier; + activeExternalIdentifiers.add(targetArn); + shouldCreateNew = false; + } else { + shouldCreateNew = true; + } + } else { + shouldCreateNew = true; + } + } } - setCertificates.push({ - key: certName, - name: certificateName, - cert, - privateKey, - certificateChain, - existingArn, - certificateId - }); + if (shouldCreateNew) { + setCertificates.push({ + key: certName, + name: certificateName, + cert, + privateKey, + certificateChain, + existingArn: targetArn, + certificateId: certificateId as string + }); + } + + if (targetArn) { + activeExternalIdentifiers.add(targetArn); + } } - const certificatesToRemove = canRemoveCertificates - ? Object.values(acmCertificates) - .filter((acmCert) => { - if (!acmCert.arn || !acmCert.Tags) { - return false; + const certificatesToRemove: string[] = []; + + if (canRemoveCertificates) { + existingSyncRecords.forEach((syncRecord) => { + if (syncRecord.externalIdentifier && !activeExternalIdentifiers.has(syncRecord.externalIdentifier)) { + const acmCert = acmCertificatesByArn.get(syncRecord.externalIdentifier); + if (acmCert?.arn) { + certificatesToRemove.push(acmCert.arn); + } + } + }); + + Object.values(acmCertificates).forEach((acmCert) => { + if (acmCert.arn && acmCert.Tags) { + const hasInfisicalTag = acmCert.Tags.some((tag) => tag.Key === INFISICAL_CERTIFICATE_TAG && tag.Value); + + if (hasInfisicalTag) { + const isTrackedInSyncRecords = existingSyncRecords.some( + (record) => record.externalIdentifier === acmCert.arn + ); + const isInActiveSet = activeExternalIdentifiers.has(acmCert.arn); + if (!isTrackedInSyncRecords && !isInActiveSet && !certificatesToRemove.includes(acmCert.arn)) { + certificatesToRemove.push(acmCert.arn); } - - const certNameTag = findInfisicalCertificateTag(acmCert.Tags); - if (!certNameTag || !certNameTag.Value) { - return false; - } - - const isActive = activeCertificateNames.some((activeCertName) => { - const certData = certificateMap[activeCertName]; - if (!certData) return false; - - return validateCertificateIdentification(activeCertName, acmCert, certData.alternativeNames); - }); - - if (!isActive) { - return true; - } - - if (!preserveArn && isActive) { - return true; - } - - return false; - }) - .map((acmCert) => acmCert.arn!) - .filter((arn) => arn) - : []; + } + } + }); + } const uploadResults = await executeWithConcurrencyLimit( setCertificates, @@ -569,10 +622,21 @@ export const awsCertificateManagerPkiSyncFactory = ({ } } - if (existingArn && preserveArn && certificateId) { - const currentCertificate = await certificateDAL.findById(certificateId); - if (currentCertificate?.renewedFromCertificateId) { - await certificateSyncDAL.removeCertificates(pkiSync.id, [currentCertificate.renewedFromCertificateId]); + if (response.CertificateArn && certificateId) { + const existingCertSync = await certificateSyncDAL.findByPkiSyncAndCertificate(pkiSync.id, certificateId); + if (existingCertSync) { + await certificateSyncDAL.updateById(existingCertSync.id, { + externalIdentifier: response.CertificateArn, + syncStatus: CertificateSyncStatus.Succeeded, + lastSyncedAt: new Date() + }); + } else { + await certificateSyncDAL.addCertificates(pkiSync.id, [ + { + certificateId, + externalIdentifier: response.CertificateArn + } + ]); } } @@ -682,29 +746,33 @@ export const awsCertificateManagerPkiSyncFactory = ({ kmsService ); - const { - acmCertificates - }: { - acmCertificates: Record< - string, - { cert: string; privateKey: string; certificateChain?: string; arn?: string; Tags?: AWS.ACM.TagList } - >; - } = await $getAwsAcmCertificates(acm, pkiSync.id); - + const existingSyncRecords = await certificateSyncDAL.findByPkiSyncId(pkiSync.id); const certificateArnsToRemove: string[] = []; - + const certificateIdToArnMap = new Map(); for (const certName of certificateNames) { - const matchingCerts = Object.values(acmCertificates).filter((acmCert) => - validateCertificateIdentification(certName, acmCert) - ); + const certificateData = deps?.certificateMap?.[certName]; + if (certificateData?.certificateId) { + const { certificateId } = certificateData; - for (const acmCert of matchingCerts) { - if (acmCert.arn) { - certificateArnsToRemove.push(acmCert.arn); + if (typeof certificateId === "string") { + const syncRecord = existingSyncRecords.find((record) => record.certificateId === certificateId); + + if (syncRecord?.externalIdentifier) { + certificateArnsToRemove.push(syncRecord.externalIdentifier); + certificateIdToArnMap.set(certificateId, syncRecord.externalIdentifier); + } } } } + if (certificateArnsToRemove.length === 0) { + return { + removed: 0, + failed: 0, + skipped: certificateNames.length + }; + } + const results = await executeWithConcurrencyLimit( certificateArnsToRemove, async (certificateArn) => @@ -714,43 +782,38 @@ export const awsCertificateManagerPkiSyncFactory = ({ const failedRemovals = results.filter((result) => result.status === "rejected"); - if (failedRemovals.length > 0 && deps?.certificateSyncDAL && deps?.certificateMap) { - const certificateNameToArnMap = new Map(); - for (const certName of certificateNames) { - const matchingCerts = Object.values(acmCertificates).filter((acmCert) => - validateCertificateIdentification(certName, acmCert) - ); - for (const acmCert of matchingCerts) { - if (acmCert.arn) { - certificateNameToArnMap.set(acmCert.arn, certName); - } - } - } - + if (failedRemovals.length > 0 && deps?.certificateSyncDAL) { for (const failure of failedRemovals) { if (failure.status === "rejected") { const failedArn = certificateArnsToRemove[results.indexOf(failure)]; - const certificateName = certificateNameToArnMap.get(failedArn); - if (certificateName && deps.certificateMap[certificateName]?.certificateId) { - const { certificateId } = deps.certificateMap[certificateName]; - if (certificateId) { - const errorMessage = failure.reason instanceof Error ? failure.reason.message : "Unknown error"; - try { - await deps.certificateSyncDAL.updateSyncStatus( - pkiSync.id, - certificateId, - CertificateSyncStatus.Failed, - `Failed to remove from AWS: ${errorMessage}` - ); - } catch (updateError) { - logger.warn(`Failed to update sync status for certificate ${certificateId}:`, String(updateError)); - } - } + const certificateId = Array.from(certificateIdToArnMap.entries()).find(([, arn]) => arn === failedArn)?.[0]; + + if (certificateId) { + const errorMessage = failure.reason instanceof Error ? failure.reason.message : "Unknown error"; + await deps.certificateSyncDAL.updateSyncStatus( + pkiSync.id, + certificateId, + CertificateSyncStatus.Failed, + `Failed to remove from AWS: ${errorMessage}` + ); } } } } + const successfulRemovals = results.filter((result) => result.status === "fulfilled"); + if (successfulRemovals.length > 0) { + const successfulArns = new Set(successfulRemovals.map((_, index) => certificateArnsToRemove[index])); + + const certificateIdsToRemove = Array.from(certificateIdToArnMap.entries()) + .filter(([, arn]) => successfulArns.has(arn)) + .map(([certificateId]) => certificateId); + + if (certificateIdsToRemove.length > 0) { + await certificateSyncDAL.removeCertificates(pkiSync.id, certificateIdsToRemove); + } + } + if (failedRemovals.length > 0) { const failedReasons = failedRemovals.map((failure) => { if (failure.status === "rejected") { diff --git a/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-fns.ts b/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-fns.ts index f2ae23400..0bd9e201d 100644 --- a/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-fns.ts +++ b/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-fns.ts @@ -6,6 +6,7 @@ import { request } from "@app/lib/config/request"; import { logger } from "@app/lib/logger"; import { TAppConnectionDALFactory } from "@app/services/app-connection/app-connection-dal"; import { getAzureConnectionAccessToken } from "@app/services/app-connection/azure-key-vault"; +import { TCertificateDALFactory } from "@app/services/certificate/certificate-dal"; import { TCertificateSyncDALFactory } from "@app/services/certificate-sync/certificate-sync-dal"; import { CertificateSyncStatus } from "@app/services/certificate-sync/certificate-sync-enums"; import { createConnectionQueue, RateLimitConfig } from "@app/services/connection-queue"; @@ -50,6 +51,16 @@ const isInfisicalManagedCertificate = (certificateName: string, pkiSync: TPkiSyn type TAzureKeyVaultPkiSyncFactoryDeps = { appConnectionDAL: Pick; kmsService: Pick; + certificateSyncDAL: Pick< + TCertificateSyncDALFactory, + | "removeCertificates" + | "addCertificates" + | "findByPkiSyncAndCertificate" + | "updateById" + | "findByPkiSyncId" + | "updateSyncStatus" + >; + certificateDAL: Pick; }; const parseCertificateX509Props = (certPem: string) => { @@ -192,7 +203,12 @@ const parseCertificateKeyProps = (certPem: string) => { } }; -export const azureKeyVaultPkiSyncFactory = ({ kmsService, appConnectionDAL }: TAzureKeyVaultPkiSyncFactoryDeps) => { +export const azureKeyVaultPkiSyncFactory = ({ + kmsService, + appConnectionDAL, + certificateSyncDAL, + certificateDAL +}: TAzureKeyVaultPkiSyncFactoryDeps) => { const $getAzureKeyVaultCertificates = async (accessToken: string, vaultBaseUrl: string, syncId = "unknown") => { const paginateAzureKeyVaultCertificates = async () => { let result: GetAzureKeyVaultCertificate[] = []; @@ -329,6 +345,20 @@ export const azureKeyVaultPkiSyncFactory = ({ kmsService, appConnectionDAL }: TA pkiSync.id ); + const existingSyncRecords = await certificateSyncDAL.findByPkiSyncId(pkiSync.id); + type SyncRecord = (typeof existingSyncRecords)[0]; + const syncRecordsByCertId = new Map(); + const syncRecordsByExternalId = new Map(); + + existingSyncRecords.forEach((record: SyncRecord) => { + if (record.certificateId) { + syncRecordsByCertId.set(record.certificateId, record); + } + if (record.externalIdentifier) { + syncRecordsByExternalId.set(record.externalIdentifier, record); + } + }); + const setCertificates: { key: string; cert: string; @@ -338,48 +368,104 @@ export const azureKeyVaultPkiSyncFactory = ({ kmsService, appConnectionDAL }: TA }[] = []; const syncOptions = pkiSync.syncOptions as - | { certificateNameSchema?: string; canRemoveCertificates?: boolean } + | { certificateNameSchema?: string; canRemoveCertificates?: boolean; preserveVersion?: boolean } | undefined; const canRemoveCertificates = syncOptions?.canRemoveCertificates ?? true; + const preserveVersion = syncOptions?.preserveVersion ?? true; - // Track which certificates should exist in Azure Key Vault - const activeCertificateNames = Object.keys(certificateMap); + const activeExternalIdentifiers = new Set(); // Iterate through certificates to sync to Azure Key Vault - Object.entries(certificateMap).forEach(([certName, { cert, privateKey, certificateChain, certificateId }]) => { + for (const [certName, { cert, privateKey, certificateChain, certificateId }] of Object.entries(certificateMap)) { if (disabledAzureKeyVaultCertificateKeys.includes(certName)) { - return; + // eslint-disable-next-line no-continue + continue; } - const existingCert = vaultCertificates[certName]; - const shouldUpdateCert = !existingCert || existingCert.cert !== cert; + if (preserveVersion && typeof certificateId === "string") { + const certificate = await certificateDAL.findById(certificateId); + if (certificate?.renewedByCertificateId) { + // eslint-disable-next-line no-continue + continue; + } + } - if (shouldUpdateCert) { + let targetCertName = certName; + let shouldCreateNew = false; + + if (typeof certificateId === "string") { + const existingSyncRecord = syncRecordsByCertId.get(certificateId); + + if (existingSyncRecord?.externalIdentifier) { + const existingAzureCert = vaultCertificates[existingSyncRecord.externalIdentifier]; + + if (existingAzureCert && preserveVersion) { + targetCertName = existingSyncRecord.externalIdentifier; + activeExternalIdentifiers.add(targetCertName); + + const shouldUpdateCert = existingAzureCert.cert !== cert; + if (shouldUpdateCert) { + shouldCreateNew = true; + } + } else if (!existingAzureCert) { + shouldCreateNew = true; + } else if (!preserveVersion) { + shouldCreateNew = true; + } + } else { + shouldCreateNew = true; + } + } else { + shouldCreateNew = true; + } + + if (shouldCreateNew || !vaultCertificates[targetCertName] || vaultCertificates[targetCertName].cert !== cert) { setCertificates.push({ - key: certName, + key: targetCertName, cert, privateKey, certificateChain, certificateId }); } - }); - // Identify expired/removed certificates that need to be cleaned up from Azure Key Vault - // Only remove certificates that were managed by Infisical (match naming schema) - const certificatesToRemove = canRemoveCertificates - ? Object.keys(vaultCertificates).filter( - (vaultCertName) => - isInfisicalManagedCertificate(vaultCertName, pkiSync) && - !activeCertificateNames.includes(vaultCertName) && - !disabledAzureKeyVaultCertificateKeys.includes(vaultCertName) - ) - : []; + if (targetCertName) { + activeExternalIdentifiers.add(targetCertName); + } + } + + const certificatesToRemove: string[] = []; + + if (canRemoveCertificates) { + existingSyncRecords.forEach((syncRecord) => { + if (syncRecord.externalIdentifier && !activeExternalIdentifiers.has(syncRecord.externalIdentifier)) { + if (vaultCertificates[syncRecord.externalIdentifier]) { + certificatesToRemove.push(syncRecord.externalIdentifier); + } + } + }); + + Object.keys(vaultCertificates).forEach((certificateName) => { + const isInfisicalManaged = isInfisicalManagedCertificate(certificateName, pkiSync); + + if (isInfisicalManaged) { + const isTrackedInSyncRecords = existingSyncRecords.some( + (record) => record.externalIdentifier === certificateName + ); + + const isInActiveSet = activeExternalIdentifiers.has(certificateName); + + if (!isTrackedInSyncRecords && !isInActiveSet && !certificatesToRemove.includes(certificateName)) { + certificatesToRemove.push(certificateName); + } + } + }); + } // Upload certificates to Azure Key Vault with rate limiting const uploadResults = await executeWithConcurrencyLimit( setCertificates, - async ({ key, cert, privateKey, certificateChain }) => { + async ({ key, cert, privateKey, certificateChain, certificateId }) => { try { // Combine private key, certificate, and certificate chain in PEM format for Azure Key Vault let combinedPem = ""; @@ -441,6 +527,31 @@ export const azureKeyVaultPkiSyncFactory = ({ kmsService, appConnectionDAL }: TA } ); + if (certificateId) { + const existingCertSync = await certificateSyncDAL.findByPkiSyncAndCertificate(pkiSync.id, certificateId); + if (existingCertSync) { + await certificateSyncDAL.updateById(existingCertSync.id, { + externalIdentifier: key, + syncStatus: CertificateSyncStatus.Succeeded, + lastSyncedAt: new Date() + }); + } else { + await certificateSyncDAL.addCertificates(pkiSync.id, [ + { + certificateId, + externalIdentifier: key + } + ]); + } + + if (preserveVersion) { + const currentCertificate = await certificateDAL.findById(certificateId); + if (currentCertificate?.renewedFromCertificateId) { + await certificateSyncDAL.removeCertificates(pkiSync.id, [currentCertificate.renewedFromCertificateId]); + } + } + } + return { key, success: true, response: response.data as unknown }; } catch (error) { if (error instanceof AxiosError) { @@ -622,13 +733,33 @@ export const azureKeyVaultPkiSyncFactory = ({ kmsService, appConnectionDAL }: TA // Cast destination config to Azure Key Vault config const destinationConfig = pkiSync.destinationConfig as TAzureKeyVaultPkiSyncConfig; - // Only remove certificates that are managed by Infisical (match naming schema) - const infisicalManagedCertNames = certificateNames.filter((certName) => - isInfisicalManagedCertificate(certName, pkiSync) - ); + const existingSyncRecords = await certificateSyncDAL.findByPkiSyncId(pkiSync.id); + const certificateNamesToRemove: string[] = []; + const certificateIdToNameMap = new Map(); + + for (const certName of certificateNames) { + if (deps?.certificateMap?.[certName]?.certificateId) { + const { certificateId } = deps.certificateMap[certName]; + + const syncRecord = existingSyncRecords.find((record) => record.certificateId === certificateId); + + if (syncRecord?.externalIdentifier && typeof certificateId === "string") { + certificateNamesToRemove.push(syncRecord.externalIdentifier); + certificateIdToNameMap.set(certificateId, syncRecord.externalIdentifier); + } + } + } + + if (certificateNamesToRemove.length === 0) { + return { + removed: 0, + failed: 0, + skipped: certificateNames.length + }; + } const results = await executeWithConcurrencyLimit( - infisicalManagedCertNames, + certificateNamesToRemove, async (certName) => { try { const response = await request.delete( @@ -663,29 +794,44 @@ export const azureKeyVaultPkiSyncFactory = ({ kmsService, appConnectionDAL }: TA }, { operation: "remove-specific-certificates", syncId: pkiSync.id } ); + const failedRemovals = results.filter((result) => result.status === "rejected"); - if (failedRemovals.length > 0 && deps?.certificateSyncDAL && deps?.certificateMap) { + if (failedRemovals.length > 0 && deps?.certificateSyncDAL) { for (const failure of failedRemovals) { if (failure.status === "rejected") { - const failedIndex = results.indexOf(failure); - const failedCertName = infisicalManagedCertNames[failedIndex]; - if (failedCertName && deps.certificateMap[failedCertName]?.certificateId) { - const { certificateId } = deps.certificateMap[failedCertName]; - if (certificateId) { - const errorMessage = (failure.reason as Error)?.message || "Unknown error"; - await deps.certificateSyncDAL.updateSyncStatus( - pkiSync.id, - certificateId, - CertificateSyncStatus.Failed, - `Failed to remove from Azure: ${errorMessage}` - ); - } + const failedCertName = certificateNamesToRemove[results.indexOf(failure)]; + + const certificateId = Array.from(certificateIdToNameMap.entries()).find( + ([, name]) => name === failedCertName + )?.[0]; + + if (certificateId) { + const errorMessage = (failure.reason as Error)?.message || "Unknown error"; + await deps.certificateSyncDAL.updateSyncStatus( + pkiSync.id, + certificateId, + CertificateSyncStatus.Failed, + `Failed to remove from Azure: ${errorMessage}` + ); } } } } + const successfulRemovals = results.filter((result) => result.status === "fulfilled"); + if (successfulRemovals.length > 0) { + const successfulCertNames = new Set(successfulRemovals.map((_, index) => certificateNamesToRemove[index])); + + const certificateIdsToRemove = Array.from(certificateIdToNameMap.entries()) + .filter(([, name]) => successfulCertNames.has(name)) + .map(([certificateId]) => certificateId); + + if (certificateIdsToRemove.length > 0) { + await certificateSyncDAL.removeCertificates(pkiSync.id, certificateIdsToRemove); + } + } + if (failedRemovals.length > 0) { const failedReasons = failedRemovals.map((failure) => { if (failure.status === "rejected") { @@ -698,16 +844,16 @@ export const azureKeyVaultPkiSyncFactory = ({ kmsService, appConnectionDAL }: TA message: `Failed to remove ${failedRemovals.length} certificate(s) from Azure Key Vault`, context: { failedReasons, - totalCertificates: infisicalManagedCertNames.length, + totalCertificates: certificateNamesToRemove.length, failedCount: failedRemovals.length } }); } return { - removed: infisicalManagedCertNames.length - failedRemovals.length, + removed: certificateNamesToRemove.length - failedRemovals.length, failed: failedRemovals.length, - skipped: certificateNames.length - infisicalManagedCertNames.length + skipped: certificateNames.length - certificateNamesToRemove.length }; }; diff --git a/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-schemas.ts b/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-schemas.ts index 7e2c875da..b7fcbfb6d 100644 --- a/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-schemas.ts +++ b/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-schemas.ts @@ -14,6 +14,7 @@ export const AzureKeyVaultPkiSyncConfigSchema = z.object({ const AzureKeyVaultPkiSyncOptionsSchema = z.object({ canImportCertificates: z.boolean().default(false), canRemoveCertificates: z.boolean().default(true), + preserveVersion: z.boolean().default(true), certificateNameSchema: z .string() .optional() diff --git a/backend/src/services/pki-sync/pki-sync-fns.ts b/backend/src/services/pki-sync/pki-sync-fns.ts index be424a37d..961687f85 100644 --- a/backend/src/services/pki-sync/pki-sync-fns.ts +++ b/backend/src/services/pki-sync/pki-sync-fns.ts @@ -204,7 +204,12 @@ export const PkiSyncFns = { switch (pkiSync.destination) { case PkiSync.AzureKeyVault: { checkPkiSyncDestination(pkiSync, PkiSync.AzureKeyVault); - const azureKeyVaultPkiSync = azureKeyVaultPkiSyncFactory(dependencies); + const azureKeyVaultPkiSync = azureKeyVaultPkiSyncFactory({ + appConnectionDAL: dependencies.appConnectionDAL, + kmsService: dependencies.kmsService, + certificateDAL: dependencies.certificateDAL, + certificateSyncDAL: dependencies.certificateSyncDAL + }); return azureKeyVaultPkiSync.syncCertificates(pkiSync, certificateMap); } case PkiSync.AwsCertificateManager: { @@ -236,7 +241,12 @@ export const PkiSyncFns = { switch (pkiSync.destination) { case PkiSync.AzureKeyVault: { checkPkiSyncDestination(pkiSync, PkiSync.AzureKeyVault); - const azureKeyVaultPkiSync = azureKeyVaultPkiSyncFactory(dependencies); + const azureKeyVaultPkiSync = azureKeyVaultPkiSyncFactory({ + appConnectionDAL: dependencies.appConnectionDAL, + kmsService: dependencies.kmsService, + certificateDAL: dependencies.certificateDAL, + certificateSyncDAL: dependencies.certificateSyncDAL + }); await azureKeyVaultPkiSync.removeCertificates(pkiSync, certificateNames, { certificateSyncDAL: dependencies.certificateSyncDAL, certificateMap: dependencies.certificateMap diff --git a/backend/src/services/pki-sync/pki-sync-service.ts b/backend/src/services/pki-sync/pki-sync-service.ts index 920b7b866..0c385ce9c 100644 --- a/backend/src/services/pki-sync/pki-sync-service.ts +++ b/backend/src/services/pki-sync/pki-sync-service.ts @@ -1,6 +1,6 @@ import { ForbiddenError, subject } from "@casl/ability"; -import { ActionProjectType } from "@app/db/schemas"; +import { ActionProjectType, TCertificateSyncs } from "@app/db/schemas"; import { TLicenseServiceFactory } from "@app/ee/services/license/license-service"; import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service-types"; import { ProjectPermissionPkiSyncActions, ProjectPermissionSub } from "@app/ee/services/permission/project-permission"; @@ -10,6 +10,7 @@ import { AppConnection } from "@app/services/app-connection/app-connection-enums import { TAppConnectionServiceFactory } from "@app/services/app-connection/app-connection-service"; import { TPkiSubscriberDALFactory } from "@app/services/pki-subscriber/pki-subscriber-dal"; +import { TCertificateDALFactory } from "../certificate/certificate-dal"; import { TCertificateSyncDALFactory } from "../certificate-sync/certificate-sync-dal"; import { CertificateSyncStatus } from "../certificate-sync/certificate-sync-enums"; import { TPkiSyncDALFactory } from "./pki-sync-dal"; @@ -48,6 +49,7 @@ type TPkiSyncServiceFactoryDep = { TPkiSyncDALFactory, "findById" | "findByProjectIdWithSubscribers" | "findByNameAndProjectId" | "create" | "updateById" | "deleteById" >; + certificateDAL: Pick; certificateSyncDAL: Pick< TCertificateSyncDALFactory, | "findByPkiSyncId" @@ -72,6 +74,7 @@ export type TPkiSyncServiceFactory = ReturnType; export const pkiSyncServiceFactory = ({ pkiSyncDAL, + certificateDAL, certificateSyncDAL, pkiSubscriberDAL, appConnectionService, @@ -79,6 +82,26 @@ export const pkiSyncServiceFactory = ({ licenseService, pkiSyncQueue }: TPkiSyncServiceFactoryDep) => { + const validateCertificatesProjectOwnership = async (certificateIds: string[], expectedProjectId: string) => { + if (certificateIds.length === 0) return; + + const certificates = await certificateDAL.findActiveCertificatesByIds(certificateIds); + + if (certificates.length !== certificateIds.length) { + const foundIds = certificates.map((cert) => cert.id); + const missingIds = certificateIds.filter((id) => !foundIds.includes(id)); + throw new NotFoundError({ + message: `Certificates not found or not active: ${missingIds.join(", ")}` + }); + } + + const invalidCertificates = certificates.filter((cert) => cert.projectId !== expectedProjectId); + if (invalidCertificates.length > 0) { + throw new BadRequestError({ + message: `Certificates do not belong to the same project: ${invalidCertificates.map((cert) => cert.id).join(", ")}` + }); + } + }; const createPkiSync = async ( { name, @@ -132,6 +155,10 @@ export const pkiSyncServiceFactory = ({ ...syncOptions }; + if (certificateIds.length > 0) { + await validateCertificatesProjectOwnership(certificateIds, projectId); + } + try { const pkiSync = await pkiSyncDAL.create({ name, @@ -147,7 +174,10 @@ export const pkiSyncServiceFactory = ({ }); if (certificateIds.length > 0) { - await certificateSyncDAL.addCertificates(pkiSync.id, certificateIds); + await certificateSyncDAL.addCertificates( + pkiSync.id, + certificateIds.map((id) => ({ certificateId: id })) + ); } if (pkiSync.isAutoSyncEnabled) { @@ -245,9 +275,16 @@ export const pkiSyncServiceFactory = ({ } if (certificateIds !== undefined) { + if (certificateIds.length > 0) { + await validateCertificatesProjectOwnership(certificateIds, pkiSync.projectId); + } + await certificateSyncDAL.removeAllCertificatesFromSync(id); if (certificateIds.length > 0) { - await certificateSyncDAL.addCertificates(id, certificateIds); + await certificateSyncDAL.addCertificates( + id, + certificateIds.map((certId) => ({ certificateId: certId })) + ); } } @@ -489,7 +526,10 @@ export const pkiSyncServiceFactory = ({ const addCertificatesToPkiSync = async ( { pkiSyncId, certificateIds }: Omit, actor: OrgServiceActor - ) => { + ): Promise<{ + addedCertificates: TCertificateSyncs[]; + pkiSyncInfo: { projectId: string; destination: string; name: string }; + }> => { const pkiSync = await pkiSyncDAL.findById(pkiSyncId); if (!pkiSync) throw new NotFoundError({ message: "PKI sync not found" }); @@ -502,31 +542,33 @@ export const pkiSyncServiceFactory = ({ projectId: pkiSync.projectId }); - let subscriber; - if (pkiSync.subscriberId) { - subscriber = await pkiSubscriberDAL.findById(pkiSync.subscriberId); - } + ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionPkiSyncActions.Edit, ProjectPermissionSub.PkiSyncs); - ForbiddenError.from(permission).throwUnlessCan( - ProjectPermissionPkiSyncActions.Edit, - subscriber - ? subject(ProjectPermissionSub.PkiSyncs, { subscriberName: subscriber.name }) - : ProjectPermissionSub.PkiSyncs + await validateCertificatesProjectOwnership(certificateIds, pkiSync.projectId); + + const addedCertificates = await certificateSyncDAL.addCertificates( + pkiSyncId, + certificateIds.map((id) => ({ certificateId: id })) ); - const addedCertificates = await certificateSyncDAL.addCertificates(pkiSyncId, certificateIds); - if (pkiSync.isAutoSyncEnabled) { await pkiSyncQueue.queuePkiSyncSyncCertificatesById({ syncId: pkiSyncId }); } - return addedCertificates; + return { + addedCertificates, + pkiSyncInfo: { + projectId: pkiSync.projectId, + destination: pkiSync.destination, + name: pkiSync.name + } + }; }; const removeCertificatesFromPkiSync = async ( { pkiSyncId, certificateIds }: Omit, actor: OrgServiceActor - ) => { + ): Promise<{ removedCount: number; pkiSyncInfo: { projectId: string; destination: string; name: string } }> => { const pkiSync = await pkiSyncDAL.findById(pkiSyncId); if (!pkiSync) throw new NotFoundError({ message: "PKI sync not found" }); @@ -539,17 +581,7 @@ export const pkiSyncServiceFactory = ({ projectId: pkiSync.projectId }); - let subscriber; - if (pkiSync.subscriberId) { - subscriber = await pkiSubscriberDAL.findById(pkiSync.subscriberId); - } - - ForbiddenError.from(permission).throwUnlessCan( - ProjectPermissionPkiSyncActions.Edit, - subscriber - ? subject(ProjectPermissionSub.PkiSyncs, { subscriberName: subscriber.name }) - : ProjectPermissionSub.PkiSyncs - ); + ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionPkiSyncActions.Edit, ProjectPermissionSub.PkiSyncs); const removedCount = await certificateSyncDAL.removeCertificates(pkiSyncId, certificateIds); @@ -557,13 +589,24 @@ export const pkiSyncServiceFactory = ({ await pkiSyncQueue.queuePkiSyncSyncCertificatesById({ syncId: pkiSyncId }); } - return { removedCount }; + return { + removedCount, + pkiSyncInfo: { + projectId: pkiSync.projectId, + destination: pkiSync.destination, + name: pkiSync.name + } + }; }; const listPkiSyncCertificates = async ( { pkiSyncId, offset = 0, limit = 20 }: Omit, actor: OrgServiceActor - ): Promise<{ certificates: TPkiSyncCertificate[]; totalCount: number }> => { + ): Promise<{ + certificates: TPkiSyncCertificate[]; + totalCount: number; + pkiSyncInfo: { projectId: string; destination: string; name: string }; + }> => { const pkiSync = await pkiSyncDAL.findById(pkiSyncId); if (!pkiSync) throw new NotFoundError({ message: "PKI sync not found" }); @@ -576,17 +619,7 @@ export const pkiSyncServiceFactory = ({ projectId: pkiSync.projectId }); - let subscriber; - if (pkiSync.subscriberId) { - subscriber = await pkiSubscriberDAL.findById(pkiSync.subscriberId); - } - - ForbiddenError.from(permission).throwUnlessCan( - ProjectPermissionPkiSyncActions.Read, - subscriber - ? subject(ProjectPermissionSub.PkiSyncs, { subscriberName: subscriber.name }) - : ProjectPermissionSub.PkiSyncs - ); + ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionPkiSyncActions.Read, ProjectPermissionSub.PkiSyncs); const result = await certificateSyncDAL.findWithDetails({ pkiSyncId, @@ -611,14 +644,22 @@ export const pkiSyncServiceFactory = ({ certificateNotBefore: detail.certificateNotBefore || undefined, certificateNotAfter: detail.certificateNotAfter || undefined, certificateRenewBeforeDays: !detail.certificateRenewedByCertificateId - ? detail.certificateRenewBeforeDays + ? detail.certificateRenewBeforeDays || undefined : undefined, certificateRenewalError: detail.certificateRenewalError || undefined, pkiSyncName: detail.pkiSyncName || undefined, pkiSyncDestination: detail.pkiSyncDestination || undefined })); - return { certificates, totalCount }; + return { + certificates, + totalCount, + pkiSyncInfo: { + projectId: pkiSync.projectId, + destination: pkiSync.destination, + name: pkiSync.name + } + }; }; return { diff --git a/backend/src/services/pki-sync/pki-sync-utils.ts b/backend/src/services/pki-sync/pki-sync-utils.ts index 3e278de48..d216ddd5a 100644 --- a/backend/src/services/pki-sync/pki-sync-utils.ts +++ b/backend/src/services/pki-sync/pki-sync-utils.ts @@ -45,12 +45,13 @@ export const triggerAutoSyncForCertificate = async ( } const allPkiSyncs = await dependencies.pkiSyncDAL.find({ - isAutoSyncEnabled: true + isAutoSyncEnabled: true, + $in: { + id: pkiSyncIds + } }); - const pkiSyncs = allPkiSyncs.filter((sync) => pkiSyncIds.includes(sync.id)); - - const syncPromises = pkiSyncs.map((pkiSync) => + const syncPromises = allPkiSyncs.map((pkiSync) => dependencies.pkiSyncQueue.queuePkiSyncSyncCertificatesById({ syncId: pkiSync.id }) ); await Promise.all(syncPromises); @@ -65,7 +66,7 @@ export const addRenewedCertificateToSyncs = async ( dependencies: { certificateSyncDAL: Pick< TCertificateSyncDALFactory, - "findPkiSyncIdsByCertificateId" | "removeCertificates" | "addCertificates" + "findPkiSyncIdsByCertificateId" | "addCertificates" | "findByPkiSyncAndCertificate" >; }, tx?: Knex @@ -78,12 +79,25 @@ export const addRenewedCertificateToSyncs = async ( } const addPromises = pkiSyncIds.map(async (pkiSyncId) => { - await dependencies.certificateSyncDAL.addCertificates(pkiSyncId, [newCertificateId], tx); - }); + const oldCertificateRecord = await dependencies.certificateSyncDAL.findByPkiSyncAndCertificate( + pkiSyncId, + oldCertificateId + ); + await dependencies.certificateSyncDAL.addCertificates( + pkiSyncId, + [ + { + certificateId: newCertificateId, + externalIdentifier: oldCertificateRecord?.externalIdentifier || undefined + } + ], + tx + ); + }); await Promise.all(addPromises); - logger.info(`Successfully added renewed certificate ${newCertificateId} to ${pkiSyncIds.length} PKI sync(s)`); + logger.info(`Successfully added renewed certificate ${newCertificateId} to PKI sync(s)`); } catch (error) { logger.error(error, `Failed to add renewed certificate ${newCertificateId} to syncs:`); throw error; diff --git a/docs/documentation/platform/pki/azure-adcs.mdx b/docs/documentation/platform/pki/azure-adcs.mdx index b0cea565e..23df3ed3b 100644 --- a/docs/documentation/platform/pki/azure-adcs.mdx +++ b/docs/documentation/platform/pki/azure-adcs.mdx @@ -31,7 +31,7 @@ This section walks you through the complete end-to-end process of setting up Azu Click **Create CA** and configure: - - **Type**: Choose **Azure AD Certificate Service** + - **Type**: Choose **Active Directory Certificate Services (AD CS)** - **Name**: Friendly name for this CA (e.g., "Production ADCS CA") - **App Connection**: Choose your ADCS connection from the dropdown diff --git a/frontend/src/components/pki-syncs/CreatePkiSyncModal.tsx b/frontend/src/components/pki-syncs/CreatePkiSyncModal.tsx index 5b5e81ba3..0169b2296 100644 --- a/frontend/src/components/pki-syncs/CreatePkiSyncModal.tsx +++ b/frontend/src/components/pki-syncs/CreatePkiSyncModal.tsx @@ -11,21 +11,24 @@ type Props = { isOpen: boolean; onOpenChange: (isOpen: boolean) => void; selectSync?: PkiSync | null; + initialData?: any; }; type ContentProps = { onComplete: (pkiSync: TPkiSync) => void; selectedSync: PkiSync | null; setSelectedSync: (selectedSync: PkiSync | null) => void; + initialData?: any; }; -const Content = ({ onComplete, setSelectedSync, selectedSync }: ContentProps) => { +const Content = ({ onComplete, setSelectedSync, selectedSync, initialData }: ContentProps) => { if (selectedSync) { return ( setSelectedSync(null)} destination={selectedSync} + initialData={initialData} /> ); } @@ -33,7 +36,12 @@ const Content = ({ onComplete, setSelectedSync, selectedSync }: ContentProps) => return ; }; -export const CreatePkiSyncModal = ({ onOpenChange, selectSync = null, ...props }: Props) => { +export const CreatePkiSyncModal = ({ + onOpenChange, + selectSync = null, + initialData, + ...props +}: Props) => { const [selectedSync, setSelectedSync] = useState(selectSync); useEffect(() => { @@ -69,6 +77,7 @@ export const CreatePkiSyncModal = ({ onOpenChange, selectSync = null, ...props } }} selectedSync={selectedSync} setSelectedSync={setSelectedSync} + initialData={initialData} /> diff --git a/frontend/src/components/pki-syncs/forms/CreatePkiSyncForm.tsx b/frontend/src/components/pki-syncs/forms/CreatePkiSyncForm.tsx index 305fda516..6ffb2f859 100644 --- a/frontend/src/components/pki-syncs/forms/CreatePkiSyncForm.tsx +++ b/frontend/src/components/pki-syncs/forms/CreatePkiSyncForm.tsx @@ -23,6 +23,7 @@ type Props = { onComplete: (pkiSync: TPkiSync) => void; destination: PkiSync; onCancel: () => void; + initialData?: any; }; const FORM_TABS: { name: string; key: string; fields: (keyof TPkiSyncForm)[] }[] = [ @@ -33,7 +34,7 @@ const FORM_TABS: { name: string; key: string; fields: (keyof TPkiSyncForm)[] }[] { name: "Review", key: "review", fields: [] } ]; -export const CreatePkiSyncForm = ({ destination, onComplete, onCancel }: Props) => { +export const CreatePkiSyncForm = ({ destination, onComplete, onCancel, initialData }: Props) => { const createPkiSync = useCreatePkiSync(); const { currentProject } = useProject(); const { name: destinationName } = PKI_SYNC_MAP[destination]; @@ -55,7 +56,8 @@ export const CreatePkiSyncForm = ({ destination, onComplete, onCancel }: Props) canRemoveCertificates: false, preserveArn: true, certificateNameSchema: syncOption?.defaultCertificateNameSchema - } + }, + ...initialData } as Partial, reValidateMode: "onChange" }); diff --git a/frontend/src/components/pki-syncs/forms/EditPkiSyncForm.tsx b/frontend/src/components/pki-syncs/forms/EditPkiSyncForm.tsx index 73f5bc2bc..137e0d6de 100644 --- a/frontend/src/components/pki-syncs/forms/EditPkiSyncForm.tsx +++ b/frontend/src/components/pki-syncs/forms/EditPkiSyncForm.tsx @@ -27,12 +27,16 @@ export const EditPkiSyncForm = ({ pkiSync, fields, onComplete }: Props) => { const formMethods = useForm({ resolver: zodResolver(UpdatePkiSyncFormSchema), defaultValues: { - ...pkiSync, + name: pkiSync.name, + destination: pkiSync.destination, description: pkiSync.description ?? "", connection: { id: pkiSync.connectionId, name: pkiSync.appConnectionName - } + }, + syncOptions: pkiSync.syncOptions, + destinationConfig: pkiSync.destinationConfig, + isAutoSyncEnabled: pkiSync.isAutoSyncEnabled } as Partial, reValidateMode: "onChange" }); diff --git a/frontend/src/components/pki-syncs/forms/PkiSyncConnectionField.tsx b/frontend/src/components/pki-syncs/forms/PkiSyncConnectionField.tsx index 445f9169d..90af04203 100644 --- a/frontend/src/components/pki-syncs/forms/PkiSyncConnectionField.tsx +++ b/frontend/src/components/pki-syncs/forms/PkiSyncConnectionField.tsx @@ -1,14 +1,18 @@ import { Controller, useFormContext } from "react-hook-form"; +import { SingleValue } from "react-select"; import { faInfoCircle } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { Link } from "@tanstack/react-router"; +import { useRouterState } from "@tanstack/react-router"; +import { AppConnectionOption } from "@app/components/app-connections"; import { FilterableSelect, FormControl } from "@app/components/v2"; import { ProjectPermissionSub, useProject, useProjectPermission } from "@app/context"; import { ProjectPermissionAppConnectionActions } from "@app/context/ProjectPermissionContext/types"; import { APP_CONNECTION_MAP } from "@app/helpers/appConnections"; import { PKI_SYNC_CONNECTION_MAP } from "@app/helpers/pkiSyncs"; +import { usePopUp } from "@app/hooks"; import { useListAvailableAppConnections } from "@app/hooks/api/appConnections"; +import { AddAppConnectionModal } from "@app/pages/organization/AppConnections/AppConnectionsPage/components"; import { TPkiSyncForm } from "./schemas/pki-sync-schema"; @@ -18,12 +22,30 @@ type Props = { export const PkiSyncConnectionField = ({ onChange: callback }: Props) => { const { permission } = useProjectPermission(); - const { control, watch } = useFormContext(); - const { currentProject } = useProject(); + const { control, watch, setValue } = useFormContext(); + + const { popUp, handlePopUpToggle, handlePopUpOpen } = usePopUp(["addConnection"] as const); const destination = watch("destination"); const app = PKI_SYNC_CONNECTION_MAP[destination]; + const { currentProject } = useProject(); + + const { + location: { pathname } + } = useRouterState(); + + const getPkiSyncReturnUrl = () => { + if (pathname.includes("selectedTab=secret-syncs")) { + return pathname.replace("selectedTab=secret-syncs", "selectedTab=pki-syncs"); + } + if (!pathname.includes("selectedTab=")) { + const separator = pathname.includes("?") ? "&" : "?"; + return `${pathname}${separator}selectedTab=pki-syncs`; + } + return pathname; + }; + const { data: availableConnections, isPending } = useListAvailableAppConnections( app, currentProject.id @@ -47,6 +69,7 @@ export const PkiSyncConnectionField = ({ onChange: callback }: Props) => { ( { { + if ((newValue as SingleValue<{ id: string; name: string }>)?.id === "_create") { + handlePopUpOpen("addConnection"); + onChange(null); + const formData = { ...watch(), returnUrl: getPkiSyncReturnUrl() }; + localStorage.setItem("pkiSyncFormData", JSON.stringify(formData)); + if (callback) callback(); + return; + } + onChange(newValue); if (callback) callback(); }} isLoading={isPending} - options={availableConnections} + options={[ + ...(canCreateConnection ? [{ id: "_create", name: "Create Connection" }] : []), + ...(availableConnections ?? []) + ]} placeholder="Select connection..." getOptionLabel={(option) => option.name} getOptionValue={(option) => option.id} + components={{ Option: AppConnectionOption }} /> )} control={control} name="connection" /> - {availableConnections?.length === 0 && ( + {!isPending && !availableConnections?.length && !canCreateConnection && (

- {canCreateConnection ? ( - <> - You do not have access to any {appName} Connections. Create one from the{" "} - - App Connections - {" "} - page. - - ) : ( - `You do not have access to any ${appName} Connections. Contact an admin to create one.` - )} + You do not have access to any {appName} Connections. Contact an admin to create one.

)} + { + localStorage.removeItem("pkiSyncFormData"); + handlePopUpToggle("addConnection", isOpen); + }} + projectType={currentProject.type} + projectId={currentProject.id} + app={app} + onComplete={(connection) => { + if (connection) { + setValue("connection", connection); + } + }} + /> ); }; diff --git a/frontend/src/components/pki-syncs/forms/PkiSyncOptionsFields/PkiSyncOptionsFields.tsx b/frontend/src/components/pki-syncs/forms/PkiSyncOptionsFields/PkiSyncOptionsFields.tsx index 82b11fa33..3febcd683 100644 --- a/frontend/src/components/pki-syncs/forms/PkiSyncOptionsFields/PkiSyncOptionsFields.tsx +++ b/frontend/src/components/pki-syncs/forms/PkiSyncOptionsFields/PkiSyncOptionsFields.tsx @@ -71,7 +71,7 @@ export const PkiSyncOptionsFields = ({ destination }: Props) => { isChecked={value} >

- Enable Inactive Certificate Removal{" "} + Enable Removal of Active/Revoked Certificates{" "} { /> )} + {currentDestination === PkiSync.AzureKeyVault && ( + ( + + +

+ Preserve Version on Renewal{" "} + +

+ When enabled, Infisical will create a new version of the existing + certificate in Azure Key Vault during certificate renewal syncs, + preserving the certificate name. +

+

+ This allows consuming services to continue using the same certificate name + while automatically using the latest version without requiring manual + updates. +

+

+ When disabled, new certificates will be created with new names, and old + certificates will be removed. +

+ + } + > + + +

+ + + )} + /> + )} + { + if (!val) return true; + + const allowedOptionalPlaceholders = ["{{environment}}"]; + + const allowedPlaceholdersRegexPart = ["{{certificateId}}", ...allowedOptionalPlaceholders] + .map((p) => p.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&")) + .join("|"); + + const allowedContentRegex = new RegExp( + `^([a-zA-Z0-9_\\-/]|${allowedPlaceholdersRegexPart})*$` + ); + const contentIsValid = allowedContentRegex.test(val); + + if (val.trim()) { + const certificateIdRegex = /\{\{certificateId\}\}/; + const certificateIdIsPresent = certificateIdRegex.test(val); + return contentIsValid && certificateIdIsPresent; + } + + return contentIsValid; + }, + { + message: + "Certificate name schema must include exactly one {{certificateId}} placeholder. It can also include {{environment}} placeholders. Only alphanumeric characters (a-z, A-Z, 0-9), dashes (-), underscores (_), and slashes (/) are allowed besides the placeholders." + } + ) +}); + +export const AzureKeyVaultPkiSyncDestinationSchema = BasePkiSyncSchema( + AzureKeyVaultSyncOptionsSchema +).merge( z.object({ destination: z.literal(PkiSync.AzureKeyVault), destinationConfig: z.object({ diff --git a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaModal.tsx b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaModal.tsx index 121c32e5f..a1fdcfc1f 100644 --- a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaModal.tsx +++ b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaModal.tsx @@ -124,7 +124,7 @@ type Props = { const caTypes = [ { label: "ACME", value: CaType.ACME }, - { label: "Azure AD Certificate Service", value: CaType.AZURE_AD_CS } + { label: "Active Directory Certificate Services (AD CS)", value: CaType.AZURE_AD_CS } ]; export const ExternalCaModal = ({ popUp, handlePopUpToggle }: Props) => { diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateManagePkiSyncsModal.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateManagePkiSyncsModal.tsx index f366ac4c6..db3e6c197 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateManagePkiSyncsModal.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateManagePkiSyncsModal.tsx @@ -1,5 +1,6 @@ import { useEffect, useMemo, useState } from "react"; import { faPlus, faSearch } from "@fortawesome/free-solid-svg-icons"; +import { useNavigate } from "@tanstack/react-router"; import { createNotification } from "@app/components/notifications"; import { @@ -18,12 +19,15 @@ import { THead, Tr } from "@app/components/v2"; +import { ROUTE_PATHS } from "@app/const/routes"; import { useProject } from "@app/context"; import { + PkiSync, useAddCertificatesToPkiSync, useListPkiSyncsWithCertificate, useRemoveCertificatesFromPkiSync } from "@app/hooks/api/pkiSyncs"; +import { IntegrationsListPageTabs } from "@app/types/integrations"; type Props = { popUp: { @@ -46,6 +50,7 @@ export const CertificateManagePkiSyncsModal = ({ popUp, handlePopUpToggle }: Pro const [searchTerm, setSearchTerm] = useState(""); const { currentProject } = useProject(); + const navigate = useNavigate(); const { certificateId, commonName } = popUp.data || {}; const { data: pkiSyncs = [], isPending } = useListPkiSyncsWithCertificate( @@ -81,6 +86,32 @@ export const CertificateManagePkiSyncsModal = ({ popUp, handlePopUpToggle }: Pro setCurrentPage(1); }; + const handleNavigateToPkiSyncs = () => { + if (!currentProject?.id) return; + + navigate({ + to: ROUTE_PATHS.CertManager.IntegrationsListPage.path, + params: { + projectId: currentProject.id + }, + search: { + selectedTab: IntegrationsListPageTabs.PkiSyncs + } + }); + handleClose(); + }; + + const getDestinationDisplayName = (destination: string) => { + switch (destination) { + case PkiSync.AzureKeyVault: + return "Azure Key Vault"; + case PkiSync.AwsCertificateManager: + return "AWS Certificate Manager"; + default: + return destination; + } + }; + useEffect(() => { if (!certificateId || !pkiSyncs || pkiSyncs.length === 0) return; @@ -161,7 +192,7 @@ export const CertificateManagePkiSyncsModal = ({ popUp, handlePopUpToggle }: Pro placeholder="Search PKI syncs by name..." />
-
+
{isPending && (
Loading PKI syncs...
@@ -169,12 +200,24 @@ export const CertificateManagePkiSyncsModal = ({ popUp, handlePopUpToggle }: Pro )} {!isPending && pkiSyncs.length === 0 && ( - Create a PKI sync first to manage certificate syncing. +
+ Create a{" "} + {" "} + first to manage certificate syncing. +
)} {!isPending && pkiSyncs.length > 0 && filteredSyncs.length === 0 && searchTerm && ( - No PKI syncs match your search criteria. Try a different search term. +
+ No PKI syncs match your search criteria. Try a different search term. +
)} {!isPending && filteredSyncs.length > 0 && ( @@ -209,9 +252,9 @@ export const CertificateManagePkiSyncsModal = ({ popUp, handlePopUpToggle }: Pro
diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx index 2fd23dd40..115526f5a 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx @@ -478,7 +478,7 @@ export const CertificatesTable = ({ handlePopUpOpen }: Props) => { disabled={!isAllowed} icon={} > - PKI Syncs + Manage PKI Syncs )} diff --git a/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncsTab.tsx b/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncsTab.tsx index 1c1141382..da0bc180f 100644 --- a/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncsTab.tsx +++ b/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncsTab.tsx @@ -12,13 +12,14 @@ import { ProjectPermissionSub, useProject } from "@app/context"; import { ProjectPermissionPkiSyncActions } from "@app/context/ProjectPermissionContext/types"; import { usePopUp } from "@app/hooks"; import { useListPkiSyncs } from "@app/hooks/api/pkiSyncs"; +import { IntegrationsListPageTabs } from "@app/types/integrations"; import { PkiSyncsTable } from "./PkiSyncTable"; export const PkiSyncsTab = () => { const { popUp, handlePopUpOpen, handlePopUpToggle } = usePopUp(["addSync"] as const); - const { addSync, ...search } = useSearch({ + const { addSync, connectionId, connectionName, ...search } = useSearch({ from: ROUTE_PATHS.CertManager.IntegrationsListPage.id }); @@ -45,6 +46,42 @@ export const PkiSyncsTab = () => { navigateToBase(); }, [addSync, handlePopUpOpen, navigateToBase]); + useEffect(() => { + const storedFormData = localStorage.getItem("pkiSyncFormData"); + if (storedFormData && !popUp.addSync.isOpen) { + try { + const parsedData = JSON.parse(storedFormData); + if (connectionId && connectionName) { + const initialData = { + ...parsedData, + connection: { id: connectionId, name: connectionName } + }; + handlePopUpOpen("addSync", { destination: parsedData.destination, initialData }); + navigate({ + to: ROUTE_PATHS.CertManager.IntegrationsListPage.path, + params: { projectId: currentProject?.id }, + search: { selectedTab: IntegrationsListPageTabs.PkiSyncs }, + replace: true + }); + } else { + handlePopUpOpen("addSync", { destination: parsedData.destination }); + } + localStorage.removeItem("pkiSyncFormData"); + } catch (error) { + console.error("Failed to parse stored PKI sync form data:", error); + localStorage.removeItem("pkiSyncFormData"); + handlePopUpOpen("addSync"); + } + } + }, [ + handlePopUpOpen, + popUp.addSync.isOpen, + connectionId, + connectionName, + navigate, + currentProject?.id + ]); + const { data: pkiSyncs = [], isPending: isPkiSyncsPending } = useListPkiSyncs( currentProject?.id || "", { @@ -94,7 +131,8 @@ export const PkiSyncsTab = () => { handlePopUpToggle("addSync", isOpen)} /> diff --git a/frontend/src/pages/cert-manager/IntegrationsListPage/route.tsx b/frontend/src/pages/cert-manager/IntegrationsListPage/route.tsx index 0a0868a07..a996a23b5 100644 --- a/frontend/src/pages/cert-manager/IntegrationsListPage/route.tsx +++ b/frontend/src/pages/cert-manager/IntegrationsListPage/route.tsx @@ -9,7 +9,9 @@ import { IntegrationsListPage } from "./IntegrationsListPage"; const IntegrationsListPageQuerySchema = z.object({ selectedTab: z.nativeEnum(IntegrationsListPageTabs).optional(), - addSync: z.nativeEnum(PkiSync).optional() + addSync: z.nativeEnum(PkiSync).optional(), + connectionId: z.string().optional(), + connectionName: z.string().optional() }); export const Route = createFileRoute( diff --git a/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateProfilesTab/CreateProfileModal.tsx b/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateProfilesTab/CreateProfileModal.tsx index ea82fd843..cbd6f9ada 100644 --- a/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateProfilesTab/CreateProfileModal.tsx +++ b/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateProfilesTab/CreateProfileModal.tsx @@ -418,7 +418,7 @@ export const CreateProfileModal = ({ isOpen, onClose, profile, mode = "create" } name="enrollmentType" render={({ field: { onChange, ...field }, fieldState: { error } }) => ( { connectionName: data.connection.name, ...(data.returnUrl.includes("integrations") ? { - selectedTab: IntegrationsListPageTabs.SecretSyncs + selectedTab: localStorage.getItem("pkiSyncFormData") + ? IntegrationsListPageTabs.PkiSyncs + : IntegrationsListPageTabs.SecretSyncs } : {}) } From ee7e7932003da3569ad7f3c57b31691c3381690b Mon Sep 17 00:00:00 2001 From: Carlos Monastyrski Date: Mon, 3 Nov 2025 08:32:30 -0300 Subject: [PATCH 37/79] Fix cert_sync schema --- backend/src/db/schemas/certificate-syncs.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/db/schemas/certificate-syncs.ts b/backend/src/db/schemas/certificate-syncs.ts index 78a8a6e5f..241684db2 100644 --- a/backend/src/db/schemas/certificate-syncs.ts +++ b/backend/src/db/schemas/certificate-syncs.ts @@ -14,9 +14,9 @@ export const CertificateSyncsSchema = z.object({ syncStatus: z.string().default("pending").nullable().optional(), lastSyncMessage: z.string().nullable().optional(), lastSyncedAt: z.date().nullable().optional(), - externalIdentifier: z.string().nullable().optional(), createdAt: z.date(), - updatedAt: z.date() + updatedAt: z.date(), + externalIdentifier: z.string().nullable().optional() }); export type TCertificateSyncs = z.infer; From 0f461816cc4f0739c18fb6411fd41845e395e085 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Mon, 3 Nov 2025 18:16:01 +0530 Subject: [PATCH 38/79] chore: moves chef integration to ee --- .../chef-connection-router.ts | 11 +++++------ .../v1/secret-sync-routers/chef-sync-router.ts | 5 ++--- .../app-connections}/chef/chef-connection-enums.ts | 0 .../app-connections}/chef/chef-connection-fns.ts | 2 +- .../chef/chef-connection-schemas.ts | 0 .../chef/chef-connection-service.ts | 2 +- .../app-connections}/chef/chef-connection-types.ts | 4 ++-- .../services/app-connections}/chef/index.ts | 0 .../secret-sync/chef/chef-sync-constants.ts | 3 ++- .../services/secret-sync/chef/chef-sync-fns.ts | 2 +- .../services/secret-sync/chef/chef-sync-schemas.ts | 3 ++- .../services/secret-sync/chef/chef-sync-types.ts | 2 +- .../{ => ee}/services/secret-sync/chef/index.ts | 0 .../app-connection-router.ts | 2 +- .../routes/v1/app-connection-routers/index.ts | 2 +- .../server/routes/v1/secret-sync-routers/index.ts | 2 +- .../v1/secret-sync-routers/secret-sync-router.ts | 2 +- .../services/app-connection/app-connection-fns.ts | 8 ++++++-- .../services/app-connection/app-connection-maps.ts | 2 +- .../app-connection/app-connection-service.ts | 4 ++-- .../app-connection/app-connection-types.ts | 12 ++++++------ .../src/services/secret-sync/secret-sync-fns.ts | 14 ++++---------- .../src/services/secret-sync/secret-sync-maps.ts | 2 +- .../src/services/secret-sync/secret-sync-types.ts | 7 ++++++- frontend/src/helpers/appConnections.ts | 2 +- 25 files changed, 48 insertions(+), 45 deletions(-) rename backend/src/{server => ee}/routes/v1/app-connection-routers/chef-connection-router.ts (92%) rename backend/src/{server => ee}/routes/v1/secret-sync-routers/chef-sync-router.ts (72%) rename backend/src/{services/app-connection => ee/services/app-connections}/chef/chef-connection-enums.ts (100%) rename backend/src/{services/app-connection => ee/services/app-connections}/chef/chef-connection-fns.ts (98%) rename backend/src/{services/app-connection => ee/services/app-connections}/chef/chef-connection-schemas.ts (100%) rename backend/src/{services/app-connection => ee/services/app-connections}/chef/chef-connection-service.ts (93%) rename backend/src/{services/app-connection => ee/services/app-connections}/chef/chef-connection-types.ts (87%) rename backend/src/{services/app-connection => ee/services/app-connections}/chef/index.ts (100%) rename backend/src/{ => ee}/services/secret-sync/chef/chef-sync-constants.ts (89%) rename backend/src/{ => ee}/services/secret-sync/chef/chef-sync-fns.ts (99%) rename backend/src/{ => ee}/services/secret-sync/chef/chef-sync-schemas.ts (96%) rename backend/src/{ => ee}/services/secret-sync/chef/chef-sync-types.ts (92%) rename backend/src/{ => ee}/services/secret-sync/chef/index.ts (100%) diff --git a/backend/src/server/routes/v1/app-connection-routers/chef-connection-router.ts b/backend/src/ee/routes/v1/app-connection-routers/chef-connection-router.ts similarity index 92% rename from backend/src/server/routes/v1/app-connection-routers/chef-connection-router.ts rename to backend/src/ee/routes/v1/app-connection-routers/chef-connection-router.ts index 6bfd83391..2855d8b37 100644 --- a/backend/src/server/routes/v1/app-connection-routers/chef-connection-router.ts +++ b/backend/src/ee/routes/v1/app-connection-routers/chef-connection-router.ts @@ -1,17 +1,16 @@ import z from "zod"; -import { readLimit } from "@app/server/config/rateLimiter"; -import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; -import { AppConnection } from "@app/services/app-connection/app-connection-enums"; import { CreateChefConnectionSchema, SanitizedChefConnectionSchema, UpdateChefConnectionSchema -} from "@app/services/app-connection/chef"; +} from "@app/ee/services/app-connections/chef"; +import { readLimit } from "@app/server/config/rateLimiter"; +import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; +import { registerAppConnectionEndpoints } from "@app/server/routes/v1/app-connection-routers/app-connection-endpoints"; +import { AppConnection } from "@app/services/app-connection/app-connection-enums"; import { AuthMode } from "@app/services/auth/auth-type"; -import { registerAppConnectionEndpoints } from "./app-connection-endpoints"; - export const registerChefConnectionRouter = async (server: FastifyZodProvider) => { registerAppConnectionEndpoints({ app: AppConnection.Chef, diff --git a/backend/src/server/routes/v1/secret-sync-routers/chef-sync-router.ts b/backend/src/ee/routes/v1/secret-sync-routers/chef-sync-router.ts similarity index 72% rename from backend/src/server/routes/v1/secret-sync-routers/chef-sync-router.ts rename to backend/src/ee/routes/v1/secret-sync-routers/chef-sync-router.ts index 6972a9b70..3bdd5bce6 100644 --- a/backend/src/server/routes/v1/secret-sync-routers/chef-sync-router.ts +++ b/backend/src/ee/routes/v1/secret-sync-routers/chef-sync-router.ts @@ -1,8 +1,7 @@ -import { ChefSyncSchema, CreateChefSyncSchema, UpdateChefSyncSchema } from "@app/services/secret-sync/chef"; +import { ChefSyncSchema, CreateChefSyncSchema, UpdateChefSyncSchema } from "@app/ee/services/secret-sync/chef"; +import { registerSyncSecretsEndpoints } from "@app/server/routes/v1/secret-sync-routers/secret-sync-endpoints"; import { SecretSync } from "@app/services/secret-sync/secret-sync-enums"; -import { registerSyncSecretsEndpoints } from "./secret-sync-endpoints"; - export const registerChefSyncRouter = async (server: FastifyZodProvider) => registerSyncSecretsEndpoints({ destination: SecretSync.Chef, diff --git a/backend/src/services/app-connection/chef/chef-connection-enums.ts b/backend/src/ee/services/app-connections/chef/chef-connection-enums.ts similarity index 100% rename from backend/src/services/app-connection/chef/chef-connection-enums.ts rename to backend/src/ee/services/app-connections/chef/chef-connection-enums.ts diff --git a/backend/src/services/app-connection/chef/chef-connection-fns.ts b/backend/src/ee/services/app-connections/chef/chef-connection-fns.ts similarity index 98% rename from backend/src/services/app-connection/chef/chef-connection-fns.ts rename to backend/src/ee/services/app-connections/chef/chef-connection-fns.ts index 1b35628bc..31f5d0ee0 100644 --- a/backend/src/services/app-connection/chef/chef-connection-fns.ts +++ b/backend/src/ee/services/app-connections/chef/chef-connection-fns.ts @@ -8,7 +8,7 @@ import { blockLocalAndPrivateIpAddresses } from "@app/lib/validator"; import { IntegrationUrls } from "@app/services/integration-auth/integration-list"; import { TChefDataBagItemContent } from "../../secret-sync/chef/chef-sync-types"; -import { AppConnection } from "../app-connection-enums"; +import { AppConnection } from "../../../../services/app-connection/app-connection-enums"; import { ChefConnectionMethod } from "./chef-connection-enums"; import { TChefConnection, diff --git a/backend/src/services/app-connection/chef/chef-connection-schemas.ts b/backend/src/ee/services/app-connections/chef/chef-connection-schemas.ts similarity index 100% rename from backend/src/services/app-connection/chef/chef-connection-schemas.ts rename to backend/src/ee/services/app-connections/chef/chef-connection-schemas.ts diff --git a/backend/src/services/app-connection/chef/chef-connection-service.ts b/backend/src/ee/services/app-connections/chef/chef-connection-service.ts similarity index 93% rename from backend/src/services/app-connection/chef/chef-connection-service.ts rename to backend/src/ee/services/app-connections/chef/chef-connection-service.ts index c989e7eaf..05969bf5d 100644 --- a/backend/src/services/app-connection/chef/chef-connection-service.ts +++ b/backend/src/ee/services/app-connections/chef/chef-connection-service.ts @@ -1,7 +1,7 @@ import { ForbiddenRequestError } from "@app/lib/errors"; import { OrgServiceActor } from "@app/lib/types"; -import { AppConnection } from "../app-connection-enums"; +import { AppConnection } from "../../../../services/app-connection/app-connection-enums"; import { listChefDataBagItems, listChefDataBags } from "./chef-connection-fns"; import { TChefConnection } from "./chef-connection-types"; diff --git a/backend/src/services/app-connection/chef/chef-connection-types.ts b/backend/src/ee/services/app-connections/chef/chef-connection-types.ts similarity index 87% rename from backend/src/services/app-connection/chef/chef-connection-types.ts rename to backend/src/ee/services/app-connections/chef/chef-connection-types.ts index a2da80d3d..096218951 100644 --- a/backend/src/services/app-connection/chef/chef-connection-types.ts +++ b/backend/src/ee/services/app-connections/chef/chef-connection-types.ts @@ -1,9 +1,9 @@ import z from "zod"; import { DiscriminativePick } from "@app/lib/types"; -import { TChefDataBagItemContent } from "@app/services/secret-sync/chef"; +import { TChefDataBagItemContent } from "@app/ee/services/secret-sync/chef"; -import { AppConnection } from "../app-connection-enums"; +import { AppConnection } from "../../../../services/app-connection/app-connection-enums"; import { ChefConnectionSchema, CreateChefConnectionSchema, diff --git a/backend/src/services/app-connection/chef/index.ts b/backend/src/ee/services/app-connections/chef/index.ts similarity index 100% rename from backend/src/services/app-connection/chef/index.ts rename to backend/src/ee/services/app-connections/chef/index.ts diff --git a/backend/src/services/secret-sync/chef/chef-sync-constants.ts b/backend/src/ee/services/secret-sync/chef/chef-sync-constants.ts similarity index 89% rename from backend/src/services/secret-sync/chef/chef-sync-constants.ts rename to backend/src/ee/services/secret-sync/chef/chef-sync-constants.ts index 567b25bbe..8bbf0e12a 100644 --- a/backend/src/services/secret-sync/chef/chef-sync-constants.ts +++ b/backend/src/ee/services/secret-sync/chef/chef-sync-constants.ts @@ -6,5 +6,6 @@ export const CHEF_SYNC_LIST_OPTION: TSecretSyncListItem = { name: "Chef", destination: SecretSync.Chef, connection: AppConnection.Chef, - canImportSecrets: true + canImportSecrets: true, + enterprise: true }; diff --git a/backend/src/services/secret-sync/chef/chef-sync-fns.ts b/backend/src/ee/services/secret-sync/chef/chef-sync-fns.ts similarity index 99% rename from backend/src/services/secret-sync/chef/chef-sync-fns.ts rename to backend/src/ee/services/secret-sync/chef/chef-sync-fns.ts index 7f32b398a..65a4fca9b 100644 --- a/backend/src/services/secret-sync/chef/chef-sync-fns.ts +++ b/backend/src/ee/services/secret-sync/chef/chef-sync-fns.ts @@ -1,4 +1,4 @@ -import { getChefDataBagItem, updateChefDataBagItem } from "@app/services/app-connection/chef"; +import { getChefDataBagItem, updateChefDataBagItem } from "@app/ee/services/app-connections/chef"; import { matchesSchema } from "@app/services/secret-sync/secret-sync-fns"; import { TSecretMap } from "@app/services/secret-sync/secret-sync-types"; diff --git a/backend/src/services/secret-sync/chef/chef-sync-schemas.ts b/backend/src/ee/services/secret-sync/chef/chef-sync-schemas.ts similarity index 96% rename from backend/src/services/secret-sync/chef/chef-sync-schemas.ts rename to backend/src/ee/services/secret-sync/chef/chef-sync-schemas.ts index c2e09011e..9702f97d3 100644 --- a/backend/src/services/secret-sync/chef/chef-sync-schemas.ts +++ b/backend/src/ee/services/secret-sync/chef/chef-sync-schemas.ts @@ -42,5 +42,6 @@ export const ChefSyncListItemSchema = z.object({ name: z.literal("Chef"), connection: z.literal(AppConnection.Chef), destination: z.literal(SecretSync.Chef), - canImportSecrets: z.literal(true) + canImportSecrets: z.literal(true), + enterprise: z.boolean() }); diff --git a/backend/src/services/secret-sync/chef/chef-sync-types.ts b/backend/src/ee/services/secret-sync/chef/chef-sync-types.ts similarity index 92% rename from backend/src/services/secret-sync/chef/chef-sync-types.ts rename to backend/src/ee/services/secret-sync/chef/chef-sync-types.ts index 464e0372d..0f70e7e1a 100644 --- a/backend/src/services/secret-sync/chef/chef-sync-types.ts +++ b/backend/src/ee/services/secret-sync/chef/chef-sync-types.ts @@ -1,6 +1,6 @@ import z from "zod"; -import { TChefConnection } from "@app/services/app-connection/chef"; +import { TChefConnection } from "@app/ee/services/app-connections/chef"; import { ChefSyncListItemSchema, ChefSyncSchema, CreateChefSyncSchema } from "./chef-sync-schemas"; diff --git a/backend/src/services/secret-sync/chef/index.ts b/backend/src/ee/services/secret-sync/chef/index.ts similarity index 100% rename from backend/src/services/secret-sync/chef/index.ts rename to backend/src/ee/services/secret-sync/chef/index.ts diff --git a/backend/src/server/routes/v1/app-connection-routers/app-connection-router.ts b/backend/src/server/routes/v1/app-connection-routers/app-connection-router.ts index 9a4d7f38b..5a3496750 100644 --- a/backend/src/server/routes/v1/app-connection-routers/app-connection-router.ts +++ b/backend/src/server/routes/v1/app-connection-routers/app-connection-router.ts @@ -1,6 +1,7 @@ import { z } from "zod"; import { ProjectType } from "@app/db/schemas"; +import { ChefConnectionListItemSchema, SanitizedChefConnectionSchema } from "@app/ee/services/app-connections/chef"; import { OCIConnectionListItemSchema, SanitizedOCIConnectionSchema } from "@app/ee/services/app-connections/oci"; import { OracleDBConnectionListItemSchema, @@ -48,7 +49,6 @@ import { ChecklyConnectionListItemSchema, SanitizedChecklyConnectionSchema } from "@app/services/app-connection/checkly"; -import { ChefConnectionListItemSchema, SanitizedChefConnectionSchema } from "@app/services/app-connection/chef"; import { CloudflareConnectionListItemSchema, SanitizedCloudflareConnectionSchema diff --git a/backend/src/server/routes/v1/app-connection-routers/index.ts b/backend/src/server/routes/v1/app-connection-routers/index.ts index 32e9efe4c..aa1d671b6 100644 --- a/backend/src/server/routes/v1/app-connection-routers/index.ts +++ b/backend/src/server/routes/v1/app-connection-routers/index.ts @@ -1,3 +1,4 @@ +import { registerChefConnectionRouter } from "@app/ee/routes/v1/app-connection-routers/chef-connection-router"; import { registerOCIConnectionRouter } from "@app/ee/routes/v1/app-connection-routers/oci-connection-router"; import { registerOracleDBConnectionRouter } from "@app/ee/routes/v1/app-connection-routers/oracledb-connection-router"; import { AppConnection } from "@app/services/app-connection/app-connection-enums"; @@ -13,7 +14,6 @@ import { registerAzureKeyVaultConnectionRouter } from "./azure-key-vault-connect import { registerBitbucketConnectionRouter } from "./bitbucket-connection-router"; import { registerCamundaConnectionRouter } from "./camunda-connection-router"; import { registerChecklyConnectionRouter } from "./checkly-connection-router"; -import { registerChefConnectionRouter } from "./chef-connection-router"; import { registerCloudflareConnectionRouter } from "./cloudflare-connection-router"; import { registerDatabricksConnectionRouter } from "./databricks-connection-router"; import { registerDigitalOceanConnectionRouter } from "./digital-ocean-connection-router"; diff --git a/backend/src/server/routes/v1/secret-sync-routers/index.ts b/backend/src/server/routes/v1/secret-sync-routers/index.ts index d305dc342..810e5b7fa 100644 --- a/backend/src/server/routes/v1/secret-sync-routers/index.ts +++ b/backend/src/server/routes/v1/secret-sync-routers/index.ts @@ -1,3 +1,4 @@ +import { registerChefSyncRouter } from "@app/ee/routes/v1/secret-sync-routers/chef-sync-router"; import { registerOCIVaultSyncRouter } from "@app/ee/routes/v1/secret-sync-routers/oci-vault-sync-router"; import { SecretSync } from "@app/services/secret-sync/secret-sync-enums"; @@ -10,7 +11,6 @@ import { registerAzureKeyVaultSyncRouter } from "./azure-key-vault-sync-router"; import { registerBitbucketSyncRouter } from "./bitbucket-sync-router"; import { registerCamundaSyncRouter } from "./camunda-sync-router"; import { registerChecklySyncRouter } from "./checkly-sync-router"; -import { registerChefSyncRouter } from "./chef-sync-router"; import { registerCloudflarePagesSyncRouter } from "./cloudflare-pages-sync-router"; import { registerCloudflareWorkersSyncRouter } from "./cloudflare-workers-sync-router"; import { registerDatabricksSyncRouter } from "./databricks-sync-router"; diff --git a/backend/src/server/routes/v1/secret-sync-routers/secret-sync-router.ts b/backend/src/server/routes/v1/secret-sync-routers/secret-sync-router.ts index 85adf12f1..0f394f8b2 100644 --- a/backend/src/server/routes/v1/secret-sync-routers/secret-sync-router.ts +++ b/backend/src/server/routes/v1/secret-sync-routers/secret-sync-router.ts @@ -24,7 +24,7 @@ import { AzureKeyVaultSyncListItemSchema, AzureKeyVaultSyncSchema } from "@app/s import { BitbucketSyncListItemSchema, BitbucketSyncSchema } from "@app/services/secret-sync/bitbucket"; import { CamundaSyncListItemSchema, CamundaSyncSchema } from "@app/services/secret-sync/camunda"; import { ChecklySyncListItemSchema, ChecklySyncSchema } from "@app/services/secret-sync/checkly/checkly-sync-schemas"; -import { ChefSyncListItemSchema, ChefSyncSchema } from "@app/services/secret-sync/chef"; +import { ChefSyncListItemSchema, ChefSyncSchema } from "@app/ee/services/secret-sync/chef"; import { CloudflarePagesSyncListItemSchema, CloudflarePagesSyncSchema diff --git a/backend/src/services/app-connection/app-connection-fns.ts b/backend/src/services/app-connection/app-connection-fns.ts index 3c511fd4d..87f22b031 100644 --- a/backend/src/services/app-connection/app-connection-fns.ts +++ b/backend/src/services/app-connection/app-connection-fns.ts @@ -1,5 +1,10 @@ import { ProjectType } from "@app/db/schemas"; import { TAppConnections } from "@app/db/schemas/app-connections"; +import { + ChefConnectionMethod, + getChefConnectionListItem, + validateChefConnectionCredentials +} from "@app/ee/services/app-connections/chef"; import { getOCIConnectionListItem, OCIConnectionMethod, @@ -68,7 +73,6 @@ import { } from "./bitbucket"; import { CamundaConnectionMethod, getCamundaConnectionListItem, validateCamundaConnectionCredentials } from "./camunda"; import { ChecklyConnectionMethod, getChecklyConnectionListItem, validateChecklyConnectionCredentials } from "./checkly"; -import { ChefConnectionMethod, getChefConnectionListItem, validateChefConnectionCredentials } from "./chef"; import { CloudflareConnectionMethod } from "./cloudflare/cloudflare-connection-enum"; import { getCloudflareConnectionListItem, @@ -292,7 +296,7 @@ export const decryptAppConnectionCredentials = async ({ cipherTextBlob: encryptedCredentials }); - return JSON.parse(decryptedPlainTextBlob.toString()) as TAppConnection["credentials"]; + return JSON.parse(decryptedPlainTextBlob.toString()); }; export const validateAppConnectionCredentials = async ( diff --git a/backend/src/services/app-connection/app-connection-maps.ts b/backend/src/services/app-connection/app-connection-maps.ts index 08ca0c681..5b8cc3fc1 100644 --- a/backend/src/services/app-connection/app-connection-maps.ts +++ b/backend/src/services/app-connection/app-connection-maps.ts @@ -86,6 +86,6 @@ export const APP_CONNECTION_PLAN_MAP: Record = { [SecretSync.Northflank]: SecretSyncPlanType.Regular, [SecretSync.Bitbucket]: SecretSyncPlanType.Regular, [SecretSync.LaravelForge]: SecretSyncPlanType.Regular, - [SecretSync.Chef]: SecretSyncPlanType.Regular + [SecretSync.Chef]: SecretSyncPlanType.Enterprise }; export const SECRET_SYNC_SKIP_FIELDS_MAP: Record = { diff --git a/backend/src/services/secret-sync/secret-sync-types.ts b/backend/src/services/secret-sync/secret-sync-types.ts index d6ef0b3fc..f1a87a9d2 100644 --- a/backend/src/services/secret-sync/secret-sync-types.ts +++ b/backend/src/services/secret-sync/secret-sync-types.ts @@ -1,6 +1,12 @@ import { Job } from "bullmq"; import { AuditLogInfo } from "@app/ee/services/audit-log/audit-log-types"; +import { + TChefSync, + TChefSyncInput, + TChefSyncListItem, + TChefSyncWithCredentials +} from "@app/ee/services/secret-sync/chef"; import { TOCIVaultSync, TOCIVaultSyncInput, @@ -21,7 +27,6 @@ import { TCamundaSyncListItem, TCamundaSyncWithCredentials } from "@app/services/secret-sync/camunda"; -import { TChefSync, TChefSyncInput, TChefSyncListItem, TChefSyncWithCredentials } from "@app/services/secret-sync/chef"; import { TDatabricksSync, TDatabricksSyncInput, diff --git a/frontend/src/helpers/appConnections.ts b/frontend/src/helpers/appConnections.ts index 1d0d7bec3..b27da2441 100644 --- a/frontend/src/helpers/appConnections.ts +++ b/frontend/src/helpers/appConnections.ts @@ -131,7 +131,7 @@ export const APP_CONNECTION_MAP: Record< image: "Laravel Forge.png", size: 65 }, - [AppConnection.Chef]: { name: "Chef", image: "Chef.png" } + [AppConnection.Chef]: { name: "Chef", image: "Chef.png", enterprise: true } }; export const getAppConnectionMethodDetails = (method: TAppConnection["method"]) => { From ebab43716ec2321fca9c76f90e773e35069aa392 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Mon, 3 Nov 2025 19:27:56 +0530 Subject: [PATCH 39/79] feat: Implement enterprise plan check for Chef connections and update documentation --- .../chef/chef-connection-fns.ts | 2 +- .../chef/chef-connection-service.ts | 22 +++++++++++++++++-- .../chef/chef-connection-types.ts | 2 +- .../secret-sync-routers/secret-sync-router.ts | 2 +- .../app-connection/app-connection-service.ts | 2 +- .../services/secret-sync/secret-sync-fns.ts | 12 +++++++--- docs/integrations/app-connections/chef.mdx | 8 +++++++ docs/integrations/secret-syncs/chef.mdx | 8 +++++++ 8 files changed, 49 insertions(+), 9 deletions(-) diff --git a/backend/src/ee/services/app-connections/chef/chef-connection-fns.ts b/backend/src/ee/services/app-connections/chef/chef-connection-fns.ts index 31f5d0ee0..6cef8373f 100644 --- a/backend/src/ee/services/app-connections/chef/chef-connection-fns.ts +++ b/backend/src/ee/services/app-connections/chef/chef-connection-fns.ts @@ -5,10 +5,10 @@ import { request } from "@app/lib/config/request"; import { BadRequestError } from "@app/lib/errors"; import { removeTrailingSlash } from "@app/lib/fn"; import { blockLocalAndPrivateIpAddresses } from "@app/lib/validator"; +import { AppConnection } from "@app/services/app-connection/app-connection-enums"; import { IntegrationUrls } from "@app/services/integration-auth/integration-list"; import { TChefDataBagItemContent } from "../../secret-sync/chef/chef-sync-types"; -import { AppConnection } from "../../../../services/app-connection/app-connection-enums"; import { ChefConnectionMethod } from "./chef-connection-enums"; import { TChefConnection, diff --git a/backend/src/ee/services/app-connections/chef/chef-connection-service.ts b/backend/src/ee/services/app-connections/chef/chef-connection-service.ts index 05969bf5d..242b1fbf9 100644 --- a/backend/src/ee/services/app-connections/chef/chef-connection-service.ts +++ b/backend/src/ee/services/app-connections/chef/chef-connection-service.ts @@ -1,7 +1,8 @@ -import { ForbiddenRequestError } from "@app/lib/errors"; +import { BadRequestError, ForbiddenRequestError } from "@app/lib/errors"; import { OrgServiceActor } from "@app/lib/types"; import { AppConnection } from "../../../../services/app-connection/app-connection-enums"; +import { TLicenseServiceFactory } from "../../license/license-service"; import { listChefDataBagItems, listChefDataBags } from "./chef-connection-fns"; import { TChefConnection } from "./chef-connection-types"; @@ -11,8 +12,23 @@ type TGetAppConnectionFunc = ( actor: OrgServiceActor ) => Promise; -export const chefConnectionService = (getAppConnection: TGetAppConnectionFunc) => { +// Enterprise check +export const checkPlan = async (licenseService: Pick, orgId: string) => { + const plan = await licenseService.getPlan(orgId); + if (!plan.enterpriseAppConnections) + throw new BadRequestError({ + message: + "Failed to use app connection due to plan restriction. Upgrade plan to access enterprise app connections." + }); +}; + +export const chefConnectionService = ( + getAppConnection: TGetAppConnectionFunc, + licenseService: Pick +) => { const listDataBags = async (appConnectionId: string, actor: OrgServiceActor) => { + await checkPlan(licenseService, actor.orgId); + const appConnection = await getAppConnection(AppConnection.Chef, appConnectionId, actor); if (!appConnection) { @@ -23,6 +39,8 @@ export const chefConnectionService = (getAppConnection: TGetAppConnectionFunc) = }; const listDataBagItems = async (appConnectionId: string, dataBagName: string, actor: OrgServiceActor) => { + await checkPlan(licenseService, actor.orgId); + const appConnection = await getAppConnection(AppConnection.Chef, appConnectionId, actor); if (!appConnection) { diff --git a/backend/src/ee/services/app-connections/chef/chef-connection-types.ts b/backend/src/ee/services/app-connections/chef/chef-connection-types.ts index 096218951..5673614e9 100644 --- a/backend/src/ee/services/app-connections/chef/chef-connection-types.ts +++ b/backend/src/ee/services/app-connections/chef/chef-connection-types.ts @@ -1,7 +1,7 @@ import z from "zod"; -import { DiscriminativePick } from "@app/lib/types"; import { TChefDataBagItemContent } from "@app/ee/services/secret-sync/chef"; +import { DiscriminativePick } from "@app/lib/types"; import { AppConnection } from "../../../../services/app-connection/app-connection-enums"; import { diff --git a/backend/src/server/routes/v1/secret-sync-routers/secret-sync-router.ts b/backend/src/server/routes/v1/secret-sync-routers/secret-sync-router.ts index 0f394f8b2..61e4ab79d 100644 --- a/backend/src/server/routes/v1/secret-sync-routers/secret-sync-router.ts +++ b/backend/src/server/routes/v1/secret-sync-routers/secret-sync-router.ts @@ -1,6 +1,7 @@ import { z } from "zod"; import { EventType } from "@app/ee/services/audit-log/audit-log-types"; +import { ChefSyncListItemSchema, ChefSyncSchema } from "@app/ee/services/secret-sync/chef"; import { OCIVaultSyncListItemSchema, OCIVaultSyncSchema } from "@app/ee/services/secret-sync/oci-vault"; import { ApiDocsTags, SecretSyncs } from "@app/lib/api-docs"; import { readLimit } from "@app/server/config/rateLimiter"; @@ -24,7 +25,6 @@ import { AzureKeyVaultSyncListItemSchema, AzureKeyVaultSyncSchema } from "@app/s import { BitbucketSyncListItemSchema, BitbucketSyncSchema } from "@app/services/secret-sync/bitbucket"; import { CamundaSyncListItemSchema, CamundaSyncSchema } from "@app/services/secret-sync/camunda"; import { ChecklySyncListItemSchema, ChecklySyncSchema } from "@app/services/secret-sync/checkly/checkly-sync-schemas"; -import { ChefSyncListItemSchema, ChefSyncSchema } from "@app/ee/services/secret-sync/chef"; import { CloudflarePagesSyncListItemSchema, CloudflarePagesSyncSchema diff --git a/backend/src/services/app-connection/app-connection-service.ts b/backend/src/services/app-connection/app-connection-service.ts index 6d23d3c0a..99ff253d2 100644 --- a/backend/src/services/app-connection/app-connection-service.ts +++ b/backend/src/services/app-connection/app-connection-service.ts @@ -885,6 +885,6 @@ export const appConnectionServiceFactory = ({ northflank: northflankConnectionService(connectAppConnectionById), okta: oktaConnectionService(connectAppConnectionById), laravelForge: laravelForgeConnectionService(connectAppConnectionById), - chef: chefConnectionService(connectAppConnectionById) + chef: chefConnectionService(connectAppConnectionById, licenseService) }; }; diff --git a/backend/src/services/secret-sync/secret-sync-fns.ts b/backend/src/services/secret-sync/secret-sync-fns.ts index ca779bf6a..6ee9b91d3 100644 --- a/backend/src/services/secret-sync/secret-sync-fns.ts +++ b/backend/src/services/secret-sync/secret-sync-fns.ts @@ -290,7 +290,9 @@ export const SecretSyncFns = { case SecretSync.Chef: return ChefSyncFns.syncSecrets(secretSync, schemaSecretMap); default: - throw new Error(`Unhandled sync destination for sync secrets fns: ${secretSync.destination}`); + throw new Error( + `Unhandled sync destination for sync secrets fns: ${(secretSync as TSecretSyncWithCredentials).destination}` + ); } }, getSecrets: async ( @@ -413,7 +415,9 @@ export const SecretSyncFns = { secretMap = await ChefSyncFns.getSecrets(secretSync); break; default: - throw new Error(`Unhandled sync destination for get secrets fns: ${secretSync.destination}`); + throw new Error( + `Unhandled sync destination for get secrets fns: ${(secretSync as TSecretSyncWithCredentials).destination}` + ); } const filtered = filterForSchema(secretMap, secretSync.environment?.slug || "", secretSync.syncOptions.keySchema); @@ -510,7 +514,9 @@ export const SecretSyncFns = { case SecretSync.Chef: return ChefSyncFns.removeSecrets(secretSync, schemaSecretMap); default: - throw new Error(`Unhandled sync destination for remove secrets fns: ${secretSync.destination}`); + throw new Error( + `Unhandled sync destination for remove secrets fns: ${(secretSync as TSecretSyncWithCredentials).destination}` + ); } } }; diff --git a/docs/integrations/app-connections/chef.mdx b/docs/integrations/app-connections/chef.mdx index 60c49fb1f..fdb866557 100644 --- a/docs/integrations/app-connections/chef.mdx +++ b/docs/integrations/app-connections/chef.mdx @@ -3,6 +3,14 @@ title: "Chef Connection" description: "Learn how to configure a Chef Connection for Infisical." --- + + Chef App Connection is a paid feature. + + If you're using Infisical Cloud, then it is available under the **Enterprise Tier**. If you're self-hosting Infisical, + then you should contact team@infisical.com to purchase an enterprise license to use it. + + + Infisical supports the use of User Private Key to connect with Chef Server. Please access your **starter kit** to get all the required information to create a Chef Connection. diff --git a/docs/integrations/secret-syncs/chef.mdx b/docs/integrations/secret-syncs/chef.mdx index 13f3b3474..423d42b4b 100644 --- a/docs/integrations/secret-syncs/chef.mdx +++ b/docs/integrations/secret-syncs/chef.mdx @@ -3,6 +3,14 @@ title: "Chef Sync" description: "Learn how to configure a Chef Sync for Infisical." --- + + Chef Sync is a paid feature. + + If you're using Infisical Cloud, then it is available under the **Enterprise Tier**. If you're self-hosting Infisical, + then you should contact team@infisical.com to purchase an enterprise license to use it. + + + **Prerequisites:** - Create a [Chef Connection](/integrations/app-connections/chef) From 14e0a0ff6d27f198a72525f10d2acc3e32c8be6a Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Mon, 3 Nov 2025 19:41:20 +0530 Subject: [PATCH 40/79] fix: lint --- backend/src/services/app-connection/app-connection-fns.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/services/app-connection/app-connection-fns.ts b/backend/src/services/app-connection/app-connection-fns.ts index 87f22b031..863fa75f9 100644 --- a/backend/src/services/app-connection/app-connection-fns.ts +++ b/backend/src/services/app-connection/app-connection-fns.ts @@ -296,7 +296,7 @@ export const decryptAppConnectionCredentials = async ({ cipherTextBlob: encryptedCredentials }); - return JSON.parse(decryptedPlainTextBlob.toString()); + return JSON.parse(decryptedPlainTextBlob.toString()) as TAppConnection["credentials"]; }; export const validateAppConnectionCredentials = async ( From 1ed59a7304af103b1004f28040dafd5abde94d21 Mon Sep 17 00:00:00 2001 From: Victor Santos Date: Mon, 3 Nov 2025 11:12:38 -0300 Subject: [PATCH 41/79] refactor: streamline error handling and notification logic across various components --- .../src/components/mfa/TotpRegistration.tsx | 31 ++--- .../IdentitySection/IdentityTable.tsx | 29 ++-- .../IdentityTlsCertAuthForm.tsx | 67 ++++----- .../IdentitySection/IdentityTokenAuthForm.tsx | 59 ++++---- .../IdentityUniversalAuthForm.tsx | 95 ++++++------- .../OrgMembersSection/AddOrgMemberModal.tsx | 89 ++++++------ .../AddSubOrgMemberModal.tsx | 42 +++--- .../UpgradePrivilegeSystemModal.tsx | 19 +-- .../components/DeleteAppConnectionModal.tsx | 27 ++-- .../EditAppConnectionDetailsModal.tsx | 27 ++-- .../OauthCallbackPage/OauthCallbackPage.tsx | 56 ++------ .../BillingDetailsTab/CompanyNameSection.tsx | 28 ++-- .../BillingDetailsTab/InvoiceEmailSection.tsx | 28 ++-- .../BillingDetailsTab/PmtMethodsTable.tsx | 25 ++-- .../BillingDetailsTab/TaxIDModal.tsx | 30 ++-- .../GroupDetailsByIDPage.tsx | 34 ++--- .../components/AddGroupMemberModal.tsx | 35 ++--- .../GroupMembersSection.tsx | 27 ++-- .../IdentityAddToProjectModal.tsx | 33 ++--- .../IdentityProjectsSection.tsx | 29 ++-- .../components/IdentityTokenModal.tsx | 55 +++----- .../IdentityAuthLockoutFields.tsx | 26 ++-- .../IdentityTokenAuthTokensTable.tsx | 29 ++-- ...dentityUniversalAuthClientSecretsTable.tsx | 26 ++-- .../ViewIdentityAuthModal.tsx | 28 ++-- .../components/GatewayCliDeploymentMethod.tsx | 7 +- .../components/RelayCliDeploymentMethod.tsx | 7 +- .../components/AllProjectView.tsx | 24 ++-- .../ProjectsPage/components/MyProjectView.tsx | 31 ++--- .../RoleByIDPage/RoleByIDPage.tsx | 43 +++--- .../RoleByIDPage/components/RoleModal.tsx | 75 +++++----- .../RequestSecret/RequestSecretForm.tsx | 46 +++---- .../RequestSecret/RequestSecretTab.tsx | 24 ++-- .../OrgSecretShareLimitSection.tsx | 31 ++--- .../SecretSharingAllowShareToAnyone.tsx | 26 ++-- .../components/ShareSecret/ShareSecretTab.tsx | 24 ++-- .../AuditLogStreamForm/AuditLogStreamForm.tsx | 48 ++----- .../components/DeleteAuditLogStreamModal.tsx | 27 ++-- .../components/VaultConnectionSection.tsx | 22 +-- .../components/VaultNamespaceConfigModal.tsx | 46 +++---- .../OrgDeleteSection/OrgDeleteSection.tsx | 28 ++-- .../OrgEncryptionTab/OrgEncryptionTab.tsx | 16 +-- .../AddOrgIncidentContactModal.tsx | 34 ++--- .../OrgIncidentContactsTable.tsx | 30 ++-- .../OrgNameChangeSection.tsx | 30 ++-- .../SubOrgNameChangeSection.tsx | 30 ++-- .../OrgProductSelectSection.tsx | 20 +-- .../OrgProductSettingsTab.tsx | 6 - .../ExternalGroupOrgRoleMappings.tsx | 18 +-- .../components/OrgSsoTab/LDAPModal.tsx | 78 +++++------ .../components/OrgSsoTab/OIDCModal.tsx | 129 ++++++++---------- .../components/OrgSsoTab/SSOModal.tsx | 85 +++++------- .../components/GroupsSection/GroupRoles.tsx | 20 ++- .../ProjectRoleList/ProjectRoleList.tsx | 17 +-- ...rojectAdditionalPrivilegeModifySection.tsx | 47 +++---- ...ntityProjectAdditionalPrivilegeSection.tsx | 19 +-- .../IdentityRoleDetailsSection.tsx | 67 +++++---- ...emberProjectAdditionalPrivilegeSection.tsx | 17 +-- ...rojectAdditionalPrivilegeModifySection.tsx | 43 +++--- .../components/RolePermissionsSection.tsx | 21 ++- .../BackfillSecretReferenceSection.tsx | 8 +- 61 files changed, 843 insertions(+), 1375 deletions(-) diff --git a/frontend/src/components/mfa/TotpRegistration.tsx b/frontend/src/components/mfa/TotpRegistration.tsx index 0b79bfd98..bcb0d3691 100644 --- a/frontend/src/components/mfa/TotpRegistration.tsx +++ b/frontend/src/components/mfa/TotpRegistration.tsx @@ -25,27 +25,20 @@ const TotpRegistration = ({ onComplete, shouldCenterQr }: Props) => { const handleTotpVerify = async (event: React.FormEvent) => { event.preventDefault(); - try { - const result = await verifyUserTotp({ - totp - }); + const result = await verifyUserTotp({ + totp + }); - createNotification({ - text: "Successfully configured mobile authenticator", - type: "success" - }); + createNotification({ + text: "Successfully configured mobile authenticator", + type: "success" + }); - if (result.recoveryCodes && result.recoveryCodes.length > 0) { - setRecoveryCodes(result.recoveryCodes); - setShowRecoveryModal(true); - } else if (onComplete) { - onComplete(); - } - } catch { - createNotification({ - text: "Failed to verify TOTP code", - type: "error" - }); + if (result.recoveryCodes && result.recoveryCodes.length > 0) { + setRecoveryCodes(result.recoveryCodes); + setShowRecoveryModal(true); + } else if (onComplete) { + onComplete(); } }; diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTable.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTable.tsx index c4c1561e7..d202b909a 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTable.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTable.tsx @@ -145,27 +145,16 @@ export const IdentityTable = ({ handlePopUpOpen }: Props) => { }; const handleChangeRole = async ({ identityId, role }: { identityId: string; role: string }) => { - try { - await updateMutateAsync({ - identityId, - role, - organizationId - }); + await updateMutateAsync({ + identityId, + role, + organizationId + }); - createNotification({ - text: "Successfully updated identity role", - type: "success" - }); - } catch (err) { - console.error(err); - const error = err as any; - const text = error?.response?.data?.message ?? "Failed to update identity role"; - - createNotification({ - text, - type: "error" - }); - } + createNotification({ + text: "Successfully updated identity role", + type: "success" + }); }; const handleRoleToggle = useCallback( diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTlsCertAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTlsCertAuthForm.tsx index 19a0499fc..2a2ca45c3 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTlsCertAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTlsCertAuthForm.tsx @@ -134,47 +134,40 @@ export const IdentityTlsCertAuthForm = ({ accessTokenNumUsesLimit, accessTokenTrustedIps }: FormData) => { - try { - if (!identityId) return; + if (!identityId) return; - if (data) { - await updateMutateAsync({ - organizationId: orgId, - caCertificate, - allowedCommonNames: allowedCommonNames || null, - identityId, - accessTokenTTL: Number(accessTokenTTL), - accessTokenMaxTTL: Number(accessTokenMaxTTL), - accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), - accessTokenTrustedIps - }); - } else { - await addMutateAsync({ - organizationId: orgId, - identityId, - caCertificate, - allowedCommonNames: allowedCommonNames || undefined, - accessTokenTTL: Number(accessTokenTTL), - accessTokenMaxTTL: Number(accessTokenMaxTTL), - accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), - accessTokenTrustedIps - }); - } - - handlePopUpToggle("identityAuthMethod", false); - - createNotification({ - text: `Successfully ${isUpdate ? "updated" : "configured"} auth method`, - type: "success" + if (data) { + await updateMutateAsync({ + organizationId: orgId, + caCertificate, + allowedCommonNames: allowedCommonNames || null, + identityId, + accessTokenTTL: Number(accessTokenTTL), + accessTokenMaxTTL: Number(accessTokenMaxTTL), + accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), + accessTokenTrustedIps }); - - reset(); - } catch { - createNotification({ - text: `Failed to ${isUpdate ? "update" : "configure"} identity`, - type: "error" + } else { + await addMutateAsync({ + organizationId: orgId, + identityId, + caCertificate, + allowedCommonNames: allowedCommonNames || undefined, + accessTokenTTL: Number(accessTokenTTL), + accessTokenMaxTTL: Number(accessTokenMaxTTL), + accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), + accessTokenTrustedIps }); } + + handlePopUpToggle("identityAuthMethod", false); + + createNotification({ + text: `Successfully ${isUpdate ? "updated" : "configured"} auth method`, + type: "success" + }); + + reset(); }; return ( diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTokenAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTokenAuthForm.tsx index b819202fc..8da4bad17 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTokenAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTokenAuthForm.tsx @@ -127,43 +127,36 @@ export const IdentityTokenAuthForm = ({ accessTokenNumUsesLimit, accessTokenTrustedIps }: FormData) => { - try { - if (!identityId) return; + if (!identityId) return; - if (data) { - await updateMutateAsync({ - organizationId: orgId, - identityId, - accessTokenTTL: Number(accessTokenTTL), - accessTokenMaxTTL: Number(accessTokenMaxTTL), - accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), - accessTokenTrustedIps - }); - } else { - await addMutateAsync({ - organizationId: orgId, - identityId, - accessTokenTTL: Number(accessTokenTTL), - accessTokenMaxTTL: Number(accessTokenMaxTTL), - accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), - accessTokenTrustedIps - }); - } - - handlePopUpToggle("identityAuthMethod", false); - - createNotification({ - text: `Successfully ${isUpdate ? "updated" : "configured"} auth method`, - type: "success" + if (data) { + await updateMutateAsync({ + organizationId: orgId, + identityId, + accessTokenTTL: Number(accessTokenTTL), + accessTokenMaxTTL: Number(accessTokenMaxTTL), + accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), + accessTokenTrustedIps }); - - reset(); - } catch { - createNotification({ - text: `Failed to ${isUpdate ? "update" : "configure"} identity`, - type: "error" + } else { + await addMutateAsync({ + organizationId: orgId, + identityId, + accessTokenTTL: Number(accessTokenTTL), + accessTokenMaxTTL: Number(accessTokenMaxTTL), + accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), + accessTokenTrustedIps }); } + + handlePopUpToggle("identityAuthMethod", false); + + createNotification({ + text: `Successfully ${isUpdate ? "updated" : "configured"} auth method`, + type: "success" + }); + + reset(); }; return ( diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityUniversalAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityUniversalAuthForm.tsx index d43d84c86..dd85f5342 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityUniversalAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityUniversalAuthForm.tsx @@ -220,64 +220,55 @@ export const IdentityUniversalAuthForm = ({ lockoutCounterResetValue, lockoutCounterResetUnit }: FormData) => { - try { - if (!identityId) return; + if (!identityId) return; - const lockoutDurationSeconds = ms(`${lockoutDurationValue}${lockoutDurationUnit}`) / 1000; - const lockoutCounterResetSeconds = - ms(`${lockoutCounterResetValue}${lockoutCounterResetUnit}`) / 1000; + const lockoutDurationSeconds = ms(`${lockoutDurationValue}${lockoutDurationUnit}`) / 1000; + const lockoutCounterResetSeconds = + ms(`${lockoutCounterResetValue}${lockoutCounterResetUnit}`) / 1000; - if (data) { - // update universal auth configuration - await updateMutateAsync({ - organizationId: orgId, - identityId, - clientSecretTrustedIps, - accessTokenTTL: Number(accessTokenTTL), - accessTokenMaxTTL: Number(accessTokenMaxTTL), - accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), - accessTokenTrustedIps, - accessTokenPeriod: Number(accessTokenPeriod), - lockoutEnabled, - lockoutThreshold: Number(lockoutThreshold), - lockoutDurationSeconds, - lockoutCounterResetSeconds - }); - } else { - // create new universal auth configuration - - await addMutateAsync({ - organizationId: orgId, - identityId, - clientSecretTrustedIps, - accessTokenTTL: Number(accessTokenTTL), - accessTokenMaxTTL: Number(accessTokenMaxTTL), - accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), - accessTokenTrustedIps, - accessTokenPeriod: Number(accessTokenPeriod), - lockoutEnabled, - lockoutThreshold: Number(lockoutThreshold), - lockoutDurationSeconds: Number(lockoutDurationSeconds), - lockoutCounterResetSeconds: Number(lockoutCounterResetSeconds) - }); - } - - handlePopUpToggle("identityAuthMethod", false); - - createNotification({ - text: `Successfully ${isUpdate ? "updated" : "created"} auth method`, - type: "success" + if (data) { + // update universal auth configuration + await updateMutateAsync({ + organizationId: orgId, + identityId, + clientSecretTrustedIps, + accessTokenTTL: Number(accessTokenTTL), + accessTokenMaxTTL: Number(accessTokenMaxTTL), + accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), + accessTokenTrustedIps, + accessTokenPeriod: Number(accessTokenPeriod), + lockoutEnabled, + lockoutThreshold: Number(lockoutThreshold), + lockoutDurationSeconds, + lockoutCounterResetSeconds }); + } else { + // create new universal auth configuration - reset(); - } catch { - const text = `Failed to ${isUpdate ? "update" : "configure"} identity`; - - createNotification({ - text, - type: "error" + await addMutateAsync({ + organizationId: orgId, + identityId, + clientSecretTrustedIps, + accessTokenTTL: Number(accessTokenTTL), + accessTokenMaxTTL: Number(accessTokenMaxTTL), + accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), + accessTokenTrustedIps, + accessTokenPeriod: Number(accessTokenPeriod), + lockoutEnabled, + lockoutThreshold: Number(lockoutThreshold), + lockoutDurationSeconds: Number(lockoutDurationSeconds), + lockoutCounterResetSeconds: Number(lockoutCounterResetSeconds) }); } + + handlePopUpToggle("identityAuthMethod", false); + + createNotification({ + text: `Successfully ${isUpdate ? "updated" : "created"} auth method`, + type: "success" + }); + + reset(); }; return ( diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/AddOrgMemberModal.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/AddOrgMemberModal.tsx index e49beadae..da88603fc 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/AddOrgMemberModal.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/AddOrgMemberModal.tsx @@ -122,64 +122,55 @@ export const AddOrgMemberModal = ({ } } - try { - const parsedEmails = emails - .replace(/\s/g, "") - .split(",") - .map((email) => { - if (EmailSchema.safeParse(email).success) { - return email.trim(); - } + const parsedEmails = emails + .replace(/\s/g, "") + .split(",") + .map((email) => { + if (EmailSchema.safeParse(email).success) { + return email.trim(); + } - return null; - }); - - if (parsedEmails.includes(null)) { - createNotification({ - text: "Invalid email addresses provided.", - type: "error" - }); - return; - } - - const usernames = emails.split(",").map((email) => email.trim()); - const { data } = await addUsersMutateAsync({ - organizationId: currentOrg?.id, - inviteeEmails: usernames, - organizationRoleSlug: organizationRole.slug + return null; }); - await Promise.allSettled( - selectedProjects.map((el) => - addUserToProject({ - orgId: currentOrg.id, - projectId: el.id, - roleSlugs: [projectRoleSlug], - usernames - }) - ) - ); - - setCompleteInviteLinks(data?.completeInviteLinks ?? null); - - // only show this notification when email is configured. - // A [completeInviteLink] will not be sent if smtp is configured - - if (!data.completeInviteLinks) { - createNotification({ - text: "Successfully invited user to the organization.", - type: "success" - }); - } - } catch (error) { - console.error(error); + if (parsedEmails.includes(null)) { createNotification({ - text: "Failed to invite user to org", + text: "Invalid email addresses provided.", type: "error" }); return; } + const usernames = emails.split(",").map((email) => email.trim()); + const { data } = await addUsersMutateAsync({ + organizationId: currentOrg?.id, + inviteeEmails: usernames, + organizationRoleSlug: organizationRole.slug + }); + + await Promise.allSettled( + selectedProjects.map((el) => + addUserToProject({ + orgId: currentOrg.id, + projectId: el.id, + roleSlugs: [projectRoleSlug], + usernames + }) + ) + ); + + setCompleteInviteLinks(data?.completeInviteLinks ?? null); + + // only show this notification when email is configured. + // A [completeInviteLink] will not be sent if smtp is configured + + if (!data.completeInviteLinks) { + createNotification({ + text: "Successfully invited user to the organization.", + type: "success" + }); + } + if (serverDetails?.emailConfigured) { handlePopUpToggle("addMember", false); } diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/AddSubOrgMemberModal.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/AddSubOrgMemberModal.tsx index 290f8db4b..5edba7cde 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/AddSubOrgMemberModal.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/AddSubOrgMemberModal.tsx @@ -106,32 +106,24 @@ export const AddSubOrgMemberModal = ({ onClose }: Props) => { } } - try { - const usernames = users.map((el) => el.username); - await addUsersMutateAsync({ - organizationId: currentOrg?.id, - inviteeEmails: usernames, - organizationRoleSlug: organizationRole.slug - }); + const usernames = users.map((el) => el.username); + await addUsersMutateAsync({ + organizationId: currentOrg?.id, + inviteeEmails: usernames, + organizationRoleSlug: organizationRole.slug + }); - await Promise.allSettled( - selectedProjects.map((el) => - addUserToProject({ - orgId: currentOrg.id, - projectId: el.id, - roleSlugs: [projectRoleSlug], - usernames - }) - ) - ); - onClose(); - } catch (error) { - console.error(error); - createNotification({ - text: "Failed to add user to suborganization", - type: "error" - }); - } + await Promise.allSettled( + selectedProjects.map((el) => + addUserToProject({ + orgId: currentOrg.id, + projectId: el.id, + roleSlugs: [projectRoleSlug], + usernames + }) + ) + ); + onClose(); }; const getGroupHeaderLabel = (type: ProjectType) => { diff --git a/frontend/src/pages/organization/AccessManagementPage/components/UpgradePrivilegeSystemModal/UpgradePrivilegeSystemModal.tsx b/frontend/src/pages/organization/AccessManagementPage/components/UpgradePrivilegeSystemModal/UpgradePrivilegeSystemModal.tsx index 97aaff73d..c2a200805 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/UpgradePrivilegeSystemModal/UpgradePrivilegeSystemModal.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/UpgradePrivilegeSystemModal/UpgradePrivilegeSystemModal.tsx @@ -44,21 +44,14 @@ export const UpgradePrivilegeSystemModal = ({ isOpen, onOpenChange }: Props) => acknowledgesPermanentChange; const handlePrivilegeSystemUpgrade = async () => { - try { - await upgradePrivilegeSystem(); + await upgradePrivilegeSystem(); - createNotification({ - text: "Privilege system upgrade completed", - type: "success" - }); + createNotification({ + text: "Privilege system upgrade completed", + type: "success" + }); - onOpenChange(false); - } catch { - createNotification({ - text: "Failed to upgrade privilege system", - type: "error" - }); - } + onOpenChange(false); }; const handleClose = () => { diff --git a/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/DeleteAppConnectionModal.tsx b/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/DeleteAppConnectionModal.tsx index e5f6b3684..f5782adbb 100644 --- a/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/DeleteAppConnectionModal.tsx +++ b/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/DeleteAppConnectionModal.tsx @@ -18,26 +18,17 @@ export const DeleteAppConnectionModal = ({ isOpen, onOpenChange, appConnection } const { id: connectionId, name, app } = appConnection; const handleDeleteAppConnection = async () => { - try { - await deleteAppConnection.mutateAsync({ - connectionId, - app - }); + await deleteAppConnection.mutateAsync({ + connectionId, + app + }); - createNotification({ - text: `Successfully removed ${APP_CONNECTION_MAP[app].name} connection`, - type: "success" - }); + createNotification({ + text: `Successfully removed ${APP_CONNECTION_MAP[app].name} connection`, + type: "success" + }); - onOpenChange(false); - } catch (err) { - console.error(err); - - createNotification({ - text: `Failed to remove ${APP_CONNECTION_MAP[app].name} connection`, - type: "error" - }); - } + onOpenChange(false); }; return ( diff --git a/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/EditAppConnectionDetailsModal.tsx b/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/EditAppConnectionDetailsModal.tsx index f46a3b3cf..7d1a542c0 100644 --- a/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/EditAppConnectionDetailsModal.tsx +++ b/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/EditAppConnectionDetailsModal.tsx @@ -43,24 +43,15 @@ const Content = ({ appConnection, onComplete }: ContentProps) => { } = form; const onSubmit = async (formData: FormData) => { - try { - await updateAppConnection.mutateAsync({ - connectionId: appConnection.id, - ...formData - }); - createNotification({ - text: `Successfully updated ${appName} Connection`, - type: "success" - }); - onComplete(); - } catch (err: any) { - console.error(err); - createNotification({ - title: `Failed to update ${appName} Connection`, - text: err.message, - type: "error" - }); - } + await updateAppConnection.mutateAsync({ + connectionId: appConnection.id, + ...formData + }); + createNotification({ + text: `Successfully updated ${appName} Connection`, + type: "success" + }); + onComplete(); }; return ( diff --git a/frontend/src/pages/organization/AppConnections/OauthCallbackPage/OauthCallbackPage.tsx b/frontend/src/pages/organization/AppConnections/OauthCallbackPage/OauthCallbackPage.tsx index df3d1327a..96a474714 100644 --- a/frontend/src/pages/organization/AppConnections/OauthCallbackPage/OauthCallbackPage.tsx +++ b/frontend/src/pages/organization/AppConnections/OauthCallbackPage/OauthCallbackPage.tsx @@ -127,12 +127,7 @@ export const OAuthCallbackPage = () => { projectId, connection }; - } catch (err: any) { - createNotification({ - title: `Failed to ${connectionId ? "update" : "add"} GitLab Connection`, - text: err?.message, - type: "error" - }); + } catch { navigate({ to: returnUrl, params: { @@ -176,12 +171,7 @@ export const OAuthCallbackPage = () => { } }); } - } catch (err: any) { - createNotification({ - title: `Failed to ${connectionId ? "update" : "add"} Azure Key Vault Connection`, - text: err?.message, - type: "error" - }); + } catch { navigate({ to: returnUrl, params: { @@ -233,12 +223,7 @@ export const OAuthCallbackPage = () => { } }); } - } catch (err: any) { - createNotification({ - title: `Failed to ${connectionId ? "update" : "add"} Azure App Configuration Connection`, - text: err?.message, - type: "error" - }); + } catch { navigate({ to: returnUrl, params: { @@ -290,12 +275,7 @@ export const OAuthCallbackPage = () => { } }); } - } catch (err: any) { - createNotification({ - title: `Failed to ${connectionId ? "update" : "add"} Azure Client Secrets Connection`, - text: err?.message, - type: "error" - }); + } catch { navigate({ to: returnUrl, params: { @@ -353,12 +333,7 @@ export const OAuthCallbackPage = () => { } }); } - } catch (err: any) { - createNotification({ - title: `Failed to ${connectionId ? "update" : "add"} Azure DevOps Connection`, - text: err?.message, - type: "error" - }); + } catch { navigate({ to: returnUrl, params: { @@ -441,12 +416,7 @@ export const OAuthCallbackPage = () => { }) }); } - } catch (e: any) { - createNotification({ - title: `Failed to ${connectionId ? "update" : "add"} GitHub Connection`, - text: e.message, - type: "error" - }); + } catch { navigate({ to: returnUrl, params: { @@ -498,12 +468,7 @@ export const OAuthCallbackPage = () => { } }); } - } catch (e: any) { - createNotification({ - title: `Failed to ${connectionId ? "update" : "add"} GitHub Radar Connection`, - text: e.message, - type: "error" - }); + } catch { navigate({ to: returnUrl, params: { @@ -553,12 +518,7 @@ export const OAuthCallbackPage = () => { } }); } - } catch (e: any) { - createNotification({ - title: `Failed to ${connectionId ? "update" : "add"} Heroku Connection`, - text: e.message, - type: "error" - }); + } catch { navigate({ to: returnUrl, params: { diff --git a/frontend/src/pages/organization/BillingPage/components/BillingDetailsTab/CompanyNameSection.tsx b/frontend/src/pages/organization/BillingPage/components/BillingDetailsTab/CompanyNameSection.tsx index fce3978c7..f63b5d6d1 100644 --- a/frontend/src/pages/organization/BillingPage/components/BillingDetailsTab/CompanyNameSection.tsx +++ b/frontend/src/pages/organization/BillingPage/components/BillingDetailsTab/CompanyNameSection.tsx @@ -35,25 +35,17 @@ export const CompanyNameSection = () => { }, [data]); const onFormSubmit = async ({ name }: { name: string }) => { - try { - if (!currentOrg?.id) return; - if (name === "") return; - await mutateAsync({ - name, - organizationId: currentOrg.id - }); + if (!currentOrg?.id) return; + if (name === "") return; + await mutateAsync({ + name, + organizationId: currentOrg.id + }); - createNotification({ - text: "Successfully updated business name", - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to update business name", - type: "error" - }); - } + createNotification({ + text: "Successfully updated business name", + type: "success" + }); }; return ( diff --git a/frontend/src/pages/organization/BillingPage/components/BillingDetailsTab/InvoiceEmailSection.tsx b/frontend/src/pages/organization/BillingPage/components/BillingDetailsTab/InvoiceEmailSection.tsx index 8b471346f..dc05a7208 100644 --- a/frontend/src/pages/organization/BillingPage/components/BillingDetailsTab/InvoiceEmailSection.tsx +++ b/frontend/src/pages/organization/BillingPage/components/BillingDetailsTab/InvoiceEmailSection.tsx @@ -35,26 +35,18 @@ export const InvoiceEmailSection = () => { }, [data]); const onFormSubmit = async ({ email }: { email: string }) => { - try { - if (!currentOrg?.id) return; - if (email === "") return; + if (!currentOrg?.id) return; + if (email === "") return; - await mutateAsync({ - email, - organizationId: currentOrg.id - }); + await mutateAsync({ + email, + organizationId: currentOrg.id + }); - createNotification({ - text: "Successfully updated invoice email recipient", - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to update invoice email recipient", - type: "error" - }); - } + createNotification({ + text: "Successfully updated invoice email recipient", + type: "success" + }); }; return ( diff --git a/frontend/src/pages/organization/BillingPage/components/BillingDetailsTab/PmtMethodsTable.tsx b/frontend/src/pages/organization/BillingPage/components/BillingDetailsTab/PmtMethodsTable.tsx index bf0851e11..15a6bc8e9 100644 --- a/frontend/src/pages/organization/BillingPage/components/BillingDetailsTab/PmtMethodsTable.tsx +++ b/frontend/src/pages/organization/BillingPage/components/BillingDetailsTab/PmtMethodsTable.tsx @@ -39,22 +39,15 @@ export const PmtMethodsTable = () => { }); return; } - try { - await deleteOrgPmtMethod.mutateAsync({ - organizationId: currentOrg.id, - pmtMethodId: pmtMethodToRemove.id - }); - createNotification({ - type: "success", - text: "Successfully removed payment method" - }); - handlePopUpClose("removeCard"); - } catch (error: any) { - createNotification({ - type: "error", - text: error.message ?? "Error removing payment method" - }); - } + await deleteOrgPmtMethod.mutateAsync({ + organizationId: currentOrg.id, + pmtMethodId: pmtMethodToRemove.id + }); + createNotification({ + type: "success", + text: "Successfully removed payment method" + }); + handlePopUpClose("removeCard"); }; return ( diff --git a/frontend/src/pages/organization/BillingPage/components/BillingDetailsTab/TaxIDModal.tsx b/frontend/src/pages/organization/BillingPage/components/BillingDetailsTab/TaxIDModal.tsx index 01b11e81a..23542ac8d 100644 --- a/frontend/src/pages/organization/BillingPage/components/BillingDetailsTab/TaxIDModal.tsx +++ b/frontend/src/pages/organization/BillingPage/components/BillingDetailsTab/TaxIDModal.tsx @@ -98,26 +98,18 @@ export const TaxIDModal = ({ popUp, handlePopUpClose, handlePopUpToggle }: Props }); const onTaxIDModalSubmit = async ({ type, value }: AddTaxIDFormData) => { - try { - if (!currentOrg?.id) return; - await addOrgTaxId.mutateAsync({ - organizationId: currentOrg.id, - type, - value - }); + if (!currentOrg?.id) return; + await addOrgTaxId.mutateAsync({ + organizationId: currentOrg.id, + type, + value + }); - createNotification({ - text: "Successfully added Tax ID", - type: "success" - }); - handlePopUpClose("addTaxID"); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to add Tax ID", - type: "error" - }); - } + createNotification({ + text: "Successfully added Tax ID", + type: "success" + }); + handlePopUpClose("addTaxID"); }; return ( diff --git a/frontend/src/pages/organization/GroupDetailsByIDPage/GroupDetailsByIDPage.tsx b/frontend/src/pages/organization/GroupDetailsByIDPage/GroupDetailsByIDPage.tsx index b33ce0ef2..57c7b5a7d 100644 --- a/frontend/src/pages/organization/GroupDetailsByIDPage/GroupDetailsByIDPage.tsx +++ b/frontend/src/pages/organization/GroupDetailsByIDPage/GroupDetailsByIDPage.tsx @@ -56,27 +56,19 @@ const Page = () => { ] as const); const onDeleteGroupSubmit = async ({ name, id }: { name: string; id: string }) => { - try { - await deleteMutateAsync({ - id - }); - createNotification({ - text: `Successfully deleted the ${name} group`, - type: "success" - }); - navigate({ - to: "/organization/access-management" as const, - search: { - selectedTab: TabSections.Groups - } - }); - } catch (err) { - console.error(err); - createNotification({ - text: `Failed to delete the ${name} group`, - type: "error" - }); - } + await deleteMutateAsync({ + id + }); + createNotification({ + text: `Successfully deleted the ${name} group`, + type: "success" + }); + navigate({ + to: "/organization/access-management" as const, + search: { + selectedTab: TabSections.Groups + } + }); handlePopUpClose("deleteGroup"); }; diff --git a/frontend/src/pages/organization/GroupDetailsByIDPage/components/AddGroupMemberModal.tsx b/frontend/src/pages/organization/GroupDetailsByIDPage/components/AddGroupMemberModal.tsx index 0995830e5..b9d1b184c 100644 --- a/frontend/src/pages/organization/GroupDetailsByIDPage/components/AddGroupMemberModal.tsx +++ b/frontend/src/pages/organization/GroupDetailsByIDPage/components/AddGroupMemberModal.tsx @@ -63,31 +63,24 @@ export const AddGroupMembersModal = ({ popUp, handlePopUpToggle }: Props) => { const { mutateAsync: addUserToGroupMutateAsync } = useAddUserToGroup(); const handleAddMember = async (username: string) => { - try { - if (!popUpData?.slug) { - createNotification({ - text: "Some data is missing, please refresh the page and try again", - type: "error" - }); - return; - } - - await addUserToGroupMutateAsync({ - groupId: popUpData.groupId, - username, - slug: popUpData.slug - }); - + if (!popUpData?.slug) { createNotification({ - text: "Successfully assigned user to the group", - type: "success" - }); - } catch { - createNotification({ - text: "Failed to assign user to the group", + text: "Some data is missing, please refresh the page and try again", type: "error" }); + return; } + + await addUserToGroupMutateAsync({ + groupId: popUpData.groupId, + username, + slug: popUpData.slug + }); + + createNotification({ + text: "Successfully assigned user to the group", + type: "success" + }); }; return ( diff --git a/frontend/src/pages/organization/GroupDetailsByIDPage/components/GroupMembersSection/GroupMembersSection.tsx b/frontend/src/pages/organization/GroupDetailsByIDPage/components/GroupMembersSection/GroupMembersSection.tsx index 2ca6859b0..c78b5404e 100644 --- a/frontend/src/pages/organization/GroupDetailsByIDPage/components/GroupMembersSection/GroupMembersSection.tsx +++ b/frontend/src/pages/organization/GroupDetailsByIDPage/components/GroupMembersSection/GroupMembersSection.tsx @@ -29,25 +29,18 @@ export const GroupMembersSection = ({ groupId, groupSlug }: Props) => { const { mutateAsync: removeUserFromGroupMutateAsync } = useRemoveUserFromGroup(); const handleRemoveUserFromGroup = async (username: string) => { - try { - await removeUserFromGroupMutateAsync({ - groupId, - username, - slug: groupSlug - }); + await removeUserFromGroupMutateAsync({ + groupId, + username, + slug: groupSlug + }); - createNotification({ - text: `Successfully removed user ${username} from the group`, - type: "success" - }); + createNotification({ + text: `Successfully removed user ${username} from the group`, + type: "success" + }); - handlePopUpToggle("removeMemberFromGroup", false); - } catch { - createNotification({ - text: `Failed to remove user ${username} from the group`, - type: "error" - }); - } + handlePopUpToggle("removeMemberFromGroup", false); }; return ( diff --git a/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityProjectsSection/IdentityAddToProjectModal.tsx b/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityProjectsSection/IdentityAddToProjectModal.tsx index 2e5c7101c..2f407142a 100644 --- a/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityProjectsSection/IdentityAddToProjectModal.tsx +++ b/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityProjectsSection/IdentityAddToProjectModal.tsx @@ -75,30 +75,19 @@ const Content = ({ identityId, handlePopUpToggle }: Omit) => { }, [workspaces, projectMemberships]); const onFormSubmit = async ({ project: selectedProject, role }: FormData) => { - try { - await addIdentityToWorkspace({ - projectId: selectedProject.id, - identityId, - role: role.slug || undefined - }); + await addIdentityToWorkspace({ + projectId: selectedProject.id, + identityId, + role: role.slug || undefined + }); - createNotification({ - text: "Successfully added identity to project", - type: "success" - }); + createNotification({ + text: "Successfully added identity to project", + type: "success" + }); - reset(); - handlePopUpToggle("addIdentityToProject", false); - } catch (err) { - console.error(err); - const error = err as any; - const text = error?.response?.data?.message ?? "Failed to add identity to project"; - - createNotification({ - text, - type: "error" - }); - } + reset(); + handlePopUpToggle("addIdentityToProject", false); }; const isProjectSelected = Boolean(projectId); diff --git a/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityProjectsSection/IdentityProjectsSection.tsx b/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityProjectsSection/IdentityProjectsSection.tsx index 6530b9ae5..8d67ef6a4 100644 --- a/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityProjectsSection/IdentityProjectsSection.tsx +++ b/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityProjectsSection/IdentityProjectsSection.tsx @@ -22,28 +22,17 @@ export const IdentityProjectsSection = ({ identityId }: Props) => { ] as const); const onRemoveIdentitySubmit = async (id: string, projectId: string) => { - try { - await deleteMutateAsync({ - identityId: id, - projectId - }); + await deleteMutateAsync({ + identityId: id, + projectId + }); - createNotification({ - text: "Successfully removed identity from project", - type: "success" - }); + createNotification({ + text: "Successfully removed identity from project", + type: "success" + }); - handlePopUpClose("removeIdentityFromProject"); - } catch (err) { - console.error(err); - const error = err as any; - const text = error?.response?.data?.message ?? "Failed to remove identity from project"; - - createNotification({ - text, - type: "error" - }); - } + handlePopUpClose("removeIdentityFromProject"); }; return ( diff --git a/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityTokenModal.tsx b/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityTokenModal.tsx index d2b865a5a..d5c1aa2ac 100644 --- a/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityTokenModal.tsx +++ b/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityTokenModal.tsx @@ -72,46 +72,33 @@ export const IdentityTokenModal = ({ popUp, handlePopUpToggle }: Props) => { }, [popUp?.token?.data]); const onFormSubmit = async ({ name }: FormData) => { - try { - if (tokenData?.tokenId) { - // update + if (tokenData?.tokenId) { + // update - await updateToken({ - identityId: tokenData.identityId, - tokenId: tokenData.tokenId, - name - }); - - handlePopUpToggle("token", false); - } else { - // create - - const newTokenData = await createToken({ - identityId: tokenData.identityId, - name - }); - - setToken(newTokenData.accessToken); - } - - createNotification({ - text: `Successfully ${popUp?.token?.data ? "updated" : "created"} token`, - type: "success" + await updateToken({ + identityId: tokenData.identityId, + tokenId: tokenData.tokenId, + name }); - reset(); - } catch (err) { - console.error(err); - const error = err as any; - const text = - error?.response?.data?.message ?? - `Failed to ${popUp?.token?.data ? "update" : "create"} token`; + handlePopUpToggle("token", false); + } else { + // create - createNotification({ - text, - type: "error" + const newTokenData = await createToken({ + identityId: tokenData.identityId, + name }); + + setToken(newTokenData.accessToken); } + + createNotification({ + text: `Successfully ${popUp?.token?.data ? "updated" : "created"} token`, + type: "success" + }); + + reset(); }; return ( diff --git a/frontend/src/pages/organization/IdentityDetailsByIDPage/components/ViewIdentityAuthModal/IdentityAuthLockoutFields.tsx b/frontend/src/pages/organization/IdentityDetailsByIDPage/components/ViewIdentityAuthModal/IdentityAuthLockoutFields.tsx index b5cb2d901..4ec5871a2 100644 --- a/frontend/src/pages/organization/IdentityDetailsByIDPage/components/ViewIdentityAuthModal/IdentityAuthLockoutFields.tsx +++ b/frontend/src/pages/organization/IdentityDetailsByIDPage/components/ViewIdentityAuthModal/IdentityAuthLockoutFields.tsx @@ -31,23 +31,15 @@ export const LockoutFields = ({ const [lockedOutState, setLockedOutState] = useState(lockedOut); - async function clearLockouts() { - try { - const deleted = await mutateAsync({ identityId }); - createNotification({ - text: `Successfully cleared ${deleted} lockout${deleted === 1 ? "" : "s"}`, - type: "success" - }); - setLockedOutState(false); - onResetAllLockouts(); - } catch (error) { - console.error(error); - createNotification({ - text: "Failed to clear lockouts. Please try again.", - type: "error" - }); - } - } + const clearLockouts = async () => { + const deleted = await mutateAsync({ identityId }); + createNotification({ + text: `Successfully cleared ${deleted} lockout${deleted === 1 ? "" : "s"}`, + type: "success" + }); + setLockedOutState(false); + onResetAllLockouts(); + }; return ( <> diff --git a/frontend/src/pages/organization/IdentityDetailsByIDPage/components/ViewIdentityAuthModal/IdentityTokenAuthTokensTable.tsx b/frontend/src/pages/organization/IdentityDetailsByIDPage/components/ViewIdentityAuthModal/IdentityTokenAuthTokensTable.tsx index be9c166b3..cc11d9d10 100644 --- a/frontend/src/pages/organization/IdentityDetailsByIDPage/components/ViewIdentityAuthModal/IdentityTokenAuthTokensTable.tsx +++ b/frontend/src/pages/organization/IdentityDetailsByIDPage/components/ViewIdentityAuthModal/IdentityTokenAuthTokensTable.tsx @@ -51,28 +51,17 @@ export const IdentityTokenAuthTokensTable = ({ tokens, identityId }: Props) => { tokenId: string; name: string; }) => { - try { - await revokeToken({ - identityId: parentIdentityId, - tokenId - }); + await revokeToken({ + identityId: parentIdentityId, + tokenId + }); - handlePopUpClose("revokeToken"); + handlePopUpClose("revokeToken"); - createNotification({ - text: `Successfully revoked token ${name ?? ""}`, - type: "success" - }); - } catch (err) { - console.error(err); - const error = err as any; - const text = error?.response?.data?.message ?? "Failed to revoke token"; - - createNotification({ - text, - type: "error" - }); - } + createNotification({ + text: `Successfully revoked token ${name ?? ""}`, + type: "success" + }); }; return ( diff --git a/frontend/src/pages/organization/IdentityDetailsByIDPage/components/ViewIdentityAuthModal/IdentityUniversalAuthClientSecretsTable.tsx b/frontend/src/pages/organization/IdentityDetailsByIDPage/components/ViewIdentityAuthModal/IdentityUniversalAuthClientSecretsTable.tsx index b034b5367..017f30719 100644 --- a/frontend/src/pages/organization/IdentityDetailsByIDPage/components/ViewIdentityAuthModal/IdentityUniversalAuthClientSecretsTable.tsx +++ b/frontend/src/pages/organization/IdentityDetailsByIDPage/components/ViewIdentityAuthModal/IdentityUniversalAuthClientSecretsTable.tsx @@ -43,25 +43,17 @@ export const IdentityUniversalAuthClientSecretsTable = ({ clientSecrets, identit const { mutateAsync: revokeClientSecret } = useRevokeIdentityUniversalAuthClientSecret(); const onDeleteClientSecretSubmit = async (clientSecretId: string) => { - try { - await revokeClientSecret({ - identityId, - clientSecretId - }); + await revokeClientSecret({ + identityId, + clientSecretId + }); - handlePopUpToggle("revokeClientSecret", false); + handlePopUpToggle("revokeClientSecret", false); - createNotification({ - text: "Successfully deleted client secret", - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to delete client secret", - type: "error" - }); - } + createNotification({ + text: "Successfully deleted client secret", + type: "success" + }); }; return ( diff --git a/frontend/src/pages/organization/IdentityDetailsByIDPage/components/ViewIdentityAuthModal/ViewIdentityAuthModal.tsx b/frontend/src/pages/organization/IdentityDetailsByIDPage/components/ViewIdentityAuthModal/ViewIdentityAuthModal.tsx index f95a20789..09fc9f67e 100644 --- a/frontend/src/pages/organization/IdentityDetailsByIDPage/components/ViewIdentityAuthModal/ViewIdentityAuthModal.tsx +++ b/frontend/src/pages/organization/IdentityDetailsByIDPage/components/ViewIdentityAuthModal/ViewIdentityAuthModal.tsx @@ -140,25 +140,17 @@ export const Content = ({ } const handleDeleteAuthMethod = async () => { - try { - await revokeMethod({ - identityId, - organizationId: orgId - }); + await revokeMethod({ + identityId, + organizationId: orgId + }); - createNotification({ - text: "Successfully removed auth method", - type: "success" - }); - - handlePopUpToggle("revokeAuthMethod", false); - onDeleteAuthMethod(); - } catch { - createNotification({ - text: "Failed to remove auth method", - type: "error" - }); - } + createNotification({ + text: "Successfully removed auth method", + type: "success" + }); + handlePopUpToggle("revokeAuthMethod", false); + onDeleteAuthMethod(); }; return ( diff --git a/frontend/src/pages/organization/NetworkingPage/components/GatewayTab/components/GatewayCliDeploymentMethod.tsx b/frontend/src/pages/organization/NetworkingPage/components/GatewayTab/components/GatewayCliDeploymentMethod.tsx index 7537d95a3..8e69e7c0a 100644 --- a/frontend/src/pages/organization/NetworkingPage/components/GatewayTab/components/GatewayCliDeploymentMethod.tsx +++ b/frontend/src/pages/organization/NetworkingPage/components/GatewayTab/components/GatewayCliDeploymentMethod.tsx @@ -168,12 +168,7 @@ export const GatewayCliDeploymentMethod = () => { type: "info" }); setStep("command"); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to generate token for the selected identity", - type: "error" - }); + } catch { setIdentityToken(""); } } else { diff --git a/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayCliDeploymentMethod.tsx b/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayCliDeploymentMethod.tsx index 1d89e9877..f41f8204b 100644 --- a/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayCliDeploymentMethod.tsx +++ b/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayCliDeploymentMethod.tsx @@ -141,12 +141,7 @@ export const RelayCliDeploymentMethod = () => { type: "info" }); setStep("command"); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to generate token for the selected identity", - type: "error" - }); + } catch { setIdentityToken(""); } } else { diff --git a/frontend/src/pages/organization/ProjectsPage/components/AllProjectView.tsx b/frontend/src/pages/organization/ProjectsPage/components/AllProjectView.tsx index cf60ffa59..a1bd8c9e4 100644 --- a/frontend/src/pages/organization/ProjectsPage/components/AllProjectView.tsx +++ b/frontend/src/pages/organization/ProjectsPage/components/AllProjectView.tsx @@ -13,7 +13,6 @@ import { useNavigate } from "@tanstack/react-router"; import { CheckIcon } from "lucide-react"; import { twMerge } from "tailwind-merge"; -import { createNotification } from "@app/components/notifications"; import { OrgPermissionCan } from "@app/components/permissions"; import { RequestProjectAccessModal } from "@app/components/projects/RequestProjectAccessModal"; import { @@ -103,22 +102,15 @@ export const AllProjectView = ({ projectId: string, environments: ProjectEnv[] ) => { - try { - await orgAdminAccessProject.mutateAsync({ + await orgAdminAccessProject.mutateAsync({ + projectId + }); + await navigate({ + to: getProjectHomePage(type, environments), + params: { projectId - }); - await navigate({ - to: getProjectHomePage(type, environments), - params: { - projectId - } - }); - } catch { - createNotification({ - text: "Failed to access project", - type: "error" - }); - } + } + }); }; useResetPageHelper({ diff --git a/frontend/src/pages/organization/ProjectsPage/components/MyProjectView.tsx b/frontend/src/pages/organization/ProjectsPage/components/MyProjectView.tsx index a86023b6c..32301923b 100644 --- a/frontend/src/pages/organization/ProjectsPage/components/MyProjectView.tsx +++ b/frontend/src/pages/organization/ProjectsPage/components/MyProjectView.tsx @@ -15,7 +15,6 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useNavigate } from "@tanstack/react-router"; import { twMerge } from "tailwind-merge"; -import { createNotification } from "@app/components/notifications"; import { OrgPermissionCan } from "@app/components/permissions"; import { Button, @@ -158,32 +157,18 @@ export const MyProjectView = ({ }; const addProjectToFavorites = async (projectId: string) => { - try { - if (currentOrg?.id) { - await updateUserProjectFavorites({ - orgId: currentOrg?.id, - projectFavorites: [...(projectFavorites || []), projectId] - }); - } - } catch { - createNotification({ - text: "Failed to add project to favorites.", - type: "error" + if (currentOrg?.id) { + await updateUserProjectFavorites({ + orgId: currentOrg?.id, + projectFavorites: [...(projectFavorites || []), projectId] }); } }; const removeProjectFromFavorites = async (projectId: string) => { - try { - if (currentOrg?.id) { - await updateUserProjectFavorites({ - orgId: currentOrg?.id, - projectFavorites: [...(projectFavorites || []).filter((entry) => entry !== projectId)] - }); - } - } catch { - createNotification({ - text: "Failed to remove project from favorites.", - type: "error" + if (currentOrg?.id) { + await updateUserProjectFavorites({ + orgId: currentOrg?.id, + projectFavorites: [...(projectFavorites || []).filter((entry) => entry !== projectId)] }); } }; diff --git a/frontend/src/pages/organization/RoleByIDPage/RoleByIDPage.tsx b/frontend/src/pages/organization/RoleByIDPage/RoleByIDPage.tsx index 0d30dd2f8..78c5393a7 100644 --- a/frontend/src/pages/organization/RoleByIDPage/RoleByIDPage.tsx +++ b/frontend/src/pages/organization/RoleByIDPage/RoleByIDPage.tsx @@ -42,36 +42,25 @@ export const Page = () => { ] as const); const onDeleteOrgRoleSubmit = async () => { - try { - if (!orgId || !roleId) return; + if (!orgId || !roleId) return; - await deleteOrgRole({ - orgId, - id: roleId - }); + await deleteOrgRole({ + orgId, + id: roleId + }); - createNotification({ - text: "Successfully deleted organization role", - type: "success" - }); + createNotification({ + text: "Successfully deleted organization role", + type: "success" + }); - handlePopUpClose("deleteOrgRole"); - navigate({ - to: "/organization/access-management" as const, - search: { - selectedTab: OrgAccessControlTabSections.Roles - } - }); - } catch (err) { - console.error(err); - const error = err as any; - const text = error?.response?.data?.message ?? "Failed to delete organization role"; - - createNotification({ - text, - type: "error" - }); - } + handlePopUpClose("deleteOrgRole"); + navigate({ + to: "/organization/access-management" as const, + search: { + selectedTab: OrgAccessControlTabSections.Roles + } + }); }; const isCustomRole = !["admin", "member", "no-access"].includes(data?.slug ?? ""); diff --git a/frontend/src/pages/organization/RoleByIDPage/components/RoleModal.tsx b/frontend/src/pages/organization/RoleByIDPage/components/RoleModal.tsx index 88f568c4a..73da4f161 100644 --- a/frontend/src/pages/organization/RoleByIDPage/components/RoleModal.tsx +++ b/frontend/src/pages/organization/RoleByIDPage/components/RoleModal.tsx @@ -70,55 +70,46 @@ export const RoleModal = ({ popUp, handlePopUpToggle }: Props) => { }, [role]); const onFormSubmit = async ({ name, description, slug }: FormData) => { - try { - if (!orgId) return; + if (!orgId) return; - if (role) { - // update + if (role) { + // update - await updateOrgRole({ - orgId, - id: role.id, - name, - description, - slug - }); - - handlePopUpToggle("role", false); - } else { - // create - - const newRole = await createOrgRole({ - orgId, - name, - description, - slug, - permissions: [] - }); - - handlePopUpToggle("role", false); - navigate({ - to: "/organization/roles/$roleId", - params: { - roleId: newRole.id - } - }); - } - - createNotification({ - text: `Successfully ${popUp?.role?.data ? "updated" : "created"} role`, - type: "success" + await updateOrgRole({ + orgId, + id: role.id, + name, + description, + slug }); - reset(); - } catch { - const text = `Failed to ${popUp?.role?.data ? "update" : "create"} role`; + handlePopUpToggle("role", false); + } else { + // create - createNotification({ - text, - type: "error" + const newRole = await createOrgRole({ + orgId, + name, + description, + slug, + permissions: [] + }); + + handlePopUpToggle("role", false); + navigate({ + to: "/organization/roles/$roleId", + params: { + roleId: newRole.id + } }); } + + createNotification({ + text: `Successfully ${popUp?.role?.data ? "updated" : "created"} role`, + type: "success" + }); + + reset(); }; return ( diff --git a/frontend/src/pages/organization/SecretSharingPage/components/RequestSecret/RequestSecretForm.tsx b/frontend/src/pages/organization/SecretSharingPage/components/RequestSecret/RequestSecretForm.tsx index 50a9e0f58..d50873339 100644 --- a/frontend/src/pages/organization/SecretSharingPage/components/RequestSecret/RequestSecretForm.tsx +++ b/frontend/src/pages/organization/SecretSharingPage/components/RequestSecret/RequestSecretForm.tsx @@ -56,35 +56,27 @@ export const RequestSecretForm = () => { const onFormSubmit = async ({ name, accessType, expiresIn }: FormData) => { const expiresAt = new Date(new Date().getTime() + Number(expiresIn)); - try { - const { id } = await createSecretRequest({ - name, - accessType, - expiresAt - }); + const { id } = await createSecretRequest({ + name, + accessType, + expiresAt + }); - const link = new URL(`${window.location.origin}/secret-request/secret/${id}`); - if (subOrganization) { - link.searchParams.set("subOrganization", subOrganization); - } - - setSecretLink(link.toString()); - reset(); - - navigator.clipboard.writeText(link.toString()); - setCopyTextSecret("secret"); - - createNotification({ - text: "Shared secret link copied to clipboard.", - type: "success" - }); - } catch (error) { - console.error(error); - createNotification({ - text: "Failed to create a shared secret.", - type: "error" - }); + const link = new URL(`${window.location.origin}/secret-request/secret/${id}`); + if (subOrganization) { + link.searchParams.set("subOrganization", subOrganization); } + + setSecretLink(link.toString()); + reset(); + + navigator.clipboard.writeText(link.toString()); + setCopyTextSecret("secret"); + + createNotification({ + text: "Shared secret link copied to clipboard.", + type: "success" + }); }; const hasSecretLink = Boolean(secretLink); diff --git a/frontend/src/pages/organization/SecretSharingPage/components/RequestSecret/RequestSecretTab.tsx b/frontend/src/pages/organization/SecretSharingPage/components/RequestSecret/RequestSecretTab.tsx index fd3b1d5b5..1253cdbc0 100644 --- a/frontend/src/pages/organization/SecretSharingPage/components/RequestSecret/RequestSecretTab.tsx +++ b/frontend/src/pages/organization/SecretSharingPage/components/RequestSecret/RequestSecretTab.tsx @@ -22,23 +22,15 @@ export const RequestSecretTab = () => { const { mutateAsync: deleteSecretRequest } = useDeleteSecretRequest(); const onDeleteApproved = async () => { - try { - await deleteSecretRequest({ - secretRequestId: popUp.deleteSecretRequestConfirmation.data?.id - }); - createNotification({ - text: "Successfully deleted secret request", - type: "success" - }); + await deleteSecretRequest({ + secretRequestId: popUp.deleteSecretRequestConfirmation.data?.id + }); + createNotification({ + text: "Successfully deleted secret request", + type: "success" + }); - handlePopUpClose("deleteSecretRequestConfirmation"); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to delete shared secret", - type: "error" - }); - } + handlePopUpClose("deleteSecretRequestConfirmation"); }; return ( diff --git a/frontend/src/pages/organization/SecretSharingPage/components/SecretSharingSettings/OrgSecretShareLimitSection.tsx b/frontend/src/pages/organization/SecretSharingPage/components/SecretSharingSettings/OrgSecretShareLimitSection.tsx index 034c7d8fe..d7c337332 100644 --- a/frontend/src/pages/organization/SecretSharingPage/components/SecretSharingSettings/OrgSecretShareLimitSection.tsx +++ b/frontend/src/pages/organization/SecretSharingPage/components/SecretSharingSettings/OrgSecretShareLimitSection.tsx @@ -90,28 +90,21 @@ export const OrgSecretShareLimitSection = () => { }, [currentOrg, reset]); const handleFormSubmit = async (formData: TForm) => { - try { - const maxSharedSecretLifetimeSeconds = - ms(`${formData.maxLifetimeValue}${formData.maxLifetimeUnit}`) / 1000; + const maxSharedSecretLifetimeSeconds = + ms(`${formData.maxLifetimeValue}${formData.maxLifetimeUnit}`) / 1000; - await mutateAsync({ - orgId: currentOrg.id, - maxSharedSecretViewLimit: formData.shouldLimitView ? Number(formData.maxViewLimit) : null, - maxSharedSecretLifetime: maxSharedSecretLifetimeSeconds - }); + await mutateAsync({ + orgId: currentOrg.id, + maxSharedSecretViewLimit: formData.shouldLimitView ? Number(formData.maxViewLimit) : null, + maxSharedSecretLifetime: maxSharedSecretLifetimeSeconds + }); - createNotification({ - text: "Successfully updated secret share limits", - type: "success" - }); + createNotification({ + text: "Successfully updated secret share limits", + type: "success" + }); - reset(formData); - } catch { - createNotification({ - text: "Failed to update secret share limits", - type: "error" - }); - } + reset(formData); }; // Units for the dropdown with readable labels diff --git a/frontend/src/pages/organization/SecretSharingPage/components/SecretSharingSettings/SecretSharingAllowShareToAnyone.tsx b/frontend/src/pages/organization/SecretSharingPage/components/SecretSharingSettings/SecretSharingAllowShareToAnyone.tsx index 1ea62c187..31b2221ce 100644 --- a/frontend/src/pages/organization/SecretSharingPage/components/SecretSharingSettings/SecretSharingAllowShareToAnyone.tsx +++ b/frontend/src/pages/organization/SecretSharingPage/components/SecretSharingSettings/SecretSharingAllowShareToAnyone.tsx @@ -9,25 +9,17 @@ export const SecretSharingAllowShareToAnyone = () => { const { mutateAsync } = useUpdateOrg(); const handleSecretSharingToggle = async (value: boolean) => { - try { - if (!currentOrg?.id) return; + if (!currentOrg?.id) return; - await mutateAsync({ - orgId: currentOrg.id, - allowSecretSharingOutsideOrganization: value - }); + await mutateAsync({ + orgId: currentOrg.id, + allowSecretSharingOutsideOrganization: value + }); - createNotification({ - text: `Successfully ${value ? "enabled" : "disabled"} secret sharing to members outside of this organization`, - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: (err as { response: { data: { message: string } } }).response.data.message, - type: "error" - }); - } + createNotification({ + text: `Successfully ${value ? "enabled" : "disabled"} secret sharing to members outside of this organization`, + type: "success" + }); }; return ( diff --git a/frontend/src/pages/organization/SecretSharingPage/components/ShareSecret/ShareSecretTab.tsx b/frontend/src/pages/organization/SecretSharingPage/components/ShareSecret/ShareSecretTab.tsx index d4f2f0a1f..2ea61ca98 100644 --- a/frontend/src/pages/organization/SecretSharingPage/components/ShareSecret/ShareSecretTab.tsx +++ b/frontend/src/pages/organization/SecretSharingPage/components/ShareSecret/ShareSecretTab.tsx @@ -20,23 +20,15 @@ export const ShareSecretTab = () => { const deleteSecretShare = useDeleteSharedSecret(); const onDeleteApproved = async () => { - try { - deleteSecretShare.mutateAsync({ - sharedSecretId: (popUp?.deleteSharedSecretConfirmation?.data as DeleteModalData)?.id - }); - createNotification({ - text: "Successfully deleted shared secret", - type: "success" - }); + deleteSecretShare.mutateAsync({ + sharedSecretId: (popUp?.deleteSharedSecretConfirmation?.data as DeleteModalData)?.id + }); + createNotification({ + text: "Successfully deleted shared secret", + type: "success" + }); - handlePopUpClose("deleteSharedSecretConfirmation"); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to delete shared secret", - type: "error" - }); - } + handlePopUpClose("deleteSharedSecretConfirmation"); }; return ( diff --git a/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/AuditLogStreamForm/AuditLogStreamForm.tsx b/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/AuditLogStreamForm/AuditLogStreamForm.tsx index f59ae23aa..5ea16050a 100644 --- a/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/AuditLogStreamForm/AuditLogStreamForm.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/AuditLogStreamForm/AuditLogStreamForm.tsx @@ -28,21 +28,12 @@ const CreateForm = ({ provider, onComplete }: CreateFormProps) => { const onSubmit = async ( formData: DiscriminativePick ) => { - try { - const logStream = await createAuditLogStream.mutateAsync(formData); - createNotification({ - text: `Successfully created ${providerName} Log Stream`, - type: "success" - }); - onComplete(logStream); - } catch (err: any) { - console.error(err); - createNotification({ - title: `Failed to create ${providerName} Log Stream`, - text: err.message, - type: "error" - }); - } + const logStream = await createAuditLogStream.mutateAsync(formData); + createNotification({ + text: `Successfully created ${providerName} Log Stream`, + type: "success" + }); + onComplete(logStream); }; switch (provider) { @@ -68,24 +59,15 @@ const UpdateForm = ({ auditLogStream, onComplete }: UpdateFormProps) => { const onSubmit = async ( formData: DiscriminativePick ) => { - try { - const connection = await updateAuditLogStream.mutateAsync({ - auditLogStreamId: auditLogStream.id, - ...formData - }); - createNotification({ - text: `Successfully updated ${providerName} Log Stream`, - type: "success" - }); - onComplete(connection); - } catch (err: any) { - console.error(err); - createNotification({ - title: `Failed to update ${providerName} Log Stream`, - text: err.message, - type: "error" - }); - } + const connection = await updateAuditLogStream.mutateAsync({ + auditLogStreamId: auditLogStream.id, + ...formData + }); + createNotification({ + text: `Successfully updated ${providerName} Log Stream`, + type: "success" + }); + onComplete(connection); }; switch (auditLogStream.provider) { diff --git a/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/components/DeleteAuditLogStreamModal.tsx b/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/components/DeleteAuditLogStreamModal.tsx index 1a65e6c67..74eb19af3 100644 --- a/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/components/DeleteAuditLogStreamModal.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/AuditLogStreamTab/components/DeleteAuditLogStreamModal.tsx @@ -20,26 +20,17 @@ export const DeleteAuditLogStreamModal = ({ isOpen, onOpenChange, auditLogStream const providerDetails = AUDIT_LOG_STREAM_PROVIDER_MAP[provider]; const handleDelete = async () => { - try { - await deleteAuditLogStream.mutateAsync({ - auditLogStreamId, - provider - }); + await deleteAuditLogStream.mutateAsync({ + auditLogStreamId, + provider + }); - createNotification({ - text: `Successfully deleted ${providerDetails.name} stream`, - type: "success" - }); + createNotification({ + text: `Successfully deleted ${providerDetails.name} stream`, + type: "success" + }); - onOpenChange(false); - } catch (err) { - console.error(err); - - createNotification({ - text: `Failed to delete ${providerDetails.name} stream`, - type: "error" - }); - } + onOpenChange(false); }; return ( diff --git a/frontend/src/pages/organization/SettingsPage/components/ExternalMigrationsTab/components/VaultConnectionSection.tsx b/frontend/src/pages/organization/SettingsPage/components/ExternalMigrationsTab/components/VaultConnectionSection.tsx index c91e9c24c..e802e250b 100644 --- a/frontend/src/pages/organization/SettingsPage/components/ExternalMigrationsTab/components/VaultConnectionSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/ExternalMigrationsTab/components/VaultConnectionSection.tsx @@ -54,21 +54,13 @@ export const VaultConnectionSection = () => { const handleDeleteConfirm = async () => { if (!configToDelete) return; - try { - await deleteConfig({ id: configToDelete.id }); - createNotification({ - type: "success", - text: "Namespace configuration deleted successfully" - }); - setIsDeleteModalOpen(false); - setConfigToDelete(null); - } catch (error) { - console.error("Failed to delete namespace config:", error); - createNotification({ - type: "error", - text: "Failed to delete namespace configuration" - }); - } + await deleteConfig({ id: configToDelete.id }); + createNotification({ + type: "success", + text: "Namespace configuration deleted successfully" + }); + setIsDeleteModalOpen(false); + setConfigToDelete(null); }; const getConnectionName = (connectionId: string | null) => { diff --git a/frontend/src/pages/organization/SettingsPage/components/ExternalMigrationsTab/components/VaultNamespaceConfigModal.tsx b/frontend/src/pages/organization/SettingsPage/components/ExternalMigrationsTab/components/VaultNamespaceConfigModal.tsx index 62fb78b48..f08aae204 100644 --- a/frontend/src/pages/organization/SettingsPage/components/ExternalMigrationsTab/components/VaultNamespaceConfigModal.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/ExternalMigrationsTab/components/VaultNamespaceConfigModal.tsx @@ -74,36 +74,28 @@ export const VaultNamespaceConfigModal = ({ isOpen, onOpenChange, editConfig }: }, [isOpen, editConfig, reset]); const onFormSubmit = async (data: FormData) => { - try { - if (isEdit && editConfig) { - await updateConfig({ - id: editConfig.id, - namespace: data.namespace, - connectionId: data.connectionId - }); - createNotification({ - type: "success", - text: "Namespace configuration updated successfully" - }); - } else { - await createConfig({ - namespace: data.namespace, - connectionId: data.connectionId - }); - createNotification({ - type: "success", - text: "Namespace configuration created successfully" - }); - } - reset(); - onOpenChange(false); - } catch (error) { - console.error("Failed to save namespace config:", error); + if (isEdit && editConfig) { + await updateConfig({ + id: editConfig.id, + namespace: data.namespace, + connectionId: data.connectionId + }); createNotification({ - type: "error", - text: `Failed to ${isEdit ? "update" : "create"} namespace configuration` + type: "success", + text: "Namespace configuration updated successfully" + }); + } else { + await createConfig({ + namespace: data.namespace, + connectionId: data.connectionId + }); + createNotification({ + type: "success", + text: "Namespace configuration created successfully" }); } + reset(); + onOpenChange(false); }; const handleClose = () => { diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgDeleteSection/OrgDeleteSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgDeleteSection/OrgDeleteSection.tsx index 4dfe89f71..6e5c0e1cb 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgDeleteSection/OrgDeleteSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgDeleteSection/OrgDeleteSection.tsx @@ -19,27 +19,19 @@ export const OrgDeleteSection = () => { const { mutateAsync, isPending } = useDeleteOrgById(); const handleDeleteOrgSubmit = async () => { - try { - if (!currentOrg?.id) return; + if (!currentOrg?.id) return; - await mutateAsync({ - organizationId: currentOrg?.id - }); + await mutateAsync({ + organizationId: currentOrg?.id + }); - createNotification({ - text: "Successfully deleted organization", - type: "success" - }); + createNotification({ + text: "Successfully deleted organization", + type: "success" + }); - clearSession(); - navigate({ to: "/login" }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to delete organization", - type: "error" - }); - } + clearSession(); + navigate({ to: "/login" }); }; return ( diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgEncryptionTab/OrgEncryptionTab.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgEncryptionTab/OrgEncryptionTab.tsx index a0b09b573..3fcf71e62 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgEncryptionTab/OrgEncryptionTab.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgEncryptionTab/OrgEncryptionTab.tsx @@ -51,18 +51,14 @@ export const OrgEncryptionTab = withPermission( kmsId: string; }; - try { - await removeExternalKms(kmsId); + await removeExternalKms(kmsId); - createNotification({ - text: "Successfully deleted external KMS", - type: "success" - }); + createNotification({ + text: "Successfully deleted external KMS", + type: "success" + }); - handlePopUpToggle("removeExternalKms", false); - } catch (err) { - console.error(err); - } + handlePopUpToggle("removeExternalKms", false); }; return ( diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgIncidentContactsSection/AddOrgIncidentContactModal.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgIncidentContactsSection/AddOrgIncidentContactModal.tsx index 84bb083ec..125a3f310 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgIncidentContactsSection/AddOrgIncidentContactModal.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgIncidentContactsSection/AddOrgIncidentContactModal.tsx @@ -35,31 +35,23 @@ export const AddOrgIncidentContactModal = ({ const { mutateAsync, isPending } = useAddIncidentContact(); const onFormSubmit = async ({ email }: TAddContactForm) => { - try { - if (!currentOrg?.id) return; + if (!currentOrg?.id) return; - await mutateAsync({ - orgId: currentOrg.id, - email - }); + await mutateAsync({ + orgId: currentOrg.id, + email + }); - createNotification({ - text: "Successfully added incident contact", - type: "success" - }); + createNotification({ + text: "Successfully added incident contact", + type: "success" + }); - if (serverDetails?.emailConfigured) { - handlePopUpClose("addContact"); - } - - reset(); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to add incident contact", - type: "error" - }); + if (serverDetails?.emailConfigured) { + handlePopUpClose("addContact"); } + + reset(); }; return ( diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgIncidentContactsSection/OrgIncidentContactsTable.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgIncidentContactsSection/OrgIncidentContactsTable.tsx index d0723fdaf..c16431b9c 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgIncidentContactsSection/OrgIncidentContactsTable.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgIncidentContactsSection/OrgIncidentContactsTable.tsx @@ -33,28 +33,20 @@ export const OrgIncidentContactsTable = () => { const { mutateAsync } = useDeleteIncidentContact(); const onRemoveIncidentContact = async () => { - try { - const incidentContactId = (popUp?.removeContact?.data as { id: string })?.id; + const incidentContactId = (popUp?.removeContact?.data as { id: string })?.id; - if (!currentOrg?.id) return; - await mutateAsync({ - orgId: currentOrg.id, - incidentContactId - }); + if (!currentOrg?.id) return; + await mutateAsync({ + orgId: currentOrg.id, + incidentContactId + }); - createNotification({ - text: "Successfully removed incident contact", - type: "success" - }); + createNotification({ + text: "Successfully removed incident contact", + type: "success" + }); - handlePopUpClose("removeContact"); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to remove incident contact", - type: "error" - }); - } + handlePopUpClose("removeContact"); }; const filteredContacts = contacts diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgNameChangeSection/OrgNameChangeSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgNameChangeSection/OrgNameChangeSection.tsx index 766a22158..03fb14dc7 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgNameChangeSection/OrgNameChangeSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgNameChangeSection/OrgNameChangeSection.tsx @@ -56,27 +56,19 @@ export const OrgNameChangeSection = (): JSX.Element => { }, [roles]); const onFormSubmit = async ({ name, slug, defaultMembershipRole }: FormData) => { - try { - if (!currentOrg?.id || !roles?.length) return; + if (!currentOrg?.id || !roles?.length) return; - await mutateAsync({ - orgId: currentOrg?.id, - name, - slug, - defaultMembershipRoleSlug: defaultMembershipRole - }); + await mutateAsync({ + orgId: currentOrg?.id, + name, + slug, + defaultMembershipRoleSlug: defaultMembershipRole + }); - createNotification({ - text: "Successfully updated organization details", - type: "success" - }); - } catch (error) { - console.error(error); - createNotification({ - text: "Failed to update organization details", - type: "error" - }); - } + createNotification({ + text: "Successfully updated organization details", + type: "success" + }); }; if (!isFormInitialized) { diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgNameChangeSection/SubOrgNameChangeSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgNameChangeSection/SubOrgNameChangeSection.tsx index ca625be6c..e08d4d1b5 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgNameChangeSection/SubOrgNameChangeSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgNameChangeSection/SubOrgNameChangeSection.tsx @@ -39,26 +39,18 @@ export const SubOrgNameChangeSection = (): JSX.Element => { const { mutateAsync, isPending } = useUpdateSubOrganization(); const onFormSubmit = async ({ name }: FormData) => { - try { - await mutateAsync({ - name, - subOrgId: currentOrg.id - }); + await mutateAsync({ + name, + subOrgId: currentOrg.id + }); - navigate({ to: "/organization/settings", search: { subOrganization: name } }); - queryClient.invalidateQueries(); - await router.invalidate({ sync: true }); - createNotification({ - text: "Successfully updated sub-organization details", - type: "success" - }); - } catch (error) { - console.error(error); - createNotification({ - text: "Failed to update sub-organization details", - type: "error" - }); - } + navigate({ to: "/organization/settings", search: { subOrganization: name } }); + queryClient.invalidateQueries(); + await router.invalidate({ sync: true }); + createNotification({ + text: "Successfully updated sub-organization details", + type: "success" + }); }; return ( diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgProductSelectSection/OrgProductSelectSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgProductSelectSection/OrgProductSelectSection.tsx index 5be15edad..e1fc2712d 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgProductSelectSection/OrgProductSelectSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgProductSelectSection/OrgProductSelectSection.tsx @@ -1,7 +1,5 @@ import { useEffect, useState } from "react"; -import axios from "axios"; -import { createNotification } from "@app/components/notifications"; import { Switch } from "@app/components/v2"; import { useOrganization } from "@app/context"; import { useUpdateOrg } from "@app/hooks/api"; @@ -60,20 +58,10 @@ export const OrgProductSelectSection = () => { [key]: { ...products[key], enabled: value } })); - try { - await mutateAsync({ - orgId: currentOrg.id, - [key]: value - }); - } catch (e) { - if (axios.isAxiosError(e)) { - const { message = "Something went wrong" } = e.response?.data as { message: string }; - createNotification({ - type: "error", - text: message - }); - } - } + await mutateAsync({ + orgId: currentOrg.id, + [key]: value + }); setIsLoading(false); }; diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgProductSettingsTab/OrgProductSettingsTab.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgProductSettingsTab/OrgProductSettingsTab.tsx index e4d935996..95cc7b870 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgProductSettingsTab/OrgProductSettingsTab.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgProductSettingsTab/OrgProductSettingsTab.tsx @@ -30,12 +30,6 @@ export const OrgProductSettingsTab = () => { text: `Successfully ${state ? "enabled" : "disabled"} blocking duplicate secret sync destinations for this organization`, type: "success" }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to update blocking duplicate secret sync destinations setting for this organization", - type: "error" - }); } finally { setIsLoading(false); } diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/ExternalGroupOrgRoleMappings.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/ExternalGroupOrgRoleMappings.tsx index 8e181e8c4..bc9a02921 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/ExternalGroupOrgRoleMappings.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/ExternalGroupOrgRoleMappings.tsx @@ -75,19 +75,11 @@ export const ExternalGroupOrgRoleMappings = () => { const mappingField = useFieldArray({ control, name: "mappings" }); const handleUpdateMappings = async (form: TForm) => { - try { - await updateMappings.mutateAsync(form); - createNotification({ - text: "Group organization role mappings updated.", - type: "success" - }); - } catch (e) { - console.error(e); - createNotification({ - text: "Failed to update group organization role mappings.", - type: "error" - }); - } + await updateMappings.mutateAsync(form); + createNotification({ + text: "Group organization role mappings updated.", + type: "success" + }); }; const disableScimEdit = permission.cannot(OrgPermissionActions.Edit, OrgPermissionSubjects.Scim); diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/LDAPModal.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/LDAPModal.tsx index 580ecdeb1..b9ba7a2b6 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/LDAPModal.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/LDAPModal.tsx @@ -122,53 +122,45 @@ export const LDAPModal = ({ popUp, handlePopUpClose, handlePopUpToggle, hideDele caCert, shouldCloseModal = true }: TLDAPFormData & { shouldCloseModal?: boolean }) => { - try { - if (!currentOrg) return; + if (!currentOrg) return; - if (!data) { - await createMutateAsync({ - organizationId: currentOrg.id, - isActive: false, - url, - bindDN, - bindPass, - searchBase, - searchFilter, - uniqueUserAttribute, - groupSearchBase, - groupSearchFilter, - caCert - }); - } else { - await updateMutateAsync({ - organizationId: currentOrg.id, - url, - bindDN, - bindPass, - searchBase, - searchFilter, - uniqueUserAttribute, - groupSearchBase, - groupSearchFilter, - caCert - }); - } - - if (shouldCloseModal) { - handlePopUpClose("addLDAP"); - } - - createNotification({ - text: `Successfully ${!data ? "added" : "updated"} LDAP configuration`, - type: "success" + if (!data) { + await createMutateAsync({ + organizationId: currentOrg.id, + isActive: false, + url, + bindDN, + bindPass, + searchBase, + searchFilter, + uniqueUserAttribute, + groupSearchBase, + groupSearchFilter, + caCert }); - } catch (err) { - console.error(err); - createNotification({ - text: `Failed to ${!data ? "add" : "update"} LDAP configuration`, - type: "error" + } else { + await updateMutateAsync({ + organizationId: currentOrg.id, + url, + bindDN, + bindPass, + searchBase, + searchFilter, + uniqueUserAttribute, + groupSearchBase, + groupSearchFilter, + caCert }); } + + if (shouldCloseModal) { + handlePopUpClose("addLDAP"); + } + + createNotification({ + text: `Successfully ${!data ? "added" : "updated"} LDAP configuration`, + type: "success" + }); }; const handleTestLDAPConnection = async () => { diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OIDCModal.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OIDCModal.tsx index 03f946ace..f980b2e4f 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OIDCModal.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OIDCModal.tsx @@ -122,31 +122,24 @@ export const OIDCModal = ({ popUp, handlePopUpClose, handlePopUpToggle, hideDele if (!currentOrg) { return; } - try { - await updateMutateAsync({ - issuer: "", - discoveryURL: "", - authorizationEndpoint: "", - allowedEmailDomains: "", - jwksUri: "", - tokenEndpoint: "", - userinfoEndpoint: "", - clientId: "", - clientSecret: "", - isActive: false, - organizationId: currentOrg.id - }); + await updateMutateAsync({ + issuer: "", + discoveryURL: "", + authorizationEndpoint: "", + allowedEmailDomains: "", + jwksUri: "", + tokenEndpoint: "", + userinfoEndpoint: "", + clientId: "", + clientSecret: "", + isActive: false, + organizationId: currentOrg.id + }); - createNotification({ - text: "Successfully deleted OIDC configuration.", - type: "success" - }); - } catch { - createNotification({ - text: "Failed deleting OIDC configuration.", - type: "error" - }); - } + createNotification({ + text: "Successfully deleted OIDC configuration.", + type: "success" + }); }; useEffect(() => { @@ -178,58 +171,50 @@ export const OIDCModal = ({ popUp, handlePopUpClose, handlePopUpToggle, hideDele clientSecret, jwtSignatureAlgorithm }: OIDCFormData) => { - try { - if (!currentOrg) { - return; - } + if (!currentOrg) { + return; + } - if (!data) { - await createMutateAsync({ - issuer, - configurationType, - discoveryURL, - authorizationEndpoint, - allowedEmailDomains, - jwksUri, - tokenEndpoint, - userinfoEndpoint, - clientId, - clientSecret, - isActive: true, - organizationId: currentOrg.id, - jwtSignatureAlgorithm - }); - } else { - await updateMutateAsync({ - issuer, - configurationType, - discoveryURL, - authorizationEndpoint, - allowedEmailDomains, - jwksUri, - tokenEndpoint, - userinfoEndpoint, - clientId, - clientSecret, - isActive: true, - organizationId: currentOrg.id, - jwtSignatureAlgorithm - }); - } - - handlePopUpClose("addOIDC"); - - createNotification({ - text: `Successfully ${!data ? "added" : "updated"} OIDC SSO configuration`, - type: "success" + if (!data) { + await createMutateAsync({ + issuer, + configurationType, + discoveryURL, + authorizationEndpoint, + allowedEmailDomains, + jwksUri, + tokenEndpoint, + userinfoEndpoint, + clientId, + clientSecret, + isActive: true, + organizationId: currentOrg.id, + jwtSignatureAlgorithm }); - } catch (err) { - console.error(err); - createNotification({ - text: `Failed to ${!data ? "add" : "update"} OIDC SSO configuration`, - type: "error" + } else { + await updateMutateAsync({ + issuer, + configurationType, + discoveryURL, + authorizationEndpoint, + allowedEmailDomains, + jwksUri, + tokenEndpoint, + userinfoEndpoint, + clientId, + clientSecret, + isActive: true, + organizationId: currentOrg.id, + jwtSignatureAlgorithm }); } + + handlePopUpClose("addOIDC"); + + createNotification({ + text: `Successfully ${!data ? "added" : "updated"} OIDC SSO configuration`, + type: "success" + }); }; return ( diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/SSOModal.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/SSOModal.tsx index df5fca59f..558f37dcb 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/SSOModal.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/SSOModal.tsx @@ -108,64 +108,49 @@ export const SSOModal = ({ popUp, handlePopUpClose, handlePopUpToggle, hideDelet if (!currentOrg) { return; } - try { - await updateMutateAsync({ - organizationId: currentOrg.id, - isActive: false, - entryPoint: "", - issuer: "", - cert: "" - }); + await updateMutateAsync({ + organizationId: currentOrg.id, + isActive: false, + entryPoint: "", + issuer: "", + cert: "" + }); - createNotification({ - text: "Successfully deleted SAML SSO configuration.", - type: "success" - }); - } catch { - createNotification({ - text: "Failed deleting SAML SSO configuration.", - type: "error" - }); - } + createNotification({ + text: "Successfully deleted SAML SSO configuration.", + type: "success" + }); }; const onSSOModalSubmit = async ({ authProvider, entryPoint, issuer, cert }: AddSSOFormData) => { - try { - if (!currentOrg) return; + if (!currentOrg) return; - if (!data) { - await createMutateAsync({ - organizationId: currentOrg.id, - authProvider, - isActive: false, - entryPoint, - issuer, - cert - }); - } else { - await updateMutateAsync({ - organizationId: currentOrg.id, - authProvider, - isActive: false, - entryPoint, - issuer, - cert - }); - } - - handlePopUpClose("addSSO"); - - createNotification({ - text: `Successfully ${!data ? "added" : "updated"} SAML SSO configuration`, - type: "success" + if (!data) { + await createMutateAsync({ + organizationId: currentOrg.id, + authProvider, + isActive: false, + entryPoint, + issuer, + cert }); - } catch (err) { - console.error(err); - createNotification({ - text: `Failed to ${!data ? "add" : "update"} SAML SSO configuration`, - type: "error" + } else { + await updateMutateAsync({ + organizationId: currentOrg.id, + authProvider, + isActive: false, + entryPoint, + issuer, + cert }); } + + handlePopUpClose("addSSO"); + + createNotification({ + text: `Successfully ${!data ? "added" : "updated"} SAML SSO configuration`, + type: "success" + }); }; const renderLabels = (authProvider: string) => { diff --git a/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupRoles.tsx b/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupRoles.tsx index 188c2ba7d..67e962cfc 100644 --- a/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupRoles.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupRoles.tsx @@ -253,18 +253,14 @@ const GroupRolesForm = ({ projectRoles, roles, groupId, onClose }: FormProps) => }; }); - try { - await updateGroupWorkspaceRole.mutateAsync({ - projectId: currentProject?.id || "", - groupId, - roles: selectedRoles - }); - createNotification({ text: "Successfully updated group role", type: "success" }); - onClose(); - setSearchRoles(""); - } catch { - createNotification({ text: "Failed to update group role", type: "error" }); - } + await updateGroupWorkspaceRole.mutateAsync({ + projectId: currentProject?.id || "", + groupId, + roles: selectedRoles + }); + createNotification({ text: "Successfully updated group role", type: "success" }); + onClose(); + setSearchRoles(""); }; return ( diff --git a/frontend/src/pages/project/AccessControlPage/components/ProjectRoleListTab/components/ProjectRoleList/ProjectRoleList.tsx b/frontend/src/pages/project/AccessControlPage/components/ProjectRoleListTab/components/ProjectRoleList/ProjectRoleList.tsx index fca53fa06..eeb29725f 100644 --- a/frontend/src/pages/project/AccessControlPage/components/ProjectRoleListTab/components/ProjectRoleList/ProjectRoleList.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/ProjectRoleListTab/components/ProjectRoleList/ProjectRoleList.tsx @@ -77,17 +77,12 @@ export const ProjectRoleList = () => { const handleRoleDelete = async () => { const { id } = popUp?.deleteRole?.data as TProjectRole; - try { - await deleteRole({ - projectId, - id - }); - createNotification({ type: "success", text: "Successfully removed the role" }); - handlePopUpClose("deleteRole"); - } catch (err) { - console.log(err); - createNotification({ type: "error", text: "Failed to delete role" }); - } + await deleteRole({ + projectId, + id + }); + createNotification({ type: "success", text: "Successfully removed the role" }); + handlePopUpClose("deleteRole"); }; const { diff --git a/frontend/src/pages/project/IdentityDetailsByIDPage/components/IdentityProjectAdditionalPrivilegeSection/IdentityProjectAdditionalPrivilegeModifySection.tsx b/frontend/src/pages/project/IdentityDetailsByIDPage/components/IdentityProjectAdditionalPrivilegeSection/IdentityProjectAdditionalPrivilegeModifySection.tsx index a5d74271c..956c01d69 100644 --- a/frontend/src/pages/project/IdentityDetailsByIDPage/components/IdentityProjectAdditionalPrivilegeSection/IdentityProjectAdditionalPrivilegeModifySection.tsx +++ b/frontend/src/pages/project/IdentityDetailsByIDPage/components/IdentityProjectAdditionalPrivilegeSection/IdentityProjectAdditionalPrivilegeModifySection.tsx @@ -131,33 +131,28 @@ export const IdentityProjectAdditionalPrivilegeModifySection = ({ temporaryAccessStartTime: el.temporaryAccess.temporaryAccessStartTime }; - try { - if (isCreate) { - await createIdentityProjectAdditionalPrivilege({ - permissions: formRolePermission2API(el.permissions), - identityId, - projectId, - slug: el.slug || undefined, - type: accessType - }); - createNotification({ type: "success", text: "Successfully created privilege" }); - } else { - if (!projectId || !privilegeDetails?.id) return; - await updateIdentityProjectAdditionalPrivilege({ - privilegeId: privilegeDetails.id, - permissions: formRolePermission2API(el.permissions), - projectId, - identityId, - slug: el.slug || undefined, - type: accessType - }); - createNotification({ type: "success", text: "Successfully updated privilege" }); - } - onGoBack(); - } catch (err) { - console.log(err); - createNotification({ type: "error", text: "Failed to update privilege" }); + if (isCreate) { + await createIdentityProjectAdditionalPrivilege({ + permissions: formRolePermission2API(el.permissions), + identityId, + projectId, + slug: el.slug || undefined, + type: accessType + }); + createNotification({ type: "success", text: "Successfully created privilege" }); + } else { + if (!projectId || !privilegeDetails?.id) return; + await updateIdentityProjectAdditionalPrivilege({ + privilegeId: privilegeDetails.id, + permissions: formRolePermission2API(el.permissions), + projectId, + identityId, + slug: el.slug || undefined, + type: accessType + }); + createNotification({ type: "success", text: "Successfully updated privilege" }); } + onGoBack(); }; const privilegeTemporaryAccess = form.watch("temporaryAccess"); diff --git a/frontend/src/pages/project/IdentityDetailsByIDPage/components/IdentityProjectAdditionalPrivilegeSection/IdentityProjectAdditionalPrivilegeSection.tsx b/frontend/src/pages/project/IdentityDetailsByIDPage/components/IdentityProjectAdditionalPrivilegeSection/IdentityProjectAdditionalPrivilegeSection.tsx index f98f6ebf8..431875b3c 100644 --- a/frontend/src/pages/project/IdentityDetailsByIDPage/components/IdentityProjectAdditionalPrivilegeSection/IdentityProjectAdditionalPrivilegeSection.tsx +++ b/frontend/src/pages/project/IdentityDetailsByIDPage/components/IdentityProjectAdditionalPrivilegeSection/IdentityProjectAdditionalPrivilegeSection.tsx @@ -57,18 +57,13 @@ export const IdentityProjectAdditionalPrivilegeSection = ({ identityMembershipDe const handlePrivilegeDelete = async () => { const { id } = popUp?.deletePrivilege?.data as { id: string }; - try { - await deletePrivilege({ - privilegeId: id, - projectId, - identityId - }); - createNotification({ type: "success", text: "Successfully removed the privilege" }); - handlePopUpClose("deletePrivilege"); - } catch (err) { - console.log(err); - createNotification({ type: "error", text: "Failed to delete privilege" }); - } + await deletePrivilege({ + privilegeId: id, + projectId, + identityId + }); + createNotification({ type: "success", text: "Successfully removed the privilege" }); + handlePopUpClose("deletePrivilege"); }; return ( diff --git a/frontend/src/pages/project/IdentityDetailsByIDPage/components/IdentityRoleDetailsSection/IdentityRoleDetailsSection.tsx b/frontend/src/pages/project/IdentityDetailsByIDPage/components/IdentityRoleDetailsSection/IdentityRoleDetailsSection.tsx index 34b5229d6..dce632121 100644 --- a/frontend/src/pages/project/IdentityDetailsByIDPage/components/IdentityRoleDetailsSection/IdentityRoleDetailsSection.tsx +++ b/frontend/src/pages/project/IdentityDetailsByIDPage/components/IdentityRoleDetailsSection/IdentityRoleDetailsSection.tsx @@ -50,42 +50,37 @@ export const IdentityRoleDetailsSection = ({ const handleRoleDelete = async () => { const { id } = popUp?.deleteRole?.data as TProjectRole; - try { - const updatedRoles = identityMembershipDetails?.roles?.filter((el) => el.id !== id); - await updateIdentityWorkspaceRole({ - projectId: currentProject?.id || "", - identityId: identityMembershipDetails.identity.id, - roles: updatedRoles.map( - ({ - role, - customRoleSlug, - isTemporary, - temporaryMode, - temporaryRange, - temporaryAccessStartTime, - temporaryAccessEndTime - }) => ({ - role: role === "custom" ? customRoleSlug : role, - ...(isTemporary - ? { - isTemporary, - temporaryMode, - temporaryRange, - temporaryAccessStartTime, - temporaryAccessEndTime - } - : { - isTemporary - }) - }) - ) - }); - createNotification({ type: "success", text: "Successfully removed role" }); - handlePopUpClose("deleteRole"); - } catch (err) { - console.log(err); - createNotification({ type: "error", text: "Failed to delete role" }); - } + const updatedRoles = identityMembershipDetails?.roles?.filter((el) => el.id !== id); + await updateIdentityWorkspaceRole({ + projectId: currentProject?.id || "", + identityId: identityMembershipDetails.identity.id, + roles: updatedRoles.map( + ({ + role, + customRoleSlug, + isTemporary, + temporaryMode, + temporaryRange, + temporaryAccessStartTime, + temporaryAccessEndTime + }) => ({ + role: role === "custom" ? customRoleSlug : role, + ...(isTemporary + ? { + isTemporary, + temporaryMode, + temporaryRange, + temporaryAccessStartTime, + temporaryAccessEndTime + } + : { + isTemporary + }) + }) + ) + }); + createNotification({ type: "success", text: "Successfully removed role" }); + handlePopUpClose("deleteRole"); }; return ( diff --git a/frontend/src/pages/project/MemberDetailsByIDPage/components/MemberProjectAdditionalPrivilegeSection/MemberProjectAdditionalPrivilegeSection.tsx b/frontend/src/pages/project/MemberDetailsByIDPage/components/MemberProjectAdditionalPrivilegeSection/MemberProjectAdditionalPrivilegeSection.tsx index 7094c9ca8..28c3c9b5f 100644 --- a/frontend/src/pages/project/MemberDetailsByIDPage/components/MemberProjectAdditionalPrivilegeSection/MemberProjectAdditionalPrivilegeSection.tsx +++ b/frontend/src/pages/project/MemberDetailsByIDPage/components/MemberProjectAdditionalPrivilegeSection/MemberProjectAdditionalPrivilegeSection.tsx @@ -60,17 +60,12 @@ export const MemberProjectAdditionalPrivilegeSection = ({ membershipDetails }: P const handlePrivilegeDelete = async () => { const { id } = popUp?.deletePrivilege?.data as { id: string }; - try { - await deletePrivilege({ - privilegeId: id, - projectMembershipId: membershipDetails.id - }); - createNotification({ type: "success", text: "Successfully removed the privilege" }); - handlePopUpClose("deletePrivilege"); - } catch (err) { - console.log(err); - createNotification({ type: "error", text: "Failed to delete privilege" }); - } + await deletePrivilege({ + privilegeId: id, + projectMembershipId: membershipDetails.id + }); + createNotification({ type: "success", text: "Successfully removed the privilege" }); + handlePopUpClose("deletePrivilege"); }; return ( diff --git a/frontend/src/pages/project/MemberDetailsByIDPage/components/MemberProjectAdditionalPrivilegeSection/MembershipProjectAdditionalPrivilegeModifySection.tsx b/frontend/src/pages/project/MemberDetailsByIDPage/components/MemberProjectAdditionalPrivilegeSection/MembershipProjectAdditionalPrivilegeModifySection.tsx index 1a217a509..bc5bd3a6f 100644 --- a/frontend/src/pages/project/MemberDetailsByIDPage/components/MemberProjectAdditionalPrivilegeSection/MembershipProjectAdditionalPrivilegeModifySection.tsx +++ b/frontend/src/pages/project/MemberDetailsByIDPage/components/MemberProjectAdditionalPrivilegeSection/MembershipProjectAdditionalPrivilegeModifySection.tsx @@ -129,31 +129,26 @@ export const MembershipProjectAdditionalPrivilegeModifySection = ({ temporaryAccessStartTime: el.temporaryAccess.temporaryAccessStartTime }; - try { - if (isCreate) { - await createUserProjectAdditionalPrivilege({ - permissions: formRolePermission2API(el.permissions), - projectMembershipId, - slug: el.slug || undefined, - type: accessType - }); - createNotification({ type: "success", text: "Successfully created privilege" }); - } else { - if (!projectId || !privilegeDetails?.id) return; - await updateUserProjectAdditionalPrivilege({ - privilegeId: privilegeDetails.id, - permissions: formRolePermission2API(el.permissions), - projectMembershipId, - slug: el.slug || undefined, - type: accessType - }); - createNotification({ type: "success", text: "Successfully updated privilege" }); - } - onGoBack(); - } catch (err) { - console.log(err); - createNotification({ type: "error", text: "Failed to update privilege" }); + if (isCreate) { + await createUserProjectAdditionalPrivilege({ + permissions: formRolePermission2API(el.permissions), + projectMembershipId, + slug: el.slug || undefined, + type: accessType + }); + createNotification({ type: "success", text: "Successfully created privilege" }); + } else { + if (!projectId || !privilegeDetails?.id) return; + await updateUserProjectAdditionalPrivilege({ + privilegeId: privilegeDetails.id, + permissions: formRolePermission2API(el.permissions), + projectMembershipId, + slug: el.slug || undefined, + type: accessType + }); + createNotification({ type: "success", text: "Successfully updated privilege" }); } + onGoBack(); }; const privilegeTemporaryAccess = form.watch("temporaryAccess"); diff --git a/frontend/src/pages/project/RoleDetailsBySlugPage/components/RolePermissionsSection.tsx b/frontend/src/pages/project/RoleDetailsBySlugPage/components/RolePermissionsSection.tsx index fd95d2659..c93cea534 100644 --- a/frontend/src/pages/project/RoleDetailsBySlugPage/components/RolePermissionsSection.tsx +++ b/frontend/src/pages/project/RoleDetailsBySlugPage/components/RolePermissionsSection.tsx @@ -122,19 +122,14 @@ export const RolePermissionsSection = ({ roleSlug, isDisabled }: Props) => { const { mutateAsync: updateRole } = useUpdateProjectRole(); const onSubmit = async (el: TFormSchema) => { - try { - if (!projectId || !role?.id) return; - await updateRole({ - id: role?.id as string, - projectId, - ...el, - permissions: formRolePermission2API(el.permissions) - }); - createNotification({ type: "success", text: "Successfully updated role" }); - } catch (err) { - console.log(err); - createNotification({ type: "error", text: "Failed to update role" }); - } + if (!projectId || !role?.id) return; + await updateRole({ + id: role?.id as string, + projectId, + ...el, + permissions: formRolePermission2API(el.permissions) + }); + createNotification({ type: "success", text: "Successfully updated role" }); }; const isCustomRole = !Object.values(ProjectMembershipRole).includes( diff --git a/frontend/src/pages/secret-manager/SettingsPage/components/BackfillSecretReferenceSection/BackfillSecretReferenceSection.tsx b/frontend/src/pages/secret-manager/SettingsPage/components/BackfillSecretReferenceSection/BackfillSecretReferenceSection.tsx index 26f5c7fc9..9350698dc 100644 --- a/frontend/src/pages/secret-manager/SettingsPage/components/BackfillSecretReferenceSection/BackfillSecretReferenceSection.tsx +++ b/frontend/src/pages/secret-manager/SettingsPage/components/BackfillSecretReferenceSection/BackfillSecretReferenceSection.tsx @@ -13,12 +13,8 @@ export const BackfillSecretReferenceSecretion = () => { const handleBackfill = async () => { if (backfillSecretReferences.isPending) return; - try { - await backfillSecretReferences.mutateAsync({ projectId: currentProject.id || "" }); - createNotification({ text: "Successfully re-indexed secret references", type: "success" }); - } catch { - createNotification({ text: "Failed to re-index secret references", type: "error" }); - } + await backfillSecretReferences.mutateAsync({ projectId: currentProject.id || "" }); + createNotification({ text: "Successfully re-indexed secret references", type: "success" }); }; const isAdmin = hasProjectRole(ProjectMembershipRole.Admin); From ea7bff7f34cee049384a376050fe1c0f973c7127 Mon Sep 17 00:00:00 2001 From: Carlos Monastyrski Date: Mon, 3 Nov 2025 11:40:15 -0300 Subject: [PATCH 42/79] Rename azure flag to enableVersions --- .../aws-certificate-manager-pki-sync-fns.ts | 8 +-- .../azure-key-vault-pki-sync-fns.ts | 20 +++---- .../azure-key-vault-pki-sync-schemas.ts | 2 +- .../src/services/pki-sync/pki-sync-service.ts | 13 +++-- .../forms/PkiSyncConnectionField.tsx | 2 +- .../PkiSyncOptionsFields.tsx | 4 +- ...e-key-vault-pki-sync-destination-schema.ts | 2 +- .../components/CertificatesTable.tsx | 52 ++++++++++--------- 8 files changed, 56 insertions(+), 47 deletions(-) diff --git a/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-fns.ts b/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-fns.ts index ae4cdcf55..3e07420b5 100644 --- a/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-fns.ts +++ b/backend/src/services/pki-sync/aws-certificate-manager/aws-certificate-manager-pki-sync-fns.ts @@ -3,6 +3,7 @@ import * as AWS from "aws-sdk"; import RE2 from "re2"; import { z } from "zod"; +import { TCertificateSyncs } from "@app/db/schemas"; import { BadRequestError, NotFoundError } from "@app/lib/errors"; import { logger } from "@app/lib/logger"; import { TAppConnectionDALFactory } from "@app/services/app-connection/app-connection-dal"; @@ -397,11 +398,10 @@ export const awsCertificateManagerPkiSyncFactory = ({ }); const existingSyncRecords = await certificateSyncDAL.findByPkiSyncId(pkiSync.id); - type SyncRecord = (typeof existingSyncRecords)[0]; - const syncRecordsByCertId = new Map(); - const syncRecordsByExternalId = new Map(); + const syncRecordsByCertId = new Map(); + const syncRecordsByExternalId = new Map(); - existingSyncRecords.forEach((record: SyncRecord) => { + existingSyncRecords.forEach((record: TCertificateSyncs) => { if (record.certificateId) { syncRecordsByCertId.set(record.certificateId, record); } diff --git a/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-fns.ts b/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-fns.ts index 0bd9e201d..765d0b8ba 100644 --- a/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-fns.ts +++ b/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-fns.ts @@ -2,6 +2,7 @@ import { AxiosError } from "axios"; import * as crypto from "crypto"; +import { TCertificateSyncs } from "@app/db/schemas"; import { request } from "@app/lib/config/request"; import { logger } from "@app/lib/logger"; import { TAppConnectionDALFactory } from "@app/services/app-connection/app-connection-dal"; @@ -346,11 +347,10 @@ export const azureKeyVaultPkiSyncFactory = ({ ); const existingSyncRecords = await certificateSyncDAL.findByPkiSyncId(pkiSync.id); - type SyncRecord = (typeof existingSyncRecords)[0]; - const syncRecordsByCertId = new Map(); - const syncRecordsByExternalId = new Map(); + const syncRecordsByCertId = new Map(); + const syncRecordsByExternalId = new Map(); - existingSyncRecords.forEach((record: SyncRecord) => { + existingSyncRecords.forEach((record: TCertificateSyncs) => { if (record.certificateId) { syncRecordsByCertId.set(record.certificateId, record); } @@ -368,10 +368,10 @@ export const azureKeyVaultPkiSyncFactory = ({ }[] = []; const syncOptions = pkiSync.syncOptions as - | { certificateNameSchema?: string; canRemoveCertificates?: boolean; preserveVersion?: boolean } + | { certificateNameSchema?: string; canRemoveCertificates?: boolean; enableVersioning?: boolean } | undefined; const canRemoveCertificates = syncOptions?.canRemoveCertificates ?? true; - const preserveVersion = syncOptions?.preserveVersion ?? true; + const enableVersioning = syncOptions?.enableVersioning ?? true; const activeExternalIdentifiers = new Set(); @@ -382,7 +382,7 @@ export const azureKeyVaultPkiSyncFactory = ({ continue; } - if (preserveVersion && typeof certificateId === "string") { + if (enableVersioning && typeof certificateId === "string") { const certificate = await certificateDAL.findById(certificateId); if (certificate?.renewedByCertificateId) { // eslint-disable-next-line no-continue @@ -399,7 +399,7 @@ export const azureKeyVaultPkiSyncFactory = ({ if (existingSyncRecord?.externalIdentifier) { const existingAzureCert = vaultCertificates[existingSyncRecord.externalIdentifier]; - if (existingAzureCert && preserveVersion) { + if (existingAzureCert && enableVersioning) { targetCertName = existingSyncRecord.externalIdentifier; activeExternalIdentifiers.add(targetCertName); @@ -409,7 +409,7 @@ export const azureKeyVaultPkiSyncFactory = ({ } } else if (!existingAzureCert) { shouldCreateNew = true; - } else if (!preserveVersion) { + } else if (!enableVersioning) { shouldCreateNew = true; } } else { @@ -544,7 +544,7 @@ export const azureKeyVaultPkiSyncFactory = ({ ]); } - if (preserveVersion) { + if (enableVersioning) { const currentCertificate = await certificateDAL.findById(certificateId); if (currentCertificate?.renewedFromCertificateId) { await certificateSyncDAL.removeCertificates(pkiSync.id, [currentCertificate.renewedFromCertificateId]); diff --git a/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-schemas.ts b/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-schemas.ts index b7fcbfb6d..90f4a119b 100644 --- a/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-schemas.ts +++ b/backend/src/services/pki-sync/azure-key-vault/azure-key-vault-pki-sync-schemas.ts @@ -14,7 +14,7 @@ export const AzureKeyVaultPkiSyncConfigSchema = z.object({ const AzureKeyVaultPkiSyncOptionsSchema = z.object({ canImportCertificates: z.boolean().default(false), canRemoveCertificates: z.boolean().default(true), - preserveVersion: z.boolean().default(true), + enableVersioning: z.boolean().default(true), certificateNameSchema: z .string() .optional() diff --git a/backend/src/services/pki-sync/pki-sync-service.ts b/backend/src/services/pki-sync/pki-sync-service.ts index 0c385ce9c..02a76db2a 100644 --- a/backend/src/services/pki-sync/pki-sync-service.ts +++ b/backend/src/services/pki-sync/pki-sync-service.ts @@ -95,10 +95,17 @@ export const pkiSyncServiceFactory = ({ }); } - const invalidCertificates = certificates.filter((cert) => cert.projectId !== expectedProjectId); - if (invalidCertificates.length > 0) { + const invalidProjectCertificates = certificates.filter((cert) => cert.projectId !== expectedProjectId); + if (invalidProjectCertificates.length > 0) { throw new BadRequestError({ - message: `Certificates do not belong to the same project: ${invalidCertificates.map((cert) => cert.id).join(", ")}` + message: `Certificates do not belong to the same project: ${invalidProjectCertificates.map((cert) => cert.id).join(", ")}` + }); + } + + const invalidRenewedCertificates = certificates.filter((cert) => cert.renewedByCertificateId); + if (invalidRenewedCertificates.length > 0) { + throw new BadRequestError({ + message: `Cannot add renewed certificates to PKI sync: ${invalidRenewedCertificates.map((cert) => cert.id).join(", ")}` }); } }; diff --git a/frontend/src/components/pki-syncs/forms/PkiSyncConnectionField.tsx b/frontend/src/components/pki-syncs/forms/PkiSyncConnectionField.tsx index 90af04203..c8da83aac 100644 --- a/frontend/src/components/pki-syncs/forms/PkiSyncConnectionField.tsx +++ b/frontend/src/components/pki-syncs/forms/PkiSyncConnectionField.tsx @@ -69,7 +69,7 @@ export const PkiSyncConnectionField = ({ onChange: callback }: Props) => { ( { {currentDestination === PkiSync.AzureKeyVault && ( ( {

When enabled, Infisical will create a new version of the existing certificate in Azure Key Vault during certificate renewal syncs, - preserving the certificate name. + preserving the original certificate name.

This allows consuming services to continue using the same certificate name diff --git a/frontend/src/components/pki-syncs/forms/schemas/azure-key-vault-pki-sync-destination-schema.ts b/frontend/src/components/pki-syncs/forms/schemas/azure-key-vault-pki-sync-destination-schema.ts index c2f53191e..2a8f3ee53 100644 --- a/frontend/src/components/pki-syncs/forms/schemas/azure-key-vault-pki-sync-destination-schema.ts +++ b/frontend/src/components/pki-syncs/forms/schemas/azure-key-vault-pki-sync-destination-schema.ts @@ -7,7 +7,7 @@ import { BasePkiSyncSchema } from "./base-pki-sync-schema"; const AzureKeyVaultSyncOptionsSchema = z.object({ canImportCertificates: z.boolean().default(false), canRemoveCertificates: z.boolean().default(true), - preserveVersion: z.boolean().default(true), + enableVersioning: z.boolean().default(true), certificateNameSchema: z .string() .optional() diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx index 115526f5a..369bfe7b3 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx @@ -458,31 +458,33 @@ export const CertificatesTable = ({ handlePopUpOpen }: Props) => { ); })()} - {/* PKI Sync management - only for active certificates */} - {certificate.status === CertStatus.ACTIVE && ( - - {(isAllowed) => ( - - handlePopUpOpen("managePkiSyncs", { - certificateId: certificate.id, - commonName: certificate.commonName - }) - } - disabled={!isAllowed} - icon={} - > - Manage PKI Syncs - - )} - - )} + {/* PKI Sync management - only for active certificates that are not renewed */} + {certificate.status === CertStatus.ACTIVE && + !certificate.renewedByCertificateId && ( + + {(isAllowed) => ( + + handlePopUpOpen("managePkiSyncs", { + certificateId: certificate.id, + commonName: certificate.commonName + }) + } + disabled={!isAllowed} + icon={} + > + Manage PKI Syncs + + )} + + )} {/* Only show revoke button if CA supports revocation */} {(() => { const caType = caCapabilityMap[certificate.caId]; From 3aeee8d552fed4065029f8adee547accc339e499 Mon Sep 17 00:00:00 2001 From: Victor Santos Date: Mon, 3 Nov 2025 11:58:44 -0300 Subject: [PATCH 43/79] refactor: enhance notification handling and streamline async logic across various components --- .../OauthCallbackPage/OauthCallbackPage.tsx | 18 +--- .../GithubOrgSyncConfigModal.tsx | 67 +++++------- .../OrgGithubSyncSection.tsx | 83 ++++++-------- .../OrgProvisioningTab/OrgSCIMSection.tsx | 37 +++---- .../OrgProvisioningTab/ScimTokenModal.tsx | 58 ++++------ .../OrgSecurityTab/OrgGenericAuthSection.tsx | 72 +++++-------- .../OrgUserAccessTokenLimitSection.tsx | 25 ++--- .../OrgSsoTab/LDAPGroupMapModal.tsx | 56 ++++------ .../components/OrgSsoTab/LDAPModal.tsx | 77 +++++-------- .../OrgSsoTab/OrgGeneralAuthSection.tsx | 100 ++++++++--------- .../components/OrgSsoTab/OrgLDAPSection.tsx | 38 +++---- .../components/OrgSsoTab/OrgOIDCSection.tsx | 64 +++++------ .../components/OrgSsoTab/OrgSSOSection.tsx | 79 ++++++-------- .../components/DeleteProjectTemplateModal.tsx | 25 ++--- .../components/EditProjectTemplate.tsx | 24 ++--- .../ProjectTemplateEditRoleForm.tsx | 42 +++----- .../ProjectTemplateEnvironmentsForm.tsx | 32 +++--- .../ProjectTemplateRolesSection.tsx | 30 ++---- .../ProjectTemplateDetailsModal.tsx | 26 ++--- .../components/UserOrgMembershipModal.tsx | 37 +++---- .../UserAddToProjectModal.tsx | 33 ++---- .../UserProjectsSection/UserGroupsSection.tsx | 27 ++--- .../components/GroupsSection/GroupModal.tsx | 29 ++--- .../GroupsSection/GroupsSection.tsx | 29 ++--- .../components/IdentityTab/IdentityTab.tsx | 29 ++--- .../IdentityTab/components/IdentityModal.tsx | 51 ++++----- .../MembersTab/components/AddMemberModal.tsx | 101 ++++++++---------- .../SpecificPrivilegeSection.tsx | 23 ++-- .../MembersTab/components/MembersSection.tsx | 26 ++--- .../AddServiceTokenModal.tsx | 57 ++++------ .../ServiceTokenSection.tsx | 24 ++--- .../components/GroupDetailsSection.tsx | 49 ++++----- .../IdentityDetailsByIDPage.tsx | 45 +++----- .../MemberDetailsByIDPage.tsx | 38 +++---- .../RoleDetailsBySlugPage.tsx | 49 ++++----- .../components/RoleModal.tsx | 79 ++++++-------- .../DeleteProjectProtection.tsx | 26 ++--- .../DeleteProjectSection.tsx | 12 --- 38 files changed, 653 insertions(+), 1064 deletions(-) diff --git a/frontend/src/pages/organization/SettingsPage/OauthCallbackPage/OauthCallbackPage.tsx b/frontend/src/pages/organization/SettingsPage/OauthCallbackPage/OauthCallbackPage.tsx index df5bf4f60..5efec93d9 100644 --- a/frontend/src/pages/organization/SettingsPage/OauthCallbackPage/OauthCallbackPage.tsx +++ b/frontend/src/pages/organization/SettingsPage/OauthCallbackPage/OauthCallbackPage.tsx @@ -72,20 +72,12 @@ export const OAuthCallbackPage = () => { if (!isReady) return; (async () => { - try { - await handleMicrosoftTeams(); + await handleMicrosoftTeams(); - createNotification({ - text: "Successfully created Microsoft Teams workflow integration", - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to create Microsoft Teams workflow integration", - type: "error" - }); - } + createNotification({ + text: "Successfully created Microsoft Teams workflow integration", + type: "success" + }); })(); }, [isReady]); diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/GithubOrgSyncConfigModal.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/GithubOrgSyncConfigModal.tsx index 180b63278..868dd17f7 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/GithubOrgSyncConfigModal.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/GithubOrgSyncConfigModal.tsx @@ -55,55 +55,40 @@ export const GithubOrgSyncConfigModal = ({ }); const onFormSubmit = async ({ githubOrgName, githubOrgAccessToken }: FormData) => { - try { - if (isUpdate) { - await updateGithubSyncOrgConfig({ - githubOrgName, - githubOrgAccessToken - }); + if (isUpdate) { + await updateGithubSyncOrgConfig({ + githubOrgName, + githubOrgAccessToken + }); - createNotification({ - text: "Successfully updated GitHub Organization Sync", - type: "success" - }); - } else { - await createGithubSyncOrgConfig({ - githubOrgName, - githubOrgAccessToken, - isActive: false - }); - - createNotification({ - text: "Successfully created GitHub Organization Sync", - type: "success" - }); - } - handlePopUpToggle("githubOrgSyncConfig"); - } catch { createNotification({ - text: "Failed to setup GitHub Organization Sync", - type: "error" + text: "Successfully updated GitHub Organization Sync", + type: "success" + }); + } else { + await createGithubSyncOrgConfig({ + githubOrgName, + githubOrgAccessToken, + isActive: false + }); + + createNotification({ + text: "Successfully created GitHub Organization Sync", + type: "success" }); } + handlePopUpToggle("githubOrgSyncConfig"); }; const onDelete = async () => { - try { - await deleteGithubSyncOrgConfig(); + await deleteGithubSyncOrgConfig(); - handlePopUpToggle("deleteGithubOrgSyncConfig", false); - handlePopUpToggle("githubOrgSyncConfig", false); - createNotification({ - text: "Successfully deleted GitHub Organization Sync", - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to delete GitHub Organization Sync", - type: "error" - }); - } + handlePopUpToggle("deleteGithubOrgSyncConfig", false); + handlePopUpToggle("githubOrgSyncConfig", false); + createNotification({ + text: "Successfully deleted GitHub Organization Sync", + type: "success" + }); }; return ( diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/OrgGithubSyncSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/OrgGithubSyncSection.tsx index 188a83354..610cb61c1 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/OrgGithubSyncSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/OrgGithubSyncSection.tsx @@ -35,64 +35,41 @@ export const OrgGithubSyncSection = () => { const data = !isPending && !githubOrgSyncConfig?.isError ? githubOrgSyncConfig?.data : undefined; const handleBulkSync = async () => { - try { - const result = await syncAllTeamsMutation.mutateAsync(); - let message = "Successfully synced teams"; + const result = await syncAllTeamsMutation.mutateAsync(); + let message = "Successfully synced teams"; - const details = []; - if (result.createdTeams.length > 0) { - details.push( - `${result.createdTeams.length} new team${result.createdTeams.length === 1 ? "" : "s"} created` - ); - } - if (result.updatedTeams.length > 0) { - details.push( - `${result.updatedTeams.length} team${result.updatedTeams.length === 1 ? "" : "s"} updated` - ); - } - if (result.removedMemberships > 0) { - details.push( - `${result.removedMemberships} membership${result.removedMemberships === 1 ? "" : "s"} removed` - ); - } + const details = []; + if (result.createdTeams.length > 0) { + details.push( + `${result.createdTeams.length} new team${result.createdTeams.length === 1 ? "" : "s"} created` + ); + } + if (result.updatedTeams.length > 0) { + details.push( + `${result.updatedTeams.length} team${result.updatedTeams.length === 1 ? "" : "s"} updated` + ); + } + if (result.removedMemberships > 0) { + details.push( + `${result.removedMemberships} membership${result.removedMemberships === 1 ? "" : "s"} removed` + ); + } - if (details.length > 0) { - message += `. ${details.join(", ")}`; - } + if (details.length > 0) { + message += `. ${details.join(", ")}`; + } + createNotification({ + text: message, + type: "success" + }); + + if (result.errors && result.errors.length > 0) { createNotification({ - text: message, - type: "success" + text: `Sync completed with ${result.errors.length} warnings. Check the console for details.`, + type: "warning" }); - - if (result.errors && result.errors.length > 0) { - createNotification({ - text: `Sync completed with ${result.errors.length} warnings. Check the console for details.`, - type: "warning" - }); - console.warn("Sync errors:", result.errors); - } - } catch (error) { - const errorMessage = - (error as any)?.response?.data?.message || (error as Error)?.message || "Unknown error"; - - if ( - errorMessage.includes("token") && - (errorMessage.includes("required") || - errorMessage.includes("invalid") || - errorMessage.includes("expired") || - errorMessage.includes("set a token first")) - ) { - createNotification({ - text: "Please set a GitHub access token in the configuration modal to continue with the sync", - type: "error" - }); - } else { - createNotification({ - text: `Failed to sync GitHub teams: ${errorMessage}`, - type: "error" - }); - } + console.warn("Sync errors:", result.errors); } }; diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/OrgSCIMSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/OrgSCIMSection.tsx index 3936a20ee..3d079ccef 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/OrgSCIMSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/OrgSCIMSection.tsx @@ -36,30 +36,23 @@ export const OrgScimSection = () => { }; const handleEnableSCIMToggle = async (value: boolean) => { - try { - if (!currentOrg?.id) return; - if (!subscription?.scim) { - handlePopUpOpen("upgradePlan", { - isEnterpriseFeature: true - }); - return; - } - - await mutateAsync({ - orgId: currentOrg?.id, - scimEnabled: value - }); - - createNotification({ - text: `Successfully ${value ? "enabled" : "disabled"} SCIM provisioning`, - type: "success" - }); - } catch (err) { - createNotification({ - text: (err as { response: { data: { message: string } } }).response.data.message, - type: "error" + if (!currentOrg?.id) return; + if (!subscription?.scim) { + handlePopUpOpen("upgradePlan", { + isEnterpriseFeature: true }); + return; } + + await mutateAsync({ + orgId: currentOrg?.id, + scimEnabled: value + }); + + createNotification({ + text: `Successfully ${value ? "enabled" : "disabled"} SCIM provisioning`, + type: "success" + }); }; return ( diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/ScimTokenModal.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/ScimTokenModal.tsx index c542a88bb..5d6007ac0 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/ScimTokenModal.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgProvisioningTab/ScimTokenModal.tsx @@ -92,52 +92,36 @@ export const ScimTokenModal = ({ popUp, handlePopUpOpen, handlePopUpToggle }: Pr }, [isScimTokenCopied, isScimUrlCopied]); const onFormSubmit = async ({ description, ttlDays }: FormData) => { - try { - if (!currentOrg?.id) return; + if (!currentOrg?.id) return; - const { scimToken } = await createScimTokenMutateAsync({ - organizationId: currentOrg.id, - description, - ttlDays: Number(ttlDays) - }); + const { scimToken } = await createScimTokenMutateAsync({ + organizationId: currentOrg.id, + description, + ttlDays: Number(ttlDays) + }); - setToken(scimToken); + setToken(scimToken); - createNotification({ - text: "Successfully created SCIM token", - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to create SCIM token", - type: "error" - }); - } + createNotification({ + text: "Successfully created SCIM token", + type: "success" + }); }; const onDeleteScimTokenSubmit = async (scimTokenId: string) => { - try { - if (!currentOrg?.id) return; + if (!currentOrg?.id) return; - await deleteScimTokenMutateAsync({ - organizationId: currentOrg.id, - scimTokenId - }); + await deleteScimTokenMutateAsync({ + organizationId: currentOrg.id, + scimTokenId + }); - handlePopUpToggle("deleteScimToken", false); + handlePopUpToggle("deleteScimToken", false); - createNotification({ - text: "Successfully deleted SCIM token", - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to delete SCIM token", - type: "error" - }); - } + createNotification({ + text: "Successfully deleted SCIM token", + type: "success" + }); }; const hasToken = Boolean(token); diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSecurityTab/OrgGenericAuthSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSecurityTab/OrgGenericAuthSection.tsx index 7e2bd522b..7fe5fc219 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSecurityTab/OrgGenericAuthSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSecurityTab/OrgGenericAuthSection.tsx @@ -20,55 +20,39 @@ export const OrgGenericAuthSection = () => { const { mutateAsync } = useUpdateOrg(); const handleEnforceMfaToggle = async (value: boolean) => { - try { - if (!currentOrg?.id) return; - if (!subscription?.enforceMfa) { - handlePopUpOpen("upgradePlan"); - return; - } - - await mutateAsync({ - orgId: currentOrg?.id, - enforceMfa: value - }); - - createNotification({ - text: `Successfully ${value ? "enforced" : "un-enforced"} MFA`, - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: (err as { response: { data: { message: string } } }).response.data.message, - type: "error" - }); + if (!currentOrg?.id) return; + if (!subscription?.enforceMfa) { + handlePopUpOpen("upgradePlan"); + return; } + + await mutateAsync({ + orgId: currentOrg?.id, + enforceMfa: value + }); + + createNotification({ + text: `Successfully ${value ? "enforced" : "un-enforced"} MFA`, + type: "success" + }); }; const handleUpdateSelectedMfa = async (selectedMfaMethod: MfaMethod) => { - try { - if (!currentOrg?.id) return; - if (!subscription?.enforceMfa) { - handlePopUpOpen("upgradePlan"); - return; - } - - await mutateAsync({ - orgId: currentOrg?.id, - selectedMfaMethod - }); - - createNotification({ - text: "Successfully updated selected MFA method", - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: (err as { response: { data: { message: string } } }).response.data.message, - type: "error" - }); + if (!currentOrg?.id) return; + if (!subscription?.enforceMfa) { + handlePopUpOpen("upgradePlan"); + return; } + + await mutateAsync({ + orgId: currentOrg?.id, + selectedMfaMethod + }); + + createNotification({ + text: "Successfully updated selected MFA method", + type: "success" + }); }; return ( diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSecurityTab/OrgUserAccessTokenLimitSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSecurityTab/OrgUserAccessTokenLimitSection.tsx index 6e9865532..c78b5475e 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSecurityTab/OrgUserAccessTokenLimitSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSecurityTab/OrgUserAccessTokenLimitSection.tsx @@ -57,24 +57,17 @@ export const OrgUserAccessTokenLimitSection = () => { if (!currentOrg) return null; const handleUserTokenExpirationSubmit = async (formData: TForm) => { - try { - const userTokenExpiration = formatDuration(formData.expirationValue, formData.expirationUnit); + const userTokenExpiration = formatDuration(formData.expirationValue, formData.expirationUnit); - await updateUserTokenExpiration({ - userTokenExpiration, - orgId: currentOrg.id - }); + await updateUserTokenExpiration({ + userTokenExpiration, + orgId: currentOrg.id + }); - createNotification({ - text: "Successfully updated user token expiration", - type: "success" - }); - } catch { - createNotification({ - text: "Failed updating user token expiration", - type: "error" - }); - } + createNotification({ + text: "Successfully updated user token expiration", + type: "success" + }); }; // Units for the dropdown with readable labels diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/LDAPGroupMapModal.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/LDAPGroupMapModal.tsx index aee845187..31e96a1cb 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/LDAPGroupMapModal.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/LDAPGroupMapModal.tsx @@ -79,28 +79,20 @@ export const LDAPGroupMapModal = ({ popUp, handlePopUpOpen, handlePopUpToggle }: }); const onFormSubmit = async ({ groupSlug, ldapGroupCN }: TFormData) => { - try { - if (!ldapConfig) return; + if (!ldapConfig) return; - await createLDAPGroupMapping({ - ldapConfigId: ldapConfig.id, - groupSlug, - ldapGroupCN - }); + await createLDAPGroupMapping({ + ldapConfigId: ldapConfig.id, + groupSlug, + ldapGroupCN + }); - reset(); + reset(); - createNotification({ - text: `Successfully added LDAP group mapping for ${ldapGroupCN}`, - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: `Failed to add LDAP group mapping for ${ldapGroupCN}`, - type: "error" - }); - } + createNotification({ + text: `Successfully added LDAP group mapping for ${ldapGroupCN}`, + type: "success" + }); }; const onDeleteGroupMapSubmit = async ({ @@ -112,25 +104,17 @@ export const LDAPGroupMapModal = ({ popUp, handlePopUpOpen, handlePopUpToggle }: ldapGroupMapId: string; ldapGroupCN: string; }) => { - try { - await deleteLDAPGroupMapping({ - ldapConfigId, - ldapGroupMapId - }); + await deleteLDAPGroupMapping({ + ldapConfigId, + ldapGroupMapId + }); - handlePopUpToggle("deleteLdapGroupMap", false); + handlePopUpToggle("deleteLdapGroupMap", false); - createNotification({ - text: `Successfully deleted LDAP group mapping ${ldapGroupCN}`, - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: `Failed to delete LDAP group mapping ${ldapGroupCN}`, - type: "error" - }); - } + createNotification({ + text: `Successfully deleted LDAP group mapping ${ldapGroupCN}`, + type: "success" + }); }; useEffect(() => { diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/LDAPModal.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/LDAPModal.tsx index b9ba7a2b6..01429f512 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/LDAPModal.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/LDAPModal.tsx @@ -62,31 +62,24 @@ export const LDAPModal = ({ popUp, handlePopUpClose, handlePopUpToggle, hideDele if (!currentOrg) { return; } - try { - await updateMutateAsync({ - organizationId: currentOrg.id, - isActive: false, - url: "", - bindDN: "", - bindPass: "", - searchBase: "", - searchFilter: "", - uniqueUserAttribute: "", - groupSearchBase: "", - groupSearchFilter: "", - caCert: "" - }); + await updateMutateAsync({ + organizationId: currentOrg.id, + isActive: false, + url: "", + bindDN: "", + bindPass: "", + searchBase: "", + searchFilter: "", + uniqueUserAttribute: "", + groupSearchBase: "", + groupSearchFilter: "", + caCert: "" + }); - createNotification({ - text: "Successfully deleted OIDC configuration.", - type: "success" - }); - } catch { - createNotification({ - text: "Failed deleting OIDC configuration.", - type: "error" - }); - } + createNotification({ + text: "Successfully deleted OIDC configuration.", + type: "success" + }); }; const watchUrl = watch("url"); @@ -164,33 +157,17 @@ export const LDAPModal = ({ popUp, handlePopUpClose, handlePopUpToggle, hideDele }; const handleTestLDAPConnection = async () => { - try { - const result = await testLDAPConnection({ - url: watchUrl, - bindDN: watchBindDN, - bindPass: watchBindPass, - caCert: watchCaCert ?? "" - }); + await testLDAPConnection({ + url: watchUrl, + bindDN: watchBindDN, + bindPass: watchBindPass, + caCert: watchCaCert ?? "" + }); - if (!result) { - createNotification({ - text: "Failed to test the LDAP connection: Bind operation was unsuccessful", - type: "error" - }); - return; - } - - createNotification({ - text: "Successfully tested the LDAP connection: Bind operation was successful", - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to test the LDAP connection", - type: "error" - }); - } + createNotification({ + text: "Successfully tested the LDAP connection: Bind operation was successful", + type: "success" + }); }; return ( diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgGeneralAuthSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgGeneralAuthSection.tsx index 527239898..f8d5b3200 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgGeneralAuthSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgGeneralAuthSection.tsx @@ -45,69 +45,61 @@ export const OrgGeneralAuthSection = ({ const logout = useLogoutUser(); const handleEnforceOrgAuthToggle = async (value: boolean, type: EnforceAuthType) => { - try { - if (!currentOrg?.id) return; + if (!currentOrg?.id) return; - if (type === EnforceAuthType.SAML) { - if (!subscription?.samlSSO) { - handlePopUpOpen("upgradePlan"); - return; - } - - await mutateAsync({ - orgId: currentOrg?.id, - authEnforced: value - }); - } else if (type === EnforceAuthType.GOOGLE) { - if (!subscription?.enforceGoogleSSO) { - handlePopUpOpen("upgradePlan"); - return; - } - - await mutateAsync({ - orgId: currentOrg?.id, - googleSsoAuthEnforced: value - }); - } else if (type === EnforceAuthType.OIDC) { - if (!subscription?.oidcSSO) { - handlePopUpOpen("upgradePlan"); - return; - } - - await mutateAsync({ - orgId: currentOrg?.id, - authEnforced: value - }); - } else { - createNotification({ - text: `Invalid auth enforcement type ${type}`, - type: "error" - }); + if (type === EnforceAuthType.SAML) { + if (!subscription?.samlSSO) { + handlePopUpOpen("upgradePlan"); + return; } - createNotification({ - text: `Successfully ${value ? "enabled" : "disabled"} org-level auth`, - type: "success" + await mutateAsync({ + orgId: currentOrg?.id, + authEnforced: value }); - - if (value) { - await logout.mutateAsync(); - - if (type === EnforceAuthType.SAML) { - window.open(`/api/v1/sso/redirect/saml2/organizations/${currentOrg.slug}`); - } else if (type === EnforceAuthType.GOOGLE) { - window.open(`/api/v1/sso/redirect/google?org_slug=${currentOrg.slug}`); - } - - window.close(); + } else if (type === EnforceAuthType.GOOGLE) { + if (!subscription?.enforceGoogleSSO) { + handlePopUpOpen("upgradePlan"); + return; } - } catch (err) { - console.error(err); + + await mutateAsync({ + orgId: currentOrg?.id, + googleSsoAuthEnforced: value + }); + } else if (type === EnforceAuthType.OIDC) { + if (!subscription?.oidcSSO) { + handlePopUpOpen("upgradePlan"); + return; + } + + await mutateAsync({ + orgId: currentOrg?.id, + authEnforced: value + }); + } else { createNotification({ - text: (err as { response: { data: { message: string } } }).response.data.message, + text: `Invalid auth enforcement type ${type}`, type: "error" }); } + + createNotification({ + text: `Successfully ${value ? "enabled" : "disabled"} org-level auth`, + type: "success" + }); + + if (value) { + await logout.mutateAsync(); + + if (type === EnforceAuthType.SAML) { + window.open(`/api/v1/sso/redirect/saml2/organizations/${currentOrg.slug}`); + } else if (type === EnforceAuthType.GOOGLE) { + window.open(`/api/v1/sso/redirect/google?org_slug=${currentOrg.slug}`); + } + + window.close(); + } }; const handleEnableBypassOrgAuthToggle = async (value: boolean) => { diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgLDAPSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgLDAPSection.tsx index 9d94d595c..e4c4fec56 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgLDAPSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgLDAPSection.tsx @@ -31,31 +31,23 @@ export const OrgLDAPSection = (): JSX.Element => { const { mutateAsync: createMutateAsync } = useCreateLDAPConfig(); const handleLDAPToggle = async (value: boolean) => { - try { - if (!currentOrg?.id) return; - if (!subscription?.ldap) { - handlePopUpOpen("upgradePlan", { - isEnterpriseFeature: true - }); - return; - } - - await mutateAsync({ - organizationId: currentOrg?.id, - isActive: value - }); - - createNotification({ - text: `Successfully ${value ? "enabled" : "disabled"} LDAP`, - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: `Failed to ${value ? "enable" : "disable"} LDAP`, - type: "error" + if (!currentOrg?.id) return; + if (!subscription?.ldap) { + handlePopUpOpen("upgradePlan", { + isEnterpriseFeature: true }); + return; } + + await mutateAsync({ + organizationId: currentOrg?.id, + isActive: value + }); + + createNotification({ + text: `Successfully ${value ? "enabled" : "disabled"} LDAP`, + type: "success" + }); }; const addLDAPBtnClick = async () => { diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgOIDCSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgOIDCSection.tsx index 7e4b2b3ef..35962349b 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgOIDCSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgOIDCSection.tsx @@ -30,49 +30,41 @@ export const OrgOIDCSection = (): JSX.Element => { ] as const); const handleOIDCToggle = async (value: boolean) => { - try { - if (!currentOrg?.id) return; + if (!currentOrg?.id) return; - if (!subscription?.oidcSSO) { - handlePopUpOpen("upgradePlan"); - return; - } - - await mutateAsync({ - organizationId: currentOrg?.id, - isActive: value - }); - - createNotification({ - text: `Successfully ${value ? "enabled" : "disabled"} OIDC SSO`, - type: "success" - }); - } catch (err) { - console.error(err); + if (!subscription?.oidcSSO) { + handlePopUpOpen("upgradePlan"); + return; } + + await mutateAsync({ + organizationId: currentOrg?.id, + isActive: value + }); + + createNotification({ + text: `Successfully ${value ? "enabled" : "disabled"} OIDC SSO`, + type: "success" + }); }; const handleOIDCGroupManagement = async (value: boolean) => { - try { - if (!currentOrg?.id) return; + if (!currentOrg?.id) return; - if (!subscription?.oidcSSO) { - handlePopUpOpen("upgradePlan"); - return; - } - - await mutateAsync({ - organizationId: currentOrg?.id, - manageGroupMemberships: value - }); - - createNotification({ - text: `Successfully ${value ? "enabled" : "disabled"} OIDC group membership mapping`, - type: "success" - }); - } catch (err) { - console.error(err); + if (!subscription?.oidcSSO) { + handlePopUpOpen("upgradePlan"); + return; } + + await mutateAsync({ + organizationId: currentOrg?.id, + manageGroupMemberships: value + }); + + createNotification({ + text: `Successfully ${value ? "enabled" : "disabled"} OIDC group membership mapping`, + type: "success" + }); }; const addOidcButtonClick = async () => { diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgSSOSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgSSOSection.tsx index 5e9d4c211..80ed79551 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgSSOSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/OrgSSOSection.tsx @@ -34,63 +34,46 @@ export const OrgSSOSection = (): JSX.Element => { const { mutateAsync: createMutateAsync } = useCreateSSOConfig(); const handleSamlSSOToggle = async (value: boolean) => { - try { - if (!currentOrg?.id) return; + if (!currentOrg?.id) return; - if (!subscription?.samlSSO) { - handlePopUpOpen("upgradePlan", { - description: "You can use SAML SSO if you switch to Infisical's Pro plan." - }); - return; - } - - await mutateAsync({ - organizationId: currentOrg?.id, - isActive: value - }); - - createNotification({ - text: `Successfully ${value ? "enabled" : "disabled"} SAML SSO`, - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: `Failed to ${value ? "enable" : "disable"} SAML SSO`, - type: "error" + if (!subscription?.samlSSO) { + handlePopUpOpen("upgradePlan", { + description: "You can use SAML SSO if you switch to Infisical's Pro plan." }); + return; } + + await mutateAsync({ + organizationId: currentOrg?.id, + isActive: value + }); + + createNotification({ + text: `Successfully ${value ? "enabled" : "disabled"} SAML SSO`, + type: "success" + }); }; const handleSamlGroupManagement = async (value: boolean) => { - try { - if (!currentOrg?.id) return; + if (!currentOrg?.id) return; - if (!subscription?.samlSSO || !subscription?.groups) { - handlePopUpOpen("upgradePlan", { - isEnterpriseFeature: true, - description: - "You can use SAML group mapping if you switch to Infisical's Enterprise plan." - }); - return; - } - - await mutateAsync({ - organizationId: currentOrg?.id, - enableGroupSync: value - }); - - createNotification({ - text: `Successfully ${value ? "enabled" : "disabled"} SAML group membership mapping`, - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: `Failed to ${value ? "enable" : "disable"} SAML group membership mapping`, - type: "error" + if (!subscription?.samlSSO || !subscription?.groups) { + handlePopUpOpen("upgradePlan", { + isEnterpriseFeature: true, + description: "You can use SAML group mapping if you switch to Infisical's Enterprise plan." }); + return; } + + await mutateAsync({ + organizationId: currentOrg?.id, + enableGroupSync: value + }); + + createNotification({ + text: `Successfully ${value ? "enabled" : "disabled"} SAML group membership mapping`, + type: "success" + }); }; const addSSOBtnClick = async () => { diff --git a/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/DeleteProjectTemplateModal.tsx b/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/DeleteProjectTemplateModal.tsx index 8ccdb0191..33b54afca 100644 --- a/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/DeleteProjectTemplateModal.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/DeleteProjectTemplateModal.tsx @@ -16,25 +16,16 @@ export const DeleteProjectTemplateModal = ({ isOpen, onOpenChange, template }: P const { id: templateId, name } = template; const handleDeleteProjectTemplate = async () => { - try { - await deleteTemplate.mutateAsync({ - templateId - }); + await deleteTemplate.mutateAsync({ + templateId + }); - createNotification({ - text: "Successfully removed project template", - type: "success" - }); + createNotification({ + text: "Successfully removed project template", + type: "success" + }); - onOpenChange(false); - } catch (err) { - console.error(err); - - createNotification({ - text: "Failed remove project template", - type: "error" - }); - } + onOpenChange(false); }; return ( diff --git a/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/EditProjectTemplateSection/components/EditProjectTemplate.tsx b/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/EditProjectTemplateSection/components/EditProjectTemplate.tsx index 7a99af1d6..afa8261b3 100644 --- a/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/EditProjectTemplateSection/components/EditProjectTemplate.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/EditProjectTemplateSection/components/EditProjectTemplate.tsx @@ -31,22 +31,14 @@ export const EditProjectTemplate = ({ isInfisicalTemplate, projectTemplate, onBa const deleteProjectTemplate = useDeleteProjectTemplate(); const handleRemoveTemplate = async () => { - try { - await deleteProjectTemplate.mutateAsync({ - templateId - }); - createNotification({ - text: "Successfully removed project template", - type: "success" - }); - onBack(); - } catch (error) { - console.error(error); - createNotification({ - text: "Failed to remove project template", - type: "error" - }); - } + await deleteProjectTemplate.mutateAsync({ + templateId + }); + createNotification({ + text: "Successfully removed project template", + type: "success" + }); + onBack(); handlePopUpClose("removeTemplate"); }; diff --git a/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/EditProjectTemplateSection/components/ProjectTemplateEditRoleForm.tsx b/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/EditProjectTemplateSection/components/ProjectTemplateEditRoleForm.tsx index 09a2a69af..e54eaf19d 100644 --- a/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/EditProjectTemplateSection/components/ProjectTemplateEditRoleForm.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/EditProjectTemplateSection/components/ProjectTemplateEditRoleForm.tsx @@ -57,31 +57,23 @@ export const ProjectTemplateEditRoleForm = ({ const updateProjectTemplate = useUpdateProjectTemplate(); const onSubmit = async (form: TFormSchema) => { - try { - await updateProjectTemplate.mutateAsync({ - templateId: projectTemplate.id, - roles: [ - ...projectTemplate.roles.filter( - (r) => r.slug !== role?.slug && isCustomProjectRole(r.slug) // filter out default roles as well - ), - { - ...form, - permissions: formRolePermission2API(form.permissions) - } - ] - }); - onGoBack(); - createNotification({ - text: "Template roles successfully updated", - type: "success" - }); - } catch (e: any) { - console.error(e); - createNotification({ - text: "Failed to update template roles", - type: "error" - }); - } + await updateProjectTemplate.mutateAsync({ + templateId: projectTemplate.id, + roles: [ + ...projectTemplate.roles.filter( + (r) => r.slug !== role?.slug && isCustomProjectRole(r.slug) // filter out default roles as well + ), + { + ...form, + permissions: formRolePermission2API(form.permissions) + } + ] + }); + onGoBack(); + createNotification({ + text: "Template roles successfully updated", + type: "success" + }); }; return ( diff --git a/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/EditProjectTemplateSection/components/ProjectTemplateEnvironmentsForm.tsx b/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/EditProjectTemplateSection/components/ProjectTemplateEnvironmentsForm.tsx index ec1899369..f11e9ecc8 100644 --- a/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/EditProjectTemplateSection/components/ProjectTemplateEnvironmentsForm.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/EditProjectTemplateSection/components/ProjectTemplateEnvironmentsForm.tsx @@ -68,28 +68,20 @@ export const ProjectTemplateEnvironmentsForm = ({ const updateProjectTemplate = useUpdateProjectTemplate(); const onFormSubmit = async (form: TFormSchema) => { - try { - const { environments: updatedEnvs } = await updateProjectTemplate.mutateAsync({ - environments: form.environments?.map((env, index) => ({ - ...env, - position: index + 1 - })), - templateId: projectTemplate.id - }); + const { environments: updatedEnvs } = await updateProjectTemplate.mutateAsync({ + environments: form.environments?.map((env, index) => ({ + ...env, + position: index + 1 + })), + templateId: projectTemplate.id + }); - reset({ environments: updatedEnvs }); + reset({ environments: updatedEnvs }); - createNotification({ - text: "Project template updated successfully", - type: "success" - }); - } catch (e: any) { - console.error(e); - createNotification({ - text: e.message ?? "Failed to update project template", - type: "error" - }); - } + createNotification({ + text: "Project template updated successfully", + type: "success" + }); }; const isEnvironmentLimitExceeded = diff --git a/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/EditProjectTemplateSection/components/ProjectTemplateRolesSection.tsx b/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/EditProjectTemplateSection/components/ProjectTemplateRolesSection.tsx index d65f7d785..cd5e41d2a 100644 --- a/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/EditProjectTemplateSection/components/ProjectTemplateRolesSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/EditProjectTemplateSection/components/ProjectTemplateRolesSection.tsx @@ -42,26 +42,18 @@ export const ProjectTemplateRolesSection = ({ projectTemplate, isInfisicalTempla const updateProjectTemplate = useUpdateProjectTemplate(); const handleRemoveRole = async (slug: string) => { - try { - await updateProjectTemplate.mutateAsync({ - templateId: projectTemplate.id, - roles: projectTemplate.roles.filter( - (role) => role.slug !== slug && isCustomProjectRole(role.slug) // filter out default roles as well - ) - }); + await updateProjectTemplate.mutateAsync({ + templateId: projectTemplate.id, + roles: projectTemplate.roles.filter( + (role) => role.slug !== slug && isCustomProjectRole(role.slug) // filter out default roles as well + ) + }); - createNotification({ - text: "Successfully removed role from template", - type: "success" - }); - handlePopUpClose("removeRole"); - } catch (e) { - console.error(e); - createNotification({ - text: "Error removing role from template", - type: "error" - }); - } + createNotification({ + text: "Successfully removed role from template", + type: "success" + }); + handlePopUpClose("removeRole"); }; const editRole = popUp?.editRole?.data as TProjectRole; diff --git a/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/ProjectTemplateDetailsModal.tsx b/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/ProjectTemplateDetailsModal.tsx index 6010d61f1..17224536d 100644 --- a/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/ProjectTemplateDetailsModal.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/ProjectTemplatesTab/components/ProjectTemplateDetailsModal.tsx @@ -93,25 +93,15 @@ const ProjectTemplateForm = ({ onComplete, projectTemplate }: FormProps) => { ? updateProjectTemplate.mutateAsync({ templateId: projectTemplate.id, ...data }) : createProjectTemplate.mutateAsync({ ...data }); - try { - const template = await mutation; - createNotification({ - text: `Successfully ${ - projectTemplate ? "updated template details" : "created project template" - }`, - type: "success" - }); + const template = await mutation; + createNotification({ + text: `Successfully ${ + projectTemplate ? "updated template details" : "created project template" + }`, + type: "success" + }); - onComplete(template); - } catch (err) { - console.error(err); - createNotification({ - text: `Failed to ${ - projectTemplate ? "update template details" : "create project template" - }`, - type: "error" - }); - } + onComplete(template); }; return ( diff --git a/frontend/src/pages/organization/UserDetailsByIDPage/components/UserOrgMembershipModal.tsx b/frontend/src/pages/organization/UserDetailsByIDPage/components/UserOrgMembershipModal.tsx index 59d83749c..c7ebe8efe 100644 --- a/frontend/src/pages/organization/UserDetailsByIDPage/components/UserOrgMembershipModal.tsx +++ b/frontend/src/pages/organization/UserDetailsByIDPage/components/UserOrgMembershipModal.tsx @@ -87,34 +87,23 @@ export const UserOrgMembershipModal = ({ popUp, handlePopUpOpen, handlePopUpTogg }, [popUp?.orgMembership?.data, roles]); const onFormSubmit = async ({ role, metadata }: FormData) => { - try { - if (!orgId) return; + if (!orgId) return; - await updateOrgMembership({ - organizationId: orgId, - membershipId: popUpData.membershipId, - role: role.slug, - metadata - }); + await updateOrgMembership({ + organizationId: orgId, + membershipId: popUpData.membershipId, + role: role.slug, + metadata + }); - handlePopUpToggle("orgMembership", false); + handlePopUpToggle("orgMembership", false); - createNotification({ - text: "Successfully updated user organization role", - type: "success" - }); + createNotification({ + text: "Successfully updated user organization role", + type: "success" + }); - reset(); - } catch (err) { - console.error(err); - const error = err as any; - const text = error?.response?.data?.message ?? "Failed to update user organization role"; - - createNotification({ - text, - type: "error" - }); - } + reset(); }; return ( diff --git a/frontend/src/pages/organization/UserDetailsByIDPage/components/UserProjectsSection/UserAddToProjectModal.tsx b/frontend/src/pages/organization/UserDetailsByIDPage/components/UserProjectsSection/UserAddToProjectModal.tsx index 572be1d81..013358c5f 100644 --- a/frontend/src/pages/organization/UserDetailsByIDPage/components/UserProjectsSection/UserAddToProjectModal.tsx +++ b/frontend/src/pages/organization/UserDetailsByIDPage/components/UserProjectsSection/UserAddToProjectModal.tsx @@ -67,30 +67,19 @@ const UserAddToProjectModalChild = ({ membershipId, popUp, handlePopUpToggle }: }, [workspaces, projectMemberships]); const onFormSubmit = async ({ projectId }: FormData) => { - try { - await addUserToWorkspaceNonE2EE({ - projectId, - usernames: [popupData.username], - orgId - }); + await addUserToWorkspaceNonE2EE({ + projectId, + usernames: [popupData.username], + orgId + }); - createNotification({ - text: "Successfully added user to project", - type: "success" - }); + createNotification({ + text: "Successfully added user to project", + type: "success" + }); - reset(); - handlePopUpToggle("addUserToProject", false); - } catch (err) { - console.error(err); - const error = err as any; - const text = error?.response?.data?.message ?? "Failed to add identity to project"; - - createNotification({ - text, - type: "error" - }); - } + reset(); + handlePopUpToggle("addUserToProject", false); }; return ( diff --git a/frontend/src/pages/organization/UserDetailsByIDPage/components/UserProjectsSection/UserGroupsSection.tsx b/frontend/src/pages/organization/UserDetailsByIDPage/components/UserProjectsSection/UserGroupsSection.tsx index 8e7cf3ce8..fafa7aff3 100644 --- a/frontend/src/pages/organization/UserDetailsByIDPage/components/UserProjectsSection/UserGroupsSection.tsx +++ b/frontend/src/pages/organization/UserDetailsByIDPage/components/UserProjectsSection/UserGroupsSection.tsx @@ -20,25 +20,18 @@ export const UserGroupsSection = ({ orgMembership }: Props) => { const { mutateAsync: removeUserFromGroup } = useRemoveUserFromGroup(); const handleRemoveUserFromGroup = useCallback(async (groupId: string, groupSlug: string) => { - try { - await removeUserFromGroup({ - groupId, - slug: groupSlug, - username: orgMembership.user.username - }); + await removeUserFromGroup({ + groupId, + slug: groupSlug, + username: orgMembership.user.username + }); - createNotification({ - type: "success", - text: "User removed from group successfully" - }); + createNotification({ + type: "success", + text: "User removed from group successfully" + }); - handlePopUpClose("removeUserFromGroup"); - } catch { - createNotification({ - type: "error", - text: "Failed to remove user from group" - }); - } + handlePopUpClose("removeUserFromGroup"); }, []); return ( diff --git a/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupModal.tsx b/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupModal.tsx index a279bd1b0..f8788762c 100644 --- a/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupModal.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupModal.tsx @@ -62,26 +62,19 @@ const Content = ({ popUp, handlePopUpToggle }: Props) => { }); const onFormSubmit = async ({ group, role }: FormData) => { - try { - await addGroupToWorkspaceMutateAsync({ - projectId: currentProject?.id || "", - groupId: group.id, - role: role.slug || undefined - }); + await addGroupToWorkspaceMutateAsync({ + projectId: currentProject?.id || "", + groupId: group.id, + role: role.slug || undefined + }); - reset(); - handlePopUpToggle("group", false); + reset(); + handlePopUpToggle("group", false); - createNotification({ - text: "Successfully added group to project", - type: "success" - }); - } catch { - createNotification({ - text: "Failed to add group to project", - type: "error" - }); - } + createNotification({ + text: "Successfully added group to project", + type: "success" + }); }; return filteredGroupMembershipOrgs.length ? ( diff --git a/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupsSection.tsx b/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupsSection.tsx index 115be60fe..bfac55bc2 100644 --- a/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupsSection.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupsSection.tsx @@ -43,28 +43,17 @@ export const GroupsSection = () => { }; const onRemoveGroupSubmit = async (groupId: string) => { - try { - await deleteMutateAsync({ - groupId, - projectId: currentProject?.id || "" - }); + await deleteMutateAsync({ + groupId, + projectId: currentProject?.id || "" + }); - createNotification({ - text: "Successfully removed identity from project", - type: "success" - }); + createNotification({ + text: "Successfully removed identity from project", + type: "success" + }); - handlePopUpClose("deleteGroup"); - } catch (err) { - console.error(err); - const error = err as any; - const text = error?.response?.data?.message ?? "Failed to remove group from project"; - - createNotification({ - text, - type: "error" - }); - } + handlePopUpClose("deleteGroup"); }; return ( diff --git a/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx b/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx index 17dbdca27..48e01e2aa 100644 --- a/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx @@ -119,28 +119,17 @@ export const IdentityTab = withProjectPermission( ] as const); const onRemoveIdentitySubmit = async (identityId: string) => { - try { - await deleteMutateAsync({ - identityId, - projectId - }); + await deleteMutateAsync({ + identityId, + projectId + }); - createNotification({ - text: "Successfully removed identity from project", - type: "success" - }); + createNotification({ + text: "Successfully removed identity from project", + type: "success" + }); - handlePopUpClose("deleteIdentity"); - } catch (err) { - console.error(err); - const error = err as any; - const text = error?.response?.data?.message ?? "Failed to remove identity from project"; - - createNotification({ - text, - type: "error" - }); - } + handlePopUpClose("deleteIdentity"); }; const handleSort = (column: ProjectIdentityOrderBy) => { diff --git a/frontend/src/pages/project/AccessControlPage/components/IdentityTab/components/IdentityModal.tsx b/frontend/src/pages/project/AccessControlPage/components/IdentityTab/components/IdentityModal.tsx index 55f22c5ae..3274185b1 100644 --- a/frontend/src/pages/project/AccessControlPage/components/IdentityTab/components/IdentityModal.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/IdentityTab/components/IdentityModal.tsx @@ -104,40 +104,29 @@ const Content = ({ popUp, handlePopUpToggle }: Props) => { }); const onFormSubmit = async ({ identity, role }: FormData) => { - try { - await addIdentityToWorkspaceMutateAsync({ - projectId, - identityId: identity.id, - role: role.slug || undefined - }); + await addIdentityToWorkspaceMutateAsync({ + projectId, + identityId: identity.id, + role: role.slug || undefined + }); - createNotification({ - text: "Successfully added identity to project", - type: "success" - }); + createNotification({ + text: "Successfully added identity to project", + type: "success" + }); - const nextAvailableMembership = filteredIdentityMembershipOrgs.filter( - (membership) => membership.identity.id !== identity.id - )[0]; + const nextAvailableMembership = filteredIdentityMembershipOrgs.filter( + (membership) => membership.identity.id !== identity.id + )[0]; - // prevents combobox from displaying previously added identity - reset({ - identity: { - name: nextAvailableMembership?.identity.name, - id: nextAvailableMembership?.identity.id - } - }); - handlePopUpToggle("identity", false); - } catch (err) { - console.error(err); - const error = err as any; - const text = error?.response?.data?.message ?? "Failed to add identity to project"; - - createNotification({ - text, - type: "error" - }); - } + // prevents combobox from displaying previously added identity + reset({ + identity: { + name: nextAvailableMembership?.identity.name, + id: nextAvailableMembership?.identity.id + } + }); + handlePopUpToggle("identity", false); }; if (isMembershipsLoading || isRolesLoading) diff --git a/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/AddMemberModal.tsx b/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/AddMemberModal.tsx index 3477440fe..cb6934240 100644 --- a/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/AddMemberModal.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/AddMemberModal.tsx @@ -110,65 +110,56 @@ export const AddMemberModal = ({ popUp, handlePopUpToggle }: Props) => { if (!selectedMembers) return; - try { - if (currentProject.version === ProjectVersion.V1) { + if (currentProject.version === ProjectVersion.V1) { + createNotification({ + type: "error", + text: "Please upgrade your project to invite new members to the project." + }); + } else { + const inviteeEmails = selectedMembers + .map((member) => { + if (!member) return null; + + if (member.user.username) { + return member.user.username; + } + + if (member.user.email) { + return member.user.email; + } + + return null; + }) + .filter(Boolean) as string[]; + + if (inviteeEmails.length !== selectedMembers.length) { createNotification({ - type: "error", - text: "Please upgrade your project to invite new members to the project." + text: "Failed to add users to project. One or more users were invalid.", + type: "error" + }); + return; + } + + if (newInvitees.length) { + await addMemberToOrg({ + inviteeEmails: newInvitees, + organizationId: orgId, + organizationRoleSlug: ProjectMembershipRole.Member // only applies to new invites + }); + } + if (newInvitees.length || inviteeEmails.length) { + await addUserToProject({ + usernames: [...inviteeEmails, ...newInvitees], + orgId, + projectId: currentProject.id, + roleSlugs: projectRoleSlugs.map((role) => role.slug) }); - } else { - const inviteeEmails = selectedMembers - .map((member) => { - if (!member) return null; - - if (member.user.username) { - return member.user.username; - } - - if (member.user.email) { - return member.user.email; - } - - return null; - }) - .filter(Boolean) as string[]; - - if (inviteeEmails.length !== selectedMembers.length) { - createNotification({ - text: "Failed to add users to project. One or more users were invalid.", - type: "error" - }); - return; - } - - if (newInvitees.length) { - await addMemberToOrg({ - inviteeEmails: newInvitees, - organizationId: orgId, - organizationRoleSlug: ProjectMembershipRole.Member // only applies to new invites - }); - } - if (newInvitees.length || inviteeEmails.length) { - await addUserToProject({ - usernames: [...inviteeEmails, ...newInvitees], - orgId, - projectId: currentProject.id, - roleSlugs: projectRoleSlugs.map((role) => role.slug) - }); - } } - createNotification({ - text: "Successfully added user to the project", - type: "success" - }); - } catch (error) { - console.error(error); - createNotification({ - text: "Failed to add user to project", - type: "error" - }); - return; } + createNotification({ + text: "Successfully added user to the project", + type: "success" + }); handlePopUpToggle("addMember", false); reset(); }; diff --git a/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MemberRoleForm/SpecificPrivilegeSection.tsx b/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MemberRoleForm/SpecificPrivilegeSection.tsx index 33c0d1077..c3eb0c9aa 100644 --- a/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MemberRoleForm/SpecificPrivilegeSection.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MemberRoleForm/SpecificPrivilegeSection.tsx @@ -182,21 +182,14 @@ export const SpecificPrivilegeSecretForm = ({ } if (deleteUserPrivilege.isPending) return; - try { - await deleteUserPrivilege.mutateAsync({ - privilegeId: privilege.id, - projectMembershipId: privilege.projectMembershipId - }); - createNotification({ - type: "success", - text: "Successfully deleted privilege" - }); - } catch { - createNotification({ - type: "error", - text: "Failed to delete privilege" - }); - } + await deleteUserPrivilege.mutateAsync({ + privilegeId: privilege.id, + projectMembershipId: privilege.projectMembershipId + }); + createNotification({ + type: "success", + text: "Successfully deleted privilege" + }); }; // This is used for requesting access additional privileges, not directly creating a privilege! diff --git a/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MembersSection.tsx b/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MembersSection.tsx index 5904f12fb..7ec7bd4bc 100644 --- a/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MembersSection.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MembersSection.tsx @@ -35,23 +35,15 @@ export const MembersSection = () => { if (!currentOrg?.id) return; if (!currentProject?.id) return; - try { - await removeUserFromWorkspace({ - projectId: currentProject.id, - usernames: [username], - orgId: currentOrg.id - }); - createNotification({ - text: "Successfully removed user from project", - type: "success" - }); - } catch (error) { - console.error(error); - createNotification({ - text: "Failed to remove user from the project", - type: "error" - }); - } + await removeUserFromWorkspace({ + projectId: currentProject.id, + usernames: [username], + orgId: currentOrg.id + }); + createNotification({ + text: "Successfully removed user from project", + type: "success" + }); handlePopUpClose("removeMember"); }; diff --git a/frontend/src/pages/project/AccessControlPage/components/ServiceTokenTab/components/ServiceTokenSection/AddServiceTokenModal.tsx b/frontend/src/pages/project/AccessControlPage/components/ServiceTokenTab/components/ServiceTokenSection/AddServiceTokenModal.tsx index 873422f3c..25d943f4a 100644 --- a/frontend/src/pages/project/AccessControlPage/components/ServiceTokenTab/components/ServiceTokenSection/AddServiceTokenModal.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/ServiceTokenTab/components/ServiceTokenSection/AddServiceTokenModal.tsx @@ -6,7 +6,6 @@ import { useTranslation } from "react-i18next"; import { faCheck, faCopy, faPlus, faTrashCan } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { zodResolver } from "@hookform/resolvers/zod"; -import { AxiosError } from "axios"; import { z } from "zod"; import { createNotification } from "@app/components/notifications"; @@ -110,45 +109,29 @@ const ServiceTokenForm = () => { }; const onFormSubmit = async ({ name, scopes, expiresIn, permissions }: FormData) => { - try { - if (!currentProject?.id) return; + if (!currentProject?.id) return; - const randomBytes = crypto.randomBytes(16).toString("hex"); + const randomBytes = crypto.randomBytes(16).toString("hex"); - const { serviceToken } = await createServiceToken.mutateAsync({ - encryptedKey: "", - iv: "", - tag: "", - scopes, - expiresIn: Number(expiresIn), - name, - workspaceId: currentProject.id, - randomBytes, - permissions: Object.entries(permissions) - .filter(([, permissionsValue]) => permissionsValue) - .map(([permissionsKey]) => permissionsKey) - }); + const { serviceToken } = await createServiceToken.mutateAsync({ + encryptedKey: "", + iv: "", + tag: "", + scopes, + expiresIn: Number(expiresIn), + name, + workspaceId: currentProject.id, + randomBytes, + permissions: Object.entries(permissions) + .filter(([, permissionsValue]) => permissionsValue) + .map(([permissionsKey]) => permissionsKey) + }); - setToken(serviceToken); - createNotification({ - text: "Successfully created a service token", - type: "success" - }); - } catch (err) { - console.error(err); - const axiosError = err as AxiosError; - if (axiosError?.response?.status === 401) { - createNotification({ - text: "You do not have access to the selected environment/path", - type: "error" - }); - } else { - createNotification({ - text: "Failed to create a service token", - type: "error" - }); - } - } + setToken(serviceToken); + createNotification({ + text: "Successfully created a service token", + type: "success" + }); }; return !hasServiceToken ? ( diff --git a/frontend/src/pages/project/AccessControlPage/components/ServiceTokenTab/components/ServiceTokenSection/ServiceTokenSection.tsx b/frontend/src/pages/project/AccessControlPage/components/ServiceTokenTab/components/ServiceTokenSection/ServiceTokenSection.tsx index 64b042c35..6f2e82e02 100644 --- a/frontend/src/pages/project/AccessControlPage/components/ServiceTokenTab/components/ServiceTokenSection/ServiceTokenSection.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/ServiceTokenTab/components/ServiceTokenSection/ServiceTokenSection.tsx @@ -28,23 +28,15 @@ export const ServiceTokenSection = withProjectPermission( ] as const); const onDeleteApproved = async () => { - try { - deleteServiceToken.mutateAsync( - (popUp?.deleteAPITokenConfirmation?.data as DeleteModalData)?.id - ); - createNotification({ - text: "Successfully deleted service token", - type: "success" - }); + await deleteServiceToken.mutateAsync( + (popUp?.deleteAPITokenConfirmation?.data as DeleteModalData)?.id + ); + createNotification({ + text: "Successfully deleted service token", + type: "success" + }); - handlePopUpClose("deleteAPITokenConfirmation"); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to delete service token", - type: "error" - }); - } + handlePopUpClose("deleteAPITokenConfirmation"); }; return ( diff --git a/frontend/src/pages/project/GroupDetailsByIDPage/components/GroupDetailsSection.tsx b/frontend/src/pages/project/GroupDetailsByIDPage/components/GroupDetailsSection.tsx index cca6cabfd..368a740c2 100644 --- a/frontend/src/pages/project/GroupDetailsByIDPage/components/GroupDetailsSection.tsx +++ b/frontend/src/pages/project/GroupDetailsByIDPage/components/GroupDetailsSection.tsx @@ -35,38 +35,27 @@ export const GroupDetailsSection = ({ groupMembership }: Props) => { const navigate = useNavigate(); const onRemoveGroupSubmit = async () => { - try { - await deleteMutateAsync({ - groupId: groupMembership.group.id, + await deleteMutateAsync({ + groupId: groupMembership.group.id, + projectId: currentProject.id + }); + + createNotification({ + text: "Successfully removed group from project", + type: "success" + }); + + navigate({ + to: `${getProjectBaseURL(currentProject.type)}/access-management`, + params: { projectId: currentProject.id - }); + }, + search: { + selectedTab: "groups" + } + }); - createNotification({ - text: "Successfully removed group from project", - type: "success" - }); - - navigate({ - to: `${getProjectBaseURL(currentProject.type)}/access-management`, - params: { - projectId: currentProject.id - }, - search: { - selectedTab: "groups" - } - }); - - handlePopUpClose("deleteGroup"); - } catch (err) { - console.error(err); - const error = err as any; - const text = error?.response?.data?.message ?? "Failed to remove group from project"; - - createNotification({ - text, - type: "error" - }); - } + handlePopUpClose("deleteGroup"); }; return ( diff --git a/frontend/src/pages/project/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx b/frontend/src/pages/project/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx index e49e05022..65a2a5710 100644 --- a/frontend/src/pages/project/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx +++ b/frontend/src/pages/project/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx @@ -76,35 +76,24 @@ const Page = () => { }; const onRemoveIdentitySubmit = async () => { - try { - await deleteMutateAsync({ - identityId, + await deleteMutateAsync({ + identityId, + projectId + }); + createNotification({ + text: "Successfully removed identity from project", + type: "success" + }); + handlePopUpClose("deleteIdentity"); + navigate({ + to: `${getProjectBaseURL(currentProject.type)}/access-management` as const, + params: { projectId - }); - createNotification({ - text: "Successfully removed identity from project", - type: "success" - }); - handlePopUpClose("deleteIdentity"); - navigate({ - to: `${getProjectBaseURL(currentProject.type)}/access-management` as const, - params: { - projectId - }, - search: { - selectedTab: "identities" - } - }); - } catch (err) { - console.error(err); - const error = err as any; - const text = error?.response?.data?.message ?? "Failed to remove identity from project"; - - createNotification({ - text, - type: "error" - }); - } + }, + search: { + selectedTab: "identities" + } + }); }; if (isMembershipDetailsLoading) { diff --git a/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx b/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx index 2b85291d0..b4b83bfb4 100644 --- a/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx +++ b/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx @@ -83,29 +83,21 @@ export const Page = () => { const handleRemoveUser = async () => { if (!currentOrg?.id || !currentProject?.id || !membershipDetails?.user?.username) return; - try { - await removeUserFromWorkspace({ - projectId, - usernames: [membershipDetails?.user?.username], - orgId: currentOrg.id - }); - createNotification({ - text: "Successfully removed user from project", - type: "success" - }); - navigate({ - to: `${getProjectBaseURL(currentProject.type)}/access-management` as const, - params: { - projectId: currentProject.id - } - }); - } catch (error) { - console.error(error); - createNotification({ - text: "Failed to remove user from the project", - type: "error" - }); - } + await removeUserFromWorkspace({ + projectId, + usernames: [membershipDetails?.user?.username], + orgId: currentOrg.id + }); + createNotification({ + text: "Successfully removed user from project", + type: "success" + }); + navigate({ + to: `${getProjectBaseURL(currentProject.type)}/access-management` as const, + params: { + projectId: currentProject.id + } + }); handlePopUpClose("removeMember"); }; diff --git a/frontend/src/pages/project/RoleDetailsBySlugPage/RoleDetailsBySlugPage.tsx b/frontend/src/pages/project/RoleDetailsBySlugPage/RoleDetailsBySlugPage.tsx index 9650b3fb8..9a87266c4 100644 --- a/frontend/src/pages/project/RoleDetailsBySlugPage/RoleDetailsBySlugPage.tsx +++ b/frontend/src/pages/project/RoleDetailsBySlugPage/RoleDetailsBySlugPage.tsx @@ -53,38 +53,27 @@ const Page = () => { ] as const); const onDeleteRoleSubmit = async () => { - try { - if (!currentProject?.slug || !data?.id) return; + if (!currentProject?.slug || !data?.id) return; - await deleteProjectRole({ - projectId, - id: data.id - }); + await deleteProjectRole({ + projectId, + id: data.id + }); - createNotification({ - text: "Successfully deleted project role", - type: "success" - }); - handlePopUpClose("deleteRole"); - navigate({ - to: `${getProjectBaseURL(currentProject.type)}/access-management` as const, - params: { - projectId - }, - search: { - selectedTab: ProjectAccessControlTabs.Roles - } - }); - } catch (err) { - console.error(err); - const error = err as any; - const text = error?.response?.data?.message ?? "Failed to delete project role"; - - createNotification({ - text, - type: "error" - }); - } + createNotification({ + text: "Successfully deleted project role", + type: "success" + }); + handlePopUpClose("deleteRole"); + navigate({ + to: `${getProjectBaseURL(currentProject.type)}/access-management` as const, + params: { + projectId + }, + search: { + selectedTab: ProjectAccessControlTabs.Roles + } + }); }; const isCustomRole = !Object.values(ProjectMembershipRole).includes( diff --git a/frontend/src/pages/project/RoleDetailsBySlugPage/components/RoleModal.tsx b/frontend/src/pages/project/RoleDetailsBySlugPage/components/RoleModal.tsx index 43467876b..03525eac5 100644 --- a/frontend/src/pages/project/RoleDetailsBySlugPage/components/RoleModal.tsx +++ b/frontend/src/pages/project/RoleDetailsBySlugPage/components/RoleModal.tsx @@ -76,63 +76,54 @@ export const RoleModal = ({ popUp, handlePopUpToggle }: Props) => { }, [role]); const onFormSubmit = async ({ name, description, slug }: FormData) => { - try { - if (!projectId) return; + if (!projectId) return; - if (role) { - // update - await updateProjectRole({ - id: role.id, - projectId, - name, - description, - slug - }); - - handlePopUpToggle("role", false); - if (slug) { - navigate({ - to: `${getProjectBaseURL(currentProject.type)}/roles/$roleSlug` as const, - params: { - roleSlug: slug, - projectId - } - }); - } - } else { - // create - const newRole = await createProjectRole({ - projectId, - name, - description, - slug, - permissions: [] - }); + if (role) { + // update + await updateProjectRole({ + id: role.id, + projectId, + name, + description, + slug + }); + handlePopUpToggle("role", false); + if (slug) { navigate({ to: `${getProjectBaseURL(currentProject.type)}/roles/$roleSlug` as const, params: { - roleSlug: newRole.slug, + roleSlug: slug, projectId } }); - handlePopUpToggle("role", false); } - - createNotification({ - text: `Successfully ${popUp?.role?.data ? "updated" : "created"} role`, - type: "success" + } else { + // create + const newRole = await createProjectRole({ + projectId, + name, + description, + slug, + permissions: [] }); - reset(); - } catch { - const text = `Failed to ${popUp?.role?.data ? "update" : "create"} role`; - - createNotification({ - text, - type: "error" + navigate({ + to: `${getProjectBaseURL(currentProject.type)}/roles/$roleSlug` as const, + params: { + roleSlug: newRole.slug, + projectId + } }); + handlePopUpToggle("role", false); } + + createNotification({ + text: `Successfully ${popUp?.role?.data ? "updated" : "created"} role`, + type: "success" + }); + + reset(); }; return ( diff --git a/frontend/src/pages/project/SettingsPage/components/DeleteProjectProtection/DeleteProjectProtection.tsx b/frontend/src/pages/project/SettingsPage/components/DeleteProjectProtection/DeleteProjectProtection.tsx index 7160e9adf..3cb0c9371 100644 --- a/frontend/src/pages/project/SettingsPage/components/DeleteProjectProtection/DeleteProjectProtection.tsx +++ b/frontend/src/pages/project/SettingsPage/components/DeleteProjectProtection/DeleteProjectProtection.tsx @@ -10,24 +10,16 @@ export const DeleteProjectProtection = () => { const { mutateAsync } = useUpdateProject(); const handleToggleDeleteProjectProtection = async (state: boolean) => { - try { - await mutateAsync({ - projectId, - hasDeleteProtection: state - }); + await mutateAsync({ + projectId, + hasDeleteProtection: state + }); - const text = `Successfully ${state ? "enabled" : "disabled"} delete protection`; - createNotification({ - text, - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to update delete protection", - type: "error" - }); - } + const text = `Successfully ${state ? "enabled" : "disabled"} delete protection`; + createNotification({ + text, + type: "success" + }); }; return ( diff --git a/frontend/src/pages/project/SettingsPage/components/DeleteProjectSection/DeleteProjectSection.tsx b/frontend/src/pages/project/SettingsPage/components/DeleteProjectSection/DeleteProjectSection.tsx index fb66f0a74..58db07484 100644 --- a/frontend/src/pages/project/SettingsPage/components/DeleteProjectSection/DeleteProjectSection.tsx +++ b/frontend/src/pages/project/SettingsPage/components/DeleteProjectSection/DeleteProjectSection.tsx @@ -68,12 +68,6 @@ export const DeleteProjectSection = () => { to: "/organization/projects" }); handlePopUpClose("deleteWorkspace"); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to delete project", - type: "error" - }); } finally { setIsDeleting.off(); } @@ -118,12 +112,6 @@ export const DeleteProjectSection = () => { navigate({ to: "/organization/projects" }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to leave project", - type: "error" - }); } finally { setIsLeaving.off(); } From cc02d4d4d93e7748c6b894e5b55a8bbfa6bb7cfa Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Mon, 3 Nov 2025 22:43:05 +0530 Subject: [PATCH 44/79] fix: folder name sorting --- .../secret-folder/secret-folder-dal.ts | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/backend/src/services/secret-folder/secret-folder-dal.ts b/backend/src/services/secret-folder/secret-folder-dal.ts index 7dfeaddcf..c999b69d2 100644 --- a/backend/src/services/secret-folder/secret-folder-dal.ts +++ b/backend/src/services/secret-folder/secret-folder-dal.ts @@ -419,13 +419,18 @@ export const secretFolderDALFactory = (db: TDbClient) => { .select( selectAllTableCols(TableName.SecretFolder), db.raw( - `DENSE_RANK() OVER (ORDER BY ${TableName.SecretFolder}."name" ${ - orderDirection ?? OrderByDirection.ASC - }) as rank` + `DENSE_RANK() OVER (ORDER BY CASE WHEN ${TableName.SecretFolder}."name" LIKE '\\_%' THEN ${orderDirection === OrderByDirection.ASC ? "0" : "1"} ELSE ${orderDirection === OrderByDirection.ASC ? "1" : "0"} END, + LOWER(${TableName.SecretFolder}."name") ${orderDirection}, + ${TableName.SecretFolder}."name" ${orderDirection} + ) as rank` ), db.ref("slug").withSchema(TableName.Environment).as("environment") ) - .orderBy(`${TableName.SecretFolder}.${orderBy}`, orderDirection); + .orderByRaw( + `CASE WHEN ${TableName.SecretFolder}.${orderBy} LIKE '\\_%' THEN ${orderDirection === OrderByDirection.ASC ? "0" : "1"} ELSE ${orderDirection === OrderByDirection.ASC ? "1" : "0"} END` + ) + .orderByRaw(`LOWER(${TableName.SecretFolder}.${orderBy}) ${orderDirection}`) + .orderByRaw(`${TableName.SecretFolder}.${orderBy} ${orderDirection}`); if (limit) { const rankOffset = offset + 1; // ranks start from 1 @@ -434,7 +439,12 @@ export const secretFolderDALFactory = (db: TDbClient) => { .select("*") .from[number]>("w") .where("w.rank", ">=", rankOffset) - .andWhere("w.rank", "<", rankOffset + limit); + .andWhere("w.rank", "<", rankOffset + limit) + .orderByRaw( + `CASE WHEN "w"."${orderBy}" LIKE '\\_%' THEN ${orderDirection === OrderByDirection.ASC ? "0" : "1"} ELSE ${orderDirection === OrderByDirection.ASC ? "1" : "0"} END` + ) + .orderByRaw(`LOWER("w"."${orderBy}") ${orderDirection}`) + .orderByRaw(`"w"."${orderBy}" ${orderDirection}`); } const folders = await query; From 35c04abb29cded7cc238a27e05762e1348c93d6a Mon Sep 17 00:00:00 2001 From: Carlos Monastyrski Date: Mon, 3 Nov 2025 14:57:38 -0300 Subject: [PATCH 45/79] Rename Azure PKI option to be more clear --- .../forms/PkiSyncOptionsFields/PkiSyncOptionsFields.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/pki-syncs/forms/PkiSyncOptionsFields/PkiSyncOptionsFields.tsx b/frontend/src/components/pki-syncs/forms/PkiSyncOptionsFields/PkiSyncOptionsFields.tsx index 5fe067283..c1313e684 100644 --- a/frontend/src/components/pki-syncs/forms/PkiSyncOptionsFields/PkiSyncOptionsFields.tsx +++ b/frontend/src/components/pki-syncs/forms/PkiSyncOptionsFields/PkiSyncOptionsFields.tsx @@ -71,7 +71,7 @@ export const PkiSyncOptionsFields = ({ destination }: Props) => { isChecked={value} >

- Enable Removal of Active/Revoked Certificates{" "} + Enable Removal of Expired/Revoked Certificates{" "} { isChecked={value} >

- Preserve Version on Renewal{" "} + Enable Versioning on Renewal{" "} Date: Mon, 3 Nov 2025 15:11:10 -0300 Subject: [PATCH 46/79] refactor: streamline async logic and notification handling across various settings and integration components --- .../AuditLogsRetentionSection.tsx | 55 +-- .../components/ProjectAccessError.tsx | 20 +- .../components/ShareSecretForm.tsx | 68 ++- .../RollbackPreviewTab/RollbackPreviewTab.tsx | 21 +- .../IntegrationsDetailsByIDPage.tsx | 32 +- .../OverviewPage/OverviewPage.tsx | 164 +++---- .../CreateSecretForm/CreateSecretForm.tsx | 19 +- .../CreateSecretForm/CreateSecretForm.tsx | 93 ++-- .../SecretListView/SecretListView.tsx | 424 +++++++++--------- .../AutoCapitalizationSection.tsx | 28 +- .../EncryptionTab/EncryptionTab.tsx | 38 +- .../AddEnvironmentModal.tsx | 30 +- .../UpdateEnvironmentModal.tsx | 32 +- .../PointInTimeVersionLimitSection.tsx | 23 +- .../SecretSharingSection.tsx | 16 +- .../SecretTagsSection/AddSecretTagModal.tsx | 32 +- .../SecretTagsSection/SecretTagsSection.tsx | 26 +- .../BitbucketConfigurePage.tsx | 64 ++- .../CircleCIConfigurePage.tsx | 76 ++-- .../CloudflarePagesConfigurePage.tsx | 16 +- .../CloudflareWorkersConfigurePage.tsx | 16 +- .../DatabricksConfigurePage.tsx | 76 ++-- .../GithubConfigurePage.tsx | 16 +- .../HashicorpVaultAuthorizePage.tsx | 48 +- .../HashicorpVaultConfigurePage.tsx | 50 +-- .../OctopusDeployAuthorizePage.tsx | 39 +- .../OctopusDeployConfigurePage.tsx | 76 ++-- .../ChangeEmailSection/ChangeEmailSection.tsx | 30 +- .../ChangePasswordSection.tsx | 20 +- .../DeleteAccountSection.tsx | 22 +- .../components/SecuritySection/MFASection.tsx | 60 +-- .../SessionsSection/SessionsTable.tsx | 18 +- .../UserNameSection/UserNameSection.tsx | 22 +- 33 files changed, 709 insertions(+), 1061 deletions(-) diff --git a/frontend/src/pages/project/SettingsPage/components/AuditLogsRetentionSection/AuditLogsRetentionSection.tsx b/frontend/src/pages/project/SettingsPage/components/AuditLogsRetentionSection/AuditLogsRetentionSection.tsx index d9bbc80d8..1618c73aa 100644 --- a/frontend/src/pages/project/SettingsPage/components/AuditLogsRetentionSection/AuditLogsRetentionSection.tsx +++ b/frontend/src/pages/project/SettingsPage/components/AuditLogsRetentionSection/AuditLogsRetentionSection.tsx @@ -39,40 +39,33 @@ export const AuditLogsRetentionSection = () => { if (!currentProject) return null; const handleAuditLogsRetentionSubmit = async ({ auditLogsRetentionDays }: TForm) => { - try { - if (!subscription?.auditLogs) { - handlePopUpOpen("upgradePlan", { - description: - "You can only configure audit logs retention if you switch to Infisical's Pro plan." - }); - - return; - } - - if (subscription && auditLogsRetentionDays > subscription?.auditLogsRetentionDays) { - handlePopUpOpen("upgradePlan", { - description: - "To update your audit logs retention period to a higher value, switch to Infisical's Pro plan." - }); - - return; - } - - await updateAuditLogsRetention({ - auditLogsRetentionDays, - projectSlug: currentProject.slug + if (!subscription?.auditLogs) { + handlePopUpOpen("upgradePlan", { + description: + "You can only configure audit logs retention if you switch to Infisical's Pro plan." }); - createNotification({ - text: "Successfully updated audit logs retention period", - type: "success" - }); - } catch { - createNotification({ - text: "Failed updating audit logs retention period", - type: "error" - }); + return; } + + if (subscription && auditLogsRetentionDays > subscription?.auditLogsRetentionDays) { + handlePopUpOpen("upgradePlan", { + description: + "To update your audit logs retention period to a higher value, switch to Infisical's Pro plan." + }); + + return; + } + + await updateAuditLogsRetention({ + auditLogsRetentionDays, + projectSlug: currentProject.slug + }); + + createNotification({ + text: "Successfully updated audit logs retention period", + type: "success" + }); }; // render only for dedicated/self-hosted instances of Infisical diff --git a/frontend/src/pages/public/ErrorPage/components/ProjectAccessError.tsx b/frontend/src/pages/public/ErrorPage/components/ProjectAccessError.tsx index d6fd57d56..a07dd1674 100644 --- a/frontend/src/pages/public/ErrorPage/components/ProjectAccessError.tsx +++ b/frontend/src/pages/public/ErrorPage/components/ProjectAccessError.tsx @@ -2,7 +2,6 @@ import { faHome } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { Link, useNavigate, useParams } from "@tanstack/react-router"; -import { createNotification } from "@app/components/notifications"; import { OrgPermissionCan } from "@app/components/permissions"; import { RequestProjectAccessModal } from "@app/components/projects"; import { AccessRestrictedBanner, Button } from "@app/components/v2"; @@ -35,19 +34,12 @@ export const ProjectAccessError = () => { const handleAccessProject = async () => { if (!project) return; - try { - await orgAdminAccessProject.mutateAsync({ - projectId: project.id - }); - await navigate({ - to: "." - }); - } catch { - createNotification({ - text: "Failed to access project", - type: "error" - }); - } + await orgAdminAccessProject.mutateAsync({ + projectId: project.id + }); + await navigate({ + to: "." + }); }; return ( diff --git a/frontend/src/pages/public/ShareSecretPage/components/ShareSecretForm.tsx b/frontend/src/pages/public/ShareSecretPage/components/ShareSecretForm.tsx index a34c08f9d..b8e93f0fe 100644 --- a/frontend/src/pages/public/ShareSecretPage/components/ShareSecretForm.tsx +++ b/frontend/src/pages/public/ShareSecretPage/components/ShareSecretForm.tsx @@ -131,52 +131,44 @@ export const ShareSecretForm = ({ emails, shouldLimitView }: FormData) => { - try { - const expiresAt = new Date(new Date().getTime() + Number(expiresIn)); + const expiresAt = new Date(new Date().getTime() + Number(expiresIn)); - const processedEmails = emails ? emails.split(",").map((e) => e.trim()) : undefined; + const processedEmails = emails ? emails.split(",").map((e) => e.trim()) : undefined; - const { id } = await createSharedSecret.mutateAsync({ - name, - password, - secretValue: secret, - expiresAt, - expiresAfterViews: shouldLimitView ? Number(viewLimit) : undefined, - accessType, - emails: processedEmails + const { id } = await createSharedSecret.mutateAsync({ + name, + password, + secretValue: secret, + expiresAt, + expiresAfterViews: shouldLimitView ? Number(viewLimit) : undefined, + accessType, + emails: processedEmails + }); + + if (processedEmails && processedEmails.length > 0) { + setSecretLink(""); + createNotification({ + text: `Shared secret link emailed to ${processedEmails.length} user(s).`, + type: "success" }); - - if (processedEmails && processedEmails.length > 0) { - setSecretLink(""); - createNotification({ - text: `Shared secret link emailed to ${processedEmails.length} user(s).`, - type: "success" - }); - } else { - const link = new URL(`${window.location.origin}/shared/secret/${id}`); - if (subOrganization) { - link.searchParams.set("subOrganization", subOrganization); - } - - setSecretLink(link.toString()); - - navigator.clipboard.writeText(link.toString()); - setCopyTextSecret("secret"); - - createNotification({ - text: "Shared secret link copied to clipboard.", - type: "success" - }); + } else { + const link = new URL(`${window.location.origin}/shared/secret/${id}`); + if (subOrganization) { + link.searchParams.set("subOrganization", subOrganization); } - reset(); - } catch (error) { - console.error(error); + setSecretLink(link.toString()); + + navigator.clipboard.writeText(link.toString()); + setCopyTextSecret("secret"); + createNotification({ - text: "Failed to create a shared secret.", - type: "error" + text: "Shared secret link copied to clipboard.", + type: "success" }); } + + reset(); }; if (secretLink === null) diff --git a/frontend/src/pages/secret-manager/CommitDetailsPage/components/RollbackPreviewTab/RollbackPreviewTab.tsx b/frontend/src/pages/secret-manager/CommitDetailsPage/components/RollbackPreviewTab/RollbackPreviewTab.tsx index 43992d73a..baf2b015b 100644 --- a/frontend/src/pages/secret-manager/CommitDetailsPage/components/RollbackPreviewTab/RollbackPreviewTab.tsx +++ b/frontend/src/pages/secret-manager/CommitDetailsPage/components/RollbackPreviewTab/RollbackPreviewTab.tsx @@ -140,22 +140,15 @@ export const RollbackPreviewTab = (): JSX.Element => { ); const handleRollback = async (): Promise => { - try { - await rollback(message); + await rollback(message); - createNotification({ - type: "success", - text: "Rollback completed successfully" - }); + createNotification({ + type: "success", + text: "Rollback completed successfully" + }); - handlePopUpClose("rollbackConfirm"); - goBackToHistory(); - } catch (error) { - createNotification({ - type: "error", - text: error instanceof Error ? error.message : "Failed to rollback changes" - }); - } + handlePopUpClose("rollbackConfirm"); + goBackToHistory(); }; const folderChanges: FolderChanges[] = rollbackChangesNested || []; diff --git a/frontend/src/pages/secret-manager/IntegrationsDetailsByIDPage/IntegrationsDetailsByIDPage.tsx b/frontend/src/pages/secret-manager/IntegrationsDetailsByIDPage/IntegrationsDetailsByIDPage.tsx index 3b5600665..9043c35ef 100644 --- a/frontend/src/pages/secret-manager/IntegrationsDetailsByIDPage/IntegrationsDetailsByIDPage.tsx +++ b/frontend/src/pages/secret-manager/IntegrationsDetailsByIDPage/IntegrationsDetailsByIDPage.tsx @@ -53,28 +53,20 @@ export const IntegrationDetailsByIDPage = () => { const navigate = useNavigate(); const handleIntegrationDelete = async (shouldDeleteIntegrationSecrets: boolean) => { - try { - await deleteIntegration({ - id: integrationId, - workspaceId: currentProject.id, - shouldDeleteIntegrationSecrets - }); + await deleteIntegration({ + id: integrationId, + workspaceId: currentProject.id, + shouldDeleteIntegrationSecrets + }); - createNotification({ - type: "success", - text: "Deleted integration" - }); + createNotification({ + type: "success", + text: "Deleted integration" + }); - await navigate({ - to: `/${ProjectType.SecretManager}/${projectId}/integrations` - }); - } catch (err) { - console.log(err); - createNotification({ - type: "error", - text: "Failed to delete integration" - }); - } + await navigate({ + to: `/${ProjectType.SecretManager}/${projectId}/integrations` + }); }; const { popUp, handlePopUpOpen, handlePopUpClose, handlePopUpToggle } = usePopUp([ diff --git a/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx b/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx index 2dc370321..09fa1044d 100644 --- a/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx +++ b/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx @@ -488,55 +488,47 @@ export const OverviewPage = () => { }; const handleSecretCreate = async (env: string, key: string, value: string) => { - try { - // create folder if not existing - if (secretPath !== "/") { - // /hello/world -> [hello","world"] - const pathSegment = secretPath.split("/").filter(Boolean); - const parentPath = `/${pathSegment.slice(0, -1).join("/")}`; - const folderName = pathSegment.at(-1); - const canCreateFolder = permission.can( - ProjectPermissionActions.Create, - subject(ProjectPermissionSub.SecretFolders, { - environment: env, - secretPath: parentPath - }) - ); - if (folderName && parentPath && canCreateFolder) { - await getOrCreateFolder({ - projectId, - path: parentPath, - environment: env, - name: folderName - }); - } + // create folder if not existing + if (secretPath !== "/") { + // /hello/world -> [hello","world"] + const pathSegment = secretPath.split("/").filter(Boolean); + const parentPath = `/${pathSegment.slice(0, -1).join("/")}`; + const folderName = pathSegment.at(-1); + const canCreateFolder = permission.can( + ProjectPermissionActions.Create, + subject(ProjectPermissionSub.SecretFolders, { + environment: env, + secretPath: parentPath + }) + ); + if (folderName && parentPath && canCreateFolder) { + await getOrCreateFolder({ + projectId, + path: parentPath, + environment: env, + name: folderName + }); } - const result = await createSecretV3({ - environment: env, - projectId, - secretPath, - secretKey: key, - secretValue: value, - secretComment: "", - type: SecretType.Shared - }); + } + const result = await createSecretV3({ + environment: env, + projectId, + secretPath, + secretKey: key, + secretValue: value, + secretComment: "", + type: SecretType.Shared + }); - if ("approval" in result) { - createNotification({ - type: "info", - text: "Requested change has been sent for review" - }); - } else { - createNotification({ - type: "success", - text: "Successfully created secret" - }); - } - } catch (error) { - console.log(error); + if ("approval" in result) { createNotification({ - type: "error", - text: "Failed to create secret" + type: "info", + text: "Requested change has been sent for review" + }); + } else { + createNotification({ + type: "success", + text: "Successfully created secret" }); } }; @@ -565,63 +557,47 @@ export const OverviewPage = () => { secretValue = undefined; } - try { - const result = await updateSecretV3({ - environment: env, - projectId, - secretPath, - secretKey: key, - secretValue, - type - }); + const result = await updateSecretV3({ + environment: env, + projectId, + secretPath, + secretKey: key, + secretValue, + type + }); - if ("approval" in result) { - createNotification({ - type: "info", - text: "Requested change has been sent for review" - }); - } else { - createNotification({ - type: "success", - text: "Successfully updated secret" - }); - } - } catch (error) { - console.log(error); + if ("approval" in result) { createNotification({ - type: "error", - text: "Failed to update secret" + type: "info", + text: "Requested change has been sent for review" + }); + } else { + createNotification({ + type: "success", + text: "Successfully updated secret" }); } }; const handleSecretDelete = async (env: string, key: string, secretId?: string) => { - try { - const result = await deleteSecretV3({ - environment: env, - projectId, - secretPath, - secretKey: key, - secretId, - type: SecretType.Shared - }); + const result = await deleteSecretV3({ + environment: env, + projectId, + secretPath, + secretKey: key, + secretId, + type: SecretType.Shared + }); - if ("approval" in result) { - createNotification({ - type: "info", - text: "Requested change has been sent for review" - }); - } else { - createNotification({ - type: "success", - text: "Successfully deleted secret" - }); - } - } catch (error) { - console.log(error); + if ("approval" in result) { createNotification({ - type: "error", - text: "Failed to delete secret" + type: "info", + text: "Requested change has been sent for review" + }); + } else { + createNotification({ + type: "success", + text: "Successfully deleted secret" }); } }; diff --git a/frontend/src/pages/secret-manager/OverviewPage/components/CreateSecretForm/CreateSecretForm.tsx b/frontend/src/pages/secret-manager/OverviewPage/components/CreateSecretForm/CreateSecretForm.tsx index fede4e44d..977943330 100644 --- a/frontend/src/pages/secret-manager/OverviewPage/components/CreateSecretForm/CreateSecretForm.tsx +++ b/frontend/src/pages/secret-manager/OverviewPage/components/CreateSecretForm/CreateSecretForm.tsx @@ -193,19 +193,12 @@ export const CreateSecretForm = ({ secretPath = "/", onClose }: Props) => { const slugSchema = z.string().trim().toLowerCase().min(1); const createNewTag = async (slug: string) => { // TODO: Replace with slugSchema generic - try { - const parsedSlug = slugSchema.parse(slug); - await createWsTag.mutateAsync({ - projectId, - tagSlug: parsedSlug, - tagColor: "" - }); - } catch { - createNotification({ - type: "error", - text: "Failed to create new tag" - }); - } + const parsedSlug = slugSchema.parse(slug); + await createWsTag.mutateAsync({ + projectId, + tagSlug: parsedSlug, + tagColor: "" + }); }; return ( diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/CreateSecretForm/CreateSecretForm.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/CreateSecretForm/CreateSecretForm.tsx index dd0561495..858fcde77 100644 --- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/CreateSecretForm/CreateSecretForm.tsx +++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/CreateSecretForm/CreateSecretForm.tsx @@ -77,70 +77,55 @@ export const CreateSecretForm = ({ const slugSchema = z.string().trim().toLowerCase().min(1); const createNewTag = async (slug: string) => { // TODO: Replace with slugSchema generic - try { - const parsedSlug = slugSchema.parse(slug); - await createWsTag.mutateAsync({ - projectId, - tagSlug: parsedSlug, - tagColor: "" - }); - } catch { - createNotification({ - type: "error", - text: "Failed to create new tag" - }); - } + const parsedSlug = slugSchema.parse(slug); + await createWsTag.mutateAsync({ + projectId, + tagSlug: parsedSlug, + tagColor: "" + }); }; const handleFormSubmit = async ({ key, value, tags }: TFormSchema) => { - try { - if (isBatchMode) { - const pendingSecretCreate: PendingSecretCreate = { - id: key, - type: PendingAction.Create, - secretKey: key, - secretValue: value || "", - secretComment: "", - tags: tags?.map((el) => ({ id: el.value, slug: el.label })), - timestamp: Date.now(), - resourceType: "secret" - }; - addPendingChange(pendingSecretCreate, { - projectId, - - environment, - secretPath - }); - closePopUp(PopUpNames.CreateSecretForm); - reset(); - return; - } - await createSecretV3({ - environment, - projectId, - secretPath, + if (isBatchMode) { + const pendingSecretCreate: PendingSecretCreate = { + id: key, + type: PendingAction.Create, secretKey: key, secretValue: value || "", secretComment: "", - type: SecretType.Shared, - tagIds: tags?.map((el) => el.value) + tags: tags?.map((el) => ({ id: el.value, slug: el.label })), + timestamp: Date.now(), + resourceType: "secret" + }; + addPendingChange(pendingSecretCreate, { + projectId, + + environment, + secretPath }); closePopUp(PopUpNames.CreateSecretForm); reset(); - - createNotification({ - type: isProtectedBranch ? "info" : "success", - text: isProtectedBranch - ? "Requested changes have been sent for review" - : "Successfully created secret" - }); - } catch (error) { - console.log(error); - createNotification({ - type: "error", - text: "Failed to create secret" - }); + return; } + await createSecretV3({ + environment, + projectId, + secretPath, + secretKey: key, + secretValue: value || "", + secretComment: "", + type: SecretType.Shared, + tagIds: tags?.map((el) => el.value) + }); + closePopUp(PopUpNames.CreateSecretForm); + reset(); + + createNotification({ + type: isProtectedBranch ? "info" : "success", + text: isProtectedBranch + ? "Requested changes have been sent for review" + : "Successfully created secret" + }); }; const handlePaste = (e: ClipboardEvent) => { diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/SecretListView/SecretListView.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/SecretListView/SecretListView.tsx index bd43e1271..be5dfaaed 100644 --- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/SecretListView/SecretListView.tsx +++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/SecretListView/SecretListView.tsx @@ -293,174 +293,166 @@ export const SecretListView = ({ isSameTags && isSameRecipients; - try { - // personal secret change - let personalAction = false; - if (overrideAction === "deleted") { - await handleSecretOperation("delete", SecretType.Personal, oldKey, { - secretId: orgSecret.idOverride - }); - personalAction = true; - } else if (overrideAction && idOverride) { - await handleSecretOperation("update", SecretType.Personal, oldKey, { - value: valueOverride, - newKey: hasKeyChanged ? key : undefined, - secretId: orgSecret.idOverride, - skipMultilineEncoding: modSecret.skipMultilineEncoding - }); - personalAction = true; - } else if (overrideAction) { - await handleSecretOperation("create", SecretType.Personal, oldKey, { - value: valueOverride - }); - personalAction = true; - } + // personal secret change + let personalAction = false; + if (overrideAction === "deleted") { + await handleSecretOperation("delete", SecretType.Personal, oldKey, { + secretId: orgSecret.idOverride + }); + personalAction = true; + } else if (overrideAction && idOverride) { + await handleSecretOperation("update", SecretType.Personal, oldKey, { + value: valueOverride, + newKey: hasKeyChanged ? key : undefined, + secretId: orgSecret.idOverride, + skipMultilineEncoding: modSecret.skipMultilineEncoding + }); + personalAction = true; + } else if (overrideAction) { + await handleSecretOperation("create", SecretType.Personal, oldKey, { + value: valueOverride + }); + personalAction = true; + } - // shared secret change - if (!isSharedSecUnchanged && !personalAction) { - if (isBatchMode) { - const isEditingPendingCreation = isPending && pendingAction === PendingAction.Create; + // shared secret change + if (!isSharedSecUnchanged && !personalAction) { + if (isBatchMode) { + const isEditingPendingCreation = isPending && pendingAction === PendingAction.Create; - if (isEditingPendingCreation) { - const updatedCreate: PendingSecretCreate = { - id: orgSecret.id, - type: PendingAction.Create, - secretKey: key, - secretValue: value || "", - secretComment: comment || "", - skipMultilineEncoding: modSecret.skipMultilineEncoding || false, - tags: tags?.map((tag) => ({ id: tag.id, slug: tag.name || tag.slug || "" })) || [], - secretMetadata: secretMetadata || [], - timestamp: Date.now(), - resourceType: "secret", - originalKey: oldKey - }; + if (isEditingPendingCreation) { + const updatedCreate: PendingSecretCreate = { + id: orgSecret.id, + type: PendingAction.Create, + secretKey: key, + secretValue: value || "", + secretComment: comment || "", + skipMultilineEncoding: modSecret.skipMultilineEncoding || false, + tags: tags?.map((tag) => ({ id: tag.id, slug: tag.name || tag.slug || "" })) || [], + secretMetadata: secretMetadata || [], + timestamp: Date.now(), + resourceType: "secret", + originalKey: oldKey + }; - addPendingChange(updatedCreate, { - projectId, - environment, - secretPath - }); - } else { - const trueOriginalSecret = getTrueOriginalSecret( - orgSecret, - pendingChangesRef.current.secrets - ); + addPendingChange(updatedCreate, { + projectId, + environment, + secretPath + }); + } else { + const trueOriginalSecret = getTrueOriginalSecret( + orgSecret, + pendingChangesRef.current.secrets + ); - const updateChange: PendingSecretUpdate = { - id: orgSecret.id, - type: PendingAction.Update, - secretKey: trueOriginalSecret.key, - newSecretName: key, - originalValue: trueOriginalSecret.value, - secretValue: value, - originalComment: trueOriginalSecret.comment, - secretComment: comment, - originalSkipMultilineEncoding: trueOriginalSecret.skipMultilineEncoding, - skipMultilineEncoding: modSecret.skipMultilineEncoding, - originalTags: - trueOriginalSecret.tags?.map((tag) => ({ id: tag.id, slug: tag.slug })) || [], - tags: tags?.map((tag) => ({ id: tag.id, slug: tag.name || tag.slug || "" })) || [], - originalSecretMetadata: trueOriginalSecret.secretMetadata || [], - secretMetadata: secretMetadata || [], - timestamp: Date.now(), - resourceType: "secret", - existingSecret: orgSecret - }; + const updateChange: PendingSecretUpdate = { + id: orgSecret.id, + type: PendingAction.Update, + secretKey: trueOriginalSecret.key, + newSecretName: key, + originalValue: trueOriginalSecret.value, + secretValue: value, + originalComment: trueOriginalSecret.comment, + secretComment: comment, + originalSkipMultilineEncoding: trueOriginalSecret.skipMultilineEncoding, + skipMultilineEncoding: modSecret.skipMultilineEncoding, + originalTags: + trueOriginalSecret.tags?.map((tag) => ({ id: tag.id, slug: tag.slug })) || [], + tags: tags?.map((tag) => ({ id: tag.id, slug: tag.name || tag.slug || "" })) || [], + originalSecretMetadata: trueOriginalSecret.secretMetadata || [], + secretMetadata: secretMetadata || [], + timestamp: Date.now(), + resourceType: "secret", + existingSecret: orgSecret + }; - addPendingChange(updateChange, { - projectId, - environment, - secretPath - }); - } - - if (!isReminderEvent) { - handlePopUpClose("secretDetail"); - } - if (cb) cb(); - return; + addPendingChange(updateChange, { + projectId, + environment, + secretPath + }); } - await handleSecretOperation("update", SecretType.Shared, oldKey, { - value, - tags: tagIds, - comment, - reminderRepeatDays, - reminderNote, - reminderRecipients, - secretId: orgSecret.id, - newKey: hasKeyChanged ? key : undefined, - skipMultilineEncoding: modSecret.skipMultilineEncoding, - secretMetadata, - isRotatedSecret: orgSecret.isRotatedSecret, - secretValueHidden - }); + if (!isReminderEvent) { + handlePopUpClose("secretDetail"); + } if (cb) cb(); - } - queryClient.invalidateQueries({ - queryKey: dashboardKeys.getDashboardSecrets({ - projectId, - secretPath - }) - }); - queryClient.invalidateQueries({ - queryKey: secretKeys.getProjectSecret({ projectId, environment, secretPath }) - }); - queryClient.invalidateQueries({ - queryKey: secretSnapshotKeys.list({ - projectId, - environment, - directory: secretPath - }) - }); - queryClient.invalidateQueries({ - queryKey: secretSnapshotKeys.count({ - projectId, - environment, - directory: secretPath - }) - }); - queryClient.invalidateQueries({ - queryKey: commitKeys.count({ projectId, environment, directory: secretPath }) - }); - queryClient.invalidateQueries({ - queryKey: commitKeys.history({ - projectId, - environment, - directory: secretPath - }) - }); - queryClient.invalidateQueries({ - queryKey: secretApprovalRequestKeys.count({ projectId }) - }); - if (!isReminderEvent) { - handlePopUpClose("secretDetail"); + return; } - let successMessage; - if (isReminderEvent) { - successMessage = reminderRepeatDays - ? "Successfully saved secret reminder" - : "Successfully deleted secret reminder"; - } else { - successMessage = "Successfully saved secrets"; - } - - createNotification({ - type: isProtectedBranch && !personalAction ? "info" : "success", - text: - isProtectedBranch && !personalAction - ? "Requested changes have been sent for review" - : successMessage - }); - } catch (error) { - console.log(error); - createNotification({ - type: "error", - text: "Failed to save secret" + await handleSecretOperation("update", SecretType.Shared, oldKey, { + value, + tags: tagIds, + comment, + reminderRepeatDays, + reminderNote, + reminderRecipients, + secretId: orgSecret.id, + newKey: hasKeyChanged ? key : undefined, + skipMultilineEncoding: modSecret.skipMultilineEncoding, + secretMetadata, + isRotatedSecret: orgSecret.isRotatedSecret, + secretValueHidden }); + if (cb) cb(); } + queryClient.invalidateQueries({ + queryKey: dashboardKeys.getDashboardSecrets({ + projectId, + secretPath + }) + }); + queryClient.invalidateQueries({ + queryKey: secretKeys.getProjectSecret({ projectId, environment, secretPath }) + }); + queryClient.invalidateQueries({ + queryKey: secretSnapshotKeys.list({ + projectId, + environment, + directory: secretPath + }) + }); + queryClient.invalidateQueries({ + queryKey: secretSnapshotKeys.count({ + projectId, + environment, + directory: secretPath + }) + }); + queryClient.invalidateQueries({ + queryKey: commitKeys.count({ projectId, environment, directory: secretPath }) + }); + queryClient.invalidateQueries({ + queryKey: commitKeys.history({ + projectId, + environment, + directory: secretPath + }) + }); + queryClient.invalidateQueries({ + queryKey: secretApprovalRequestKeys.count({ projectId }) + }); + if (!isReminderEvent) { + handlePopUpClose("secretDetail"); + } + + let successMessage; + if (isReminderEvent) { + successMessage = reminderRepeatDays + ? "Successfully saved secret reminder" + : "Successfully deleted secret reminder"; + } else { + successMessage = "Successfully saved secrets"; + } + + createNotification({ + type: isProtectedBranch && !personalAction ? "info" : "success", + text: + isProtectedBranch && !personalAction + ? "Requested changes have been sent for review" + : successMessage + }); }, [environment, secretPath, isProtectedBranch, isBatchMode, projectId, addPendingChange] ); @@ -488,75 +480,67 @@ export const SecretListView = ({ value, secretValueHidden } = popUp.deleteSecret?.data as SecretV3RawSanitized; - try { - if (isBatchMode) { - const deleteChange: PendingSecretDelete = { - id: `${secretId}`, - type: PendingAction.Delete, - secretKey: key, - secretValue: value || "", - timestamp: Date.now(), - resourceType: "secret", - secretValueHidden - }; + if (isBatchMode) { + const deleteChange: PendingSecretDelete = { + id: `${secretId}`, + type: PendingAction.Delete, + secretKey: key, + secretValue: value || "", + timestamp: Date.now(), + resourceType: "secret", + secretValueHidden + }; - addPendingChange(deleteChange, { - projectId, - environment, - secretPath - }); + addPendingChange(deleteChange, { + projectId, + environment, + secretPath + }); - handlePopUpClose("deleteSecret"); - handlePopUpClose("secretDetail"); - return; - } - - await handleSecretOperation("delete", SecretType.Shared, key, { secretId }); - // wrap this in another function and then reuse - queryClient.invalidateQueries({ - queryKey: dashboardKeys.getDashboardSecrets({ projectId, secretPath }) - }); - queryClient.invalidateQueries({ - queryKey: secretKeys.getProjectSecret({ projectId, environment, secretPath }) - }); - queryClient.invalidateQueries({ - queryKey: secretSnapshotKeys.list({ - projectId, - environment, - directory: secretPath - }) - }); - queryClient.invalidateQueries({ - queryKey: secretSnapshotKeys.count({ - projectId, - environment, - directory: secretPath - }) - }); - queryClient.invalidateQueries({ - queryKey: commitKeys.count({ projectId, environment, directory: secretPath }) - }); - queryClient.invalidateQueries({ - queryKey: commitKeys.history({ projectId, environment, directory: secretPath }) - }); - queryClient.invalidateQueries({ - queryKey: secretApprovalRequestKeys.count({ projectId }) - }); handlePopUpClose("deleteSecret"); handlePopUpClose("secretDetail"); - createNotification({ - type: isProtectedBranch ? "info" : "success", - text: isProtectedBranch - ? "Requested changes have been sent for review" - : "Successfully deleted secret" - }); - } catch (error) { - console.log(error); - createNotification({ - type: "error", - text: "Failed to delete secret" - }); + return; } + + await handleSecretOperation("delete", SecretType.Shared, key, { secretId }); + // wrap this in another function and then reuse + queryClient.invalidateQueries({ + queryKey: dashboardKeys.getDashboardSecrets({ projectId, secretPath }) + }); + queryClient.invalidateQueries({ + queryKey: secretKeys.getProjectSecret({ projectId, environment, secretPath }) + }); + queryClient.invalidateQueries({ + queryKey: secretSnapshotKeys.list({ + projectId, + environment, + directory: secretPath + }) + }); + queryClient.invalidateQueries({ + queryKey: secretSnapshotKeys.count({ + projectId, + environment, + directory: secretPath + }) + }); + queryClient.invalidateQueries({ + queryKey: commitKeys.count({ projectId, environment, directory: secretPath }) + }); + queryClient.invalidateQueries({ + queryKey: commitKeys.history({ projectId, environment, directory: secretPath }) + }); + queryClient.invalidateQueries({ + queryKey: secretApprovalRequestKeys.count({ projectId }) + }); + handlePopUpClose("deleteSecret"); + handlePopUpClose("secretDetail"); + createNotification({ + type: isProtectedBranch ? "info" : "success", + text: isProtectedBranch + ? "Requested changes have been sent for review" + : "Successfully deleted secret" + }); }, [ (popUp.deleteSecret?.data as SecretV3RawSanitized)?.key, environment, diff --git a/frontend/src/pages/secret-manager/SettingsPage/components/AutoCapitalizationSection/AutoCapitalizationSection.tsx b/frontend/src/pages/secret-manager/SettingsPage/components/AutoCapitalizationSection/AutoCapitalizationSection.tsx index 73bec81b9..7c9d03904 100644 --- a/frontend/src/pages/secret-manager/SettingsPage/components/AutoCapitalizationSection/AutoCapitalizationSection.tsx +++ b/frontend/src/pages/secret-manager/SettingsPage/components/AutoCapitalizationSection/AutoCapitalizationSection.tsx @@ -13,26 +13,18 @@ export const AutoCapitalizationSection = () => { const { mutateAsync } = useUpdateProject(); const handleToggleCapitalizationToggle = async (state: boolean) => { - try { - if (!currentProject?.id) return; + if (!currentProject?.id) return; - await mutateAsync({ - projectId: currentProject.id, - autoCapitalization: state - }); + await mutateAsync({ + projectId: currentProject.id, + autoCapitalization: state + }); - const text = `Successfully ${state ? "enabled" : "disabled"} auto capitalization`; - createNotification({ - text, - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to update auto capitalization", - type: "error" - }); - } + const text = `Successfully ${state ? "enabled" : "disabled"} auto capitalization`; + createNotification({ + text, + type: "success" + }); }; return ( diff --git a/frontend/src/pages/secret-manager/SettingsPage/components/EncryptionTab/EncryptionTab.tsx b/frontend/src/pages/secret-manager/SettingsPage/components/EncryptionTab/EncryptionTab.tsx index 9e4627d26..e22719c83 100644 --- a/frontend/src/pages/secret-manager/SettingsPage/components/EncryptionTab/EncryptionTab.tsx +++ b/frontend/src/pages/secret-manager/SettingsPage/components/EncryptionTab/EncryptionTab.tsx @@ -124,17 +124,13 @@ const LoadBackupModal = ({ return; } - try { - await loadKmsBackup(backupContent); - createNotification({ - text: "Successfully loaded KMS backup", - type: "success" - }); + await loadKmsBackup(backupContent); + createNotification({ + text: "Successfully loaded KMS backup", + type: "success" + }); - onOpenChange(false); - } catch (err) { - console.error(err); - } + onOpenChange(false); }; const parseFile = (file?: File) => { @@ -245,20 +241,16 @@ export const EncryptionTab = () => { }); const onUpdateProjectKms = async (data: TForm) => { - try { - await updateProjectKms( - data.kmsKeyId === INTERNAL_KMS_KEY_ID - ? { type: KmsType.Internal } - : { type: KmsType.External, kmsId: data.kmsKeyId } - ); + await updateProjectKms( + data.kmsKeyId === INTERNAL_KMS_KEY_ID + ? { type: KmsType.Internal } + : { type: KmsType.External, kmsId: data.kmsKeyId } + ); - createNotification({ - text: "Successfully updated project KMS", - type: "success" - }); - } catch (err) { - console.error(err); - } + createNotification({ + text: "Successfully updated project KMS", + type: "success" + }); }; return ( diff --git a/frontend/src/pages/secret-manager/SettingsPage/components/EnvironmentSection/AddEnvironmentModal.tsx b/frontend/src/pages/secret-manager/SettingsPage/components/EnvironmentSection/AddEnvironmentModal.tsx index 611504a14..70c486616 100644 --- a/frontend/src/pages/secret-manager/SettingsPage/components/EnvironmentSection/AddEnvironmentModal.tsx +++ b/frontend/src/pages/secret-manager/SettingsPage/components/EnvironmentSection/AddEnvironmentModal.tsx @@ -36,28 +36,20 @@ const Content = ({ onComplete }: ContentProps) => { }); const onFormSubmit = async ({ environmentName, environmentSlug }: FormData) => { - try { - if (!currentProject?.id) return; + if (!currentProject?.id) return; - const env = await mutateAsync({ - projectId: currentProject.id, - name: environmentName, - slug: environmentSlug - }); + const env = await mutateAsync({ + projectId: currentProject.id, + name: environmentName, + slug: environmentSlug + }); - createNotification({ - text: "Successfully created environment", - type: "success" - }); + createNotification({ + text: "Successfully created environment", + type: "success" + }); - onComplete(env); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to create environment", - type: "error" - }); - } + onComplete(env); }; return ( diff --git a/frontend/src/pages/secret-manager/SettingsPage/components/EnvironmentSection/UpdateEnvironmentModal.tsx b/frontend/src/pages/secret-manager/SettingsPage/components/EnvironmentSection/UpdateEnvironmentModal.tsx index e2d64ee72..1c9d09101 100644 --- a/frontend/src/pages/secret-manager/SettingsPage/components/EnvironmentSection/UpdateEnvironmentModal.tsx +++ b/frontend/src/pages/secret-manager/SettingsPage/components/EnvironmentSection/UpdateEnvironmentModal.tsx @@ -33,29 +33,21 @@ export const UpdateEnvironmentModal = ({ popUp, handlePopUpClose, handlePopUpTog const oldEnvId = (popUp?.updateEnv?.data as { id: string })?.id; const onFormSubmit = async ({ name, slug }: FormData) => { - try { - if (!currentProject?.id) return; + if (!currentProject?.id) return; - await mutateAsync({ - projectId: currentProject.id, - name, - slug, - id: oldEnvId - }); + await mutateAsync({ + projectId: currentProject.id, + name, + slug, + id: oldEnvId + }); - createNotification({ - text: "Successfully updated environment", - type: "success" - }); + createNotification({ + text: "Successfully updated environment", + type: "success" + }); - handlePopUpClose("updateEnv"); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to update environment", - type: "error" - }); - } + handlePopUpClose("updateEnv"); }; return ( diff --git a/frontend/src/pages/secret-manager/SettingsPage/components/PointInTimeVersionLimitSection/PointInTimeVersionLimitSection.tsx b/frontend/src/pages/secret-manager/SettingsPage/components/PointInTimeVersionLimitSection/PointInTimeVersionLimitSection.tsx index e647ff481..6345301a0 100644 --- a/frontend/src/pages/secret-manager/SettingsPage/components/PointInTimeVersionLimitSection/PointInTimeVersionLimitSection.tsx +++ b/frontend/src/pages/secret-manager/SettingsPage/components/PointInTimeVersionLimitSection/PointInTimeVersionLimitSection.tsx @@ -34,22 +34,15 @@ export const PointInTimeVersionLimitSection = () => { if (!currentProject) return null; const handleVersionLimitSubmit = async ({ pitVersionLimit }: TForm) => { - try { - await updateProject({ - pitVersionLimit, - projectId - }); + await updateProject({ + pitVersionLimit, + projectId + }); - createNotification({ - text: "Successfully updated version limit", - type: "success" - }); - } catch { - createNotification({ - text: "Failed updating project's version limit", - type: "error" - }); - } + createNotification({ + text: "Successfully updated version limit", + type: "success" + }); }; const isAdmin = hasProjectRole(ProjectMembershipRole.Admin); diff --git a/frontend/src/pages/secret-manager/SettingsPage/components/SecretSharingSection/SecretSharingSection.tsx b/frontend/src/pages/secret-manager/SettingsPage/components/SecretSharingSection/SecretSharingSection.tsx index bd8928823..ac1f735f9 100644 --- a/frontend/src/pages/secret-manager/SettingsPage/components/SecretSharingSection/SecretSharingSection.tsx +++ b/frontend/src/pages/secret-manager/SettingsPage/components/SecretSharingSection/SecretSharingSection.tsx @@ -15,12 +15,12 @@ export const SecretSharingSection = () => { const handleToggle = async (state: boolean) => { setIsLoading(true); - try { - if (!currentProject?.id) { - setIsLoading(false); - return; - } + if (!currentProject?.id) { + setIsLoading(false); + return; + } + try { await updateProject({ projectId: currentProject.id, secretSharing: state @@ -30,12 +30,6 @@ export const SecretSharingSection = () => { text: `Successfully ${state ? "enabled" : "disabled"} secret sharing for this project`, type: "success" }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to update secret sharing for this project", - type: "error" - }); } finally { setIsLoading(false); } diff --git a/frontend/src/pages/secret-manager/SettingsPage/components/SecretTagsSection/AddSecretTagModal.tsx b/frontend/src/pages/secret-manager/SettingsPage/components/SecretTagsSection/AddSecretTagModal.tsx index 1d4c8e492..cfe7dff8e 100644 --- a/frontend/src/pages/secret-manager/SettingsPage/components/SecretTagsSection/AddSecretTagModal.tsx +++ b/frontend/src/pages/secret-manager/SettingsPage/components/SecretTagsSection/AddSecretTagModal.tsx @@ -39,29 +39,21 @@ export const AddSecretTagModal = ({ popUp, handlePopUpClose, handlePopUpToggle } }); const onFormSubmit = async ({ slug }: FormData) => { - try { - if (!currentProject?.id) return; + if (!currentProject?.id) return; - await createWsTag.mutateAsync({ - projectId: currentProject?.id, - tagSlug: slug, - tagColor: "" - }); + await createWsTag.mutateAsync({ + projectId: currentProject?.id, + tagSlug: slug, + tagColor: "" + }); - handlePopUpClose("CreateSecretTag"); + handlePopUpClose("CreateSecretTag"); - createNotification({ - text: "Successfully created a tag", - type: "success" - }); - reset(); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to create a tag", - type: "error" - }); - } + createNotification({ + text: "Successfully created a tag", + type: "success" + }); + reset(); }; return ( diff --git a/frontend/src/pages/secret-manager/SettingsPage/components/SecretTagsSection/SecretTagsSection.tsx b/frontend/src/pages/secret-manager/SettingsPage/components/SecretTagsSection/SecretTagsSection.tsx index 508ef2867..2964467ad 100644 --- a/frontend/src/pages/secret-manager/SettingsPage/components/SecretTagsSection/SecretTagsSection.tsx +++ b/frontend/src/pages/secret-manager/SettingsPage/components/SecretTagsSection/SecretTagsSection.tsx @@ -29,25 +29,17 @@ export const SecretTagsSection = (): JSX.Element => { const deleteWsTag = useDeleteWsTag(); const onDeleteApproved = async () => { - try { - await deleteWsTag.mutateAsync({ - projectId: currentProject?.id || "", - tagID: (popUp?.deleteTagConfirmation?.data as DeleteModalData)?.id - }); + await deleteWsTag.mutateAsync({ + projectId: currentProject?.id || "", + tagID: (popUp?.deleteTagConfirmation?.data as DeleteModalData)?.id + }); - createNotification({ - text: "Successfully deleted tag", - type: "success" - }); + createNotification({ + text: "Successfully deleted tag", + type: "success" + }); - handlePopUpClose("deleteTagConfirmation"); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to delete the tag", - type: "error" - }); - } + handlePopUpClose("deleteTagConfirmation"); }; return ( diff --git a/frontend/src/pages/secret-manager/integrations/BitbucketConfigurePage/BitbucketConfigurePage.tsx b/frontend/src/pages/secret-manager/integrations/BitbucketConfigurePage/BitbucketConfigurePage.tsx index 8d855f284..b66644bdc 100644 --- a/frontend/src/pages/secret-manager/integrations/BitbucketConfigurePage/BitbucketConfigurePage.tsx +++ b/frontend/src/pages/secret-manager/integrations/BitbucketConfigurePage/BitbucketConfigurePage.tsx @@ -126,43 +126,35 @@ export const BitbucketConfigurePage = () => { }: TFormData) => { if (!targetRepo || !targetWorkspace) return; - try { - await createIntegration.mutateAsync({ - integrationAuthId, - isActive: true, - app: targetRepo.name, - appId: targetRepo.appId, - sourceEnvironment: sourceEnvironment.slug, - targetEnvironment: targetWorkspace.name, - targetEnvironmentId: targetWorkspace.slug, - ...(scope.value === BitbucketScope.Env && - targetEnvironment && { - targetService: targetEnvironment.name, - targetServiceId: targetEnvironment.uuid - }), - secretPath - }); + await createIntegration.mutateAsync({ + integrationAuthId, + isActive: true, + app: targetRepo.name, + appId: targetRepo.appId, + sourceEnvironment: sourceEnvironment.slug, + targetEnvironment: targetWorkspace.name, + targetEnvironmentId: targetWorkspace.slug, + ...(scope.value === BitbucketScope.Env && + targetEnvironment && { + targetService: targetEnvironment.name, + targetServiceId: targetEnvironment.uuid + }), + secretPath + }); - createNotification({ - type: "success", - text: "Successfully created integration" - }); - navigate({ - to: "/projects/secret-management/$projectId/integrations", - params: { - projectId: currentProject.id - }, - search: { - selectedTab: IntegrationsListPageTabs.NativeIntegrations - } - }); - } catch (err) { - createNotification({ - type: "error", - text: "Failed to create integration" - }); - console.error(err); - } + createNotification({ + type: "success", + text: "Successfully created integration" + }); + navigate({ + to: "/projects/secret-management/$projectId/integrations", + params: { + projectId: currentProject.id + }, + search: { + selectedTab: IntegrationsListPageTabs.NativeIntegrations + } + }); }; useEffect(() => { diff --git a/frontend/src/pages/secret-manager/integrations/CircleCIConfigurePage/CircleCIConfigurePage.tsx b/frontend/src/pages/secret-manager/integrations/CircleCIConfigurePage/CircleCIConfigurePage.tsx index 7df2ae35c..a7ecbca6a 100644 --- a/frontend/src/pages/secret-manager/integrations/CircleCIConfigurePage/CircleCIConfigurePage.tsx +++ b/frontend/src/pages/secret-manager/integrations/CircleCIConfigurePage/CircleCIConfigurePage.tsx @@ -73,51 +73,43 @@ export const CircleCIConfigurePage = () => { : undefined; const onSubmit = async (data: TFormData) => { - try { - if (data.scope === CircleCiScope.Context) { - await mutateAsync({ - scope: data.scope, - integrationAuthId, - isActive: true, - sourceEnvironment: data.sourceEnvironment.slug, - app: data.targetContext.name, - appId: data.targetContext.id, - owner: data.targetOrg.name, - secretPath: data.secretPath - }); - } else { - await mutateAsync({ - scope: data.scope, - integrationAuthId, - isActive: true, - app: data.targetProject.name, // project name - owner: data.targetOrg.name, // organization name - appId: data.targetProject.id, // project id (used for syncing) - sourceEnvironment: data.sourceEnvironment.slug, - secretPath: data.secretPath - }); - } - - createNotification({ - type: "success", - text: "Successfully created integration" + if (data.scope === CircleCiScope.Context) { + await mutateAsync({ + scope: data.scope, + integrationAuthId, + isActive: true, + sourceEnvironment: data.sourceEnvironment.slug, + app: data.targetContext.name, + appId: data.targetContext.id, + owner: data.targetOrg.name, + secretPath: data.secretPath }); - navigate({ - to: "/projects/secret-management/$projectId/integrations", - params: { - projectId: currentProject.id - }, - search: { - selectedTab: IntegrationsListPageTabs.NativeIntegrations - } + } else { + await mutateAsync({ + scope: data.scope, + integrationAuthId, + isActive: true, + app: data.targetProject.name, // project name + owner: data.targetOrg.name, // organization name + appId: data.targetProject.id, // project id (used for syncing) + sourceEnvironment: data.sourceEnvironment.slug, + secretPath: data.secretPath }); - } catch (err) { - createNotification({ - type: "error", - text: "Failed to create integration" - }); - console.error(err); } + + createNotification({ + type: "success", + text: "Successfully created integration" + }); + navigate({ + to: "/projects/secret-management/$projectId/integrations", + params: { + projectId: currentProject.id + }, + search: { + selectedTab: IntegrationsListPageTabs.NativeIntegrations + } + }); }; if (isCircleCIOrganizationsLoading) diff --git a/frontend/src/pages/secret-manager/integrations/CloudflarePagesConfigurePage/CloudflarePagesConfigurePage.tsx b/frontend/src/pages/secret-manager/integrations/CloudflarePagesConfigurePage/CloudflarePagesConfigurePage.tsx index 0a0d08863..3948351c3 100644 --- a/frontend/src/pages/secret-manager/integrations/CloudflarePagesConfigurePage/CloudflarePagesConfigurePage.tsx +++ b/frontend/src/pages/secret-manager/integrations/CloudflarePagesConfigurePage/CloudflarePagesConfigurePage.tsx @@ -1,8 +1,6 @@ import { useEffect, useState } from "react"; import { useNavigate, useSearch } from "@tanstack/react-router"; -import axios from "axios"; -import { createNotification } from "@app/components/notifications"; import { Button, Card, @@ -102,19 +100,7 @@ export const CloudflarePagesConfigurePage = () => { selectedTab: IntegrationsListPageTabs.NativeIntegrations } }); - } catch (err) { - console.error(err); - - let errorMessage: string = "Something went wrong!"; - if (axios.isAxiosError(err)) { - const { message } = err?.response?.data as { message: string }; - errorMessage = message; - } - - createNotification({ - text: errorMessage, - type: "error" - }); + } catch { setIsLoading(false); } }; diff --git a/frontend/src/pages/secret-manager/integrations/CloudflareWorkersConfigurePage/CloudflareWorkersConfigurePage.tsx b/frontend/src/pages/secret-manager/integrations/CloudflareWorkersConfigurePage/CloudflareWorkersConfigurePage.tsx index 58bc8596b..417f0fe84 100644 --- a/frontend/src/pages/secret-manager/integrations/CloudflareWorkersConfigurePage/CloudflareWorkersConfigurePage.tsx +++ b/frontend/src/pages/secret-manager/integrations/CloudflareWorkersConfigurePage/CloudflareWorkersConfigurePage.tsx @@ -1,8 +1,6 @@ import { useEffect, useState } from "react"; import { useNavigate, useSearch } from "@tanstack/react-router"; -import axios from "axios"; -import { createNotification } from "@app/components/notifications"; import { Button, Card, CardTitle, FormControl, Select, SelectItem } from "@app/components/v2"; import { SecretPathInput } from "@app/components/v2/SecretPathInput"; import { ROUTE_PATHS } from "@app/const/routes"; @@ -75,19 +73,7 @@ export const CloudflareWorkersConfigurePage = () => { selectedTab: IntegrationsListPageTabs.NativeIntegrations } }); - } catch (err) { - console.error(err); - - let errorMessage: string = "Something went wrong!"; - if (axios.isAxiosError(err)) { - const { message } = err?.response?.data as { message: string }; - errorMessage = message; - } - - createNotification({ - text: errorMessage, - type: "error" - }); + } catch { setIsLoading(false); } }; diff --git a/frontend/src/pages/secret-manager/integrations/DatabricksConfigurePage/DatabricksConfigurePage.tsx b/frontend/src/pages/secret-manager/integrations/DatabricksConfigurePage/DatabricksConfigurePage.tsx index 1f5a3c40a..05c943fc5 100644 --- a/frontend/src/pages/secret-manager/integrations/DatabricksConfigurePage/DatabricksConfigurePage.tsx +++ b/frontend/src/pages/secret-manager/integrations/DatabricksConfigurePage/DatabricksConfigurePage.tsx @@ -55,49 +55,45 @@ export const DatabricksConfigurePage = () => { const [secretPath, setSecretPath] = useState("/"); const handleButtonClick = async () => { - try { - if (!integrationAuth?.id) return; + if (!integrationAuth?.id) return; - if (!targetScope) { - createNotification({ - type: "error", - text: "Please select a scope" - }); - return; - } - - const selectedScope = integrationAuthScopes?.find( - (integrationAuthScope) => integrationAuthScope.name === targetScope - ); - - if (!selectedScope) { - createNotification({ - type: "error", - text: "Invalid scope selected" - }); - return; - } - - await mutateAsync({ - integrationAuthId: integrationAuth?.id, - isActive: true, - app: selectedScope.name, // scope name - sourceEnvironment: selectedSourceEnvironment, - secretPath + if (!targetScope) { + createNotification({ + type: "error", + text: "Please select a scope" }); - - navigate({ - to: "/projects/secret-management/$projectId/integrations", - params: { - projectId: currentProject.id - }, - search: { - selectedTab: IntegrationsListPageTabs.NativeIntegrations - } - }); - } catch (err) { - console.error(err); + return; } + + const selectedScope = integrationAuthScopes?.find( + (integrationAuthScope) => integrationAuthScope.name === targetScope + ); + + if (!selectedScope) { + createNotification({ + type: "error", + text: "Invalid scope selected" + }); + return; + } + + await mutateAsync({ + integrationAuthId: integrationAuth?.id, + isActive: true, + app: selectedScope.name, // scope name + sourceEnvironment: selectedSourceEnvironment, + secretPath + }); + + navigate({ + to: "/projects/secret-management/$projectId/integrations", + params: { + projectId: currentProject.id + }, + search: { + selectedTab: IntegrationsListPageTabs.NativeIntegrations + } + }); }; return integrationAuth && selectedSourceEnvironment && integrationAuthScopes ? ( diff --git a/frontend/src/pages/secret-manager/integrations/GithubConfigurePage/GithubConfigurePage.tsx b/frontend/src/pages/secret-manager/integrations/GithubConfigurePage/GithubConfigurePage.tsx index 5e9871ade..741c03032 100644 --- a/frontend/src/pages/secret-manager/integrations/GithubConfigurePage/GithubConfigurePage.tsx +++ b/frontend/src/pages/secret-manager/integrations/GithubConfigurePage/GithubConfigurePage.tsx @@ -12,12 +12,10 @@ import { import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { zodResolver } from "@hookform/resolvers/zod"; import { useNavigate, useSearch } from "@tanstack/react-router"; -import axios from "axios"; import { motion } from "framer-motion"; import { twMerge } from "tailwind-merge"; import { z, ZodIssueCode } from "zod"; -import { createNotification } from "@app/components/notifications"; import { Button, Card, @@ -275,19 +273,7 @@ export const GithubConfigurePage = () => { selectedTab: IntegrationsListPageTabs.NativeIntegrations } }); - } catch (err) { - console.error(err); - - let errorMessage: string = "Something went wrong!"; - if (axios.isAxiosError(err)) { - const { message } = err?.response?.data as { message: string }; - errorMessage = message; - } - - createNotification({ - text: errorMessage, - type: "error" - }); + } catch { setIsLoading(false); } }; diff --git a/frontend/src/pages/secret-manager/integrations/HashicorpVaultAuthorizePage/HashicorpVaultAuthorizePage.tsx b/frontend/src/pages/secret-manager/integrations/HashicorpVaultAuthorizePage/HashicorpVaultAuthorizePage.tsx index 4b922a9bc..93d892241 100644 --- a/frontend/src/pages/secret-manager/integrations/HashicorpVaultAuthorizePage/HashicorpVaultAuthorizePage.tsx +++ b/frontend/src/pages/secret-manager/integrations/HashicorpVaultAuthorizePage/HashicorpVaultAuthorizePage.tsx @@ -4,10 +4,8 @@ import { faArrowUpRightFromSquare, faBookOpen } from "@fortawesome/free-solid-sv import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { zodResolver } from "@hookform/resolvers/zod"; import { useNavigate } from "@tanstack/react-router"; -import axios from "axios"; import { z } from "zod"; -import { createNotification } from "@app/components/notifications"; import { Button, Card, CardBody, CardTitle, FormControl, Input } from "@app/components/v2"; import { useProject } from "@app/context"; import { useSaveIntegrationAccessToken } from "@app/hooks/api"; @@ -41,37 +39,23 @@ export const HashicorpVaultAuthorizePage = () => { }); const handleFormSubmit = async (formData: TForm) => { - try { - const integrationAuth = await mutateAsync({ - workspaceId: currentProject.id, - integration: "hashicorp-vault", - accessId: formData.vaultRoleID, - accessToken: formData.vaultSecretID, - url: formData.vaultURL, - namespace: formData.vaultNamespace - }); - navigate({ - to: "/projects/secret-management/$projectId/integrations/hashicorp-vault/create", - params: { - projectId: currentProject.id - }, - search: { - integrationAuthId: integrationAuth.id - } - }); - } catch (err) { - console.error(err); - let errorMessage: string = "Something went wrong!"; - if (axios.isAxiosError(err)) { - const { message } = err?.response?.data as { message: string }; - errorMessage = message; + const integrationAuth = await mutateAsync({ + workspaceId: currentProject.id, + integration: "hashicorp-vault", + accessId: formData.vaultRoleID, + accessToken: formData.vaultSecretID, + url: formData.vaultURL, + namespace: formData.vaultNamespace + }); + navigate({ + to: "/projects/secret-management/$projectId/integrations/hashicorp-vault/create", + params: { + projectId: currentProject.id + }, + search: { + integrationAuthId: integrationAuth.id } - - createNotification({ - text: errorMessage, - type: "error" - }); - } + }); }; return ( diff --git a/frontend/src/pages/secret-manager/integrations/HashicorpVaultConfigurePage/HashicorpVaultConfigurePage.tsx b/frontend/src/pages/secret-manager/integrations/HashicorpVaultConfigurePage/HashicorpVaultConfigurePage.tsx index 0dfcbb0bf..0636625df 100644 --- a/frontend/src/pages/secret-manager/integrations/HashicorpVaultConfigurePage/HashicorpVaultConfigurePage.tsx +++ b/frontend/src/pages/secret-manager/integrations/HashicorpVaultConfigurePage/HashicorpVaultConfigurePage.tsx @@ -10,10 +10,8 @@ import { import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { zodResolver } from "@hookform/resolvers/zod"; import { useNavigate, useSearch } from "@tanstack/react-router"; -import axios from "axios"; import { z } from "zod"; -import { createNotification } from "@app/components/notifications"; import { Button, Card, @@ -90,38 +88,24 @@ export const HashicorpVaultConfigurePage = () => { }); const handleFormSubmit = async (formData: TForm) => { - try { - if (!integrationAuth?.id) return; - await mutateAsync({ - integrationAuthId: integrationAuth?.id, - isActive: true, - app: formData.vaultEnginePath, - sourceEnvironment: formData.selectedSourceEnvironment, - path: formData.vaultSecretPath, - secretPath: formData.secretPath - }); - navigate({ - to: "/projects/secret-management/$projectId/integrations", - params: { - projectId: currentProject.id - }, - search: { - selectedTab: IntegrationsListPageTabs.NativeIntegrations - } - }); - } catch (err) { - console.error(err); - let errorMessage: string = "Something went wrong!"; - if (axios.isAxiosError(err)) { - const { message } = err?.response?.data as { message: string }; - errorMessage = message; + if (!integrationAuth?.id) return; + await mutateAsync({ + integrationAuthId: integrationAuth?.id, + isActive: true, + app: formData.vaultEnginePath, + sourceEnvironment: formData.selectedSourceEnvironment, + path: formData.vaultSecretPath, + secretPath: formData.secretPath + }); + navigate({ + to: "/projects/secret-management/$projectId/integrations", + params: { + projectId: currentProject.id + }, + search: { + selectedTab: IntegrationsListPageTabs.NativeIntegrations } - - createNotification({ - text: errorMessage, - type: "error" - }); - } + }); }; return integrationAuth ? ( diff --git a/frontend/src/pages/secret-manager/integrations/OctopusDeployAuthorizePage/OctopusDeployAuthorizePage.tsx b/frontend/src/pages/secret-manager/integrations/OctopusDeployAuthorizePage/OctopusDeployAuthorizePage.tsx index 21851e4cd..9e50fd43d 100644 --- a/frontend/src/pages/secret-manager/integrations/OctopusDeployAuthorizePage/OctopusDeployAuthorizePage.tsx +++ b/frontend/src/pages/secret-manager/integrations/OctopusDeployAuthorizePage/OctopusDeployAuthorizePage.tsx @@ -6,7 +6,6 @@ import { zodResolver } from "@hookform/resolvers/zod"; import { useNavigate } from "@tanstack/react-router"; import { z } from "zod"; -import { createNotification } from "@app/components/notifications"; import { Button, Card, CardTitle, FormControl, Input } from "@app/components/v2"; import { useProject } from "@app/context"; import { removeTrailingSlash } from "@app/helpers/string"; @@ -29,30 +28,22 @@ export const OctopusDeployAuthorizePage = () => { }); const onSubmit = async ({ instanceUrl, apiKey }: TForm) => { - try { - const integrationAuth = await mutateAsync({ - workspaceId: currentProject.id, - integration: "octopus-deploy", - url: removeTrailingSlash(instanceUrl), - accessToken: apiKey - }); + const integrationAuth = await mutateAsync({ + workspaceId: currentProject.id, + integration: "octopus-deploy", + url: removeTrailingSlash(instanceUrl), + accessToken: apiKey + }); - navigate({ - to: "/projects/secret-management/$projectId/integrations/octopus-deploy/create", - params: { - projectId: currentProject.id - }, - search: { - integrationAuthId: integrationAuth.id - } - }); - } catch (err: any) { - createNotification({ - type: "error", - text: err.message ?? "Error authorizing integration" - }); - console.error(err); - } + navigate({ + to: "/projects/secret-management/$projectId/integrations/octopus-deploy/create", + params: { + projectId: currentProject.id + }, + search: { + integrationAuthId: integrationAuth.id + } + }); }; return ( diff --git a/frontend/src/pages/secret-manager/integrations/OctopusDeployConfigurePage/OctopusDeployConfigurePage.tsx b/frontend/src/pages/secret-manager/integrations/OctopusDeployConfigurePage/OctopusDeployConfigurePage.tsx index 5b531ac2d..75f8f5031 100644 --- a/frontend/src/pages/secret-manager/integrations/OctopusDeployConfigurePage/OctopusDeployConfigurePage.tsx +++ b/frontend/src/pages/secret-manager/integrations/OctopusDeployConfigurePage/OctopusDeployConfigurePage.tsx @@ -107,49 +107,41 @@ export const OctopusDeployConfigurePage = () => { targetRoles, scope }: TFormData) => { - try { - await createIntegration.mutateAsync({ - integrationAuthId, - isActive: true, - scope, - app: targetResource.name, - appId: targetResource.appId, - targetEnvironment: targetSpace.Name, - targetEnvironmentId: targetSpace.Id, - metadata: { - octopusDeployScopeValues: { - Environment: targetEnvironments?.map(({ Id }) => Id), - Action: targetActions?.map(({ Id }) => Id), - Channel: targetChannels?.map(({ Id }) => Id), - ProcessOwner: targetProcesses?.map(({ Id }) => Id), - Role: targetRoles?.map(({ Id }) => Id), - Machine: targetMachines?.map(({ Id }) => Id) - } - }, - sourceEnvironment: sourceEnvironment.slug, - secretPath - }); - - createNotification({ - type: "success", - text: "Successfully created integration" - }); - navigate({ - to: "/projects/secret-management/$projectId/integrations", - params: { - projectId: currentProject.id - }, - search: { - selectedTab: IntegrationsListPageTabs.NativeIntegrations + await createIntegration.mutateAsync({ + integrationAuthId, + isActive: true, + scope, + app: targetResource.name, + appId: targetResource.appId, + targetEnvironment: targetSpace.Name, + targetEnvironmentId: targetSpace.Id, + metadata: { + octopusDeployScopeValues: { + Environment: targetEnvironments?.map(({ Id }) => Id), + Action: targetActions?.map(({ Id }) => Id), + Channel: targetChannels?.map(({ Id }) => Id), + ProcessOwner: targetProcesses?.map(({ Id }) => Id), + Role: targetRoles?.map(({ Id }) => Id), + Machine: targetMachines?.map(({ Id }) => Id) } - }); - } catch (err) { - createNotification({ - type: "error", - text: "Failed to create integration" - }); - console.error(err); - } + }, + sourceEnvironment: sourceEnvironment.slug, + secretPath + }); + + createNotification({ + type: "success", + text: "Successfully created integration" + }); + navigate({ + to: "/projects/secret-management/$projectId/integrations", + params: { + projectId: currentProject.id + }, + search: { + selectedTab: IntegrationsListPageTabs.NativeIntegrations + } + }); }; useEffect(() => { diff --git a/frontend/src/pages/user/PersonalSettingsPage/components/ChangeEmailSection/ChangeEmailSection.tsx b/frontend/src/pages/user/PersonalSettingsPage/components/ChangeEmailSection/ChangeEmailSection.tsx index c9d457e44..bd37e5620 100644 --- a/frontend/src/pages/user/PersonalSettingsPage/components/ChangeEmailSection/ChangeEmailSection.tsx +++ b/frontend/src/pages/user/PersonalSettingsPage/components/ChangeEmailSection/ChangeEmailSection.tsx @@ -83,23 +83,14 @@ export const ChangeEmailSection = () => { return; } - try { - await requestEmailChangeOTP({ newEmail }); - setPendingEmail(newEmail); - setIsOTPModalOpen(true); + await requestEmailChangeOTP({ newEmail }); + setPendingEmail(newEmail); + setIsOTPModalOpen(true); - createNotification({ - text: "Verification code sent to your new email address. Check your inbox!", - type: "success" - }); - } catch (err: any) { - console.error(err); - const errorMessage = err?.response?.data?.message || "Failed to send verification code"; - createNotification({ - text: errorMessage, - type: "error" - }); - } + createNotification({ + text: "Verification code sent to your new email address. Check your inbox!", + type: "success" + }); }; const [typedOTP, setTypedOTP] = useState(""); @@ -135,8 +126,6 @@ export const ChangeEmailSection = () => { navigate({ to: "/login" }); }, 2000); } catch (err: any) { - console.error(err); - const errorMessage = err?.response?.data?.message || "Invalid verification code"; if (errorMessage.includes("Invalid verification code")) { // Reset to email step so user must request new OTP @@ -149,11 +138,6 @@ export const ChangeEmailSection = () => { text: "Invalid verification code. Please request a new one.", type: "error" }); - } else { - createNotification({ - text: errorMessage, - type: "error" - }); } } }; diff --git a/frontend/src/pages/user/PersonalSettingsPage/components/ChangePasswordSection/ChangePasswordSection.tsx b/frontend/src/pages/user/PersonalSettingsPage/components/ChangePasswordSection/ChangePasswordSection.tsx index 552eab741..1ae492162 100644 --- a/frontend/src/pages/user/PersonalSettingsPage/components/ChangePasswordSection/ChangePasswordSection.tsx +++ b/frontend/src/pages/user/PersonalSettingsPage/components/ChangePasswordSection/ChangePasswordSection.tsx @@ -97,21 +97,13 @@ export const ChangePasswordSection = () => { }; const onSetupPassword = async () => { - try { - await sendSetupPasswordEmail.mutateAsync(); + await sendSetupPasswordEmail.mutateAsync(); - createNotification({ - title: "Password setup verification email sent", - text: "Check your email to confirm password setup", - type: "info" - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to send password setup email", - type: "error" - }); - } + createNotification({ + title: "Password setup verification email sent", + text: "Check your email to confirm password setup", + type: "info" + }); }; return ( diff --git a/frontend/src/pages/user/PersonalSettingsPage/components/DeleteAccountSection/DeleteAccountSection.tsx b/frontend/src/pages/user/PersonalSettingsPage/components/DeleteAccountSection/DeleteAccountSection.tsx index 5761a772a..301942346 100644 --- a/frontend/src/pages/user/PersonalSettingsPage/components/DeleteAccountSection/DeleteAccountSection.tsx +++ b/frontend/src/pages/user/PersonalSettingsPage/components/DeleteAccountSection/DeleteAccountSection.tsx @@ -15,23 +15,15 @@ export const DeleteAccountSection = () => { const { mutateAsync: deleteUserMutateAsync, isPending } = useDeleteMe(); const handleDeleteAccountSubmit = async () => { - try { - await deleteUserMutateAsync(); + await deleteUserMutateAsync(); - createNotification({ - text: "Successfully deleted account", - type: "success" - }); + createNotification({ + text: "Successfully deleted account", + type: "success" + }); - navigate({ to: "/login" }); - handlePopUpClose("deleteAccount"); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to delete account", - type: "error" - }); - } + navigate({ to: "/login" }); + handlePopUpClose("deleteAccount"); }; return ( diff --git a/frontend/src/pages/user/PersonalSettingsPage/components/SecuritySection/MFASection.tsx b/frontend/src/pages/user/PersonalSettingsPage/components/SecuritySection/MFASection.tsx index ef29f3ff6..74f4ed99b 100644 --- a/frontend/src/pages/user/PersonalSettingsPage/components/SecuritySection/MFASection.tsx +++ b/frontend/src/pages/user/PersonalSettingsPage/components/SecuritySection/MFASection.tsx @@ -84,49 +84,27 @@ export const MFASection = () => { }, [totpRegistration, showMobileAuthSetup]); const handleTotpDeletion = async () => { - try { - await deleteTotpConfiguration(); + await deleteTotpConfiguration(); - await mutateAsync({ - selectedMfaMethod: MfaMethod.EMAIL - }); + await mutateAsync({ + selectedMfaMethod: MfaMethod.EMAIL + }); - createNotification({ - text: "Successfully deleted mobile authenticator and switched to email authentication", - type: "success" - }); + createNotification({ + text: "Successfully deleted mobile authenticator and switched to email authentication", + type: "success" + }); - handlePopUpClose("deleteTotpConfig"); - } catch (err) { - console.error(err); - const error = err as any; - const text = error?.response?.data?.message ?? "Failed to delete mobile authenticator"; - - createNotification({ - text, - type: "error" - }); - } + handlePopUpClose("deleteTotpConfig"); }; const handleGenerateMoreRecoveryCodes = async () => { - try { - await createTotpRecoveryCodes(); + await createTotpRecoveryCodes(); - createNotification({ - text: "Successfully generated new recovery codes", - type: "success" - }); - } catch (err) { - console.error(err); - const error = err as any; - const text = error?.response?.data?.message ?? "Failed to generate new recovery codes"; - - createNotification({ - text, - type: "error" - }); - } + createNotification({ + text: "Successfully generated new recovery codes", + type: "success" + }); }; const handleFormDataChange = async (field: string, value: any) => { @@ -200,10 +178,6 @@ export const MFASection = () => { await queryClient.invalidateQueries({ queryKey: userKeys.totpConfiguration }); } catch { - createNotification({ - text: "Failed to verify TOTP code. Please try again.", - type: "error" - }); setIsLoading(false); return; } @@ -249,12 +223,6 @@ export const MFASection = () => { setShowMobileAuthSetup(false); setTotpCode(""); setShouldShowRecoveryCodes.off(); - } catch (err) { - createNotification({ - text: "Something went wrong while updating two-factor authentication settings.", - type: "error" - }); - console.error(err); } finally { setIsLoading(false); } diff --git a/frontend/src/pages/user/PersonalSettingsPage/components/SessionsSection/SessionsTable.tsx b/frontend/src/pages/user/PersonalSettingsPage/components/SessionsSection/SessionsTable.tsx index 027f2ed46..f37be42a1 100644 --- a/frontend/src/pages/user/PersonalSettingsPage/components/SessionsSection/SessionsTable.tsx +++ b/frontend/src/pages/user/PersonalSettingsPage/components/SessionsSection/SessionsTable.tsx @@ -40,19 +40,11 @@ export const SessionsTable = () => { ] as const); const handleSignOut = async (sessionId: string) => { - try { - await revokeMySessionById(sessionId); - createNotification({ - text: "Session revoked successfully", - type: "success" - }); - } catch (error) { - console.error(error); - createNotification({ - text: "Failed to revoke session", - type: "error" - }); - } + await revokeMySessionById(sessionId); + createNotification({ + text: "Session revoked successfully", + type: "success" + }); handlePopUpClose("deleteSession"); }; diff --git a/frontend/src/pages/user/PersonalSettingsPage/components/UserNameSection/UserNameSection.tsx b/frontend/src/pages/user/PersonalSettingsPage/components/UserNameSection/UserNameSection.tsx index df0dae9cb..1e06d298f 100644 --- a/frontend/src/pages/user/PersonalSettingsPage/components/UserNameSection/UserNameSection.tsx +++ b/frontend/src/pages/user/PersonalSettingsPage/components/UserNameSection/UserNameSection.tsx @@ -27,22 +27,14 @@ export const UserNameSection = (): JSX.Element => { }, [user]); const onFormSubmit = async ({ name }: FormData) => { - try { - if (!user?.id) return; - if (name === "") return; + if (!user?.id) return; + if (name === "") return; - await mutateAsync({ newName: name }); - createNotification({ - text: "Successfully renamed user", - type: "success" - }); - } catch (error) { - console.error(error); - createNotification({ - text: "Failed to rename user", - type: "error" - }); - } + await mutateAsync({ newName: name }); + createNotification({ + text: "Successfully renamed user", + type: "success" + }); }; return ( From 0d3cb0c0180d672869175a9255b2c1b582febe13 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Mon, 3 Nov 2025 23:46:08 +0530 Subject: [PATCH 47/79] refactor: enhance folder retrieval with dynamic sorting options --- .../secret-folder/secret-folder-dal.ts | 37 +++++++++++++------ .../secret-folder/secret-folder-service.ts | 29 ++++++++------- .../secret-folder/secret-folder-types.ts | 2 + 3 files changed, 42 insertions(+), 26 deletions(-) diff --git a/backend/src/services/secret-folder/secret-folder-dal.ts b/backend/src/services/secret-folder/secret-folder-dal.ts index c999b69d2..356de3099 100644 --- a/backend/src/services/secret-folder/secret-folder-dal.ts +++ b/backend/src/services/secret-folder/secret-folder-dal.ts @@ -426,11 +426,13 @@ export const secretFolderDALFactory = (db: TDbClient) => { ), db.ref("slug").withSchema(TableName.Environment).as("environment") ) - .orderByRaw( - `CASE WHEN ${TableName.SecretFolder}.${orderBy} LIKE '\\_%' THEN ${orderDirection === OrderByDirection.ASC ? "0" : "1"} ELSE ${orderDirection === OrderByDirection.ASC ? "1" : "0"} END` - ) - .orderByRaw(`LOWER(${TableName.SecretFolder}.${orderBy}) ${orderDirection}`) - .orderByRaw(`${TableName.SecretFolder}.${orderBy} ${orderDirection}`); + .orderByRaw(`CASE WHEN ${TableName.SecretFolder}.?? LIKE '\\_%' THEN ? ELSE ? END`, [ + orderBy, + orderDirection === OrderByDirection.ASC ? 0 : 1, + orderDirection === OrderByDirection.ASC ? 1 : 0 + ]) + .orderByRaw(`LOWER(${TableName.SecretFolder}.??) ${orderDirection}`, [orderBy]) + .orderByRaw(`${TableName.SecretFolder}.?? ${orderDirection}`, [orderBy]); if (limit) { const rankOffset = offset + 1; // ranks start from 1 @@ -440,11 +442,13 @@ export const secretFolderDALFactory = (db: TDbClient) => { .from[number]>("w") .where("w.rank", ">=", rankOffset) .andWhere("w.rank", "<", rankOffset + limit) - .orderByRaw( - `CASE WHEN "w"."${orderBy}" LIKE '\\_%' THEN ${orderDirection === OrderByDirection.ASC ? "0" : "1"} ELSE ${orderDirection === OrderByDirection.ASC ? "1" : "0"} END` - ) - .orderByRaw(`LOWER("w"."${orderBy}") ${orderDirection}`) - .orderByRaw(`"w"."${orderBy}" ${orderDirection}`); + .orderByRaw(`CASE WHEN "w".?? LIKE '\\_%' THEN ? ELSE ? END`, [ + orderBy, + orderDirection === OrderByDirection.ASC ? 0 : 1, + orderDirection === OrderByDirection.ASC ? 1 : 0 + ]) + .orderByRaw(`LOWER("w".??) ${orderDirection}`, [orderBy]) + .orderByRaw(`"w".?? ${orderDirection}`, [orderBy]); } const folders = await query; @@ -455,7 +459,10 @@ export const secretFolderDALFactory = (db: TDbClient) => { } }; - const findByEnvsDeep = async ({ parentIds }: TFindFoldersDeepByParentIdsDTO, tx?: Knex) => { + const findByEnvsDeep = async ( + { parentIds, orderBy = SecretsOrderBy.Name, orderDirection = OrderByDirection.ASC }: TFindFoldersDeepByParentIdsDTO, + tx?: Knex + ) => { try { const folders = await (tx || db.replicaNode()) .withRecursive("parents", (qb) => @@ -490,7 +497,13 @@ export const secretFolderDALFactory = (db: TDbClient) => { .select<(TSecretFolders & { path: string; depth: number; environment: string })[]>("*") .from("parents") .orderBy("depth") - .orderBy(`name`); + .orderByRaw(`CASE WHEN "parents".?? LIKE '\\_%' THEN ? ELSE ? END`, [ + orderBy, + orderDirection === OrderByDirection.ASC ? 0 : 1, + orderDirection === OrderByDirection.ASC ? 1 : 0 + ]) + .orderByRaw(`LOWER("parents".??) ${orderDirection}`, [orderBy]) + .orderByRaw(`"parents".?? ${orderDirection}`, [orderBy]); return folders; } catch (error) { diff --git a/backend/src/services/secret-folder/secret-folder-service.ts b/backend/src/services/secret-folder/secret-folder-service.ts index c216ea3a8..033efdb14 100644 --- a/backend/src/services/secret-folder/secret-folder-service.ts +++ b/backend/src/services/secret-folder/secret-folder-service.ts @@ -14,6 +14,7 @@ import { PgSqlLock } from "@app/keystore/keystore"; import { BadRequestError, NotFoundError } from "@app/lib/errors"; import { OrderByDirection, OrgServiceActor } from "@app/lib/types"; import { ActorType } from "@app/services/auth/auth-type"; +import { SecretsOrderBy } from "@app/services/secret/secret-types"; import { buildFolderPath } from "@app/services/secret-folder/secret-folder-fns"; import { @@ -781,7 +782,11 @@ export const secretFolderServiceFactory = ({ if (!parentFolder) return []; if (recursive) { - const recursiveFolders = await folderDAL.findByEnvsDeep({ parentIds: [parentFolder.id] }); + const recursiveFolders = await folderDAL.findByEnvsDeep({ + parentIds: [parentFolder.id], + orderBy: orderBy || SecretsOrderBy.Name, + orderDirection: orderDirection || OrderByDirection.ASC + }); // remove the parent folder return recursiveFolders .filter((folder) => { @@ -800,19 +805,15 @@ export const secretFolderServiceFactory = ({ })); } - const folders = await folderDAL.find( - { - envId: env.id, - parentId: parentFolder.id, - isReserved: false, - $search: search ? { name: `%${search}%` } : undefined - }, - { - sort: orderBy ? [[orderBy, orderDirection ?? OrderByDirection.ASC]] : undefined, - limit, - offset - } - ); + const folders = await folderDAL.findByMultiEnv({ + environmentIds: [env.id], + parentIds: [parentFolder.id], + search, + orderBy: orderBy || SecretsOrderBy.Name, + orderDirection: orderDirection || OrderByDirection.ASC, + limit, + offset + }); if (lastSecretModified) { return folders.filter((el) => el.lastSecretModified ? el.lastSecretModified >= new Date(lastSecretModified) : false diff --git a/backend/src/services/secret-folder/secret-folder-types.ts b/backend/src/services/secret-folder/secret-folder-types.ts index da8be52a0..d220c29d2 100644 --- a/backend/src/services/secret-folder/secret-folder-types.ts +++ b/backend/src/services/secret-folder/secret-folder-types.ts @@ -64,6 +64,8 @@ export type TGetFoldersDeepByEnvsDTO = { export type TFindFoldersDeepByParentIdsDTO = { parentIds: string[]; + orderBy?: SecretsOrderBy; + orderDirection?: OrderByDirection; }; export type TCreateManyFoldersDTO = { From dbd4a9ea516ac1614e08d6ebab5ef8cc509f2a20 Mon Sep 17 00:00:00 2001 From: x032205 Date: Mon, 3 Nov 2025 13:27:13 -0500 Subject: [PATCH 48/79] added log searching, improved minor styling --- .../v2/HighlightText/HighlightText.tsx | 28 ++-------- .../components/PamSessionLogOutput.tsx | 19 +++++-- .../components/PamSessionLogsSection.tsx | 56 +++++++++++++++---- .../components/PamSessionRow.tsx | 34 ++++++----- 4 files changed, 84 insertions(+), 53 deletions(-) diff --git a/frontend/src/components/v2/HighlightText/HighlightText.tsx b/frontend/src/components/v2/HighlightText/HighlightText.tsx index c81dab2df..92fdc1d6d 100644 --- a/frontend/src/components/v2/HighlightText/HighlightText.tsx +++ b/frontend/src/components/v2/HighlightText/HighlightText.tsx @@ -9,22 +9,10 @@ export const HighlightText = ({ }) => { if (!text) return null; - const renderTextWithNewlines = (input: string, baseKeyPrefix: string = ""): React.ReactNode[] => { - if (!input) return []; - const lines = input.split("\n"); - return lines.flatMap((line, index) => { - const nodes: React.ReactNode[] = [line]; - if (index < lines.length - 1) { - nodes.push(
); - } - return nodes; - }); - }; - const searchTerm = highlight.toLowerCase().trim(); if (!searchTerm) { - return {renderTextWithNewlines(text, "full-text")}; + return {text}; } const parts: React.ReactNode[] = []; @@ -36,16 +24,12 @@ export const HighlightText = ({ text.replace(regex, (match: string, offset: number) => { if (offset > lastIndex) { const preMatchText = text.substring(lastIndex, offset); - parts.push( - - {renderTextWithNewlines(preMatchText, `pre-${lastIndex}`)} - - ); + parts.push({preMatchText}); } parts.push( - {renderTextWithNewlines(match, `match-${offset}`)} + {match} ); @@ -56,11 +40,7 @@ export const HighlightText = ({ if (lastIndex < text.length) { const postMatchText = text.substring(lastIndex); - parts.push( - - {renderTextWithNewlines(postMatchText, `post-${lastIndex}`)} - - ); + parts.push({postMatchText}); } return parts; diff --git a/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogOutput.tsx b/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogOutput.tsx index a0cfb6cb9..99e30627d 100644 --- a/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogOutput.tsx +++ b/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogOutput.tsx @@ -1,5 +1,6 @@ import { useState } from "react"; +import { HighlightText } from "@app/components/v2/HighlightText"; import { PamResourceType } from "@app/hooks/api/pam"; type TableLog = { @@ -10,10 +11,12 @@ type TableLog = { export const PamSessionLogOutput = ({ content, - resourceType + resourceType, + search }: { content: string; resourceType: PamResourceType; + search: string; }) => { const [isRawView, setIsRawView] = useState(false); @@ -45,7 +48,9 @@ export const PamSessionLogOutput = ({ return (

{isRawView ? ( -
{content}
+
+ +
) : ( <> {parsedContent.command && ( @@ -57,7 +62,7 @@ export const PamSessionLogOutput = ({
{headers.map((header) => ( ))} @@ -71,7 +76,7 @@ export const PamSessionLogOutput = ({ > {headers.map((header) => ( ))} @@ -103,5 +108,9 @@ export const PamSessionLogOutput = ({ ); } - return
{content}
; + return ( +
+ +
+ ); }; diff --git a/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx b/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx index b3c287380..0fbccbc9b 100644 --- a/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx +++ b/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx @@ -1,8 +1,10 @@ -import { useState } from "react"; -import { faChevronRight } from "@fortawesome/free-solid-svg-icons"; +import { useMemo, useState } from "react"; +import { faChevronRight, faMagnifyingGlass } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { twMerge } from "tailwind-merge"; +import { Input } from "@app/components/v2"; +import { HighlightText } from "@app/components/v2/HighlightText"; import { TPamSession } from "@app/hooks/api/pam"; import { PamSessionLogOutput } from "./PamSessionLogOutput"; @@ -14,6 +16,7 @@ type Props = { export const PamSessionLogsSection = ({ session }: Props) => { const [expandedLogTimestamps, setExpandedLogTimestamps] = useState>(new Set()); + const [search, setSearch] = useState(""); const toggleExpand = (timestamp: string) => { setExpandedLogTimestamps((prev) => { @@ -24,15 +27,43 @@ export const PamSessionLogsSection = ({ session }: Props) => { }); }; + const filteredLogs = useMemo( + () => + session.commandLogs.filter((log) => { + const { input, output } = log; + + const searchValue = search.trim().toLowerCase(); + + return ( + input.toLowerCase().includes(searchValue) || output.toLowerCase().includes(searchValue) + ); + }), + [session.commandLogs, search] + ); + return (

Session Logs

-
- {session.commandLogs.length > 0 ? ( - session.commandLogs.map((log) => { - const isExpanded = expandedLogTimestamps.has(log.timestamp); + +
+ { + const newSearch = e.target.value; + setSearch(newSearch); + }} + leftIcon={} + placeholder="Search logs..." + className="flex-1 bg-mineshaft-800" + containerClassName="bg-transparent" + /> +
+
+ {filteredLogs.length > 0 ? ( + filteredLogs.map((log) => { + const isExpanded = search.length || expandedLogTimestamps.has(log.timestamp); const formattedInput = formatLogContent(log.input); return ( @@ -62,7 +93,7 @@ export const PamSessionLogsSection = ({ session }: Props) => { isExpanded ? "break-all whitespace-pre-wrap" : "truncate" }`} > - {formattedInput} +
{
@@ -93,8 +125,12 @@ export const PamSessionLogsSection = ({ session }: Props) => { ); }) ) : ( -
- {session.startedAt && session.endedAt ? ( +
+ {search.length ? ( +
+
No logs match search criteria
+
+ ) : (
Session logs are not yet available
@@ -103,8 +139,6 @@ export const PamSessionLogsSection = ({ session }: Props) => { If logs do not appear after some time, please contact your Gateway administrators.
- ) : ( - "No session logs" )}
)} diff --git a/frontend/src/pages/pam/PamSessionsPage/components/PamSessionRow.tsx b/frontend/src/pages/pam/PamSessionsPage/components/PamSessionRow.tsx index f730e331d..8721560c4 100644 --- a/frontend/src/pages/pam/PamSessionsPage/components/PamSessionRow.tsx +++ b/frontend/src/pages/pam/PamSessionsPage/components/PamSessionRow.tsx @@ -27,6 +27,7 @@ import { HighlightText } from "@app/components/v2/HighlightText"; import { ProjectPermissionActions, ProjectPermissionSub } from "@app/context"; import { PAM_RESOURCE_TYPE_MAP, TPamSession } from "@app/hooks/api/pam"; +import { formatLogContent } from "../../PamSessionsByIDPage/components/PamSessionLogsSection.utils"; import { PamSessionStatusBadge } from "./PamSessionStatusBadge"; type Props = { @@ -159,21 +160,28 @@ export const PamSessionRow = ({ session, search, filteredCommandLogs }: Props) = {filteredCommandLogs.length > 0 && (
SAN / CNStatusSerial NumberSAN / CNCertificate StatusSerial Number Sync Status Expires At @@ -163,23 +163,23 @@ export const PkiSyncCertificatesSection = ({ pkiSync }: Props) => { // Calculate auto-renewal timeline const hasAutoRenewal = Boolean( syncCert.certificateRenewBeforeDays && - syncCert.certificateRenewBeforeDays > 0 && - !syncCert.certificateRenewalError && - syncCert.certificateNotAfter + syncCert.certificateRenewBeforeDays > 0 && + !syncCert.certificateRenewalError && + syncCert.certificateNotAfter ); const daysUntilRenewal = hasAutoRenewal && syncCert.certificateNotAfter ? (() => { - const expiryDate = new Date(syncCert.certificateNotAfter); - const renewalDate = new Date( - expiryDate.getTime() - - syncCert.certificateRenewBeforeDays! * 24 * 60 * 60 * 1000 - ); - const now = new Date(); - const diffInMs = renewalDate.getTime() - now.getTime(); - return Math.max(0, Math.ceil(diffInMs / (24 * 60 * 60 * 1000))); - })() + const expiryDate = new Date(syncCert.certificateNotAfter); + const renewalDate = new Date( + expiryDate.getTime() - + syncCert.certificateRenewBeforeDays! * 24 * 60 * 60 * 1000 + ); + const now = new Date(); + const diffInMs = renewalDate.getTime() - now.getTime(); + return Math.max(0, Math.ceil(diffInMs / (24 * 60 * 60 * 1000))); + })() : null; const { originalDisplayName } = getCertificateDisplayName( @@ -223,7 +223,7 @@ export const PkiSyncCertificatesSection = ({ pkiSync }: Props) => { {syncCert.lastSyncMessage && - syncCert.syncStatus === CertificateSyncStatus.Failed ? ( + syncCert.syncStatus === CertificateSyncStatus.Failed ? ( Failed @@ -290,7 +290,7 @@ export const PkiSyncCertificatesSection = ({ pkiSync }: Props) => { page={currentPage} perPage={pageSize} onChangePage={(page: number) => setCurrentPage(page)} - onChangePerPage={() => {}} + onChangePerPage={() => { }} /> )} From 04767a819e822e9bb1a28f46be7accb738240ebc Mon Sep 17 00:00:00 2001 From: Carlos Monastyrski Date: Thu, 30 Oct 2025 16:15:45 -0300 Subject: [PATCH 19/79] Lint fix --- .../components/PkiSyncCertificatesSection.tsx | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncCertificatesSection.tsx b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncCertificatesSection.tsx index 7dd3b8884..aafff85cd 100644 --- a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncCertificatesSection.tsx +++ b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncCertificatesSection.tsx @@ -163,23 +163,23 @@ export const PkiSyncCertificatesSection = ({ pkiSync }: Props) => { // Calculate auto-renewal timeline const hasAutoRenewal = Boolean( syncCert.certificateRenewBeforeDays && - syncCert.certificateRenewBeforeDays > 0 && - !syncCert.certificateRenewalError && - syncCert.certificateNotAfter + syncCert.certificateRenewBeforeDays > 0 && + !syncCert.certificateRenewalError && + syncCert.certificateNotAfter ); const daysUntilRenewal = hasAutoRenewal && syncCert.certificateNotAfter ? (() => { - const expiryDate = new Date(syncCert.certificateNotAfter); - const renewalDate = new Date( - expiryDate.getTime() - - syncCert.certificateRenewBeforeDays! * 24 * 60 * 60 * 1000 - ); - const now = new Date(); - const diffInMs = renewalDate.getTime() - now.getTime(); - return Math.max(0, Math.ceil(diffInMs / (24 * 60 * 60 * 1000))); - })() + const expiryDate = new Date(syncCert.certificateNotAfter); + const renewalDate = new Date( + expiryDate.getTime() - + syncCert.certificateRenewBeforeDays! * 24 * 60 * 60 * 1000 + ); + const now = new Date(); + const diffInMs = renewalDate.getTime() - now.getTime(); + return Math.max(0, Math.ceil(diffInMs / (24 * 60 * 60 * 1000))); + })() : null; const { originalDisplayName } = getCertificateDisplayName( @@ -223,7 +223,7 @@ export const PkiSyncCertificatesSection = ({ pkiSync }: Props) => { {syncCert.lastSyncMessage && - syncCert.syncStatus === CertificateSyncStatus.Failed ? ( + syncCert.syncStatus === CertificateSyncStatus.Failed ? ( Failed @@ -290,7 +290,7 @@ export const PkiSyncCertificatesSection = ({ pkiSync }: Props) => { page={currentPage} perPage={pageSize} onChangePage={(page: number) => setCurrentPage(page)} - onChangePerPage={() => { }} + onChangePerPage={() => {}} /> )} From 83da0dd3d98c67197084153e49090e09007b2771 Mon Sep 17 00:00:00 2001 From: Sheen Capadngan Date: Sat, 1 Nov 2025 00:46:27 +0800 Subject: [PATCH 20/79] misc: improved monitoring and telemetry docs --- .../guides/monitoring-telemetry.mdx | 763 ++++++++++-------- 1 file changed, 408 insertions(+), 355 deletions(-) diff --git a/docs/self-hosting/guides/monitoring-telemetry.mdx b/docs/self-hosting/guides/monitoring-telemetry.mdx index b23c51b27..441a78ac0 100644 --- a/docs/self-hosting/guides/monitoring-telemetry.mdx +++ b/docs/self-hosting/guides/monitoring-telemetry.mdx @@ -27,7 +27,9 @@ Both approaches provide the same metrics data in OTEL format, so you can choose - Access to deploy monitoring services (Prometheus, Grafana, etc.) - Basic understanding of Prometheus and Grafana -## Environment Variables +## Setup + +### Environment Variables Configure the following environment variables in your Infisical backend: @@ -37,287 +39,282 @@ OTEL_TELEMETRY_COLLECTION_ENABLED=true # Choose export type: "prometheus" or "otlp" OTEL_EXPORT_TYPE=prometheus - -# For OTLP push mode, also configure: -# OTEL_EXPORT_OTLP_ENDPOINT=http://otel-collector:4318/v1/metrics -# OTEL_COLLECTOR_BASIC_AUTH_USERNAME=your_collector_username -# OTEL_COLLECTOR_BASIC_AUTH_PASSWORD=your_collector_password -# OTEL_OTLP_PUSH_INTERVAL=30000 ``` -**Note**: The `OTEL_COLLECTOR_BASIC_AUTH_USERNAME` and `OTEL_COLLECTOR_BASIC_AUTH_PASSWORD` values must match the credentials configured in your OpenTelemetry Collector's `basicauth/server` extension. These are not hardcoded values - you configure them in your collector configuration file. + + + This approach exposes metrics on port 9464 at the `/metrics` endpoint, allowing Prometheus to scrape the data. The metrics are exposed in Prometheus format but originate from OpenTelemetry instrumentation. -## Option 1: Pull-based Monitoring (Prometheus) + ### Configuration -This approach exposes metrics on port 9464 at the `/metrics` endpoint, allowing Prometheus to scrape the data. The metrics are exposed in Prometheus format but originate from OpenTelemetry instrumentation. + 1. **Enable Prometheus export in Infisical**: -### Configuration + ```bash + OTEL_TELEMETRY_COLLECTION_ENABLED=true + OTEL_EXPORT_TYPE=prometheus + ``` -1. **Enable Prometheus export in Infisical**: + 2. **Expose the metrics port** in your Infisical backend: - ```bash - OTEL_TELEMETRY_COLLECTION_ENABLED=true - OTEL_EXPORT_TYPE=prometheus - ``` + - **Docker**: Expose port 9464 + - **Kubernetes**: Create a service exposing port 9464 + - **Other**: Ensure port 9464 is accessible to your monitoring stack -2. **Expose the metrics port** in your Infisical backend: + 3. **Create Prometheus configuration** (`prometheus.yml`): - - **Docker**: Expose port 9464 - - **Kubernetes**: Create a service exposing port 9464 - - **Other**: Ensure port 9464 is accessible to your monitoring stack + ```yaml + global: + scrape_interval: 30s + evaluation_interval: 30s -3. **Create Prometheus configuration** (`prometheus.yml`): + scrape_configs: + - job_name: "infisical" + scrape_interval: 30s + static_configs: + - targets: ["infisical-backend:9464"] # Adjust hostname/port based on your deployment + metrics_path: "/metrics" + ``` - ```yaml - global: - scrape_interval: 30s - evaluation_interval: 30s + **Note**: Replace `infisical-backend:9464` with the actual hostname and port where your Infisical backend is running. This could be: - scrape_configs: - - job_name: "infisical" - scrape_interval: 30s - static_configs: - - targets: ["infisical-backend:9464"] # Adjust hostname/port based on your deployment - metrics_path: "/metrics" - ``` + - **Docker Compose**: `infisical-backend:9464` (service name) + - **Kubernetes**: `infisical-backend.default.svc.cluster.local:9464` (service name) + - **Bare Metal**: `192.168.1.100:9464` (actual IP address) + - **Cloud**: `your-infisical.example.com:9464` (domain name) - **Note**: Replace `infisical-backend:9464` with the actual hostname and port where your Infisical backend is running. This could be: + ### Deployment Options - - **Docker Compose**: `infisical-backend:9464` (service name) - - **Kubernetes**: `infisical-backend.default.svc.cluster.local:9464` (service name) - - **Bare Metal**: `192.168.1.100:9464` (actual IP address) - - **Cloud**: `your-infisical.example.com:9464` (domain name) + + + ```yaml + services: + prometheus: + image: prom/prometheus:latest + ports: + - "9090:9090" + volumes: + - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro + command: + - "--config.file=/etc/prometheus/prometheus.yml" -### Deployment Options + grafana: + image: grafana/grafana:latest + ports: + - "3000:3000" + environment: + - GF_SECURITY_ADMIN_USER=admin + - GF_SECURITY_ADMIN_PASSWORD=admin + ``` + + + ```yaml + # prometheus-deployment.yaml + apiVersion: apps/v1 + kind: Deployment + metadata: + name: prometheus + spec: + replicas: 1 + selector: + matchLabels: + app: prometheus + template: + metadata: + labels: + app: prometheus + spec: + containers: + - name: prometheus + image: prom/prometheus:latest + ports: + - containerPort: 9090 + volumeMounts: + - name: config + mountPath: /etc/prometheus + volumes: + - name: config + configMap: + name: prometheus-config -#### Docker Compose - -```yaml -services: - prometheus: - image: prom/prometheus:latest - ports: - - "9090:9090" - volumes: - - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro - command: - - "--config.file=/etc/prometheus/prometheus.yml" - - grafana: - image: grafana/grafana:latest - ports: - - "3000:3000" - environment: - - GF_SECURITY_ADMIN_USER=admin - - GF_SECURITY_ADMIN_PASSWORD=admin -``` - -#### Kubernetes - -```yaml -# prometheus-deployment.yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - name: prometheus -spec: - replicas: 1 - selector: - matchLabels: - app: prometheus - template: - metadata: - labels: - app: prometheus - spec: - containers: - - name: prometheus - image: prom/prometheus:latest + --- + # prometheus-service.yaml + apiVersion: v1 + kind: Service + metadata: + name: prometheus + spec: + selector: + app: prometheus ports: - - containerPort: 9090 - volumeMounts: - - name: config - mountPath: /etc/prometheus - volumes: - - name: config - configMap: - name: prometheus-config + - port: 9090 + targetPort: 9090 + type: ClusterIP + ``` + + + ```bash + helm repo add prometheus-community https://prometheus-community.github.io/helm-charts + helm install prometheus prometheus-community/prometheus \ + --set server.config.global.scrape_interval=30s \ + --set server.config.scrape_configs[0].job_name=infisical \ + --set server.config.scrape_configs[0].static_configs[0].targets[0]=infisical-backend:9464 + ``` + + ---- -# prometheus-service.yaml -apiVersion: v1 -kind: Service -metadata: - name: prometheus -spec: - selector: - app: prometheus - ports: - - port: 9090 - targetPort: 9090 - type: ClusterIP -``` + + + This approach sends metrics directly to an OpenTelemetry Collector via the OTLP protocol. This gives you the most flexibility as you can configure the collector to export to multiple backends simultaneously. -#### Helm + ### Configuration -```bash -helm repo add prometheus-community https://prometheus-community.github.io/helm-charts -helm install prometheus prometheus-community/prometheus \ - --set server.config.global.scrape_interval=30s \ - --set server.config.scrape_configs[0].job_name=infisical \ - --set server.config.scrape_configs[0].static_configs[0].targets[0]=infisical-backend:9464 -``` + 1. **Enable OTLP export in Infisical**: -## Option 2: Push-based Monitoring (OTLP) + ```bash + OTEL_TELEMETRY_COLLECTION_ENABLED=true + OTEL_EXPORT_TYPE=otlp + OTEL_EXPORT_OTLP_ENDPOINT=http://otel-collector:4318/v1/metrics + OTEL_COLLECTOR_BASIC_AUTH_USERNAME=infisical + OTEL_COLLECTOR_BASIC_AUTH_PASSWORD=infisical + OTEL_OTLP_PUSH_INTERVAL=30000 + ``` -This approach sends metrics directly to an OpenTelemetry Collector via the OTLP protocol. This gives you the most flexibility as you can configure the collector to export to multiple backends simultaneously. + 2. **Create OpenTelemetry Collector configuration** (`otel-collector-config.yaml`): -### Configuration + ```yaml + extensions: + health_check: + pprof: + zpages: + basicauth/server: + htpasswd: + inline: | + your_username:your_password -1. **Enable OTLP export in Infisical**: + receivers: + otlp: + protocols: + http: + endpoint: 0.0.0.0:4318 + auth: + authenticator: basicauth/server - ```bash - OTEL_TELEMETRY_COLLECTION_ENABLED=true - OTEL_EXPORT_TYPE=otlp - OTEL_EXPORT_OTLP_ENDPOINT=http://otel-collector:4318/v1/metrics - OTEL_COLLECTOR_BASIC_AUTH_USERNAME=infisical - OTEL_COLLECTOR_BASIC_AUTH_PASSWORD=infisical - OTEL_OTLP_PUSH_INTERVAL=30000 - ``` + prometheus: + config: + scrape_configs: + - job_name: otel-collector + scrape_interval: 30s + static_configs: + - targets: [infisical-backend:9464] + metric_relabel_configs: + - action: labeldrop + regex: "service_instance_id|service_name" -2. **Create OpenTelemetry Collector configuration** (`otel-collector-config.yaml`): + processors: + batch: - ```yaml - extensions: - health_check: - pprof: - zpages: - basicauth/server: - htpasswd: - inline: | - your_username:your_password - - receivers: - otlp: - protocols: - http: - endpoint: 0.0.0.0:4318 + exporters: + prometheus: + endpoint: "0.0.0.0:8889" auth: authenticator: basicauth/server + resource_to_telemetry_conversion: + enabled: true - prometheus: - config: - scrape_configs: - - job_name: otel-collector - scrape_interval: 30s - static_configs: - - targets: [infisical-backend:9464] - metric_relabel_configs: - - action: labeldrop - regex: "service_instance_id|service_name" + service: + extensions: [basicauth/server, health_check, pprof, zpages] + pipelines: + metrics: + receivers: [otlp] + processors: [batch] + exporters: [prometheus] + ``` - processors: - batch: + **Important**: Replace `your_username:your_password` with your chosen credentials. These must match the values you set in Infisical's `OTEL_COLLECTOR_BASIC_AUTH_USERNAME` and `OTEL_COLLECTOR_BASIC_AUTH_PASSWORD` environment variables. - exporters: - prometheus: - endpoint: "0.0.0.0:8889" - auth: - authenticator: basicauth/server - resource_to_telemetry_conversion: - enabled: true + 3. **Create Prometheus configuration** for the collector: - service: - extensions: [basicauth/server, health_check, pprof, zpages] - pipelines: - metrics: - receivers: [otlp] - processors: [batch] - exporters: [prometheus] - ``` + ```yaml + global: + scrape_interval: 30s + evaluation_interval: 30s - **Important**: Replace `your_username:your_password` with your chosen credentials. These must match the values you set in Infisical's `OTEL_COLLECTOR_BASIC_AUTH_USERNAME` and `OTEL_COLLECTOR_BASIC_AUTH_PASSWORD` environment variables. + scrape_configs: + - job_name: "otel-collector" + scrape_interval: 30s + static_configs: + - targets: ["otel-collector:8889"] # Adjust hostname/port based on your deployment + metrics_path: "/metrics" + ``` -3. **Create Prometheus configuration** for the collector: + **Note**: Replace `otel-collector:8889` with the actual hostname and port where your OpenTelemetry Collector is running. This could be: - ```yaml - global: - scrape_interval: 30s - evaluation_interval: 30s + - **Docker Compose**: `otel-collector:8889` (service name) + - **Kubernetes**: `otel-collector.default.svc.cluster.local:8889` (service name) + - **Bare Metal**: `192.168.1.100:8889` (actual IP address) + - **Cloud**: `your-collector.example.com:8889` (domain name) - scrape_configs: - - job_name: "otel-collector" - scrape_interval: 30s - static_configs: - - targets: ["otel-collector:8889"] # Adjust hostname/port based on your deployment - metrics_path: "/metrics" - ``` + ### Deployment Options - **Note**: Replace `otel-collector:8889` with the actual hostname and port where your OpenTelemetry Collector is running. This could be: + + + ```yaml + services: + otel-collector: + image: otel/opentelemetry-collector-contrib:latest + ports: + - 4318:4318 # OTLP http receiver + - 8889:8889 # Prometheus exporter metrics + volumes: + - ./otel-collector-config.yaml:/etc/otelcol-contrib/config.yaml:ro + command: + - "--config=/etc/otelcol-contrib/config.yaml" + ``` + + + ```yaml + # otel-collector-deployment.yaml + apiVersion: apps/v1 + kind: Deployment + metadata: + name: otel-collector + spec: + replicas: 1 + selector: + matchLabels: + app: otel-collector + template: + metadata: + labels: + app: otel-collector + spec: + containers: + - name: otel-collector + image: otel/opentelemetry-collector-contrib:latest + ports: + - containerPort: 4318 + - containerPort: 8889 + volumeMounts: + - name: config + mountPath: /etc/otelcol-contrib + volumes: + - name: config + configMap: + name: otel-collector-config + ``` + + + ```bash + helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts + helm install otel-collector open-telemetry/opentelemetry-collector \ + --set config.receivers.otlp.protocols.http.endpoint=0.0.0.0:4318 \ + --set config.exporters.prometheus.endpoint=0.0.0.0:8889 + ``` + + - - **Docker Compose**: `otel-collector:8889` (service name) - - **Kubernetes**: `otel-collector.default.svc.cluster.local:8889` (service name) - - **Bare Metal**: `192.168.1.100:8889` (actual IP address) - - **Cloud**: `your-collector.example.com:8889` (domain name) - -### Deployment Options - -#### Docker Compose - -```yaml -services: - otel-collector: - image: otel/opentelemetry-collector-contrib:latest - ports: - - 4318:4318 # OTLP http receiver - - 8889:8889 # Prometheus exporter metrics - volumes: - - ./otel-collector-config.yaml:/etc/otelcol-contrib/config.yaml:ro - command: - - "--config=/etc/otelcol-contrib/config.yaml" -``` - -#### Kubernetes - -```yaml -# otel-collector-deployment.yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - name: otel-collector -spec: - replicas: 1 - selector: - matchLabels: - app: otel-collector - template: - metadata: - labels: - app: otel-collector - spec: - containers: - - name: otel-collector - image: otel/opentelemetry-collector-contrib:latest - ports: - - containerPort: 4318 - - containerPort: 8889 - volumeMounts: - - name: config - mountPath: /etc/otelcol-contrib - volumes: - - name: config - configMap: - name: otel-collector-config -``` - -#### Helm - -```bash -helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts -helm install otel-collector open-telemetry/opentelemetry-collector \ - --set config.receivers.otlp.protocols.http.endpoint=0.0.0.0:4318 \ - --set config.exporters.prometheus.endpoint=0.0.0.0:8889 -``` + + ## Available Metrics @@ -327,154 +324,210 @@ Infisical exposes the following key metrics in OpenTelemetry format: These metrics track all HTTP API requests to Infisical, including request counts, latency, and errors. Use these to monitor overall API health, identify performance bottlenecks, and track usage patterns across users and machine identities. -#### Total API Requests + + + **Metric Name**: `infisical.http.server.request.count` -- **Metric Name**: `infisical.http.server.request.count` -- **Type**: Counter -- **Unit**: `{request}` -- **Description**: Total number of API requests to Infisical (covers both human users and machine identities) -- **Attributes**: - - `infisical.organization.id` (string): Organization ID - - `infisical.organization.name` (string): Organization name (e.g., "Platform Engineering Team") - - `infisical.user.id` (string, optional): User ID if human user - - `infisical.user.email` (string, optional): User email (e.g., "jane.doe@cisco.com") - - `infisical.identity.id` (string, optional): Machine identity ID - - `infisical.identity.name` (string, optional): Machine identity name (e.g., "prod-k8s-operator") - - `infisical.auth.method` (string, optional): Auth method used - - `http.request.method` (string): HTTP method (GET, POST, PUT, DELETE) - - `http.route` (string): API endpoint route pattern - - `http.response.status_code` (int): HTTP status code - - `infisical.project.id` (string, optional): Project ID - - `infisical.project.name` (string, optional): Project name - - `user_agent.original` (string, optional): User agent string - - `client.address` (string, optional): IP address + **Type**: Counter -#### Request Duration + **Unit**: `{request}` -- **Metric Name**: `infisical.http.server.request.duration` -- **Type**: Histogram -- **Unit**: `s` (seconds) -- **Description**: API request latency -- **Buckets**: [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10] -- **Attributes**: - - `infisical.organization.id` (string): Organization ID - - `infisical.organization.name` (string): Organization name - - `infisical.user.id` (string, optional): User ID if human user - - `infisical.user.email` (string, optional): User email - - `infisical.identity.id` (string, optional): Machine identity ID - - `infisical.identity.name` (string, optional): Machine identity name - - `http.request.method` (string): HTTP method - - `http.route` (string): API endpoint route pattern - - `http.response.status_code` (int): HTTP status code - - `infisical.project.id` (string, optional): Project ID - - `infisical.project.name` (string, optional): Project name + **Description**: Total number of API requests to Infisical (covers both human users and machine identities) -#### API Errors by Actor + **Attributes**: + - `infisical.organization.id` (string): Organization ID + - `infisical.organization.name` (string): Organization name (e.g., "Platform Engineering Team") + - `infisical.user.id` (string, optional): User ID if human user + - `infisical.user.email` (string, optional): User email (e.g., "jane.doe@cisco.com") + - `infisical.identity.id` (string, optional): Machine identity ID + - `infisical.identity.name` (string, optional): Machine identity name (e.g., "prod-k8s-operator") + - `infisical.auth.method` (string, optional): Auth method used + - `http.request.method` (string): HTTP method (GET, POST, PUT, DELETE) + - `http.route` (string): API endpoint route pattern + - `http.response.status_code` (int): HTTP status code + - `infisical.project.id` (string, optional): Project ID + - `infisical.project.name` (string, optional): Project name + - `user_agent.original` (string, optional): User agent string + - `client.address` (string, optional): IP address + -- **Metric Name**: `infisical.http.server.error.count` -- **Type**: Counter -- **Unit**: `{error}` -- **Description**: API errors grouped by actor (for identifying misconfigured services) -- **Attributes**: - - `infisical.organization.id` (string): Organization ID - - `infisical.organization.name` (string): Organization name - - `infisical.user.id` (string, optional): User ID if human - - `infisical.user.email` (string, optional): User email - - `infisical.identity.id` (string, optional): Identity ID if machine - - `infisical.identity.name` (string, optional): Identity name - - `http.route` (string): API endpoint where error occurred - - `http.request.method` (string): HTTP method - - `error.type` (string): Error category/type (client_error, server_error, auth_error, rate_limit_error, etc.) - - `infisical.project.id` (string, optional): Project ID - - `infisical.project.name` (string, optional): Project name - - `client.address` (string, optional): IP address - - `user_agent.original` (string, optional): User agent information + + **Metric Name**: `infisical.http.server.request.duration` + + **Type**: Histogram + + **Unit**: `s` (seconds) + + **Description**: API request latency + + **Buckets**: [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10] + + **Attributes**: + - `infisical.organization.id` (string): Organization ID + - `infisical.organization.name` (string): Organization name + - `infisical.user.id` (string, optional): User ID if human user + - `infisical.user.email` (string, optional): User email + - `infisical.identity.id` (string, optional): Machine identity ID + - `infisical.identity.name` (string, optional): Machine identity name + - `http.request.method` (string): HTTP method + - `http.route` (string): API endpoint route pattern + - `http.response.status_code` (int): HTTP status code + - `infisical.project.id` (string, optional): Project ID + - `infisical.project.name` (string, optional): Project name + + + + **Metric Name**: `infisical.http.server.error.count` + + **Type**: Counter + + **Unit**: `{error}` + + **Description**: API errors grouped by actor (for identifying misconfigured services) + + **Attributes**: + - `infisical.organization.id` (string): Organization ID + - `infisical.organization.name` (string): Organization name + - `infisical.user.id` (string, optional): User ID if human + - `infisical.user.email` (string, optional): User email + - `infisical.identity.id` (string, optional): Identity ID if machine + - `infisical.identity.name` (string, optional): Identity name + - `http.route` (string): API endpoint where error occurred + - `http.request.method` (string): HTTP method + - `error.type` (string): Error category/type (client_error, server_error, auth_error, rate_limit_error, etc.) + - `infisical.project.id` (string, optional): Project ID + - `infisical.project.name` (string, optional): Project name + - `client.address` (string, optional): IP address + - `user_agent.original` (string, optional): User agent information + + ### Secret Operations Metrics These metrics provide visibility into secret access patterns, helping you understand which secrets are being accessed, by whom, and from where. Essential for security auditing and access pattern analysis. -#### Secret Read Operations - -- **Metric Name**: `infisical.secret.read.count` -- **Type**: Counter -- **Unit**: `{operation}` -- **Description**: Number of secret read operations -- **Attributes**: - - `infisical.organization.id` (string): Organization ID - - `infisical.organization.name` (string): Organization name - - `infisical.project.id` (string): Project ID - - `infisical.project.name` (string): Project name (e.g., "payment-service-secrets") - - `infisical.environment` (string): Environment (dev, staging, prod) - - `infisical.secret.path` (string): Path to secrets (e.g., "/microservice-a/database") - - `infisical.secret.name` (string, optional): Name of secret - - `infisical.user.id` (string, optional): User ID if human - - `infisical.user.email` (string, optional): User email - - `infisical.identity.id` (string, optional): Machine identity ID - - `infisical.identity.name` (string, optional): Machine identity name - - `user_agent.original` (string, optional): User agent/SDK information - - `client.address` (string, optional): IP address + + + **Metric Name**: `infisical.secret.read.count` + + **Type**: Counter + + **Unit**: `{operation}` + + **Description**: Number of secret read operations + + **Attributes**: + - `infisical.organization.id` (string): Organization ID + - `infisical.organization.name` (string): Organization name + - `infisical.project.id` (string): Project ID + - `infisical.project.name` (string): Project name (e.g., "payment-service-secrets") + - `infisical.environment` (string): Environment (dev, staging, prod) + - `infisical.secret.path` (string): Path to secrets (e.g., "/microservice-a/database") + - `infisical.secret.name` (string, optional): Name of secret + - `infisical.user.id` (string, optional): User ID if human + - `infisical.user.email` (string, optional): User email + - `infisical.identity.id` (string, optional): Machine identity ID + - `infisical.identity.name` (string, optional): Machine identity name + - `user_agent.original` (string, optional): User agent/SDK information + - `client.address` (string, optional): IP address + + ### Authentication Metrics These metrics track authentication attempts and outcomes, enabling you to monitor login success rates, detect potential security threats, and identify authentication issues. -#### Login Attempts - -- **Metric Name**: `infisical.auth.attempt.count` -- **Type**: Counter -- **Unit**: `{attempt}` -- **Description**: Authentication attempts (both successful and failed) -- **Attributes**: - - `infisical.organization.id` (string): Organization ID - - `infisical.organization.name` (string): Organization name - - `infisical.user.id` (string, optional): User ID if human (if identifiable) - - `infisical.user.email` (string, optional): User email (if identifiable) - - `infisical.identity.id` (string, optional): Identity ID if machine (if identifiable) - - `infisical.identity.name` (string, optional): Identity name (if identifiable) - - `infisical.auth.method` (string): Authentication method attempted - - `infisical.auth.result` (string): success or failure - - `error.type` (string, optional): Reason for failure if failed (invalid_credentials, expired_token, invalid_token, etc.) - - `client.address` (string): IP address - - `user_agent.original` (string, optional): User agent/client information - - `infisical.auth.attempt.username` (string, optional): Attempted username/email (if available) + + + **Metric Name**: `infisical.auth.attempt.count` + + **Type**: Counter + + **Unit**: `{attempt}` + + **Description**: Authentication attempts (both successful and failed) + + **Attributes**: + - `infisical.organization.id` (string): Organization ID + - `infisical.organization.name` (string): Organization name + - `infisical.user.id` (string, optional): User ID if human (if identifiable) + - `infisical.user.email` (string, optional): User email (if identifiable) + - `infisical.identity.id` (string, optional): Identity ID if machine (if identifiable) + - `infisical.identity.name` (string, optional): Identity name (if identifiable) + - `infisical.auth.method` (string): Authentication method attempted + - `infisical.auth.result` (string): success or failure + - `error.type` (string, optional): Reason for failure if failed (invalid_credentials, expired_token, invalid_token, etc.) + - `client.address` (string): IP address + - `user_agent.original` (string, optional): User agent/client information + - `infisical.auth.attempt.username` (string, optional): Attempted username/email (if available) + + ### Legacy Metrics These metrics are from the previous instrumentation and may be deprecated in future versions. Consider migrating to the new Core API Metrics for more comprehensive observability. -- `API_latency` - API request latency histogram in milliseconds (Labels: `route`, `method`, `statusCode`) -- `API_errors` - API error count histogram (Labels: `route`, `method`, `type`, `name`) + + + API request latency histogram in milliseconds + + - **Labels**: `route`, `method`, `statusCode` + + + + API error count histogram + + - **Labels**: `route`, `method`, `type`, `name` + + ### Integration & Secret Sync Metrics These metrics monitor secret synchronization operations between Infisical and external systems, helping you track sync health, identify integration failures, and troubleshoot connectivity issues. -- `integration_secret_sync_errors` - Integration secret sync error count + + + Integration secret sync error count - - **Labels**: `version`, `integration`, `integrationId`, `type`, `status`, `name`, `projectId` - - **Example**: Monitor integration sync failures across different services + - **Labels**: `version`, `integration`, `integrationId`, `type`, `status`, `name`, `projectId` + - **Example**: Monitor integration sync failures across different services + -- `secret_sync_sync_secrets_errors` - Secret sync operation error count + + Secret sync operation error count - - **Labels**: `version`, `destination`, `syncId`, `projectId`, `type`, `status`, `name` - - **Example**: Track secret sync failures to external systems + - **Labels**: `version`, `destination`, `syncId`, `projectId`, `type`, `status`, `name` + - **Example**: Track secret sync failures to external systems + -- `secret_sync_import_secrets_errors` - Secret import operation error count + + Secret import operation error count - - **Labels**: `version`, `destination`, `syncId`, `projectId`, `type`, `status`, `name` - - **Example**: Monitor secret import failures + - **Labels**: `version`, `destination`, `syncId`, `projectId`, `type`, `status`, `name` + - **Example**: Monitor secret import failures + -- `secret_sync_remove_secrets_errors` - Secret removal operation error count - - **Labels**: `version`, `destination`, `syncId`, `projectId`, `type`, `status`, `name` - - **Example**: Track secret removal operation failures + + Secret removal operation error count + + - **Labels**: `version`, `destination`, `syncId`, `projectId`, `type`, `status`, `name` + - **Example**: Track secret removal operation failures + + ### System Metrics These low-level HTTP metrics are automatically collected by OpenTelemetry's instrumentation layer, providing baseline performance data for all HTTP traffic. -- `http_server_duration` - HTTP server request duration metrics (histogram buckets, count, sum) -- `http_client_duration` - HTTP client request duration metrics (histogram buckets, count, sum) + + + HTTP server request duration metrics (histogram buckets, count, sum) + + + + HTTP client request duration metrics (histogram buckets, count, sum) + + ## Troubleshooting From 78b8ff17da216cee27e853520e493ca7675bcab4 Mon Sep 17 00:00:00 2001 From: Sheen Capadngan Date: Sat, 1 Nov 2025 03:55:31 +0800 Subject: [PATCH 21/79] misc: addressed comments --- .../guides/monitoring-telemetry.mdx | 263 +++++++++--------- 1 file changed, 137 insertions(+), 126 deletions(-) diff --git a/docs/self-hosting/guides/monitoring-telemetry.mdx b/docs/self-hosting/guides/monitoring-telemetry.mdx index 441a78ac0..763826d4f 100644 --- a/docs/self-hosting/guides/monitoring-telemetry.mdx +++ b/docs/self-hosting/guides/monitoring-telemetry.mdx @@ -47,43 +47,53 @@ OTEL_EXPORT_TYPE=prometheus ### Configuration - 1. **Enable Prometheus export in Infisical**: + + +```bash +OTEL_TELEMETRY_COLLECTION_ENABLED=true +OTEL_EXPORT_TYPE=prometheus +``` + - ```bash - OTEL_TELEMETRY_COLLECTION_ENABLED=true - OTEL_EXPORT_TYPE=prometheus - ``` + + Expose the metrics port in your Infisical backend: - 2. **Expose the metrics port** in your Infisical backend: + - **Docker**: Expose port 9464 + - **Kubernetes**: Create a service exposing port 9464 + - **Other**: Ensure port 9464 is accessible to your monitoring stack + - - **Docker**: Expose port 9464 - - **Kubernetes**: Create a service exposing port 9464 - - **Other**: Ensure port 9464 is accessible to your monitoring stack + +Create `prometheus.yml`: - 3. **Create Prometheus configuration** (`prometheus.yml`): +```yaml +global: + scrape_interval: 30s + evaluation_interval: 30s - ```yaml - global: - scrape_interval: 30s - evaluation_interval: 30s +scrape_configs: + - job_name: "infisical" + scrape_interval: 30s + static_configs: + - targets: ["infisical-backend:9464"] # Adjust hostname/port based on your deployment + metrics_path: "/metrics" +``` - scrape_configs: - - job_name: "infisical" - scrape_interval: 30s - static_configs: - - targets: ["infisical-backend:9464"] # Adjust hostname/port based on your deployment - metrics_path: "/metrics" - ``` + +Replace `infisical-backend:9464` with the actual hostname and port where your Infisical backend is running. This could be: - **Note**: Replace `infisical-backend:9464` with the actual hostname and port where your Infisical backend is running. This could be: - - - **Docker Compose**: `infisical-backend:9464` (service name) - - **Kubernetes**: `infisical-backend.default.svc.cluster.local:9464` (service name) - - **Bare Metal**: `192.168.1.100:9464` (actual IP address) - - **Cloud**: `your-infisical.example.com:9464` (domain name) +- **Docker Compose**: `infisical-backend:9464` (service name) +- **Kubernetes**: `infisical-backend.default.svc.cluster.local:9464` (service name) +- **Bare Metal**: `192.168.1.100:9464` (actual IP address) +- **Cloud**: `your-infisical.example.com:9464` (domain name) + + + ### Deployment Options + Once you've configured Infisical to expose metrics, you'll need to deploy Prometheus to scrape and store them. Below are examples for different deployment environments. Choose the option that matches your infrastructure. + ```yaml @@ -168,94 +178,106 @@ OTEL_EXPORT_TYPE=prometheus ### Configuration - 1. **Enable OTLP export in Infisical**: + + +```bash +OTEL_TELEMETRY_COLLECTION_ENABLED=true +OTEL_EXPORT_TYPE=otlp +OTEL_EXPORT_OTLP_ENDPOINT=http://otel-collector:4318/v1/metrics +OTEL_COLLECTOR_BASIC_AUTH_USERNAME=infisical +OTEL_COLLECTOR_BASIC_AUTH_PASSWORD=infisical +OTEL_OTLP_PUSH_INTERVAL=30000 +``` + - ```bash - OTEL_TELEMETRY_COLLECTION_ENABLED=true - OTEL_EXPORT_TYPE=otlp - OTEL_EXPORT_OTLP_ENDPOINT=http://otel-collector:4318/v1/metrics - OTEL_COLLECTOR_BASIC_AUTH_USERNAME=infisical - OTEL_COLLECTOR_BASIC_AUTH_PASSWORD=infisical - OTEL_OTLP_PUSH_INTERVAL=30000 - ``` + +Create `otel-collector-config.yaml`: - 2. **Create OpenTelemetry Collector configuration** (`otel-collector-config.yaml`): +```yaml +extensions: + health_check: + pprof: + zpages: + basicauth/server: + htpasswd: + inline: | + your_username:your_password - ```yaml - extensions: - health_check: - pprof: - zpages: - basicauth/server: - htpasswd: - inline: | - your_username:your_password +receivers: + otlp: + protocols: + http: + endpoint: 0.0.0.0:4318 + auth: + authenticator: basicauth/server - receivers: - otlp: - protocols: - http: - endpoint: 0.0.0.0:4318 - auth: - authenticator: basicauth/server + prometheus: + config: + scrape_configs: + - job_name: otel-collector + scrape_interval: 30s + static_configs: + - targets: [infisical-backend:9464] + metric_relabel_configs: + - action: labeldrop + regex: "service_instance_id|service_name" - prometheus: - config: - scrape_configs: - - job_name: otel-collector - scrape_interval: 30s - static_configs: - - targets: [infisical-backend:9464] - metric_relabel_configs: - - action: labeldrop - regex: "service_instance_id|service_name" +processors: + batch: - processors: - batch: +exporters: + prometheus: + endpoint: "0.0.0.0:8889" + auth: + authenticator: basicauth/server + resource_to_telemetry_conversion: + enabled: true - exporters: - prometheus: - endpoint: "0.0.0.0:8889" - auth: - authenticator: basicauth/server - resource_to_telemetry_conversion: - enabled: true +service: + extensions: [basicauth/server, health_check, pprof, zpages] + pipelines: + metrics: + receivers: [otlp] + processors: [batch] + exporters: [prometheus] +``` - service: - extensions: [basicauth/server, health_check, pprof, zpages] - pipelines: - metrics: - receivers: [otlp] - processors: [batch] - exporters: [prometheus] - ``` + +Replace `your_username:your_password` with your chosen credentials. These must match the values you set in Infisical's `OTEL_COLLECTOR_BASIC_AUTH_USERNAME` and `OTEL_COLLECTOR_BASIC_AUTH_PASSWORD` environment variables. + + - **Important**: Replace `your_username:your_password` with your chosen credentials. These must match the values you set in Infisical's `OTEL_COLLECTOR_BASIC_AUTH_USERNAME` and `OTEL_COLLECTOR_BASIC_AUTH_PASSWORD` environment variables. + +Create Prometheus configuration for the collector: - 3. **Create Prometheus configuration** for the collector: +```yaml +global: + scrape_interval: 30s + evaluation_interval: 30s - ```yaml - global: - scrape_interval: 30s - evaluation_interval: 30s +scrape_configs: + - job_name: "otel-collector" + scrape_interval: 30s + static_configs: + - targets: ["otel-collector:8889"] # Adjust hostname/port based on your deployment + metrics_path: "/metrics" +``` - scrape_configs: - - job_name: "otel-collector" - scrape_interval: 30s - static_configs: - - targets: ["otel-collector:8889"] # Adjust hostname/port based on your deployment - metrics_path: "/metrics" - ``` + +Replace `otel-collector:8889` with the actual hostname and port where your OpenTelemetry Collector is running. This could be: - **Note**: Replace `otel-collector:8889` with the actual hostname and port where your OpenTelemetry Collector is running. This could be: - - - **Docker Compose**: `otel-collector:8889` (service name) - - **Kubernetes**: `otel-collector.default.svc.cluster.local:8889` (service name) - - **Bare Metal**: `192.168.1.100:8889` (actual IP address) - - **Cloud**: `your-collector.example.com:8889` (domain name) +- **Docker Compose**: `otel-collector:8889` (service name) +- **Kubernetes**: `otel-collector.default.svc.cluster.local:8889` (service name) +- **Bare Metal**: `192.168.1.100:8889` (actual IP address) +- **Cloud**: `your-collector.example.com:8889` (domain name) + + + ### Deployment Options + After configuring Infisical and the OpenTelemetry Collector, you'll need to deploy the collector to receive metrics from Infisical. Below are examples for different deployment environments. Choose the option that matches your infrastructure. + ```yaml @@ -463,24 +485,6 @@ These metrics track authentication attempts and outcomes, enabling you to monito -### Legacy Metrics - -These metrics are from the previous instrumentation and may be deprecated in future versions. Consider migrating to the new Core API Metrics for more comprehensive observability. - - - - API request latency histogram in milliseconds - - - **Labels**: `route`, `method`, `statusCode` - - - - API error count histogram - - - **Labels**: `route`, `method`, `type`, `name` - - - ### Integration & Secret Sync Metrics These metrics monitor secret synchronization operations between Infisical and external systems, helping you track sync health, identify integration failures, and troubleshoot connectivity issues. @@ -531,15 +535,22 @@ These low-level HTTP metrics are automatically collected by OpenTelemetry's inst ## Troubleshooting -### Common Issues + + If your metrics are not showing up in Prometheus or your monitoring system, check the following: -1. **Metrics not appearing**: + - Verify `OTEL_TELEMETRY_COLLECTION_ENABLED=true` is set in your Infisical environment variables + - Ensure the correct `OTEL_EXPORT_TYPE` is set (`prometheus` or `otlp`) + - Check network connectivity between Infisical and your monitoring services (Prometheus or OTLP collector) + - For pull-based monitoring: Verify port 9464 is exposed and accessible + - For push-based monitoring: Verify the OTLP endpoint URL is correct and reachable + - Check Infisical backend logs for any errors related to metrics export + - - Check if `OTEL_TELEMETRY_COLLECTION_ENABLED=true` - - Verify the correct `OTEL_EXPORT_TYPE` is set - - Check network connectivity between services + + If you're experiencing authentication errors with the OpenTelemetry Collector: -2. **Authentication errors**: - - - Verify basic auth credentials in OTLP configuration - - Check if credentials match between Infisical and collector + - Verify basic auth credentials in your OTLP configuration match between Infisical and the collector + - Check that `OTEL_COLLECTOR_BASIC_AUTH_USERNAME` and `OTEL_COLLECTOR_BASIC_AUTH_PASSWORD` match the credentials in your `otel-collector-config.yaml` + - Ensure the htpasswd format in the collector configuration is correct + - Test the collector endpoint manually using curl with the same credentials to verify they work + From b26fb73053b9fd0d926fd0f8fe940c82959e22c9 Mon Sep 17 00:00:00 2001 From: Victor Santos Date: Fri, 31 Oct 2025 18:43:34 -0300 Subject: [PATCH 22/79] refactor: streamline modal close handlers and completion callbacks across various components --- frontend/src/components/features/WishForm.tsx | 23 +- .../CreateOrgModal/CreateOrgModal.tsx | 40 ++-- .../pki-syncs/DeletePkiSyncModal.tsx | 31 +-- .../PkiSyncImportCertificatesModal.tsx | 29 +-- .../PkiSyncRemoveCertificatesModal.tsx | 29 +-- .../pki-syncs/forms/CreatePkiSyncForm.tsx | 8 +- .../pki-syncs/forms/EditPkiSyncForm.tsx | 33 ++- .../project/ProjectOverviewChangeSection.tsx | 36 ++-- .../components/projects/NewProjectModal.tsx | 39 ++-- .../DeleteSecretRotationV2Modal.tsx | 35 ++- .../RotateSecretRotationV2Modal.tsx | 31 +-- .../forms/SecretRotationV2Form.tsx | 20 +- .../DeleteSecretScanningDataSourceModal.tsx | 29 +-- .../forms/SecretScanningDataSourceForm.tsx | 20 +- .../secret-syncs/DeleteSecretSyncModal.tsx | 33 ++- .../SecretSyncImportSecretsModal.tsx | 31 +-- .../SecretSyncRemoveSecretsModal.tsx | 29 +-- .../forms/CreateSecretSyncForm.tsx | 8 +- .../secret-syncs/forms/EditSecretSyncForm.tsx | 35 ++- .../tags/CreateTagModal/CreateTagModal.tsx | 32 ++- .../NavBar/NewSubOrganizationForm.tsx | 33 ++- .../ProjectSelect/ProjectSelect.tsx | 31 +-- .../components/AddServerAdminModal.tsx | 19 +- .../components/ServerAdminsTable.tsx | 55 ++--- .../components/AuthenticationPageForm.tsx | 76 +++---- .../components/CachingPageForm.tsx | 13 +- .../components/EncryptionPageForm.tsx | 17 +- .../components/EnvironmentPageForm.tsx | 34 +-- .../components/GeneralPageForm.tsx | 52 ++--- .../components/UsageReportSection.tsx | 22 +- .../components/AddOrganizationModal.tsx | 29 +-- .../components/MachineIdentitiesTable.tsx | 17 +- .../components/OrganizationsTable.tsx | 35 +-- .../components/UserIdentitiesTable.tsx | 72 ++----- .../src/pages/admin/SignUpPage/SignUpPage.tsx | 35 ++- .../PasswordSetupPage/PasswordSetupPage.tsx | 6 +- .../EmailConfirmationStep.tsx | 82 +++---- .../AlertingPage/components/PkiAlertModal.tsx | 72 +++---- .../components/PkiAlertsSection.tsx | 28 +-- .../components/PkiCollectionModal.tsx | 70 +++--- .../components/PkiCollectionSection.tsx | 28 +-- .../CertAuthDetailsByIDPage.tsx | 41 ++-- .../components/CaRenewalModal.tsx | 30 ++- .../ExternalCaInstallForm.tsx | 33 ++- .../InternalCaInstallForm.tsx | 47 ++-- .../components/CaModal.tsx | 68 +++--- .../components/CaSection.tsx | 43 ++-- .../components/ExternalCaModal.tsx | 94 ++++---- .../components/ExternalCaSection.tsx | 43 ++-- .../components/CertificateImportModal.tsx | 46 ++-- .../components/CertificateIssuanceModal.tsx | 136 ++++++------ .../CertificateManageRenewalModal.tsx | 46 ++-- .../components/CertificateModal.tsx | 62 +++--- .../CertificateRenewalConfigModal.tsx | 40 ++-- .../CertificateRenewalDisableModal.tsx | 40 ++-- .../components/CertificateRenewalModal.tsx | 22 +- .../components/CertificateRevocationModal.tsx | 34 ++- .../components/CertificateTemplateModal.tsx | 94 ++++---- .../CertificateTemplatesSection.tsx | 26 +-- .../components/CertificatesSection.tsx | 22 +- .../components/CertificatesTable.tsx | 36 ++-- .../PkiSyncTable/PkiSyncsTable.tsx | 52 ++--- .../PkiCollectionDetailsByIDPage.tsx | 39 ++-- .../PkiSubscriberDetailsByIDPage.tsx | 34 ++- .../PkiSubscriberDetailsSection.tsx | 44 ++-- .../components/PkiSubscriberModal.tsx | 204 +++++++++--------- .../components/PkiSubscriberSection.tsx | 42 ++-- .../components/PkiSyncActionTriggers.tsx | 54 ++--- .../PkiTemplateListPage.tsx | 26 +-- .../components/PkiTemplateForm.tsx | 90 ++++---- .../CertificateProfilesTab.tsx | 25 +-- .../CreateProfileModal.tsx | 96 ++++----- .../CertificateTemplatesV2Tab.tsx | 26 +-- .../CreateTemplateModal.tsx | 84 ++++---- .../components/DeleteKmipClientModal.tsx | 29 +-- .../KmipPage/components/KmipClientModal.tsx | 20 +- .../components/CmekDecryptModal.tsx | 24 +-- .../components/CmekEncryptModal.tsx | 18 +- .../kms/OverviewPage/components/CmekModal.tsx | 20 +- .../OverviewPage/components/CmekSignModal.tsx | 18 +- .../kms/OverviewPage/components/CmekTable.tsx | 30 +-- .../components/CmekVerifyModal.tsx | 26 +-- .../components/DeleteCmekModal.tsx | 29 +-- .../OrgGroupsSection/OrgGroupModal.tsx | 57 +++-- .../OrgGroupsSection/OrgGroupsSection.tsx | 22 +- .../OrgGroupsSection/OrgGroupsTable.tsx | 24 +-- .../IdentitySection/IdentitySection.tsx | 58 ++--- .../OrgMembersSection/OrgMembersSection.tsx | 81 +++---- .../OrgMembersSection/OrgMembersTable.tsx | 49 ++--- .../OrgRoleTabSection/OrgRoleTable.tsx | 34 ++- .../AppConnectionForm/AppConnectionForm.tsx | 54 ++--- .../components/GroupCreateUpdateModal.tsx | 57 +++-- .../IdentityDetailsByIDPage.tsx | 41 ++-- .../RolePermissionsSection.tsx | 19 +- .../UserDetailsByIDPage.tsx | 64 ++---- .../components/UserDetailsSection.tsx | 28 +-- .../PamAccountForm/PamAccountForm.tsx | 62 ++---- .../components/PamAddFolderModal.tsx | 29 +-- .../components/PamDeleteAccountModal.tsx | 26 +-- .../components/PamDeleteFolderModal.tsx | 24 +-- .../components/PamUpdateFolderModal.tsx | 27 +-- .../components/PamDeleteResourceModal.tsx | 26 +-- .../PamResourceForm/PamResourceForm.tsx | 54 ++--- .../MemberRoleForm/MemberRbacSection.tsx | 18 +- .../IdentityRoleModify.tsx | 16 +- .../MemberRoleDetailsSection.tsx | 67 +++--- .../MemberRoleModify.tsx | 16 +- .../SecretRotationPage/SecretRotationPage.tsx | 50 ++--- .../components/SecretSyncActionTriggers.tsx | 52 ++--- .../components/SlackIntegrationForm.tsx | 43 ++-- .../components/SecretScanningResourceRow.tsx | 27 +-- .../SecretScanningUpdateFindingModal.tsx | 57 +++-- .../SecretScanningConfigForm.tsx | 23 +- .../components/SshHostGroupHostsSection.tsx | 26 +-- .../components/SshHostGroupsSection.tsx | 20 +- .../SshHostsPage/components/SshHostModal.tsx | 133 ++++++------ 116 files changed, 1865 insertions(+), 2949 deletions(-) diff --git a/frontend/src/components/features/WishForm.tsx b/frontend/src/components/features/WishForm.tsx index 118900bc9..28107809a 100644 --- a/frontend/src/components/features/WishForm.tsx +++ b/frontend/src/components/features/WishForm.tsx @@ -35,23 +35,16 @@ export const WishForm = () => { const [isOpen, setIsOpen] = useToggle(false); const createWish = async (data: TFormData) => { - try { - await mutateAsync({ - text: data.text - }); + await mutateAsync({ + text: data.text + }); - createNotification({ - text: "Your wish has been sent to the Infisical team!", - type: "success" - }); + createNotification({ + text: "Your wish has been sent to the Infisical team!", + type: "success" + }); - setIsOpen.off(); - } catch { - createNotification({ - text: "An error occured while sending your wish to the Infisical team.", - type: "error" - }); - } + setIsOpen.off(); }; return ( diff --git a/frontend/src/components/organization/CreateOrgModal/CreateOrgModal.tsx b/frontend/src/components/organization/CreateOrgModal/CreateOrgModal.tsx index 23c3fe6a5..84931f84a 100644 --- a/frontend/src/components/organization/CreateOrgModal/CreateOrgModal.tsx +++ b/frontend/src/components/organization/CreateOrgModal/CreateOrgModal.tsx @@ -43,35 +43,27 @@ export const CreateOrgModal: FC = ({ isOpen, onClose }) => const { mutateAsync: selectOrg } = useSelectOrganization(); const onFormSubmit = async ({ name }: FormData) => { - try { - const organization = await createOrg({ - name - }); + const organization = await createOrg({ + name + }); - await selectOrg({ - organizationId: organization.id - }); + await selectOrg({ + organizationId: organization.id + }); - createNotification({ - text: "Successfully created organization", - type: "success" - }); + createNotification({ + text: "Successfully created organization", + type: "success" + }); - navigate({ - to: "/organization/projects" - }); + navigate({ + to: "/organization/projects" + }); - localStorage.setItem("orgData.id", organization.id); + localStorage.setItem("orgData.id", organization.id); - reset(); - onClose(); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to created organization", - type: "error" - }); - } + reset(); + onClose(); }; return ( diff --git a/frontend/src/components/pki-syncs/DeletePkiSyncModal.tsx b/frontend/src/components/pki-syncs/DeletePkiSyncModal.tsx index e465d3f34..c01efcbf2 100644 --- a/frontend/src/components/pki-syncs/DeletePkiSyncModal.tsx +++ b/frontend/src/components/pki-syncs/DeletePkiSyncModal.tsx @@ -20,28 +20,19 @@ export const DeletePkiSyncModal = ({ isOpen, onOpenChange, pkiSync, onComplete } const handleDeletePkiSync = async () => { const destinationName = PKI_SYNC_MAP[destination].name; - try { - await deleteSync.mutateAsync({ - syncId, - projectId, - destination - }); + await deleteSync.mutateAsync({ + syncId, + projectId, + destination + }); - createNotification({ - text: `Successfully deleted ${destinationName} PKI Sync`, - type: "success" - }); + createNotification({ + text: `Successfully deleted ${destinationName} PKI Sync`, + type: "success" + }); - if (onComplete) onComplete(); - onOpenChange(false); - } catch (err) { - console.error(err); - - createNotification({ - text: `Failed to delete ${destinationName} PKI Sync`, - type: "error" - }); - } + if (onComplete) onComplete(); + onOpenChange(false); }; return ( diff --git a/frontend/src/components/pki-syncs/PkiSyncImportCertificatesModal.tsx b/frontend/src/components/pki-syncs/PkiSyncImportCertificatesModal.tsx index 33b06dbe4..43192c5e3 100644 --- a/frontend/src/components/pki-syncs/PkiSyncImportCertificatesModal.tsx +++ b/frontend/src/components/pki-syncs/PkiSyncImportCertificatesModal.tsx @@ -21,27 +21,18 @@ const Content = ({ pkiSync, onComplete }: ContentProps) => { const triggerImportCertificates = useTriggerPkiSyncImportCertificates(); const handleTriggerImportCertificates = async () => { - try { - await triggerImportCertificates.mutateAsync({ - syncId, - destination, - projectId - }); + await triggerImportCertificates.mutateAsync({ + syncId, + destination, + projectId + }); - createNotification({ - text: `Successfully triggered certificate import for ${destinationName} Sync`, - type: "success" - }); + createNotification({ + text: `Successfully triggered certificate import for ${destinationName} Sync`, + type: "success" + }); - onComplete(); - } catch (err) { - console.error(err); - - createNotification({ - text: `Failed to trigger certificate import for ${destinationName} Sync`, - type: "error" - }); - } + onComplete(); }; return ( diff --git a/frontend/src/components/pki-syncs/PkiSyncRemoveCertificatesModal.tsx b/frontend/src/components/pki-syncs/PkiSyncRemoveCertificatesModal.tsx index f17855289..cee845381 100644 --- a/frontend/src/components/pki-syncs/PkiSyncRemoveCertificatesModal.tsx +++ b/frontend/src/components/pki-syncs/PkiSyncRemoveCertificatesModal.tsx @@ -21,27 +21,18 @@ const Content = ({ pkiSync, onComplete }: ContentProps) => { const triggerRemoveCertificates = useTriggerPkiSyncRemoveCertificates(); const handleTriggerRemoveCertificates = async () => { - try { - await triggerRemoveCertificates.mutateAsync({ - syncId, - destination, - projectId - }); + await triggerRemoveCertificates.mutateAsync({ + syncId, + destination, + projectId + }); - createNotification({ - text: `Successfully triggered certificate removal for ${destinationName} Sync`, - type: "success" - }); + createNotification({ + text: `Successfully triggered certificate removal for ${destinationName} Sync`, + type: "success" + }); - onComplete(); - } catch (err) { - console.error(err); - - createNotification({ - text: `Failed to trigger certificate removal for ${destinationName} Sync`, - type: "error" - }); - } + onComplete(); }; return ( diff --git a/frontend/src/components/pki-syncs/forms/CreatePkiSyncForm.tsx b/frontend/src/components/pki-syncs/forms/CreatePkiSyncForm.tsx index 582518bd7..085e57882 100644 --- a/frontend/src/components/pki-syncs/forms/CreatePkiSyncForm.tsx +++ b/frontend/src/components/pki-syncs/forms/CreatePkiSyncForm.tsx @@ -72,14 +72,8 @@ export const CreatePkiSyncForm = ({ destination, onComplete, onCancel }: Props) type: "success" }); onComplete(pkiSync); - } catch (err: Error | unknown) { - console.error(err); + } catch { setShowConfirmation(false); - createNotification({ - title: `Failed to add ${destinationName} Certificate Sync`, - text: err instanceof Error ? err.message : "An unknown error occurred", - type: "error" - }); } }; diff --git a/frontend/src/components/pki-syncs/forms/EditPkiSyncForm.tsx b/frontend/src/components/pki-syncs/forms/EditPkiSyncForm.tsx index 73f5bc2bc..7f8ee207f 100644 --- a/frontend/src/components/pki-syncs/forms/EditPkiSyncForm.tsx +++ b/frontend/src/components/pki-syncs/forms/EditPkiSyncForm.tsx @@ -38,28 +38,19 @@ export const EditPkiSyncForm = ({ pkiSync, fields, onComplete }: Props) => { }); const onSubmit = async ({ connection, ...formData }: TUpdatePkiSyncForm) => { - try { - const updatedPkiSync = await updatePkiSync.mutateAsync({ - syncId: pkiSync.id, - ...formData, - connectionId: connection.id, - projectId: pkiSync.projectId, - destination: pkiSync.destination - }); + const updatedPkiSync = await updatePkiSync.mutateAsync({ + syncId: pkiSync.id, + ...formData, + connectionId: connection.id, + projectId: pkiSync.projectId, + destination: pkiSync.destination + }); - createNotification({ - text: `Successfully updated ${destinationName} PKI Sync`, - type: "success" - }); - onComplete(updatedPkiSync); - } catch (err: any) { - console.error(err); - createNotification({ - title: `Failed to update ${destinationName} PKI Sync`, - text: err.message, - type: "error" - }); - } + createNotification({ + text: `Successfully updated ${destinationName} PKI Sync`, + type: "success" + }); + onComplete(updatedPkiSync); }; let Component: ReactNode; diff --git a/frontend/src/components/project/ProjectOverviewChangeSection.tsx b/frontend/src/components/project/ProjectOverviewChangeSection.tsx index 548fbd1e3..455b0806a 100644 --- a/frontend/src/components/project/ProjectOverviewChangeSection.tsx +++ b/frontend/src/components/project/ProjectOverviewChangeSection.tsx @@ -56,30 +56,22 @@ export const ProjectOverviewChangeSection = ({ showSlugField = false }: Props) = }, [currentProject, showSlugField]); const onFormSubmit = async (data: BaseFormData | FormDataWithSlug) => { - try { - if (!currentProject?.id) return; + if (!currentProject?.id) return; - await mutateAsync({ - projectId: currentProject.id, - newProjectName: data.name, - newProjectDescription: data.description, - ...(showSlugField && - "slug" in data && { - newSlug: data.slug !== currentProject.slug ? data.slug : undefined - }) - }); + await mutateAsync({ + projectId: currentProject.id, + newProjectName: data.name, + newProjectDescription: data.description, + ...(showSlugField && + "slug" in data && { + newSlug: data.slug !== currentProject.slug ? data.slug : undefined + }) + }); - createNotification({ - text: "Successfully updated project overview", - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to update project overview", - type: "error" - }); - } + createNotification({ + text: "Successfully updated project overview", + type: "success" + }); }; return ( diff --git a/frontend/src/components/projects/NewProjectModal.tsx b/frontend/src/components/projects/NewProjectModal.tsx index d71e7b957..663d6a0b7 100644 --- a/frontend/src/components/projects/NewProjectModal.tsx +++ b/frontend/src/components/projects/NewProjectModal.tsx @@ -141,29 +141,24 @@ const NewProjectForm = ({ onOpenChange }: NewProjectFormProps) => { // type check if (!currentOrg) return; if (!user) return; - try { - const { - data: { project } - } = await createWs.mutateAsync({ - projectName: name, - projectDescription: description, - kmsKeyId: kmsKeyId !== INTERNAL_KMS_KEY_ID ? kmsKeyId : undefined, - template, - type - }); - await refetchWorkspaces(); + const { + data: { project } + } = await createWs.mutateAsync({ + projectName: name, + projectDescription: description, + kmsKeyId: kmsKeyId !== INTERNAL_KMS_KEY_ID ? kmsKeyId : undefined, + template, + type + }); + await refetchWorkspaces(); - createNotification({ text: "Project created", type: "success" }); - reset(); - onOpenChange(false); - navigate({ - to: getProjectHomePage(project.type, project.environments), - params: { projectId: project.id } - }); - } catch (err) { - console.error(err); - createNotification({ text: "Failed to create project", type: "error" }); - } + createNotification({ text: "Project created", type: "success" }); + reset(); + onOpenChange(false); + navigate({ + to: getProjectHomePage(project.type, project.environments), + params: { projectId: project.id } + }); }; const onSubmit = handleSubmit((data) => { return onCreateProject(data); diff --git a/frontend/src/components/secret-rotations-v2/DeleteSecretRotationV2Modal.tsx b/frontend/src/components/secret-rotations-v2/DeleteSecretRotationV2Modal.tsx index 20b08eb49..524c66933 100644 --- a/frontend/src/components/secret-rotations-v2/DeleteSecretRotationV2Modal.tsx +++ b/frontend/src/components/secret-rotations-v2/DeleteSecretRotationV2Modal.tsx @@ -37,29 +37,22 @@ export const DeleteSecretRotationV2Modal = ({ const handleDeleteSecretRotation = async () => { const rotationType = SECRET_ROTATION_MAP[type].name; - try { - await deleteSecretRotation.mutateAsync({ - rotationId, - type, - revokeGeneratedCredentials, - deleteSecrets, - projectId, - secretPath: folder.path - }); + await deleteSecretRotation.mutateAsync({ + rotationId, + type, + revokeGeneratedCredentials, + deleteSecrets, + projectId, + secretPath: folder.path + }); - createNotification({ - text: `Successfully deleted ${rotationType} Rotation`, - type: "success" - }); + createNotification({ + text: `Successfully deleted ${rotationType} Rotation`, + type: "success" + }); - if (onComplete) onComplete(); - onOpenChange(false); - } catch { - createNotification({ - text: `Failed to delete ${rotationType} Rotation`, - type: "error" - }); - } + if (onComplete) onComplete(); + onOpenChange(false); }; return ( diff --git a/frontend/src/components/secret-rotations-v2/RotateSecretRotationV2Modal.tsx b/frontend/src/components/secret-rotations-v2/RotateSecretRotationV2Modal.tsx index e2c931d49..7ad9611be 100644 --- a/frontend/src/components/secret-rotations-v2/RotateSecretRotationV2Modal.tsx +++ b/frontend/src/components/secret-rotations-v2/RotateSecretRotationV2Modal.tsx @@ -22,28 +22,19 @@ const Content = ({ secretRotation, onComplete }: ContentProps) => { const rotationType = SECRET_ROTATION_MAP[type].name; const handleRotateSecrets = async () => { - try { - await rotateSecrets.mutateAsync({ - rotationId, - type, - projectId, - secretPath: folder.path - }); + await rotateSecrets.mutateAsync({ + rotationId, + type, + projectId, + secretPath: folder.path + }); - createNotification({ - text: `Successfully rotated ${rotationType} secrets`, - type: "success" - }); + createNotification({ + text: `Successfully rotated ${rotationType} secrets`, + type: "success" + }); - onComplete(); - } catch (err) { - console.error(err); - - createNotification({ - text: `Failed to rotate ${rotationType} secrets`, - type: "error" - }); - } + onComplete(); }; return ( diff --git a/frontend/src/components/secret-rotations-v2/forms/SecretRotationV2Form.tsx b/frontend/src/components/secret-rotations-v2/forms/SecretRotationV2Form.tsx index 9887da026..320793ed1 100644 --- a/frontend/src/components/secret-rotations-v2/forms/SecretRotationV2Form.tsx +++ b/frontend/src/components/secret-rotations-v2/forms/SecretRotationV2Form.tsx @@ -120,21 +120,13 @@ export const SecretRotationV2Form = ({ environment: environment.slug, projectId: currentProject.id }); - try { - const rotation = await mutation; + const rotation = await mutation; - createNotification({ - text: `Successfully ${secretRotation ? "updated" : "created"} ${rotationType} Rotation`, - type: "success" - }); - onComplete(rotation); - } catch (err: any) { - createNotification({ - title: `Failed to ${secretRotation ? "update" : "create"} ${rotationType} Rotation`, - text: err.message, - type: "error" - }); - } + createNotification({ + text: `Successfully ${secretRotation ? "updated" : "created"} ${rotationType} Rotation`, + type: "success" + }); + onComplete(rotation); }; const handlePrev = () => { diff --git a/frontend/src/components/secret-scanning/DeleteSecretScanningDataSourceModal.tsx b/frontend/src/components/secret-scanning/DeleteSecretScanningDataSourceModal.tsx index 9cf918dfb..091de4cc0 100644 --- a/frontend/src/components/secret-scanning/DeleteSecretScanningDataSourceModal.tsx +++ b/frontend/src/components/secret-scanning/DeleteSecretScanningDataSourceModal.tsx @@ -28,26 +28,19 @@ export const DeleteSecretScanningDataSourceModal = ({ const handleDeleteDataSource = async () => { const dataSourceType = SECRET_SCANNING_DATA_SOURCE_MAP[type].name; - try { - await deleteDataSource.mutateAsync({ - dataSourceId, - type, - projectId - }); + await deleteDataSource.mutateAsync({ + dataSourceId, + type, + projectId + }); - createNotification({ - text: `Successfully deleted ${dataSourceType} Data Source`, - type: "success" - }); + createNotification({ + text: `Successfully deleted ${dataSourceType} Data Source`, + type: "success" + }); - if (onComplete) onComplete(); - onOpenChange(false); - } catch { - createNotification({ - text: `Failed to delete ${dataSourceType} Data Source`, - type: "error" - }); - } + if (onComplete) onComplete(); + onOpenChange(false); }; return ( diff --git a/frontend/src/components/secret-scanning/forms/SecretScanningDataSourceForm.tsx b/frontend/src/components/secret-scanning/forms/SecretScanningDataSourceForm.tsx index 4d5ccdc79..563f82d46 100644 --- a/frontend/src/components/secret-scanning/forms/SecretScanningDataSourceForm.tsx +++ b/frontend/src/components/secret-scanning/forms/SecretScanningDataSourceForm.tsx @@ -73,21 +73,13 @@ export const SecretScanningDataSourceForm = ({ connectionId: connection?.id, projectId: currentProject.id }); - try { - const source = await mutation; + const source = await mutation; - createNotification({ - text: `Successfully ${source ? "updated" : "created"} ${sourceType} Data Source`, - type: "success" - }); - onComplete(source); - } catch (err: any) { - createNotification({ - title: `Failed to ${dataSource ? "update" : "create"} ${sourceType} Data Source`, - text: err.message, - type: "error" - }); - } + createNotification({ + text: `Successfully ${source ? "updated" : "created"} ${sourceType} Data Source`, + type: "success" + }); + onComplete(source); }; const handlePrev = () => { diff --git a/frontend/src/components/secret-syncs/DeleteSecretSyncModal.tsx b/frontend/src/components/secret-syncs/DeleteSecretSyncModal.tsx index 2b3903a9b..de8b2e79d 100644 --- a/frontend/src/components/secret-syncs/DeleteSecretSyncModal.tsx +++ b/frontend/src/components/secret-syncs/DeleteSecretSyncModal.tsx @@ -23,29 +23,20 @@ export const DeleteSecretSyncModal = ({ isOpen, onOpenChange, secretSync, onComp const handleDeleteSecretSync = async () => { const destinationName = SECRET_SYNC_MAP[destination].name; - try { - await deleteSync.mutateAsync({ - syncId, - destination, - removeSecrets, - projectId - }); + await deleteSync.mutateAsync({ + syncId, + destination, + removeSecrets, + projectId + }); - createNotification({ - text: `Successfully removed ${destinationName} Sync`, - type: "success" - }); + createNotification({ + text: `Successfully removed ${destinationName} Sync`, + type: "success" + }); - if (onComplete) onComplete(); - onOpenChange(false); - } catch (err) { - console.error(err); - - createNotification({ - text: `Failed to remove ${destinationName} Sync`, - type: "error" - }); - } + if (onComplete) onComplete(); + onOpenChange(false); }; return ( diff --git a/frontend/src/components/secret-syncs/SecretSyncImportSecretsModal.tsx b/frontend/src/components/secret-syncs/SecretSyncImportSecretsModal.tsx index c1b21a771..656faffeb 100644 --- a/frontend/src/components/secret-syncs/SecretSyncImportSecretsModal.tsx +++ b/frontend/src/components/secret-syncs/SecretSyncImportSecretsModal.tsx @@ -51,28 +51,19 @@ const Content = ({ secretSync, onComplete }: ContentProps) => { const triggerImportSecrets = useTriggerSecretSyncImportSecrets(); const handleTriggerImportSecrets = async ({ importBehavior }: TFormData) => { - try { - await triggerImportSecrets.mutateAsync({ - syncId, - destination, - importBehavior, - projectId - }); + await triggerImportSecrets.mutateAsync({ + syncId, + destination, + importBehavior, + projectId + }); - createNotification({ - text: `Successfully triggered secret import for ${destinationName} Sync`, - type: "success" - }); + createNotification({ + text: `Successfully triggered secret import for ${destinationName} Sync`, + type: "success" + }); - onComplete(); - } catch (err) { - console.error(err); - - createNotification({ - text: `Failed to trigger secret import for ${destinationName} Sync`, - type: "error" - }); - } + onComplete(); }; return ( diff --git a/frontend/src/components/secret-syncs/SecretSyncRemoveSecretsModal.tsx b/frontend/src/components/secret-syncs/SecretSyncRemoveSecretsModal.tsx index 718392b92..9c9c0e659 100644 --- a/frontend/src/components/secret-syncs/SecretSyncRemoveSecretsModal.tsx +++ b/frontend/src/components/secret-syncs/SecretSyncRemoveSecretsModal.tsx @@ -21,27 +21,18 @@ const Content = ({ secretSync, onComplete }: ContentProps) => { const triggerSyncImport = useTriggerSecretSyncRemoveSecrets(); const handleTriggerRemoveSecrets = async () => { - try { - await triggerSyncImport.mutateAsync({ - syncId, - destination, - projectId - }); + await triggerSyncImport.mutateAsync({ + syncId, + destination, + projectId + }); - createNotification({ - text: `Successfully triggered secret removal for ${destinationName} Sync`, - type: "success" - }); + createNotification({ + text: `Successfully triggered secret removal for ${destinationName} Sync`, + type: "success" + }); - onComplete(); - } catch (err) { - console.error(err); - - createNotification({ - text: `Failed to trigger secret removal for ${destinationName} Sync`, - type: "error" - }); - } + onComplete(); }; return ( diff --git a/frontend/src/components/secret-syncs/forms/CreateSecretSyncForm.tsx b/frontend/src/components/secret-syncs/forms/CreateSecretSyncForm.tsx index ebad86cbd..21a69b163 100644 --- a/frontend/src/components/secret-syncs/forms/CreateSecretSyncForm.tsx +++ b/frontend/src/components/secret-syncs/forms/CreateSecretSyncForm.tsx @@ -88,14 +88,8 @@ export const CreateSecretSyncForm = ({ type: "success" }); onComplete(secretSync); - } catch (err: any) { - console.error(err); + } catch { setShowConfirmation(false); - createNotification({ - title: `Failed to add ${destinationName} Sync`, - text: err.message, - type: "error" - }); } }; diff --git a/frontend/src/components/secret-syncs/forms/EditSecretSyncForm.tsx b/frontend/src/components/secret-syncs/forms/EditSecretSyncForm.tsx index 2085afe9c..207b72cd8 100644 --- a/frontend/src/components/secret-syncs/forms/EditSecretSyncForm.tsx +++ b/frontend/src/components/secret-syncs/forms/EditSecretSyncForm.tsx @@ -58,29 +58,20 @@ export const EditSecretSyncForm = ({ secretSync, fields, onComplete }: Props) => const performUpdate = useCallback( async (formData: TSecretSyncForm) => { - try { - const { environment, connection, ...updateData } = formData; - const updatedSecretSync = await updateSecretSync.mutateAsync({ - syncId: secretSync.id, - ...updateData, - environment: environment?.slug, - connectionId: connection.id, - projectId: secretSync.projectId - }); + const { environment, connection, ...updateData } = formData; + const updatedSecretSync = await updateSecretSync.mutateAsync({ + syncId: secretSync.id, + ...updateData, + environment: environment?.slug, + connectionId: connection.id, + projectId: secretSync.projectId + }); - createNotification({ - text: `Successfully updated ${destinationName} Sync`, - type: "success" - }); - onComplete(updatedSecretSync); - } catch (err: any) { - console.error(err); - createNotification({ - title: `Failed to update ${destinationName} Sync`, - text: err.message, - type: "error" - }); - } + createNotification({ + text: `Successfully updated ${destinationName} Sync`, + type: "success" + }); + onComplete(updatedSecretSync); }, [updateSecretSync, secretSync.id, secretSync.projectId, destinationName, onComplete] ); diff --git a/frontend/src/components/tags/CreateTagModal/CreateTagModal.tsx b/frontend/src/components/tags/CreateTagModal/CreateTagModal.tsx index 3c38926af..97e74cae4 100644 --- a/frontend/src/components/tags/CreateTagModal/CreateTagModal.tsx +++ b/frontend/src/components/tags/CreateTagModal/CreateTagModal.tsx @@ -130,26 +130,18 @@ export const CreateTagModal = ({ isOpen, onToggle, append, currentSecret }: Prop }, [isOpen]); const onFormSubmit = async ({ slug, color }: FormData) => { - try { - const data = await createWsTag({ - projectId, - tagColor: color, - tagSlug: slug - }); - append(data); - onToggle(false); - reset(); - createNotification({ - text: "Successfully created a tag", - type: "success" - }); - } catch (error) { - console.error(error); - createNotification({ - text: "Failed to create a tag", - type: "error" - }); - } + const data = await createWsTag({ + projectId, + tagColor: color, + tagSlug: slug + }); + append(data); + onToggle(false); + reset(); + createNotification({ + text: "Successfully created a tag", + type: "success" + }); }; return ( diff --git a/frontend/src/layouts/OrganizationLayout/components/NavBar/NewSubOrganizationForm.tsx b/frontend/src/layouts/OrganizationLayout/components/NavBar/NewSubOrganizationForm.tsx index 75041a69e..bfea2e788 100644 --- a/frontend/src/layouts/OrganizationLayout/components/NavBar/NewSubOrganizationForm.tsx +++ b/frontend/src/layouts/OrganizationLayout/components/NavBar/NewSubOrganizationForm.tsx @@ -36,28 +36,21 @@ export const NewSubOrganizationForm = ({ onClose }: ContentProps) => { const router = useRouter(); const onSubmit = async ({ name }: FormData) => { - try { - const { organization } = await createSubOrg.mutateAsync({ - name - }); + const { organization } = await createSubOrg.mutateAsync({ + name + }); - createNotification({ - type: "success", - text: "Successfully created sub organization" - }); - onClose(); + createNotification({ + type: "success", + text: "Successfully created sub organization" + }); + onClose(); - navigate({ - to: "/organization/projects", - search: (prev) => ({ ...prev, subOrganization: organization.name }) - }); - await router.invalidate({ sync: true }).catch(() => null); - } catch { - createNotification({ - text: "Failed to create sub organization", - type: "error" - }); - } + navigate({ + to: "/organization/projects", + search: (prev) => ({ ...prev, subOrganization: organization.name }) + }); + await router.invalidate({ sync: true }).catch(() => null); }; return ( diff --git a/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx b/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx index c26333332..8e985fe58 100644 --- a/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx +++ b/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx @@ -11,7 +11,6 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { Link, linkOptions } from "@tanstack/react-router"; import { UpgradePlanModal } from "@app/components/license/UpgradePlanModal"; -import { createNotification } from "@app/components/notifications"; import { OrgPermissionCan } from "@app/components/permissions"; import { NewProjectModal } from "@app/components/projects"; import { @@ -59,31 +58,17 @@ export const ProjectSelect = () => { const { mutateAsync: updateUserProjectFavorites } = useUpdateUserProjectFavorites(); const addProjectToFavorites = async (projectId: string) => { - try { - await updateUserProjectFavorites({ - orgId: currentOrg!.id, - projectFavorites: [...(projectFavorites || []), projectId] - }); - } catch { - createNotification({ - text: "Failed to add project to favorites.", - type: "error" - }); - } + await updateUserProjectFavorites({ + orgId: currentOrg!.id, + projectFavorites: [...(projectFavorites || []), projectId] + }); }; const removeProjectFromFavorites = async (projectId: string) => { - try { - await updateUserProjectFavorites({ - orgId: currentOrg!.id, - projectFavorites: [...(projectFavorites || []).filter((entry) => entry !== projectId)] - }); - } catch { - createNotification({ - text: "Failed to remove project from favorites.", - type: "error" - }); - } + await updateUserProjectFavorites({ + orgId: currentOrg!.id, + projectFavorites: [...(projectFavorites || []).filter((entry) => entry !== projectId)] + }); }; const isAddingProjectsAllowed = subscription?.workspaceLimit diff --git a/frontend/src/pages/admin/AccessManagementPage/components/AddServerAdminModal.tsx b/frontend/src/pages/admin/AccessManagementPage/components/AddServerAdminModal.tsx index 3e7638627..63ec2fa44 100644 --- a/frontend/src/pages/admin/AccessManagementPage/components/AddServerAdminModal.tsx +++ b/frontend/src/pages/admin/AccessManagementPage/components/AddServerAdminModal.tsx @@ -65,20 +65,13 @@ const Content = ({ onClose }: ContentProps) => { const users = usersData.filter((user) => !user.superAdmin); const onSubmit = async ({ user }: FormData) => { - try { - await grantAdmin.mutateAsync(user.id); + await grantAdmin.mutateAsync(user.id); - createNotification({ - type: "success", - text: "Successfully granted server admin status" - }); - onClose(); - } catch { - createNotification({ - text: "Failed to grant server admin status", - type: "error" - }); - } + createNotification({ + type: "success", + text: "Successfully granted server admin status" + }); + onClose(); }; return ( diff --git a/frontend/src/pages/admin/AccessManagementPage/components/ServerAdminsTable.tsx b/frontend/src/pages/admin/AccessManagementPage/components/ServerAdminsTable.tsx index 7e207fbc5..2e7016ee7 100644 --- a/frontend/src/pages/admin/AccessManagementPage/components/ServerAdminsTable.tsx +++ b/frontend/src/pages/admin/AccessManagementPage/components/ServerAdminsTable.tsx @@ -303,18 +303,11 @@ export const ServerAdminsTable = () => { const handleRemoveUser = async () => { const { id } = popUp?.removeUser?.data as { id: string; username: string }; - try { - await deleteUser(id); - createNotification({ - type: "success", - text: "Successfully deleted user" - }); - } catch { - createNotification({ - type: "error", - text: "Error deleting user" - }); - } + await deleteUser(id); + createNotification({ + type: "success", + text: "Successfully deleted user" + }); handlePopUpClose("removeUser"); }; @@ -322,39 +315,25 @@ export const ServerAdminsTable = () => { const handleRemoveServerAdminAccess = async () => { const { id } = popUp?.removeServerAdmin?.data as { id: string; username: string }; - try { - await removeAdminAccess(id); - createNotification({ - type: "success", - text: "Successfully removed server admin access from user" - }); - } catch { - createNotification({ - type: "error", - text: "Error removing server admin access from user" - }); - } + await removeAdminAccess(id); + createNotification({ + type: "success", + text: "Successfully removed server admin access from user" + }); handlePopUpClose("removeServerAdmin"); }; const handleRemoveUsers = async () => { - try { - await deleteUsers(selectedUsers.map((user) => user.id)); + await deleteUsers(selectedUsers.map((user) => user.id)); - createNotification({ - text: "Successfully removed users", - type: "success" - }); + createNotification({ + text: "Successfully removed users", + type: "success" + }); - setSelectedUsers([]); - handlePopUpClose("removeUsers"); - } catch { - createNotification({ - text: "Failed to remove users", - type: "error" - }); - } + setSelectedUsers([]); + handlePopUpClose("removeUsers"); }; return ( diff --git a/frontend/src/pages/admin/AuthenticationPage/components/AuthenticationPageForm.tsx b/frontend/src/pages/admin/AuthenticationPage/components/AuthenticationPageForm.tsx index 2abb96e60..f8ca30c52 100644 --- a/frontend/src/pages/admin/AuthenticationPage/components/AuthenticationPageForm.tsx +++ b/frontend/src/pages/admin/AuthenticationPage/components/AuthenticationPageForm.tsx @@ -54,59 +54,51 @@ export const AuthenticationPageForm = () => { }); const onAuthFormSubmit = async (formData: TAuthForm) => { - try { - const enabledMethods: LoginMethod[] = []; - if (formData.isEmailEnabled) { - enabledMethods.push(LoginMethod.EMAIL); - } + const enabledMethods: LoginMethod[] = []; + if (formData.isEmailEnabled) { + enabledMethods.push(LoginMethod.EMAIL); + } - if (formData.isGoogleEnabled) { - enabledMethods.push(LoginMethod.GOOGLE); - } + if (formData.isGoogleEnabled) { + enabledMethods.push(LoginMethod.GOOGLE); + } - if (formData.isGithubEnabled) { - enabledMethods.push(LoginMethod.GITHUB); - } + if (formData.isGithubEnabled) { + enabledMethods.push(LoginMethod.GITHUB); + } - if (formData.isGitlabEnabled) { - enabledMethods.push(LoginMethod.GITLAB); - } + if (formData.isGitlabEnabled) { + enabledMethods.push(LoginMethod.GITLAB); + } - if (formData.isSamlEnabled) { - enabledMethods.push(LoginMethod.SAML); - } + if (formData.isSamlEnabled) { + enabledMethods.push(LoginMethod.SAML); + } - if (formData.isLdapEnabled) { - enabledMethods.push(LoginMethod.LDAP); - } + if (formData.isLdapEnabled) { + enabledMethods.push(LoginMethod.LDAP); + } - if (formData.isOidcEnabled) { - enabledMethods.push(LoginMethod.OIDC); - } + if (formData.isOidcEnabled) { + enabledMethods.push(LoginMethod.OIDC); + } - if (!enabledMethods.length) { - createNotification({ - type: "error", - text: "At least one login method should be enabled." - }); - return; - } - - await updateServerConfig({ - enabledLoginMethods: enabledMethods - }); - - createNotification({ - text: "Login methods have been successfully updated.", - type: "success" - }); - } catch (e) { - console.error(e); + if (!enabledMethods.length) { createNotification({ type: "error", - text: "Failed to update login methods." + text: "At least one login method should be enabled." }); + return; } + + await updateServerConfig({ + enabledLoginMethods: enabledMethods + }); + + createNotification({ + text: "Login methods have been successfully updated.", + type: "success" + }); }; return ( diff --git a/frontend/src/pages/admin/CachingPage/components/CachingPageForm.tsx b/frontend/src/pages/admin/CachingPage/components/CachingPageForm.tsx index fbf956b7b..e9bdc3d1e 100644 --- a/frontend/src/pages/admin/CachingPage/components/CachingPageForm.tsx +++ b/frontend/src/pages/admin/CachingPage/components/CachingPageForm.tsx @@ -31,15 +31,10 @@ export const CachingPageForm = () => { const handleInvalidateCacheSubmit = async () => { if (!type || isInvalidating) return; - try { - await invalidateCache({ type }); - createNotification({ text: `Began invalidating ${type} cache`, type: "success" }); - setShouldPoll(true); - handlePopUpClose("invalidateCache"); - } catch (err) { - console.error(err); - createNotification({ text: `Failed to invalidate ${type} cache`, type: "error" }); - } + await invalidateCache({ type }); + createNotification({ text: `Began invalidating ${type} cache`, type: "success" }); + setShouldPoll(true); + handlePopUpClose("invalidateCache"); }; useEffect(() => { diff --git a/frontend/src/pages/admin/EncryptionPage/components/EncryptionPageForm.tsx b/frontend/src/pages/admin/EncryptionPage/components/EncryptionPageForm.tsx index 8372dd557..3dafdabd3 100644 --- a/frontend/src/pages/admin/EncryptionPage/components/EncryptionPageForm.tsx +++ b/frontend/src/pages/admin/EncryptionPage/components/EncryptionPageForm.tsx @@ -60,19 +60,12 @@ export const EncryptionPageForm = () => { return; } - try { - await updateEncryptionStrategy(formData.encryptionStrategy); + await updateEncryptionStrategy(formData.encryptionStrategy); - createNotification({ - type: "success", - text: "Encryption strategy updated successfully" - }); - } catch { - createNotification({ - type: "error", - text: "Failed to update encryption strategy" - }); - } + createNotification({ + type: "success", + text: "Encryption strategy updated successfully" + }); }, []); return ( diff --git a/frontend/src/pages/admin/EnvironmentPage/components/EnvironmentPageForm.tsx b/frontend/src/pages/admin/EnvironmentPage/components/EnvironmentPageForm.tsx index 5f74593a3..8361aa944 100644 --- a/frontend/src/pages/admin/EnvironmentPage/components/EnvironmentPageForm.tsx +++ b/frontend/src/pages/admin/EnvironmentPage/components/EnvironmentPageForm.tsx @@ -176,31 +176,19 @@ export const EnvironmentPageForm = () => { const onSubmit = useCallback( async (formData: TForm) => { - try { - const filteredFormData = Object.fromEntries( - Object.entries(formData).filter(([, value]) => value !== "") - ); - await updateServerConfig({ - envOverrides: filteredFormData - }); + const filteredFormData = Object.fromEntries( + Object.entries(formData).filter(([, value]) => value !== "") + ); + await updateServerConfig({ + envOverrides: filteredFormData + }); - createNotification({ - type: "success", - text: "Environment overrides updated successfully. It can take up to 5 minutes to take effect." - }); + createNotification({ + type: "success", + text: "Environment overrides updated successfully. It can take up to 5 minutes to take effect." + }); - reset(formData); - } catch (error) { - const errorMessage = - (error as any)?.response?.data?.message || - (error as any)?.message || - "An unknown error occurred"; - createNotification({ - type: "error", - title: "Failed to update environment overrides", - text: errorMessage - }); - } + reset(formData); }, [reset, updateServerConfig] ); diff --git a/frontend/src/pages/admin/GeneralPage/components/GeneralPageForm.tsx b/frontend/src/pages/admin/GeneralPage/components/GeneralPageForm.tsx index be92dd679..eff3e3cf8 100644 --- a/frontend/src/pages/admin/GeneralPage/components/GeneralPageForm.tsx +++ b/frontend/src/pages/admin/GeneralPage/components/GeneralPageForm.tsx @@ -68,37 +68,29 @@ export const GeneralPageForm = () => { const organizations = useGetOrganizations(); const onFormSubmit = async (formData: TDashboardForm) => { - try { - const { - allowedSignUpDomain, - trustSamlEmails, - trustLdapEmails, - trustOidcEmails, - authConsentContent, - pageFrameContent - } = formData; + const { + allowedSignUpDomain, + trustSamlEmails, + trustLdapEmails, + trustOidcEmails, + authConsentContent, + pageFrameContent + } = formData; - await updateServerConfig({ - defaultAuthOrgId: defaultAuthOrgId || null, - allowSignUp: signUpMode !== SignUpModes.Disabled, - allowedSignUpDomain: signUpMode === SignUpModes.Anyone ? allowedSignUpDomain : null, - trustSamlEmails, - trustLdapEmails, - trustOidcEmails, - authConsentContent, - pageFrameContent - }); - createNotification({ - text: "Successfully changed sign up setting.", - type: "success" - }); - } catch (e) { - console.error(e); - createNotification({ - type: "error", - text: "Failed to update sign up setting." - }); - } + await updateServerConfig({ + defaultAuthOrgId: defaultAuthOrgId || null, + allowSignUp: signUpMode !== SignUpModes.Disabled, + allowedSignUpDomain: signUpMode === SignUpModes.Anyone ? allowedSignUpDomain : null, + trustSamlEmails, + trustLdapEmails, + trustOidcEmails, + authConsentContent, + pageFrameContent + }); + createNotification({ + text: "Successfully changed sign up setting.", + type: "success" + }); }; return ( diff --git a/frontend/src/pages/admin/GeneralPage/components/UsageReportSection.tsx b/frontend/src/pages/admin/GeneralPage/components/UsageReportSection.tsx index d05800996..663aa18b7 100644 --- a/frontend/src/pages/admin/GeneralPage/components/UsageReportSection.tsx +++ b/frontend/src/pages/admin/GeneralPage/components/UsageReportSection.tsx @@ -10,23 +10,15 @@ export const UsageReportSection = () => { const generateUsageReport = useGenerateUsageReport(); const handleGenerateReport = async () => { - try { - const response = await generateUsageReport.mutateAsync(); - const { csvContent, filename } = response; + const response = await generateUsageReport.mutateAsync(); + const { csvContent, filename } = response; - downloadFile(csvContent, filename, "text/csv"); + downloadFile(csvContent, filename, "text/csv"); - createNotification({ - text: `Usage report downloaded: "${filename}"`, - type: "success" - }); - } catch (error) { - console.error("Failed to generate usage report:", error); - createNotification({ - text: "Failed to generate usage report. Please try again.", - type: "error" - }); - } + createNotification({ + text: `Usage report downloaded: "${filename}"`, + type: "success" + }); }; return ( diff --git a/frontend/src/pages/admin/ResourceOverviewPage/components/AddOrganizationModal.tsx b/frontend/src/pages/admin/ResourceOverviewPage/components/AddOrganizationModal.tsx index d577998b5..48983496f 100644 --- a/frontend/src/pages/admin/ResourceOverviewPage/components/AddOrganizationModal.tsx +++ b/frontend/src/pages/admin/ResourceOverviewPage/components/AddOrganizationModal.tsx @@ -81,25 +81,18 @@ const Content = ({ onClose }: ContentProps) => { const { users = [] } = data ?? {}; const onSubmit = async ({ name, invitees }: FormData) => { - try { - await createOrg.mutateAsync({ - name, - inviteAdminEmails: invitees - .filter((user) => Boolean(user.email)) - .map((user) => user.email) as string[] - }); + await createOrg.mutateAsync({ + name, + inviteAdminEmails: invitees + .filter((user) => Boolean(user.email)) + .map((user) => user.email) as string[] + }); - createNotification({ - type: "success", - text: "Successfully created organization" - }); - onClose(); - } catch { - createNotification({ - text: "Failed to create organization", - type: "error" - }); - } + createNotification({ + type: "success", + text: "Successfully created organization" + }); + onClose(); }; const { append } = useFieldArray({ control, name: "invitees" }); diff --git a/frontend/src/pages/admin/ResourceOverviewPage/components/MachineIdentitiesTable.tsx b/frontend/src/pages/admin/ResourceOverviewPage/components/MachineIdentitiesTable.tsx index 9929d7500..d17786712 100644 --- a/frontend/src/pages/admin/ResourceOverviewPage/components/MachineIdentitiesTable.tsx +++ b/frontend/src/pages/admin/ResourceOverviewPage/components/MachineIdentitiesTable.tsx @@ -185,18 +185,11 @@ export const MachineIdentitiesTable = () => { const handleRemoveServerAdmin = async () => { const { id } = popUp?.removeServerAdmin?.data as { id: string; name: string }; - try { - await deleteIdentitySuperAdminAccess(id); - createNotification({ - type: "success", - text: "Successfully removed server admin permissions" - }); - } catch { - createNotification({ - type: "error", - text: "Error removing server admin permissions" - }); - } + await deleteIdentitySuperAdminAccess(id); + createNotification({ + type: "success", + text: "Successfully removed server admin permissions" + }); handlePopUpClose("removeServerAdmin"); }; diff --git a/frontend/src/pages/admin/ResourceOverviewPage/components/OrganizationsTable.tsx b/frontend/src/pages/admin/ResourceOverviewPage/components/OrganizationsTable.tsx index fbb9462d0..93d0253ff 100644 --- a/frontend/src/pages/admin/ResourceOverviewPage/components/OrganizationsTable.tsx +++ b/frontend/src/pages/admin/ResourceOverviewPage/components/OrganizationsTable.tsx @@ -179,12 +179,6 @@ const ViewMembersModalContent = ({ text: "Successfully resent org invitation", type: "success" }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to resend org invitation", - type: "error" - }); } finally { setResendInviteId(null); } @@ -479,26 +473,19 @@ const OrganizationsPanelTable = ({ const { mutateAsync: accessOrganization } = useServerAdminAccessOrg(); const handleAccessOrg = async (orgId: string) => { - try { - await accessOrganization(orgId); + await accessOrganization(orgId); - navigate({ - to: "/login/select-organization", - search: { - org_id: orgId - } - }); + navigate({ + to: "/login/select-organization", + search: { + org_id: orgId + } + }); - createNotification({ - text: "Successfully joined organization", - type: "success" - }); - } catch { - createNotification({ - text: "Failed to join organization", - type: "error" - }); - } + createNotification({ + text: "Successfully joined organization", + type: "success" + }); }; return ( diff --git a/frontend/src/pages/admin/ResourceOverviewPage/components/UserIdentitiesTable.tsx b/frontend/src/pages/admin/ResourceOverviewPage/components/UserIdentitiesTable.tsx index 05d07d426..4f44a32aa 100644 --- a/frontend/src/pages/admin/ResourceOverviewPage/components/UserIdentitiesTable.tsx +++ b/frontend/src/pages/admin/ResourceOverviewPage/components/UserIdentitiesTable.tsx @@ -367,18 +367,11 @@ export const UserIdentitiesTable = () => { const handleRemoveUser = async () => { const { id } = popUp?.removeUser?.data as { id: string; username: string }; - try { - await deleteUser(id); - createNotification({ - type: "success", - text: "Successfully deleted user" - }); - } catch { - createNotification({ - type: "error", - text: "Error deleting user" - }); - } + await deleteUser(id); + createNotification({ + type: "success", + text: "Successfully deleted user" + }); handlePopUpClose("removeUser"); }; @@ -386,18 +379,11 @@ export const UserIdentitiesTable = () => { const handleGrantServerAdminAccess = async () => { const { id } = popUp?.upgradeToServerAdmin?.data as { id: string; username: string }; - try { - await grantAdminAccess(id); - createNotification({ - type: "success", - text: "Successfully granted server admin access to user" - }); - } catch { - createNotification({ - type: "error", - text: "Error granting server admin access to user" - }); - } + await grantAdminAccess(id); + createNotification({ + type: "success", + text: "Successfully granted server admin access to user" + }); handlePopUpClose("upgradeToServerAdmin"); }; @@ -405,39 +391,25 @@ export const UserIdentitiesTable = () => { const handleRemoveServerAdminAccess = async () => { const { id } = popUp?.removeServerAdmin?.data as { id: string; username: string }; - try { - await removeAdminAccess(id); - createNotification({ - type: "success", - text: "Successfully removed server admin access from user" - }); - } catch { - createNotification({ - type: "error", - text: "Error removing server admin access from user" - }); - } + await removeAdminAccess(id); + createNotification({ + type: "success", + text: "Successfully removed server admin access from user" + }); handlePopUpClose("removeServerAdmin"); }; const handleRemoveUsers = async () => { - try { - await deleteUsers(selectedUsers.map((user) => user.id)); + await deleteUsers(selectedUsers.map((user) => user.id)); - createNotification({ - text: "Successfully removed users", - type: "success" - }); + createNotification({ + text: "Successfully removed users", + type: "success" + }); - setSelectedUsers([]); - handlePopUpClose("removeUsers"); - } catch { - createNotification({ - text: "Failed to remove users", - type: "error" - }); - } + setSelectedUsers([]); + handlePopUpClose("removeUsers"); }; return ( diff --git a/frontend/src/pages/admin/SignUpPage/SignUpPage.tsx b/frontend/src/pages/admin/SignUpPage/SignUpPage.tsx index 04bd2f55c..81959a647 100644 --- a/frontend/src/pages/admin/SignUpPage/SignUpPage.tsx +++ b/frontend/src/pages/admin/SignUpPage/SignUpPage.tsx @@ -6,7 +6,6 @@ import { useNavigate } from "@tanstack/react-router"; import { AnimatePresence, motion } from "framer-motion"; import { z } from "zod"; -import { createNotification } from "@app/components/notifications"; // TODO(akhilmhdh): rewrite this into module functions in lib import SecurityClient from "@app/components/utilities/SecurityClient"; import { Button, ContentLoader, FormControl, Input } from "@app/components/v2"; @@ -46,29 +45,21 @@ export const SignUpPage = () => { const handleFormSubmit = async ({ email, password, firstName, lastName }: TFormSchema) => { // avoid multi submission if (isSubmitting) return; - try { - const res = await createAdminUser({ - email, - password, - firstName, - lastName - }); + const res = await createAdminUser({ + email, + password, + firstName, + lastName + }); - SecurityClient.setToken(res.token); - await selectOrganization({ organizationId: res.organization.id }); + SecurityClient.setToken(res.token); + await selectOrganization({ organizationId: res.organization.id }); - // TODO(akhilmhdh): This is such a confusing pattern and too unreliable - // Will be refactored in next iteration to make it url based rather than local storage ones - // Part of migration to nextjs 14 - localStorage.setItem("orgData.id", res.organization.id); - navigate({ to: "/admin" }); - } catch (err) { - console.log(err); - createNotification({ - type: "error", - text: "Failed to create admin" - }); - } + // TODO(akhilmhdh): This is such a confusing pattern and too unreliable + // Will be refactored in next iteration to make it url based rather than local storage ones + // Part of migration to nextjs 14 + localStorage.setItem("orgData.id", res.organization.id); + navigate({ to: "/admin" }); }; if (config?.initialized) return ; diff --git a/frontend/src/pages/auth/PasswordSetupPage/PasswordSetupPage.tsx b/frontend/src/pages/auth/PasswordSetupPage/PasswordSetupPage.tsx index a1dad3cc5..9626f4cc5 100644 --- a/frontend/src/pages/auth/PasswordSetupPage/PasswordSetupPage.tsx +++ b/frontend/src/pages/auth/PasswordSetupPage/PasswordSetupPage.tsx @@ -75,11 +75,7 @@ export const PasswordSetupPage = () => { setTimeout(() => { window.location.href = "/login"; }, 3000); - } catch (error) { - createNotification({ - type: "error", - text: (error as Error).message ?? "Error setting password" - }); + } catch { navigate({ to: "/personal-settings" }); } } diff --git a/frontend/src/pages/auth/SignUpSsoPage/components/EmailConfirmationStep/EmailConfirmationStep.tsx b/frontend/src/pages/auth/SignUpSsoPage/components/EmailConfirmationStep/EmailConfirmationStep.tsx index efa498749..2240fe263 100644 --- a/frontend/src/pages/auth/SignUpSsoPage/components/EmailConfirmationStep/EmailConfirmationStep.tsx +++ b/frontend/src/pages/auth/SignUpSsoPage/components/EmailConfirmationStep/EmailConfirmationStep.tsx @@ -73,67 +73,53 @@ export const EmailConfirmationStep = ({ const { mutateAsync: verifyEmailVerificationCode } = useVerifyEmailVerificationCode(); const checkCode = async () => { - try { - await verifyEmailVerificationCode({ username, code }); - setCodeError(false); + await verifyEmailVerificationCode({ username, code }); + setCodeError(false); - createNotification({ - text: "Successfully verified code", - type: "success" - }); + createNotification({ + text: "Successfully verified code", + type: "success" + }); - switch (authType) { - case UserAliasType.SAML: { - window.open(`/api/v1/sso/redirect/saml2/organizations/${organizationSlug}`); - window.close(); - break; - } - case UserAliasType.LDAP: { - navigate({ to: "/login/ldap", search: { organizationSlug } }); - break; - } - case UserAliasType.OIDC: { - window.open(`/api/v1/sso/oidc/login?orgSlug=${organizationSlug}`); - window.close(); - break; - } - default: { - setStep(1); - break; - } + switch (authType) { + case UserAliasType.SAML: { + window.open(`/api/v1/sso/redirect/saml2/organizations/${organizationSlug}`); + window.close(); + break; + } + case UserAliasType.LDAP: { + navigate({ to: "/login/ldap", search: { organizationSlug } }); + break; + } + case UserAliasType.OIDC: { + window.open(`/api/v1/sso/oidc/login?orgSlug=${organizationSlug}`); + window.close(); + break; + } + default: { + setStep(1); + break; } - } catch { - createNotification({ - text: "Failed to verify code", - type: "error" - }); } setCode(""); }; const resendCode = async () => { - try { - const queryParams = new URLSearchParams(window.location.search); - const token = queryParams.get("token"); - if (!token) { - createNotification({ - text: "Failed to resend code, no token found", - type: "error" - }); - return; - } - await sendEmailVerificationCode(token); + const queryParams = new URLSearchParams(window.location.search); + const token = queryParams.get("token"); + if (!token) { createNotification({ - text: "Successfully resent code", - type: "success" - }); - } catch { - createNotification({ - text: "Failed to resend code", + text: "Failed to resend code, no token found", type: "error" }); + return; } + await sendEmailVerificationCode(token); + createNotification({ + text: "Successfully resent code", + type: "success" + }); }; return ( diff --git a/frontend/src/pages/cert-manager/AlertingPage/components/PkiAlertModal.tsx b/frontend/src/pages/cert-manager/AlertingPage/components/PkiAlertModal.tsx index 5601e48db..af5bcb7ae 100644 --- a/frontend/src/pages/cert-manager/AlertingPage/components/PkiAlertModal.tsx +++ b/frontend/src/pages/cert-manager/AlertingPage/components/PkiAlertModal.tsx @@ -113,52 +113,44 @@ export const PkiAlertModal = ({ popUp, handlePopUpToggle }: Props) => { alertUnit, emails }: FormData) => { - try { - if (!projectId) return; + if (!projectId) return; - const emailArray = emails - .split(",") - .map((email) => email.trim()) - .filter((email) => email.length > 0); + const emailArray = emails + .split(",") + .map((email) => email.trim()) + .filter((email) => email.length > 0); - const alertBeforeDays = convertToDays(alertUnit, Number(alertBefore)); + const alertBeforeDays = convertToDays(alertUnit, Number(alertBefore)); - if (alert) { - // update - await updatePkiAlert({ - alertId: alert.id, - pkiCollectionId, - name, - projectId, - alertBeforeDays, - emails: emailArray - }); - } else { - // create - await createPkiAlert({ - name, - projectId, - pkiCollectionId, - alertBeforeDays, - emails: emailArray - }); - } - - handlePopUpToggle("pkiAlert", false); - - reset(); - - createNotification({ - text: `Successfully ${alert ? "updated" : "created"} alert`, - type: "success" + if (alert) { + // update + await updatePkiAlert({ + alertId: alert.id, + pkiCollectionId, + name, + projectId, + alertBeforeDays, + emails: emailArray }); - } catch (err) { - console.error(err); - createNotification({ - text: `Failed to ${alert ? "updated" : "created"} alert`, - type: "error" + } else { + // create + await createPkiAlert({ + name, + projectId, + pkiCollectionId, + alertBeforeDays, + emails: emailArray }); } + + handlePopUpToggle("pkiAlert", false); + + reset(); + + createNotification({ + text: `Successfully ${alert ? "updated" : "created"} alert`, + type: "success" + }); }; return ( diff --git a/frontend/src/pages/cert-manager/AlertingPage/components/PkiAlertsSection.tsx b/frontend/src/pages/cert-manager/AlertingPage/components/PkiAlertsSection.tsx index 329974f65..1529dfc19 100644 --- a/frontend/src/pages/cert-manager/AlertingPage/components/PkiAlertsSection.tsx +++ b/frontend/src/pages/cert-manager/AlertingPage/components/PkiAlertsSection.tsx @@ -22,27 +22,19 @@ export const PkiAlertsSection = () => { ] as const); const onRemoveAlertSubmit = async (alertId: string) => { - try { - if (!projectId) return; + if (!projectId) return; - await deletePkiAlert({ - alertId, - projectId - }); + await deletePkiAlert({ + alertId, + projectId + }); - createNotification({ - text: "Successfully deleted alert", - type: "success" - }); + createNotification({ + text: "Successfully deleted alert", + type: "success" + }); - handlePopUpClose("deletePkiAlert"); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to delete alert", - type: "error" - }); - } + handlePopUpClose("deletePkiAlert"); }; return ( diff --git a/frontend/src/pages/cert-manager/AlertingPage/components/PkiCollectionModal.tsx b/frontend/src/pages/cert-manager/AlertingPage/components/PkiCollectionModal.tsx index 5900a1ba9..a29e9028b 100644 --- a/frontend/src/pages/cert-manager/AlertingPage/components/PkiCollectionModal.tsx +++ b/frontend/src/pages/cert-manager/AlertingPage/components/PkiCollectionModal.tsx @@ -62,49 +62,41 @@ export const PkiCollectionModal = ({ popUp, handlePopUpToggle }: Props) => { }, [pkiCollection]); const onFormSubmit = async ({ name, description }: FormData) => { - try { - if (!projectId) return; + if (!projectId) return; - if (pkiCollection) { - // update - await updatePkiCollection({ - collectionId: pkiCollection.id, - name, - description, - projectId - }); - } else { - // create - const { id: collectionId } = await createPkiCollection({ - name, - description, - projectId - }); - - navigate({ - to: "/projects/cert-management/$projectId/pki-collections/$collectionId", - params: { - projectId, - collectionId - } - }); - } - - handlePopUpToggle("pkiCollection", false); - - reset(); - - createNotification({ - text: `Successfully ${pkiCollection ? "updated" : "created"} PKI collection`, - type: "success" + if (pkiCollection) { + // update + await updatePkiCollection({ + collectionId: pkiCollection.id, + name, + description, + projectId }); - } catch (err) { - console.error(err); - createNotification({ - text: `Failed to ${pkiCollection ? "updated" : "created"} PKI collection`, - type: "error" + } else { + // create + const { id: collectionId } = await createPkiCollection({ + name, + description, + projectId + }); + + navigate({ + to: "/projects/cert-management/$projectId/pki-collections/$collectionId", + params: { + projectId, + collectionId + } }); } + + handlePopUpToggle("pkiCollection", false); + + reset(); + + createNotification({ + text: `Successfully ${pkiCollection ? "updated" : "created"} PKI collection`, + type: "success" + }); }; return ( diff --git a/frontend/src/pages/cert-manager/AlertingPage/components/PkiCollectionSection.tsx b/frontend/src/pages/cert-manager/AlertingPage/components/PkiCollectionSection.tsx index eecceaa7d..fa9cf7bea 100644 --- a/frontend/src/pages/cert-manager/AlertingPage/components/PkiCollectionSection.tsx +++ b/frontend/src/pages/cert-manager/AlertingPage/components/PkiCollectionSection.tsx @@ -22,27 +22,19 @@ export const PkiCollectionSection = () => { ] as const); const onRemovePkiCollectionSubmit = async (collectionId: string) => { - try { - if (!projectId) return; + if (!projectId) return; - await deletePkiCollection({ - collectionId, - projectId - }); + await deletePkiCollection({ + collectionId, + projectId + }); - createNotification({ - text: "Successfully deleted PKI collection", - type: "success" - }); + createNotification({ + text: "Successfully deleted PKI collection", + type: "success" + }); - handlePopUpClose("deletePkiCollection"); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to delete PKI collection", - type: "error" - }); - } + handlePopUpClose("deletePkiCollection"); }; return ( diff --git a/frontend/src/pages/cert-manager/CertAuthDetailsByIDPage/CertAuthDetailsByIDPage.tsx b/frontend/src/pages/cert-manager/CertAuthDetailsByIDPage/CertAuthDetailsByIDPage.tsx index ca73abd50..b464a2230 100644 --- a/frontend/src/pages/cert-manager/CertAuthDetailsByIDPage/CertAuthDetailsByIDPage.tsx +++ b/frontend/src/pages/cert-manager/CertAuthDetailsByIDPage/CertAuthDetailsByIDPage.tsx @@ -57,33 +57,26 @@ const Page = () => { ] as const); const onRemoveCaSubmit = async () => { - try { - if (!currentProject?.slug) return; + if (!currentProject?.slug) return; - await deleteCa({ - caName, - projectId: currentProject.id, - type: CaType.INTERNAL - }); + await deleteCa({ + caName, + projectId: currentProject.id, + type: CaType.INTERNAL + }); - createNotification({ - text: "Successfully deleted CA", - type: "success" - }); + createNotification({ + text: "Successfully deleted CA", + type: "success" + }); - handlePopUpClose("deleteCa"); - navigate({ - to: "/projects/cert-management/$projectId/certificate-authorities", - params: { - projectId - } - }); - } catch { - createNotification({ - text: "Failed to delete CA", - type: "error" - }); - } + handlePopUpClose("deleteCa"); + navigate({ + to: "/projects/cert-management/$projectId/certificate-authorities", + params: { + projectId + } + }); }; return ( diff --git a/frontend/src/pages/cert-manager/CertAuthDetailsByIDPage/components/CaRenewalModal.tsx b/frontend/src/pages/cert-manager/CertAuthDetailsByIDPage/components/CaRenewalModal.tsx index 857586a58..c6283da37 100644 --- a/frontend/src/pages/cert-manager/CertAuthDetailsByIDPage/components/CaRenewalModal.tsx +++ b/frontend/src/pages/cert-manager/CertAuthDetailsByIDPage/components/CaRenewalModal.tsx @@ -84,27 +84,23 @@ export const CaRenewalModal = ({ popUp, handlePopUpToggle }: Props) => { // }, [ca, parentCa]); const onFormSubmit = async ({ type, notAfter }: FormData) => { - try { - if (!projectSlug || !popUpData.caId) return; + if (!projectSlug || !popUpData.caId) return; - await renewCa({ - projectSlug, - caId: popUpData.caId, - notAfter, - type - }); + await renewCa({ + projectSlug, + caId: popUpData.caId, + notAfter, + type + }); - handlePopUpToggle("renewCa", false); + handlePopUpToggle("renewCa", false); - createNotification({ - text: "Successfully renewed CA", - type: "success" - }); + createNotification({ + text: "Successfully renewed CA", + type: "success" + }); - reset(); - } catch (err) { - console.error(err); - } + reset(); }; return ( diff --git a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaInstallCertModal/ExternalCaInstallForm.tsx b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaInstallCertModal/ExternalCaInstallForm.tsx index f730322c9..8a7e9690e 100644 --- a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaInstallCertModal/ExternalCaInstallForm.tsx +++ b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaInstallCertModal/ExternalCaInstallForm.tsx @@ -48,29 +48,22 @@ export const ExternalCaInstallForm = ({ caId, handlePopUpToggle }: Props) => { }, []); const onFormSubmit = async ({ certificate, certificateChain }: FormData) => { - try { - if (!csr || !caId || !currentProject?.slug) return; + if (!csr || !caId || !currentProject?.slug) return; - await importCaCertificate({ - caId, - projectSlug: currentProject?.slug, - certificate, - certificateChain - }); + await importCaCertificate({ + caId, + projectSlug: currentProject?.slug, + certificate, + certificateChain + }); - reset(); + reset(); - createNotification({ - text: "Successfully installed certificate for CA", - type: "success" - }); - handlePopUpToggle("installCaCert", false); - } catch { - createNotification({ - text: "Failed to install certificate for CA", - type: "error" - }); - } + createNotification({ + text: "Successfully installed certificate for CA", + type: "success" + }); + handlePopUpToggle("installCaCert", false); }; const downloadTxtFile = (filename: string, content: string) => { diff --git a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaInstallCertModal/InternalCaInstallForm.tsx b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaInstallCertModal/InternalCaInstallForm.tsx index 5979d9711..f80e21212 100644 --- a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaInstallCertModal/InternalCaInstallForm.tsx +++ b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaInstallCertModal/InternalCaInstallForm.tsx @@ -101,37 +101,30 @@ export const InternalCaInstallForm = ({ caId, handlePopUpToggle }: Props) => { }, [parentCa]); const onFormSubmit = async ({ notAfter, maxPathLength }: FormData) => { - try { - if (!csr || !caId || !currentProject?.slug) return; + if (!csr || !caId || !currentProject?.slug) return; - const { certificate, certificateChain } = await signIntermediate({ - caId: parentCaId, - csr, - maxPathLength: Number(maxPathLength), - notAfter, - notBefore: new Date().toISOString() - }); + const { certificate, certificateChain } = await signIntermediate({ + caId: parentCaId, + csr, + maxPathLength: Number(maxPathLength), + notAfter, + notBefore: new Date().toISOString() + }); - await importCaCertificate({ - caId, - projectSlug: currentProject?.slug, - certificate, - certificateChain - }); + await importCaCertificate({ + caId, + projectSlug: currentProject?.slug, + certificate, + certificateChain + }); - reset(); + reset(); - createNotification({ - text: "Successfully installed certificate for CA", - type: "success" - }); - handlePopUpToggle("installCaCert", false); - } catch { - createNotification({ - text: "Failed to install certificate for CA", - type: "error" - }); - } + createNotification({ + text: "Successfully installed certificate for CA", + type: "success" + }); + handlePopUpToggle("installCaCert", false); }; function generatePathLengthOpts(parentCaMaxPathLength: number): number[] { diff --git a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaModal.tsx b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaModal.tsx index a19a3a9c7..53434b79d 100644 --- a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaModal.tsx +++ b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaModal.tsx @@ -175,48 +175,40 @@ export const CaModal = ({ popUp, handlePopUpToggle }: Props) => { status, configuration }: FormData) => { - try { - if (!currentProject?.slug) return; + if (!currentProject?.slug) return; - if (ca) { - // update - await updateMutateAsync({ - caName: ca.name, - projectId: currentProject.id, - name, - type: CaType.INTERNAL, - status, - enableDirectIssuance - }); - } else { - // create - await createMutateAsync({ - projectId: currentProject.id, - name, - type, - status, - enableDirectIssuance, - configuration: { - ...configuration, - maxPathLength: Number(configuration.maxPathLength) - } - }); - } - - reset(); - handlePopUpToggle("ca", false); - - createNotification({ - text: `Successfully ${ca ? "updated" : "created"} CA`, - type: "success" + if (ca) { + // update + await updateMutateAsync({ + caName: ca.name, + projectId: currentProject.id, + name, + type: CaType.INTERNAL, + status, + enableDirectIssuance }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to create CA", - type: "error" + } else { + // create + await createMutateAsync({ + projectId: currentProject.id, + name, + type, + status, + enableDirectIssuance, + configuration: { + ...configuration, + maxPathLength: Number(configuration.maxPathLength) + } }); } + + reset(); + handlePopUpToggle("ca", false); + + createNotification({ + text: `Successfully ${ca ? "updated" : "created"} CA`, + type: "success" + }); }; return ( diff --git a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaSection.tsx b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaSection.tsx index e853dc801..a817042a7 100644 --- a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaSection.tsx +++ b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaSection.tsx @@ -29,44 +29,29 @@ export const CaSection = () => { ] as const); const onRemoveCaSubmit = async (caName: string) => { - try { - if (!currentProject?.slug) return; + if (!currentProject?.slug) return; - await deleteCa({ caName, projectId: currentProject.id, type: CaType.INTERNAL }); + await deleteCa({ caName, projectId: currentProject.id, type: CaType.INTERNAL }); - createNotification({ - text: "Successfully deleted CA", - type: "success" - }); + createNotification({ + text: "Successfully deleted CA", + type: "success" + }); - handlePopUpClose("deleteCa"); - } catch { - createNotification({ - text: "Failed to delete CA", - type: "error" - }); - } + handlePopUpClose("deleteCa"); }; const onUpdateCaStatus = async ({ caName, status }: { caName: string; status: CaStatus }) => { - try { - if (!currentProject?.slug) return; + if (!currentProject?.slug) return; - await updateCa({ caName, projectId: currentProject.id, type: CaType.INTERNAL, status }); + await updateCa({ caName, projectId: currentProject.id, type: CaType.INTERNAL, status }); - createNotification({ - text: `Successfully ${status === CaStatus.ACTIVE ? "enabled" : "disabled"} CA`, - type: "success" - }); + createNotification({ + text: `Successfully ${status === CaStatus.ACTIVE ? "enabled" : "disabled"} CA`, + type: "success" + }); - handlePopUpClose("caStatus"); - } catch (err) { - console.error(err); - createNotification({ - text: `Failed to ${status === CaStatus.ACTIVE ? "enabled" : "disabled"} CA`, - type: "error" - }); - } + handlePopUpClose("caStatus"); }; return ( diff --git a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaModal.tsx b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaModal.tsx index 121c32e5f..825368d1c 100644 --- a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaModal.tsx +++ b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaModal.tsx @@ -297,63 +297,55 @@ export const ExternalCaModal = ({ popUp, handlePopUpToggle }: Props) => { status, configuration: formConfiguration }: FormData) => { - try { - if (!currentProject?.slug) return; + if (!currentProject?.slug) return; - let configPayload: any; + let configPayload: any; - if (type === CaType.ACME && "dnsAppConnection" in formConfiguration) { - configPayload = { - dnsProviderConfig: formConfiguration.dnsProviderConfig, - directoryUrl: formConfiguration.directoryUrl, - accountEmail: formConfiguration.accountEmail, - dnsAppConnectionId: formConfiguration.dnsAppConnection.id, - eabKid: formConfiguration.eabKid, - eabHmacKey: formConfiguration.eabHmacKey - }; - } else if (type === CaType.AZURE_AD_CS && "azureAdcsConnection" in formConfiguration) { - configPayload = { - azureAdcsConnectionId: formConfiguration.azureAdcsConnection.id - }; - } else { - throw new Error("Invalid certificate authority configuration"); - } + if (type === CaType.ACME && "dnsAppConnection" in formConfiguration) { + configPayload = { + dnsProviderConfig: formConfiguration.dnsProviderConfig, + directoryUrl: formConfiguration.directoryUrl, + accountEmail: formConfiguration.accountEmail, + dnsAppConnectionId: formConfiguration.dnsAppConnection.id, + eabKid: formConfiguration.eabKid, + eabHmacKey: formConfiguration.eabHmacKey + }; + } else if (type === CaType.AZURE_AD_CS && "azureAdcsConnection" in formConfiguration) { + configPayload = { + azureAdcsConnectionId: formConfiguration.azureAdcsConnection.id + }; + } else { + throw new Error("Invalid certificate authority configuration"); + } - if (ca) { - await updateMutateAsync({ - caName: ca.name, - projectId: currentProject.id, - name, - type, - status, - enableDirectIssuance: type === CaType.AZURE_AD_CS ? false : enableDirectIssuance, - configuration: configPayload - }); - } else { - await createMutateAsync({ - projectId: currentProject.id, - name, - type, - status, - enableDirectIssuance: type === CaType.AZURE_AD_CS ? false : enableDirectIssuance, - configuration: configPayload - }); - } - - reset(); - handlePopUpToggle("ca", false); - - createNotification({ - text: `Successfully ${ca ? "updated" : "created"} CA`, - type: "success" + if (ca) { + await updateMutateAsync({ + caName: ca.name, + projectId: currentProject.id, + name, + type, + status, + enableDirectIssuance: type === CaType.AZURE_AD_CS ? false : enableDirectIssuance, + configuration: configPayload }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to create CA", - type: "error" + } else { + await createMutateAsync({ + projectId: currentProject.id, + name, + type, + status, + enableDirectIssuance: type === CaType.AZURE_AD_CS ? false : enableDirectIssuance, + configuration: configPayload }); } + + reset(); + handlePopUpToggle("ca", false); + + createNotification({ + text: `Successfully ${ca ? "updated" : "created"} CA`, + type: "success" + }); }; return ( diff --git a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaSection.tsx b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaSection.tsx index 14ce122ec..b40dec6f5 100644 --- a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaSection.tsx +++ b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaSection.tsx @@ -25,23 +25,16 @@ export const ExternalCaSection = () => { ] as const); const onRemoveCaSubmit = async (caName: string, type: CaType) => { - try { - if (!currentProject?.id) return; + if (!currentProject?.id) return; - await deleteCa({ caName, type, projectId: currentProject.id }); + await deleteCa({ caName, type, projectId: currentProject.id }); - createNotification({ - text: "Successfully deleted CA", - type: "success" - }); + createNotification({ + text: "Successfully deleted CA", + type: "success" + }); - handlePopUpClose("deleteCa"); - } catch { - createNotification({ - text: "Failed to delete CA", - type: "error" - }); - } + handlePopUpClose("deleteCa"); }; const onUpdateCaStatus = async ({ @@ -53,24 +46,16 @@ export const ExternalCaSection = () => { type: CaType; status: CaStatus; }) => { - try { - if (!currentProject?.slug) return; + if (!currentProject?.slug) return; - await updateCa({ caName: name, type, status, projectId: currentProject.id }); + await updateCa({ caName: name, type, status, projectId: currentProject.id }); - createNotification({ - text: `Successfully ${status === CaStatus.ACTIVE ? "enabled" : "disabled"} CA`, - type: "success" - }); + createNotification({ + text: `Successfully ${status === CaStatus.ACTIVE ? "enabled" : "disabled"} CA`, + type: "success" + }); - handlePopUpClose("caStatus"); - } catch (err) { - console.error(err); - createNotification({ - text: `Failed to ${status === CaStatus.ACTIVE ? "enable" : "disable"} CA`, - type: "error" - }); - } + handlePopUpClose("caStatus"); }; return ( diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateImportModal.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateImportModal.tsx index bb0bbda0b..d0434b79a 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateImportModal.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateImportModal.tsx @@ -71,38 +71,30 @@ export const CertificateImportModal = ({ popUp, handlePopUpToggle }: Props) => { chainPem, collectionId }: FormData) => { - try { - if (!currentProject?.slug) return; + if (!currentProject?.slug) return; - const { serialNumber, certificate, certificateChain, privateKey } = await importCertificate({ - projectSlug: currentProject.slug, + const { serialNumber, certificate, certificateChain, privateKey } = await importCertificate({ + projectSlug: currentProject.slug, - certificatePem, - privateKeyPem, - chainPem, - pkiCollectionId: collectionId - }); + certificatePem, + privateKeyPem, + chainPem, + pkiCollectionId: collectionId + }); - reset(); + reset(); - setCertificateDetails({ - serialNumber, - certificate, - certificateChain, - privateKey - }); + setCertificateDetails({ + serialNumber, + certificate, + certificateChain, + privateKey + }); - createNotification({ - text: "Successfully imported certificate", - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to import certificate", - type: "error" - }); - } + createNotification({ + text: "Successfully imported certificate", + type: "success" + }); }; return ( diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateIssuanceModal.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateIssuanceModal.tsx index dc0dffb0d..537229714 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateIssuanceModal.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateIssuanceModal.tsx @@ -242,84 +242,72 @@ export const CertificateIssuanceModal = ({ popUp, handlePopUpToggle, profileId } keyUsages, extendedKeyUsages }: FormData) => { - try { - if (!currentProject?.slug) { - createNotification({ - text: "Project not found. Please refresh and try again.", - type: "error" - }); - return; - } - - if (!formProfileId) { - createNotification({ - text: "Please select a certificate profile.", - type: "error" - }); - return; - } - - let commonName = ""; - if ( - constraints.shouldShowSubjectSection && - subjectAttributes && - subjectAttributes.length > 0 - ) { - commonName = getAttributeValue(subjectAttributes, "common_name"); - if (!commonName.trim()) { - createNotification({ - text: "Common name is required.", - type: "error" - }); - return; - } - } - - const certificateRequest: any = { - profileId: formProfileId, - projectSlug: currentProject.slug, - ttl, - signatureAlgorithm, - keyAlgorithm, - keyUsages: filterUsages(keyUsages) as CertKeyUsage[], - extendedKeyUsages: filterUsages(extendedKeyUsages) as CertExtendedKeyUsage[] - }; - - if (constraints.shouldShowSubjectSection && commonName) { - certificateRequest.commonName = commonName; - } - if (constraints.shouldShowSanSection && subjectAltNames && subjectAltNames.length > 0) { - const formattedSans = formatSubjectAltNames(subjectAltNames); - if (formattedSans && formattedSans.length > 0) { - certificateRequest.altNames = formattedSans; - } - } - - const { serialNumber, certificate, certificateChain, privateKey } = - await createCertificate(certificateRequest); - - setCertificateDetails({ - serialNumber, - certificate, - certificateChain, - privateKey - }); - + if (!currentProject?.slug) { createNotification({ - text: "Successfully created certificate", - type: "success" - }); - } catch (err) { - console.error("Certificate creation failed:", err); - const errorMessage = - err instanceof Error - ? err.message - : "An unexpected error occurred while creating the certificate"; - createNotification({ - text: `Failed to create certificate: ${errorMessage}`, + text: "Project not found. Please refresh and try again.", type: "error" }); + return; } + + if (!formProfileId) { + createNotification({ + text: "Please select a certificate profile.", + type: "error" + }); + return; + } + + let commonName = ""; + if ( + constraints.shouldShowSubjectSection && + subjectAttributes && + subjectAttributes.length > 0 + ) { + commonName = getAttributeValue(subjectAttributes, "common_name"); + if (!commonName.trim()) { + createNotification({ + text: "Common name is required.", + type: "error" + }); + return; + } + } + + const certificateRequest: any = { + profileId: formProfileId, + projectSlug: currentProject.slug, + ttl, + signatureAlgorithm, + keyAlgorithm, + keyUsages: filterUsages(keyUsages) as CertKeyUsage[], + extendedKeyUsages: filterUsages(extendedKeyUsages) as CertExtendedKeyUsage[] + }; + + if (constraints.shouldShowSubjectSection && commonName) { + certificateRequest.commonName = commonName; + } + if (constraints.shouldShowSanSection && subjectAltNames && subjectAltNames.length > 0) { + const formattedSans = formatSubjectAltNames(subjectAltNames); + if (formattedSans && formattedSans.length > 0) { + certificateRequest.altNames = formattedSans; + } + } + + const { serialNumber, certificate, certificateChain, privateKey } = + await createCertificate(certificateRequest); + + setCertificateDetails({ + serialNumber, + certificate, + certificateChain, + privateKey + }); + + createNotification({ + text: "Successfully created certificate", + type: "success" + }); }, [ currentProject?.slug, diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateManageRenewalModal.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateManageRenewalModal.tsx index d6199678a..96eb2654a 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateManageRenewalModal.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateManageRenewalModal.tsx @@ -163,38 +163,28 @@ export const CertificateManageRenewalModal = ({ popUp, handlePopUpToggle }: Prop }, [popUp.manageRenewal.isOpen, defaultRenewalDays, reset]); const onUpdateRenewal = async (data: FormData) => { - try { - if (!currentProject?.slug) { - createNotification({ - text: "Unable to update auto-renewal: Project not found. Please refresh the page and try again.", - type: "error" - }); - return; - } - - await updateRenewalConfig({ - certificateId: certificateData.certificateId, - renewBeforeDays: data.renewBeforeDays, - projectSlug: currentProject.slug - }); - + if (!currentProject?.slug) { createNotification({ - text: isAutoRenewalEnabled - ? "Auto-renewal configuration updated successfully" - : "Auto-renewal enabled successfully", - type: "success" - }); - - handlePopUpToggle("manageRenewal", false); - } catch (err) { - console.error(err); - createNotification({ - text: isAutoRenewalEnabled - ? "Failed to update auto-renewal configuration. Please check your inputs and try again." - : "Failed to enable auto-renewal. Please check your inputs and try again.", + text: "Unable to update auto-renewal: Project not found. Please refresh the page and try again.", type: "error" }); + return; } + + await updateRenewalConfig({ + certificateId: certificateData.certificateId, + renewBeforeDays: data.renewBeforeDays, + projectSlug: currentProject.slug + }); + + createNotification({ + text: isAutoRenewalEnabled + ? "Auto-renewal configuration updated successfully" + : "Auto-renewal enabled successfully", + type: "success" + }); + + handlePopUpToggle("manageRenewal", false); }; const getModalTitle = () => { diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateModal.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateModal.tsx index 22718222a..f56f0fde8 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateModal.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateModal.tsx @@ -186,45 +186,37 @@ export const CertificateModal = ({ popUp, handlePopUpToggle }: Props) => { keyUsages, extendedKeyUsages }: FormData) => { - try { - if (!currentProject?.slug) return; + if (!currentProject?.slug) return; - const { serialNumber, certificate, certificateChain, privateKey } = await createCertificate({ - caId: !selectedCertTemplate ? caId : undefined, - certificateTemplateId: selectedCertTemplate ? selectedCertTemplateId : undefined, - projectSlug: currentProject.slug, - pkiCollectionId: collectionId, - commonName, - subjectAltNames, - ttl, - keyUsages: Object.entries(keyUsages) - .filter(([, value]) => value) - .map(([key]) => key as CertKeyUsage), - extendedKeyUsages: Object.entries(extendedKeyUsages) - .filter(([, value]) => value) - .map(([key]) => key as CertExtendedKeyUsage) - }); + const { serialNumber, certificate, certificateChain, privateKey } = await createCertificate({ + caId: !selectedCertTemplate ? caId : undefined, + certificateTemplateId: selectedCertTemplate ? selectedCertTemplateId : undefined, + projectSlug: currentProject.slug, + pkiCollectionId: collectionId, + commonName, + subjectAltNames, + ttl, + keyUsages: Object.entries(keyUsages) + .filter(([, value]) => value) + .map(([key]) => key as CertKeyUsage), + extendedKeyUsages: Object.entries(extendedKeyUsages) + .filter(([, value]) => value) + .map(([key]) => key as CertExtendedKeyUsage) + }); - reset(); + reset(); - setCertificateDetails({ - serialNumber, - certificate, - certificateChain, - privateKey - }); + setCertificateDetails({ + serialNumber, + certificate, + certificateChain, + privateKey + }); - createNotification({ - text: "Successfully created certificate", - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to create certificate", - type: "error" - }); - } + createNotification({ + text: "Successfully created certificate", + type: "success" + }); }; useEffect(() => { diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateRenewalConfigModal.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateRenewalConfigModal.tsx index c952f1e54..039151866 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateRenewalConfigModal.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateRenewalConfigModal.tsx @@ -61,34 +61,26 @@ export const CertificateRenewalConfigModal = ({ popUp, handlePopUpToggle }: Prop const renewBeforeDays = watch("renewBeforeDays"); const onSubmit = async (data: FormData) => { - try { - if (!currentProject?.slug) { - createNotification({ - text: "Project not found", - type: "error" - }); - return; - } - - await updateRenewalConfig({ - certificateId: certificateData.certificateId, - renewBeforeDays: data.renewBeforeDays, - projectSlug: currentProject.slug - }); - + if (!currentProject?.slug) { createNotification({ - text: "Successfully updated auto-renewal configuration", - type: "success" - }); - - handlePopUpToggle("configureRenewal", false); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to update auto-renewal configuration", + text: "Project not found", type: "error" }); + return; } + + await updateRenewalConfig({ + certificateId: certificateData.certificateId, + renewBeforeDays: data.renewBeforeDays, + projectSlug: currentProject.slug + }); + + createNotification({ + text: "Successfully updated auto-renewal configuration", + type: "success" + }); + + handlePopUpToggle("configureRenewal", false); }; return ( diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateRenewalDisableModal.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateRenewalDisableModal.tsx index 613080cd7..e44d7e774 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateRenewalDisableModal.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateRenewalDisableModal.tsx @@ -19,34 +19,26 @@ export const CertificateRenewalDisableModal = ({ popUp, handlePopUpToggle }: Pro }; const onDisableConfirm = async () => { - try { - if (!currentProject?.slug) { - createNotification({ - text: "Project not found", - type: "error" - }); - return; - } - - await updateRenewalConfig({ - certificateId: certificateData.certificateId, - projectSlug: currentProject.slug, - enableAutoRenewal: false - }); - + if (!currentProject?.slug) { createNotification({ - text: "Successfully disabled auto-renewal", - type: "success" - }); - - handlePopUpToggle("disableRenewal", false); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to disable auto-renewal", + text: "Project not found", type: "error" }); + return; } + + await updateRenewalConfig({ + certificateId: certificateData.certificateId, + projectSlug: currentProject.slug, + enableAutoRenewal: false + }); + + createNotification({ + text: "Successfully disabled auto-renewal", + type: "success" + }); + + handlePopUpToggle("disableRenewal", false); }; return ( diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateRenewalModal.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateRenewalModal.tsx index 0e2b1c17d..87906e5a5 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateRenewalModal.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateRenewalModal.tsx @@ -18,22 +18,18 @@ export const CertificateRenewalModal = ({ popUp, handlePopUpToggle }: Props) => const { mutateAsync: renewCertificate, isPending: isRenewing } = useRenewCertificate(); const onRenewConfirm = async () => { - try { - const { certificateId } = popUp.renewCertificate.data as { certificateId: string }; + const { certificateId } = popUp.renewCertificate.data as { certificateId: string }; - await renewCertificate({ - certificateId - }); + await renewCertificate({ + certificateId + }); - createNotification({ - text: "Certificate renewed successfully", - type: "success" - }); + createNotification({ + text: "Certificate renewed successfully", + type: "success" + }); - handlePopUpToggle("renewCertificate", false); - } catch (err) { - console.error(err); - } + handlePopUpToggle("renewCertificate", false); }; const certificateData = popUp.renewCertificate.data as { diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateRevocationModal.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateRevocationModal.tsx index 1d1539296..d9a564fb1 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateRevocationModal.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateRevocationModal.tsx @@ -48,31 +48,23 @@ export const CertificateRevocationModal = ({ popUp, handlePopUpToggle }: Props) }); const onFormSubmit = async ({ revocationReason }: FormData) => { - try { - if (!currentProject?.slug) return; + if (!currentProject?.slug) return; - const { serialNumber } = popUp.revokeCertificate.data as { serialNumber: string }; + const { serialNumber } = popUp.revokeCertificate.data as { serialNumber: string }; - await revokeCertificate({ - projectSlug: currentProject.slug, - serialNumber, - revocationReason - }); + await revokeCertificate({ + projectSlug: currentProject.slug, + serialNumber, + revocationReason + }); - reset(); - handlePopUpToggle("revokeCertificate", false); + reset(); + handlePopUpToggle("revokeCertificate", false); - createNotification({ - text: "Successfully revoked certificate", - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to revoke certificate", - type: "error" - }); - } + createNotification({ + text: "Successfully revoked certificate", + type: "success" + }); }; return ( diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplateModal.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplateModal.tsx index 9d5d9355f..66e9ec57a 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplateModal.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplateModal.tsx @@ -159,61 +159,53 @@ export const CertificateTemplateModal = ({ popUp, handlePopUpToggle, caId }: Pro return; } - try { - if (certTemplate) { - await updateCertTemplate({ - id: certTemplate.id, - projectId: currentProject.id, - pkiCollectionId: collectionId, - caId, - name, - commonName, - subjectAlternativeName, - ttl, - keyUsages: Object.entries(keyUsages) - .filter(([, value]) => value) - .map(([key]) => key as CertKeyUsage), - extendedKeyUsages: Object.entries(extendedKeyUsages) - .filter(([, value]) => value) - .map(([key]) => key as CertExtendedKeyUsage) - }); + if (certTemplate) { + await updateCertTemplate({ + id: certTemplate.id, + projectId: currentProject.id, + pkiCollectionId: collectionId, + caId, + name, + commonName, + subjectAlternativeName, + ttl, + keyUsages: Object.entries(keyUsages) + .filter(([, value]) => value) + .map(([key]) => key as CertKeyUsage), + extendedKeyUsages: Object.entries(extendedKeyUsages) + .filter(([, value]) => value) + .map(([key]) => key as CertExtendedKeyUsage) + }); - createNotification({ - text: "Successfully updated certificate template", - type: "success" - }); - } else { - await createCertTemplate({ - projectId: currentProject.id, - pkiCollectionId: collectionId, - caId, - name, - commonName, - subjectAlternativeName, - ttl, - keyUsages: Object.entries(keyUsages) - .filter(([, value]) => value) - .map(([key]) => key as CertKeyUsage), - extendedKeyUsages: Object.entries(extendedKeyUsages) - .filter(([, value]) => value) - .map(([key]) => key as CertExtendedKeyUsage) - }); - - createNotification({ - text: "Successfully created certificate template", - type: "success" - }); - } - - reset(); - handlePopUpToggle("certificateTemplate", false); - } catch (err) { - console.error(err); createNotification({ - text: "Failed to save changes", - type: "error" + text: "Successfully updated certificate template", + type: "success" + }); + } else { + await createCertTemplate({ + projectId: currentProject.id, + pkiCollectionId: collectionId, + caId, + name, + commonName, + subjectAlternativeName, + ttl, + keyUsages: Object.entries(keyUsages) + .filter(([, value]) => value) + .map(([key]) => key as CertKeyUsage), + extendedKeyUsages: Object.entries(extendedKeyUsages) + .filter(([, value]) => value) + .map(([key]) => key as CertExtendedKeyUsage) + }); + + createNotification({ + text: "Successfully created certificate template", + type: "success" }); } + + reset(); + handlePopUpToggle("certificateTemplate", false); }; return ( diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplatesSection.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplatesSection.tsx index 629553200..ce55c7e80 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplatesSection.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplatesSection.tsx @@ -41,25 +41,17 @@ export const CertificateTemplatesSection = ({ caId }: Props) => { return; } - try { - await deleteCertTemplate({ - id, - projectId: currentProject.id - }); + await deleteCertTemplate({ + id, + projectId: currentProject.id + }); - createNotification({ - text: "Successfully deleted certificate template", - type: "success" - }); + createNotification({ + text: "Successfully deleted certificate template", + type: "success" + }); - handlePopUpClose("deleteCertificateTemplate"); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to delete certificate template", - type: "error" - }); - } + handlePopUpClose("deleteCertificateTemplate"); }; return ( diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesSection.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesSection.tsx index 4102d8ea5..0252b1238 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesSection.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesSection.tsx @@ -41,24 +41,16 @@ export const CertificatesSection = () => { ] as const); const onRemoveCertificateSubmit = async (serialNumber: string) => { - try { - if (!currentProject?.slug) return; + if (!currentProject?.slug) return; - await deleteCert({ serialNumber, projectSlug: currentProject.slug }); + await deleteCert({ serialNumber, projectSlug: currentProject.slug }); - createNotification({ - text: "Successfully deleted certificate", - type: "success" - }); + createNotification({ + text: "Successfully deleted certificate", + type: "success" + }); - handlePopUpClose("deleteCertificate"); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to delete certificate", - type: "error" - }); - } + handlePopUpClose("deleteCertificate"); }; return ( diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx index 500286d67..77f287ac5 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx @@ -200,32 +200,24 @@ export const CertificatesTable = ({ handlePopUpOpen }: Props) => { }, [caData]); const handleDisableAutoRenewal = async (certificateId: string, commonName: string) => { - try { - if (!currentProject?.slug) { - createNotification({ - text: "Unable to disable auto-renewal: Project not found. Please refresh the page and try again.", - type: "error" - }); - return; - } - - await updateRenewalConfig({ - certificateId, - projectSlug: currentProject.slug, - enableAutoRenewal: false - }); - + if (!currentProject?.slug) { createNotification({ - text: `Auto-renewal disabled for ${commonName}`, - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to disable auto-renewal. Please try again or contact support if the issue persists.", + text: "Unable to disable auto-renewal: Project not found. Please refresh the page and try again.", type: "error" }); + return; } + + await updateRenewalConfig({ + certificateId, + projectSlug: currentProject.slug, + enableAutoRenewal: false + }); + + createNotification({ + text: `Auto-renewal disabled for ${commonName}`, + type: "success" + }); }; return ( diff --git a/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncTable/PkiSyncsTable.tsx b/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncTable/PkiSyncsTable.tsx index ca4aa7473..f997c350d 100644 --- a/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncTable/PkiSyncsTable.tsx +++ b/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncTable/PkiSyncsTable.tsx @@ -226,46 +226,32 @@ export const PkiSyncsTable = ({ pkiSyncs }: Props) => { const isAutoSyncEnabled = !pkiSync.isAutoSyncEnabled; - try { - await updateSync.mutateAsync({ - syncId: pkiSync.id, - projectId: pkiSync.projectId, - destination: pkiSync.destination, - isAutoSyncEnabled - }); + await updateSync.mutateAsync({ + syncId: pkiSync.id, + projectId: pkiSync.projectId, + destination: pkiSync.destination, + isAutoSyncEnabled + }); - createNotification({ - text: `Successfully ${isAutoSyncEnabled ? "enabled" : "disabled"} auto-sync for ${destinationName} Sync`, - type: "success" - }); - } catch { - createNotification({ - text: `Failed to ${isAutoSyncEnabled ? "enable" : "disable"} auto-sync for ${destinationName} Sync`, - type: "error" - }); - } + createNotification({ + text: `Successfully ${isAutoSyncEnabled ? "enabled" : "disabled"} auto-sync for ${destinationName} Sync`, + type: "success" + }); }; const handleTriggerSync = async (pkiSync: TPkiSync) => { const destinationName = PKI_SYNC_MAP[pkiSync.destination].name; - try { - await triggerSync.mutateAsync({ - syncId: pkiSync.id, - destination: pkiSync.destination, - projectId: pkiSync.projectId - }); + await triggerSync.mutateAsync({ + syncId: pkiSync.id, + destination: pkiSync.destination, + projectId: pkiSync.projectId + }); - createNotification({ - text: `Successfully triggered ${destinationName} Sync`, - type: "success" - }); - } catch { - createNotification({ - text: `Failed to trigger ${destinationName} Sync`, - type: "error" - }); - } + createNotification({ + text: `Successfully triggered ${destinationName} Sync`, + type: "success" + }); }; return ( diff --git a/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/PkiCollectionDetailsByIDPage.tsx b/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/PkiCollectionDetailsByIDPage.tsx index b8235f488..064f8f7a2 100644 --- a/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/PkiCollectionDetailsByIDPage.tsx +++ b/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/PkiCollectionDetailsByIDPage.tsx @@ -45,31 +45,24 @@ export const PkiCollectionPage = () => { ] as const); const onDeletePkiCollectionSubmit = async (collectionIdToDelete: string) => { - try { - if (!projectId) return; + if (!projectId) return; - await deletePkiCollection({ - projectId, - collectionId: collectionIdToDelete - }); + await deletePkiCollection({ + projectId, + collectionId: collectionIdToDelete + }); - createNotification({ - text: "Successfully deleted PKI collection", - type: "success" - }); - handlePopUpClose("deletePkiCollection"); - navigate({ - to: "/projects/cert-management/$projectId/certificates", - params: { - projectId - } - }); - } catch { - createNotification({ - text: "Failed to delete PKI collection", - type: "error" - }); - } + createNotification({ + text: "Successfully deleted PKI collection", + type: "success" + }); + handlePopUpClose("deletePkiCollection"); + navigate({ + to: "/projects/cert-management/$projectId/certificates", + params: { + projectId + } + }); }; return ( diff --git a/frontend/src/pages/cert-manager/PkiSubscriberDetailsByIDPage/PkiSubscriberDetailsByIDPage.tsx b/frontend/src/pages/cert-manager/PkiSubscriberDetailsByIDPage/PkiSubscriberDetailsByIDPage.tsx index 1f723b395..572ee998e 100644 --- a/frontend/src/pages/cert-manager/PkiSubscriberDetailsByIDPage/PkiSubscriberDetailsByIDPage.tsx +++ b/frontend/src/pages/cert-manager/PkiSubscriberDetailsByIDPage/PkiSubscriberDetailsByIDPage.tsx @@ -51,30 +51,22 @@ const Page = () => { ] as const); const onRemoveSubscriberSubmit = async (subscriberNameToDelete: string) => { - try { - if (!projectId) return; + if (!projectId) return; - await deletePkiSubscriber({ subscriberName: subscriberNameToDelete, projectId }); + await deletePkiSubscriber({ subscriberName: subscriberNameToDelete, projectId }); - createNotification({ - text: "Successfully deleted subscriber", - type: "success" - }); + createNotification({ + text: "Successfully deleted subscriber", + type: "success" + }); - handlePopUpClose("deletePkiSubscriber"); - navigate({ - to: "/projects/cert-management/$projectId/subscribers", - params: { - projectId - } - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to delete subscriber", - type: "error" - }); - } + handlePopUpClose("deletePkiSubscriber"); + navigate({ + to: "/projects/cert-management/$projectId/subscribers", + params: { + projectId + } + }); }; return ( diff --git a/frontend/src/pages/cert-manager/PkiSubscriberDetailsByIDPage/components/PkiSubscriberDetailsSection.tsx b/frontend/src/pages/cert-manager/PkiSubscriberDetailsByIDPage/components/PkiSubscriberDetailsSection.tsx index f9c94740a..5da5be55a 100644 --- a/frontend/src/pages/cert-manager/PkiSubscriberDetailsByIDPage/components/PkiSubscriberDetailsSection.tsx +++ b/frontend/src/pages/cert-manager/PkiSubscriberDetailsByIDPage/components/PkiSubscriberDetailsSection.tsx @@ -70,36 +70,28 @@ export const PkiSubscriberDetailsSection = ({ subscriberName, handlePopUpOpen }: useOrderPkiSubscriberCert(); const onIssuePkiSubscriberCert = async () => { - try { - if (pkiSubscriber?.supportsImmediateCertIssuance) { - const response = await issuePkiSubscriberCert({ subscriberName, projectId }); + if (pkiSubscriber?.supportsImmediateCertIssuance) { + const response = await issuePkiSubscriberCert({ subscriberName, projectId }); - setCertificateDetails({ - serialNumber: response.serialNumber, - certificate: response.certificate, - certificateChain: response.certificateChain, - privateKey: response.privateKey - }); + setCertificateDetails({ + serialNumber: response.serialNumber, + certificate: response.certificate, + certificateChain: response.certificateChain, + privateKey: response.privateKey + }); - setIsModalOpen(true); + setIsModalOpen(true); - createNotification({ - text: "Successfully issued certificate", - type: "success" - }); - } else { - await orderPkiSubscriberCert({ subscriberName, projectId }); - - createNotification({ - text: "Successfully ordered certificate. It will be issued after CA processing which could take a few minutes.", - type: "info" - }); - } - } catch (err) { - console.error(err); createNotification({ - text: "Failed to issue certificate", - type: "error" + text: "Successfully issued certificate", + type: "success" + }); + } else { + await orderPkiSubscriberCert({ subscriberName, projectId }); + + createNotification({ + text: "Successfully ordered certificate. It will be issued after CA processing which could take a few minutes.", + type: "info" }); } }; diff --git a/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberModal.tsx b/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberModal.tsx index 4bc427e48..15c016587 100644 --- a/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberModal.tsx +++ b/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberModal.tsx @@ -276,117 +276,109 @@ export const PkiSubscriberModal = ({ popUp, handlePopUpToggle }: Props) => { locality, emailAddress }: FormData) => { - try { - if (!projectId) return; - - if (!caId) { - createNotification({ - text: "Please select an Issuing CA", - type: "error" - }); - return; - } - - // Check if there is already a different subscriber with the same name - const existingNames = - subscribers?.filter((s) => s.id !== pkiSubscriber?.id).map((s) => s.name) || []; - - if (existingNames.includes(name.trim())) { - createNotification({ - text: "A subscriber with this name already exists.", - type: "error" - }); - return; - } - - // Validate Azure template for Azure ADCS CA - if (selectedCa?.type === CaType.AZURE_AD_CS && !azureTemplateType) { - createNotification({ - text: "Please select an Azure certificate template", - type: "error" - }); - return; - } - - const keyUsagesList = - selectedCa?.type === CaType.AZURE_AD_CS - ? [] - : Object.entries(keyUsages) - .filter(([, value]) => value) - .map(([key]) => key as CertKeyUsage); - - const extendedKeyUsagesList = - selectedCa?.type === CaType.AZURE_AD_CS - ? [] - : Object.entries(extendedKeyUsages) - .filter(([, value]) => value) - .map(([key]) => key as CertExtendedKeyUsage); - - const subjectAlternativeNamesList = subjectAlternativeNames - .split(",") - .map((san) => san.trim()) - .filter(Boolean); - - const autoRenewalPeriodInDays = enableAutoRenewal - ? convertTimeUnitValueToDays(renewalUnit, renewalBefore) - : undefined; - - // Build properties object - const properties = { - ...(selectedCa?.type === CaType.AZURE_AD_CS && azureTemplateType && { azureTemplateType }), - ...(organization && { organization }), - ...(organizationalUnit && { organizationalUnit }), - ...(country && { country }), - ...(state && { state }), - ...(locality && { locality }), - ...(emailAddress && { emailAddress }) - }; - - if (pkiSubscriber) { - await updateMutateAsync({ - subscriberName: pkiSubscriber.name, - projectId, - name, - caId, - commonName, - subjectAlternativeNames: subjectAlternativeNamesList, - ttl, - keyUsages: keyUsagesList, - extendedKeyUsages: extendedKeyUsagesList, - enableAutoRenewal, - autoRenewalPeriodInDays, - properties: Object.keys(properties).length > 0 ? properties : undefined - }); - } else { - await createMutateAsync({ - projectId, - name, - caId, - commonName, - subjectAlternativeNames: subjectAlternativeNamesList, - ttl, - keyUsages: keyUsagesList, - extendedKeyUsages: extendedKeyUsagesList, - enableAutoRenewal, - autoRenewalPeriodInDays, - properties: Object.keys(properties).length > 0 ? properties : undefined - }); - } - - reset(); - handlePopUpToggle("pkiSubscriber", false); + if (!projectId) return; + if (!caId) { createNotification({ - text: `Successfully ${pkiSubscriber ? "updated" : "added"} PKI subscriber`, - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: `Failed to ${pkiSubscriber ? "update" : "add"} PKI subscriber`, + text: "Please select an Issuing CA", type: "error" }); + return; } + + // Check if there is already a different subscriber with the same name + const existingNames = + subscribers?.filter((s) => s.id !== pkiSubscriber?.id).map((s) => s.name) || []; + + if (existingNames.includes(name.trim())) { + createNotification({ + text: "A subscriber with this name already exists.", + type: "error" + }); + return; + } + + // Validate Azure template for Azure ADCS CA + if (selectedCa?.type === CaType.AZURE_AD_CS && !azureTemplateType) { + createNotification({ + text: "Please select an Azure certificate template", + type: "error" + }); + return; + } + + const keyUsagesList = + selectedCa?.type === CaType.AZURE_AD_CS + ? [] + : Object.entries(keyUsages) + .filter(([, value]) => value) + .map(([key]) => key as CertKeyUsage); + + const extendedKeyUsagesList = + selectedCa?.type === CaType.AZURE_AD_CS + ? [] + : Object.entries(extendedKeyUsages) + .filter(([, value]) => value) + .map(([key]) => key as CertExtendedKeyUsage); + + const subjectAlternativeNamesList = subjectAlternativeNames + .split(",") + .map((san) => san.trim()) + .filter(Boolean); + + const autoRenewalPeriodInDays = enableAutoRenewal + ? convertTimeUnitValueToDays(renewalUnit, renewalBefore) + : undefined; + + // Build properties object + const properties = { + ...(selectedCa?.type === CaType.AZURE_AD_CS && azureTemplateType && { azureTemplateType }), + ...(organization && { organization }), + ...(organizationalUnit && { organizationalUnit }), + ...(country && { country }), + ...(state && { state }), + ...(locality && { locality }), + ...(emailAddress && { emailAddress }) + }; + + if (pkiSubscriber) { + await updateMutateAsync({ + subscriberName: pkiSubscriber.name, + projectId, + name, + caId, + commonName, + subjectAlternativeNames: subjectAlternativeNamesList, + ttl, + keyUsages: keyUsagesList, + extendedKeyUsages: extendedKeyUsagesList, + enableAutoRenewal, + autoRenewalPeriodInDays, + properties: Object.keys(properties).length > 0 ? properties : undefined + }); + } else { + await createMutateAsync({ + projectId, + name, + caId, + commonName, + subjectAlternativeNames: subjectAlternativeNamesList, + ttl, + keyUsages: keyUsagesList, + extendedKeyUsages: extendedKeyUsagesList, + enableAutoRenewal, + autoRenewalPeriodInDays, + properties: Object.keys(properties).length > 0 ? properties : undefined + }); + } + + reset(); + handlePopUpToggle("pkiSubscriber", false); + + createNotification({ + text: `Successfully ${pkiSubscriber ? "updated" : "added"} PKI subscriber`, + type: "success" + }); }; return ( diff --git a/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberSection.tsx b/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberSection.tsx index cb4b9ef39..e902711ce 100644 --- a/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberSection.tsx +++ b/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberSection.tsx @@ -33,22 +33,14 @@ export const PkiSubscriberSection = () => { ] as const); const onRemovePkiSubscriberSubmit = async (subscriberName: string) => { - try { - const subscriber = await deletePkiSubscriber({ subscriberName, projectId }); + const subscriber = await deletePkiSubscriber({ subscriberName, projectId }); - createNotification({ - text: `Successfully deleted PKI subscriber: ${subscriber.name}`, - type: "success" - }); + createNotification({ + text: `Successfully deleted PKI subscriber: ${subscriber.name}`, + type: "success" + }); - handlePopUpClose("deletePkiSubscriber"); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to delete PKI subscriber", - type: "error" - }); - } + handlePopUpClose("deletePkiSubscriber"); }; const onUpdatePkiSubscriberStatus = async ({ @@ -58,24 +50,16 @@ export const PkiSubscriberSection = () => { subscriberName: string; status: PkiSubscriberStatus; }) => { - try { - if (!currentProject?.slug) return; + if (!currentProject?.slug) return; - await updatePkiSubscriber({ subscriberName, projectId, status }); + await updatePkiSubscriber({ subscriberName, projectId, status }); - createNotification({ - text: `Successfully ${status === PkiSubscriberStatus.ACTIVE ? "enabled" : "disabled"} subscriber`, - type: "success" - }); + createNotification({ + text: `Successfully ${status === PkiSubscriberStatus.ACTIVE ? "enabled" : "disabled"} subscriber`, + type: "success" + }); - handlePopUpClose("pkiSubscriberStatus"); - } catch (err) { - console.error(err); - createNotification({ - text: `Failed to ${status === PkiSubscriberStatus.ACTIVE ? "enable" : "disable"} subscriber`, - type: "error" - }); - } + handlePopUpClose("pkiSubscriberStatus"); }; const subscriberStatusData = popUp?.pkiSubscriberStatus?.data as { diff --git a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncActionTriggers.tsx b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncActionTriggers.tsx index bb8e9d02a..5171b4d95 100644 --- a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncActionTriggers.tsx +++ b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncActionTriggers.tsx @@ -86,44 +86,28 @@ export const PkiSyncActionTriggers = ({ pkiSync }: Props) => { }, [pkiSync.id, setIsIdCopied]); const handleTriggerSync = useCallback(async () => { - try { - await triggerSyncMutation.mutateAsync({ - syncId: id, - destination, - projectId - }); - createNotification({ - text: "PKI sync job queued successfully", - type: "success" - }); - } catch (error) { - console.error("Failed to trigger sync:", error); - createNotification({ - text: "Failed to trigger PKI sync", - type: "error" - }); - } + await triggerSyncMutation.mutateAsync({ + syncId: id, + destination, + projectId + }); + createNotification({ + text: "PKI sync job queued successfully", + type: "success" + }); }, [triggerSyncMutation, id, destination, projectId]); const handleToggleAutoSync = useCallback(async () => { - try { - await updatePkiSyncMutation.mutateAsync({ - syncId: id, - projectId, - destination, - isAutoSyncEnabled: !pkiSync.isAutoSyncEnabled - }); - createNotification({ - text: `Auto-sync ${pkiSync.isAutoSyncEnabled ? "disabled" : "enabled"} successfully`, - type: "success" - }); - } catch (error) { - console.error("Failed to toggle auto-sync:", error); - createNotification({ - text: "Failed to toggle auto-sync", - type: "error" - }); - } + await updatePkiSyncMutation.mutateAsync({ + syncId: id, + projectId, + destination, + isAutoSyncEnabled: !pkiSync.isAutoSyncEnabled + }); + createNotification({ + text: `Auto-sync ${pkiSync.isAutoSyncEnabled ? "disabled" : "enabled"} successfully`, + type: "success" + }); }, [updatePkiSyncMutation, id, projectId, pkiSync.isAutoSyncEnabled]); const permissionSubject = subject(ProjectPermissionSub.PkiSyncs, { diff --git a/frontend/src/pages/cert-manager/PkiTemplateListPage/PkiTemplateListPage.tsx b/frontend/src/pages/cert-manager/PkiTemplateListPage/PkiTemplateListPage.tsx index b395d0ec2..9ad290062 100644 --- a/frontend/src/pages/cert-manager/PkiTemplateListPage/PkiTemplateListPage.tsx +++ b/frontend/src/pages/cert-manager/PkiTemplateListPage/PkiTemplateListPage.tsx @@ -78,25 +78,17 @@ export const PkiTemplateListPage = () => { const deleteCertTemplate = useDeleteCertTemplateV2(); const onRemovePkiSubscriberSubmit = async () => { - try { - const pkiTemplate = await deleteCertTemplate.mutateAsync({ - projectId: currentProject.id, - templateName: popUp?.deleteTemplate?.data?.name - }); + const pkiTemplate = await deleteCertTemplate.mutateAsync({ + projectId: currentProject.id, + templateName: popUp?.deleteTemplate?.data?.name + }); - createNotification({ - text: `Successfully deleted PKI template: ${pkiTemplate.name}`, - type: "success" - }); + createNotification({ + text: `Successfully deleted PKI template: ${pkiTemplate.name}`, + type: "success" + }); - handlePopUpClose("deleteTemplate"); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to delete PKI subscriber", - type: "error" - }); - } + handlePopUpClose("deleteTemplate"); }; return ( diff --git a/frontend/src/pages/cert-manager/PkiTemplateListPage/components/PkiTemplateForm.tsx b/frontend/src/pages/cert-manager/PkiTemplateListPage/components/PkiTemplateForm.tsx index 093a2fcc1..00aa192a6 100644 --- a/frontend/src/pages/cert-manager/PkiTemplateListPage/components/PkiTemplateForm.tsx +++ b/frontend/src/pages/cert-manager/PkiTemplateListPage/components/PkiTemplateForm.tsx @@ -128,59 +128,51 @@ export const PkiTemplateForm = ({ certTemplate, handlePopUpToggle }: Props) => { return; } - try { - if (certTemplate) { - await updateCertTemplate({ - templateName: certTemplate.name, - projectId: currentProject.id, - caName: ca.name, - name, - commonName, - subjectAlternativeName, - ttl, - keyUsages: Object.entries(keyUsages) - .filter(([, value]) => value) - .map(([key]) => key as CertKeyUsage), - extendedKeyUsages: Object.entries(extendedKeyUsages) - .filter(([, value]) => value) - .map(([key]) => key as CertExtendedKeyUsage) - }); + if (certTemplate) { + await updateCertTemplate({ + templateName: certTemplate.name, + projectId: currentProject.id, + caName: ca.name, + name, + commonName, + subjectAlternativeName, + ttl, + keyUsages: Object.entries(keyUsages) + .filter(([, value]) => value) + .map(([key]) => key as CertKeyUsage), + extendedKeyUsages: Object.entries(extendedKeyUsages) + .filter(([, value]) => value) + .map(([key]) => key as CertExtendedKeyUsage) + }); - createNotification({ - text: "Successfully updated certificate template", - type: "success" - }); - } else { - await createCertTemplate({ - projectId: currentProject.id, - caName: ca.name, - name, - commonName, - subjectAlternativeName, - ttl, - keyUsages: Object.entries(keyUsages) - .filter(([, value]) => value) - .map(([key]) => key as CertKeyUsage), - extendedKeyUsages: Object.entries(extendedKeyUsages) - .filter(([, value]) => value) - .map(([key]) => key as CertExtendedKeyUsage) - }); - - createNotification({ - text: "Successfully created certificate template", - type: "success" - }); - } - - reset(); - handlePopUpToggle(false); - } catch (err) { - console.error(err); createNotification({ - text: "Failed to save changes", - type: "error" + text: "Successfully updated certificate template", + type: "success" + }); + } else { + await createCertTemplate({ + projectId: currentProject.id, + caName: ca.name, + name, + commonName, + subjectAlternativeName, + ttl, + keyUsages: Object.entries(keyUsages) + .filter(([, value]) => value) + .map(([key]) => key as CertKeyUsage), + extendedKeyUsages: Object.entries(extendedKeyUsages) + .filter(([, value]) => value) + .map(([key]) => key as CertExtendedKeyUsage) + }); + + createNotification({ + text: "Successfully created certificate template", + type: "success" }); } + + reset(); + handlePopUpToggle(false); }; return ( diff --git a/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateProfilesTab/CertificateProfilesTab.tsx b/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateProfilesTab/CertificateProfilesTab.tsx index d034aeda1..7938d04f5 100644 --- a/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateProfilesTab/CertificateProfilesTab.tsx +++ b/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateProfilesTab/CertificateProfilesTab.tsx @@ -51,22 +51,15 @@ export const CertificateProfilesTab = () => { const handleDeleteConfirm = async () => { if (!selectedProfile) return; - try { - await deleteProfile.mutateAsync({ - profileId: selectedProfile.id - }); - setIsDeleteModalOpen(false); - setSelectedProfile(null); - createNotification({ - text: `Certificate profile "${selectedProfile.slug}" deleted successfully`, - type: "success" - }); - } catch (error) { - console.error( - `Failed to delete profile "${selectedProfile.slug}" (ID: ${selectedProfile.id}):`, - error - ); - } + await deleteProfile.mutateAsync({ + profileId: selectedProfile.id + }); + setIsDeleteModalOpen(false); + setSelectedProfile(null); + createNotification({ + text: `Certificate profile "${selectedProfile.slug}" deleted successfully`, + type: "success" + }); }; return ( diff --git a/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateProfilesTab/CreateProfileModal.tsx b/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateProfilesTab/CreateProfileModal.tsx index ea82fd843..56e72ca2b 100644 --- a/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateProfilesTab/CreateProfileModal.tsx +++ b/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateProfilesTab/CreateProfileModal.tsx @@ -236,64 +236,56 @@ export const CreateProfileModal = ({ isOpen, onClose, profile, mode = "create" } }, [isEdit, profile, reset]); const onFormSubmit = async (data: FormData) => { - try { - if (!currentProject?.id && !isEdit) return; + if (!currentProject?.id && !isEdit) return; - if (isEdit) { - const updateData: TUpdateCertificateProfileDTO = { - profileId: profile.id, - slug: data.slug, - description: data.description - }; + if (isEdit) { + const updateData: TUpdateCertificateProfileDTO = { + profileId: profile.id, + slug: data.slug, + description: data.description + }; - if (data.enrollmentType === "est" && data.estConfig) { - updateData.estConfig = data.estConfig; - } else if (data.enrollmentType === "api" && data.apiConfig) { - updateData.apiConfig = data.apiConfig; - } - - await updateProfile.mutateAsync(updateData); - } else { - if (!currentProject?.id) { - throw new Error("Project ID is required for creating a profile"); - } - - const createData: TCreateCertificateProfileDTO = { - projectId: currentProject.id, - slug: data.slug, - description: data.description, - enrollmentType: data.enrollmentType, - caId: data.certificateAuthorityId, - certificateTemplateId: data.certificateTemplateId - }; - - if (data.enrollmentType === "est" && data.estConfig) { - createData.estConfig = { - passphrase: data.estConfig.passphrase, - caChain: data.estConfig.caChain || undefined, - disableBootstrapCaValidation: data.estConfig.disableBootstrapCaValidation - }; - } else if (data.enrollmentType === "api" && data.apiConfig) { - createData.apiConfig = data.apiConfig; - } - - await createProfile.mutateAsync(createData); + if (data.enrollmentType === "est" && data.estConfig) { + updateData.estConfig = data.estConfig; + } else if (data.enrollmentType === "api" && data.apiConfig) { + updateData.apiConfig = data.apiConfig; } - createNotification({ - text: `Certificate profile ${isEdit ? "updated" : "created"} successfully`, - type: "success" - }); + await updateProfile.mutateAsync(updateData); + } else { + if (!currentProject?.id) { + throw new Error("Project ID is required for creating a profile"); + } - reset(); - onClose(); - } catch (error) { - console.error(`Error ${isEdit ? "updating" : "creating"} profile:`, error); - createNotification({ - text: `Failed to ${isEdit ? "update" : "create"} certificate profile`, - type: "error" - }); + const createData: TCreateCertificateProfileDTO = { + projectId: currentProject.id, + slug: data.slug, + description: data.description, + enrollmentType: data.enrollmentType, + caId: data.certificateAuthorityId, + certificateTemplateId: data.certificateTemplateId + }; + + if (data.enrollmentType === "est" && data.estConfig) { + createData.estConfig = { + passphrase: data.estConfig.passphrase, + caChain: data.estConfig.caChain || undefined, + disableBootstrapCaValidation: data.estConfig.disableBootstrapCaValidation + }; + } else if (data.enrollmentType === "api" && data.apiConfig) { + createData.apiConfig = data.apiConfig; + } + + await createProfile.mutateAsync(createData); } + + createNotification({ + text: `Certificate profile ${isEdit ? "updated" : "created"} successfully`, + type: "success" + }); + + reset(); + onClose(); }; return ( diff --git a/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateTemplatesV2Tab/CertificateTemplatesV2Tab.tsx b/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateTemplatesV2Tab/CertificateTemplatesV2Tab.tsx index ae14f2dea..ec660b339 100644 --- a/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateTemplatesV2Tab/CertificateTemplatesV2Tab.tsx +++ b/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateTemplatesV2Tab/CertificateTemplatesV2Tab.tsx @@ -48,23 +48,15 @@ export const CertificateTemplatesV2Tab = () => { const handleDeleteConfirm = async () => { if (!selectedTemplate) return; - try { - await deleteTemplateV2.mutateAsync({ - templateId: selectedTemplate.id - }); - setIsDeleteModalOpen(false); - setSelectedTemplate(null); - createNotification({ - text: `Certificate template "${selectedTemplate.name}" deleted successfully`, - type: "success" - }); - } catch (error) { - console.error("Failed to delete template:", error); - createNotification({ - text: "Failed to delete certificate template", - type: "error" - }); - } + await deleteTemplateV2.mutateAsync({ + templateId: selectedTemplate.id + }); + setIsDeleteModalOpen(false); + setSelectedTemplate(null); + createNotification({ + text: `Certificate template "${selectedTemplate.name}" deleted successfully`, + type: "success" + }); }; return ( diff --git a/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateTemplatesV2Tab/CreateTemplateModal.tsx b/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateTemplatesV2Tab/CreateTemplateModal.tsx index a96beccad..1387171fb 100644 --- a/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateTemplatesV2Tab/CreateTemplateModal.tsx +++ b/frontend/src/pages/cert-manager/PoliciesPage/components/CertificateTemplatesV2Tab/CreateTemplateModal.tsx @@ -407,59 +407,51 @@ export const CreateTemplateModal = ({ isOpen, onClose, template, mode = "create" }; const onFormSubmit = async (data: FormData) => { - try { - if (!currentProject?.id && !isEdit) return; + if (!currentProject?.id && !isEdit) return; - const hasEmptyAttributeValues = data.attributes?.some( - (attr) => !attr.value || attr.value.length === 0 || attr.value.some((v) => !v.trim()) - ); + const hasEmptyAttributeValues = data.attributes?.some( + (attr) => !attr.value || attr.value.length === 0 || attr.value.some((v) => !v.trim()) + ); - const hasEmptySanValues = data.subjectAlternativeNames?.some( - (san) => !san.value || san.value.length === 0 || san.value.some((v) => !v.trim()) - ); - - if (hasEmptyAttributeValues || hasEmptySanValues) { - createNotification({ - text: "All values must be non-empty. Use wildcards (*) if needed.", - type: "error" - }); - return; - } - - const transformedData = transformToApiFormat(data); - - if (isEdit) { - const updateData = { - templateId: template.id, - ...transformedData - }; - await updateTemplate.mutateAsync(updateData); - } else { - if (!currentProject?.id) { - throw new Error("Project ID is required for creating a template"); - } - - const createData = { - projectId: currentProject.id, - ...transformedData - }; - await createTemplate.mutateAsync(createData); - } + const hasEmptySanValues = data.subjectAlternativeNames?.some( + (san) => !san.value || san.value.length === 0 || san.value.some((v) => !v.trim()) + ); + if (hasEmptyAttributeValues || hasEmptySanValues) { createNotification({ - text: `Certificate template ${isEdit ? "updated" : "created"} successfully`, - type: "success" - }); - - reset(); - onClose(); - } catch (error) { - console.error(`Error ${isEdit ? "updating" : "creating"} template:`, error); - createNotification({ - text: `Failed to ${isEdit ? "update" : "create"} certificate template`, + text: "All values must be non-empty. Use wildcards (*) if needed.", type: "error" }); + return; } + + const transformedData = transformToApiFormat(data); + + if (isEdit) { + const updateData = { + templateId: template.id, + ...transformedData + }; + await updateTemplate.mutateAsync(updateData); + } else { + if (!currentProject?.id) { + throw new Error("Project ID is required for creating a template"); + } + + const createData = { + projectId: currentProject.id, + ...transformedData + }; + await createTemplate.mutateAsync(createData); + } + + createNotification({ + text: `Certificate template ${isEdit ? "updated" : "created"} successfully`, + type: "success" + }); + + reset(); + onClose(); }; const addAttribute = () => { diff --git a/frontend/src/pages/kms/KmipPage/components/DeleteKmipClientModal.tsx b/frontend/src/pages/kms/KmipPage/components/DeleteKmipClientModal.tsx index fe9c956ab..2d6accf76 100644 --- a/frontend/src/pages/kms/KmipPage/components/DeleteKmipClientModal.tsx +++ b/frontend/src/pages/kms/KmipPage/components/DeleteKmipClientModal.tsx @@ -17,28 +17,17 @@ export const DeleteKmipClientModal = ({ isOpen, onOpenChange, kmipClient }: Prop const { id, projectId, name } = kmipClient; const handleDeleteKmipClient = async () => { - try { - await deleteKmipClients.mutateAsync({ - id, - projectId - }); + await deleteKmipClients.mutateAsync({ + id, + projectId + }); - createNotification({ - text: "KMIP client successfully deleted", - type: "success" - }); + createNotification({ + text: "KMIP client successfully deleted", + type: "success" + }); - onOpenChange(false); - } catch (err) { - console.error(err); - const error = err as any; - const text = error?.response?.data?.message ?? "Failed to delete KMIP client"; - - createNotification({ - text, - type: "error" - }); - } + onOpenChange(false); }; return ( diff --git a/frontend/src/pages/kms/KmipPage/components/KmipClientModal.tsx b/frontend/src/pages/kms/KmipPage/components/KmipClientModal.tsx index b3f3fb380..f10d077a4 100644 --- a/frontend/src/pages/kms/KmipPage/components/KmipClientModal.tsx +++ b/frontend/src/pages/kms/KmipPage/components/KmipClientModal.tsx @@ -98,20 +98,12 @@ const KmipClientForm = ({ onComplete, kmipClient }: FormProps) => { .map(([key]) => key as KmipPermission) }); - try { - await mutation; - createNotification({ - text: `Successfully ${isUpdate ? "updated" : "added"} KMIP client`, - type: "success" - }); - onComplete(); - } catch (err) { - console.error(err); - createNotification({ - text: `Failed to ${isUpdate ? "update" : "add"} KMIP client`, - type: "error" - }); - } + await mutation; + createNotification({ + text: `Successfully ${isUpdate ? "updated" : "added"} KMIP client`, + type: "success" + }); + onComplete(); }; return ( diff --git a/frontend/src/pages/kms/OverviewPage/components/CmekDecryptModal.tsx b/frontend/src/pages/kms/OverviewPage/components/CmekDecryptModal.tsx index 4c9cf685b..4fd6b3419 100644 --- a/frontend/src/pages/kms/OverviewPage/components/CmekDecryptModal.tsx +++ b/frontend/src/pages/kms/OverviewPage/components/CmekDecryptModal.tsx @@ -52,23 +52,15 @@ const DecryptForm = ({ cmek }: FormProps) => { }); const handleDecryptData = async (formData: FormData) => { - try { - const data = await cmekDecrypt.mutateAsync({ ...formData, keyId: cmek.id }); - createNotification({ - text: "Successfully decrypted data", - type: "success" - }); + const data = await cmekDecrypt.mutateAsync({ ...formData, keyId: cmek.id }); + createNotification({ + text: "Successfully decrypted data", + type: "success" + }); - setPlaintext( - shouldDecode ? Buffer.from(decodeBase64(data.plaintext)).toString("utf8") : data.plaintext - ); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to decrypt data", - type: "error" - }); - } + setPlaintext( + shouldDecode ? Buffer.from(decodeBase64(data.plaintext)).toString("utf8") : data.plaintext + ); }; useEffect(() => { diff --git a/frontend/src/pages/kms/OverviewPage/components/CmekEncryptModal.tsx b/frontend/src/pages/kms/OverviewPage/components/CmekEncryptModal.tsx index 4fb09cf4e..a5bf01d5a 100644 --- a/frontend/src/pages/kms/OverviewPage/components/CmekEncryptModal.tsx +++ b/frontend/src/pages/kms/OverviewPage/components/CmekEncryptModal.tsx @@ -53,19 +53,11 @@ const EncryptForm = ({ cmek }: FormProps) => { }); const handleEncryptData = async (formData: FormData) => { - try { - await cmekEncrypt.mutateAsync({ ...formData, keyId: cmek.id }); - createNotification({ - text: "Successfully encrypted data", - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to encrypt data", - type: "error" - }); - } + await cmekEncrypt.mutateAsync({ ...formData, keyId: cmek.id }); + createNotification({ + text: "Successfully encrypted data", + type: "success" + }); }; const ciphertext = cmekEncrypt.data?.ciphertext; diff --git a/frontend/src/pages/kms/OverviewPage/components/CmekModal.tsx b/frontend/src/pages/kms/OverviewPage/components/CmekModal.tsx index c3cccd678..e79d91e15 100644 --- a/frontend/src/pages/kms/OverviewPage/components/CmekModal.tsx +++ b/frontend/src/pages/kms/OverviewPage/components/CmekModal.tsx @@ -86,20 +86,12 @@ const CmekForm = ({ onComplete, cmek }: FormProps) => { encryptionAlgorithm: encryptionAlgorithm as AsymmetricKeyAlgorithm | SymmetricKeyAlgorithm }); - try { - await mutation; - createNotification({ - text: `Successfully ${isUpdate ? "updated" : "added"} key`, - type: "success" - }); - onComplete(); - } catch (err) { - console.error(err); - createNotification({ - text: `Failed to ${isUpdate ? "update" : "add"} key`, - type: "error" - }); - } + await mutation; + createNotification({ + text: `Successfully ${isUpdate ? "updated" : "added"} key`, + type: "success" + }); + onComplete(); }; const selectedKeyUsage = watch("keyUsage"); diff --git a/frontend/src/pages/kms/OverviewPage/components/CmekSignModal.tsx b/frontend/src/pages/kms/OverviewPage/components/CmekSignModal.tsx index fec66a31f..e52c03dbe 100644 --- a/frontend/src/pages/kms/OverviewPage/components/CmekSignModal.tsx +++ b/frontend/src/pages/kms/OverviewPage/components/CmekSignModal.tsx @@ -59,19 +59,11 @@ const SignForm = ({ cmek }: FormProps) => { }); const handleSignData = async (formData: FormData) => { - try { - await cmekSign.mutateAsync({ ...formData, keyId: cmek.id }); - createNotification({ - text: "Successfully signed data", - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to sign data", - type: "error" - }); - } + await cmekSign.mutateAsync({ ...formData, keyId: cmek.id }); + createNotification({ + text: "Successfully signed data", + type: "success" + }); }; const signature = cmekSign.data?.signature; diff --git a/frontend/src/pages/kms/OverviewPage/components/CmekTable.tsx b/frontend/src/pages/kms/OverviewPage/components/CmekTable.tsx index a6675ea88..c9a0054c5 100644 --- a/frontend/src/pages/kms/OverviewPage/components/CmekTable.tsx +++ b/frontend/src/pages/kms/OverviewPage/components/CmekTable.tsx @@ -152,28 +152,16 @@ export const CmekTable = () => { const updateCmek = useUpdateCmek(); const handleDisableCmek = async ({ id: keyId, isDisabled }: TCmek) => { - try { - await updateCmek.mutateAsync({ - keyId, - projectId, - isDisabled: !isDisabled - }); + await updateCmek.mutateAsync({ + keyId, + projectId, + isDisabled: !isDisabled + }); - createNotification({ - text: `Key successfully ${isDisabled ? "enabled" : "disabled"}`, - type: "success" - }); - } catch (err) { - console.error(err); - const error = err as any; - const text = - error?.response?.data?.message ?? `Failed to ${isDisabled ? "enable" : "disable"} key`; - - createNotification({ - text, - type: "error" - }); - } + createNotification({ + text: `Key successfully ${isDisabled ? "enabled" : "disabled"}`, + type: "success" + }); }; const cannotEditKey = permission.cannot( diff --git a/frontend/src/pages/kms/OverviewPage/components/CmekVerifyModal.tsx b/frontend/src/pages/kms/OverviewPage/components/CmekVerifyModal.tsx index 5c9eac072..d8203e373 100644 --- a/frontend/src/pages/kms/OverviewPage/components/CmekVerifyModal.tsx +++ b/frontend/src/pages/kms/OverviewPage/components/CmekVerifyModal.tsx @@ -69,25 +69,17 @@ const VerifyForm = ({ cmek }: FormProps) => { }); const handleVerifyData = async (formData: FormData) => { - try { - const result = await cmekVerify.mutateAsync({ ...formData, keyId: cmek.id }); + const result = await cmekVerify.mutateAsync({ ...formData, keyId: cmek.id }); - if (result.signatureValid) { - createNotification({ - text: "Successfully verified signature", - type: "success" - }); - } else { - createNotification({ - title: "Signature Verification Failed", - text: "The signature is invalid. The signature was not created using the same signing algorithm and key as the one used to sign the data. The data and signature may have been tampered with.", - type: "error" - }); - } - } catch (err) { - console.error(err); + if (result.signatureValid) { createNotification({ - text: "Failed to sign data", + text: "Successfully verified signature", + type: "success" + }); + } else { + createNotification({ + title: "Signature Verification Failed", + text: "The signature is invalid. The signature was not created using the same signing algorithm and key as the one used to sign the data. The data and signature may have been tampered with.", type: "error" }); } diff --git a/frontend/src/pages/kms/OverviewPage/components/DeleteCmekModal.tsx b/frontend/src/pages/kms/OverviewPage/components/DeleteCmekModal.tsx index 4c5528c39..62389d1ba 100644 --- a/frontend/src/pages/kms/OverviewPage/components/DeleteCmekModal.tsx +++ b/frontend/src/pages/kms/OverviewPage/components/DeleteCmekModal.tsx @@ -16,28 +16,17 @@ export const DeleteCmekModal = ({ isOpen, onOpenChange, cmek }: Props) => { const { id: keyId, projectId, name } = cmek; const handleDeleteCmek = async () => { - try { - await deleteCmek.mutateAsync({ - keyId, - projectId - }); + await deleteCmek.mutateAsync({ + keyId, + projectId + }); - createNotification({ - text: "Key successfully deleted", - type: "success" - }); + createNotification({ + text: "Key successfully deleted", + type: "success" + }); - onOpenChange(false); - } catch (err) { - console.error(err); - const error = err as any; - const text = error?.response?.data?.message ?? "Failed to delete key"; - - createNotification({ - text, - type: "error" - }); - } + onOpenChange(false); }; return ( diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupModal.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupModal.tsx index 908be4935..4b6ea0858 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupModal.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupModal.tsx @@ -74,43 +74,36 @@ export const OrgGroupModal = ({ popUp, handlePopUpClose, handlePopUpToggle }: Pr }, [popUp?.group?.data, roles]); const onGroupModalSubmit = async ({ name, slug, role }: TGroupFormData) => { - try { - if (!currentOrg?.id) return; + if (!currentOrg?.id) return; - const group = popUp?.group?.data as { - groupId: string; - name: string; - slug: string; - }; + const group = popUp?.group?.data as { + groupId: string; + name: string; + slug: string; + }; - if (group) { - await updateMutateAsync({ - id: group.groupId, - name, - slug, - role: role.slug || undefined - }); - } else { - await createMutateAsync({ - name, - slug, - organizationId: currentOrg.id, - role: role.slug || undefined - }); - } - handlePopUpToggle("group", false); - reset(); - - createNotification({ - text: `Successfully ${popUp?.group?.data ? "updated" : "created"} group`, - type: "success" + if (group) { + await updateMutateAsync({ + id: group.groupId, + name, + slug, + role: role.slug || undefined }); - } catch { - createNotification({ - text: `Failed to ${popUp?.group?.data ? "updated" : "created"} group`, - type: "error" + } else { + await createMutateAsync({ + name, + slug, + organizationId: currentOrg.id, + role: role.slug || undefined }); } + handlePopUpToggle("group", false); + reset(); + + createNotification({ + text: `Successfully ${popUp?.group?.data ? "updated" : "created"} group`, + type: "success" + }); }; return ( diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupsSection.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupsSection.tsx index 88cbc17f0..1cf5407d1 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupsSection.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupsSection.tsx @@ -37,21 +37,13 @@ export const OrgGroupsSection = () => { }; const onDeleteGroupSubmit = async ({ name, groupId }: { name: string; groupId: string }) => { - try { - await deleteMutateAsync({ - id: groupId - }); - createNotification({ - text: `Successfully deleted the group named ${name}`, - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: `Failed to delete the group named ${name}`, - type: "error" - }); - } + await deleteMutateAsync({ + id: groupId + }); + createNotification({ + text: `Successfully deleted the group named ${name}`, + type: "success" + }); handlePopUpClose("deleteGroup"); }; diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupsTable.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupsTable.tsx index 61119fce1..cc6d7c7aa 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupsTable.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupsTable.tsx @@ -79,23 +79,15 @@ export const OrgGroupsTable = ({ handlePopUpOpen }: Props) => { const { data: roles } = useGetOrgRoles(orgId); const handleChangeRole = async ({ id, role }: { id: string; role: string }) => { - try { - await updateMutateAsync({ - id, - role - }); + await updateMutateAsync({ + id, + role + }); - createNotification({ - text: "Successfully updated group role", - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to update group role", - type: "error" - }); - } + createNotification({ + text: "Successfully updated group role", + type: "success" + }); }; const { diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentitySection.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentitySection.tsx index 355dec803..b7ebfcdc4 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentitySection.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentitySection.tsx @@ -56,53 +56,31 @@ export const IdentitySection = withPermission( const isEnterprise = subscription?.slug === "enterprise"; const onDeleteIdentitySubmit = async (identityId: string) => { - try { - await deleteMutateAsync({ - identityId, - organizationId: orgId - }); + await deleteMutateAsync({ + identityId, + organizationId: orgId + }); - createNotification({ - text: "Successfully deleted identity", - type: "success" - }); + createNotification({ + text: "Successfully deleted identity", + type: "success" + }); - handlePopUpClose("deleteIdentity"); - } catch (err) { - console.error(err); - const error = err as any; - const text = error?.response?.data?.message ?? "Failed to delete identity"; - - createNotification({ - text, - type: "error" - }); - } + handlePopUpClose("deleteIdentity"); }; const onDeleteTemplateSubmit = async (templateId: string) => { - try { - await deleteTemplateMutateAsync({ - templateId, - organizationId: orgId - }); + await deleteTemplateMutateAsync({ + templateId, + organizationId: orgId + }); - createNotification({ - text: "Successfully deleted template", - type: "success" - }); + createNotification({ + text: "Successfully deleted template", + type: "success" + }); - handlePopUpClose("deleteTemplate"); - } catch (err) { - console.error(err); - const error = err as any; - const text = error?.response?.data?.message ?? "Failed to delete template"; - - createNotification({ - text, - type: "error" - }); - } + handlePopUpClose("deleteTemplate"); }; return ( diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersSection.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersSection.tsx index adb729d75..dc033f3fa 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersSection.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersSection.tsx @@ -85,46 +85,30 @@ export const OrgMembersSection = () => { }; const onDeactivateMemberSubmit = async (orgMembershipId: string) => { - try { - await updateOrgMembership({ - organizationId: orgId, - membershipId: orgMembershipId, - isActive: false - }); + await updateOrgMembership({ + organizationId: orgId, + membershipId: orgMembershipId, + isActive: false + }); - createNotification({ - text: "Successfully deactivated user in organization", - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to deactivate user in organization", - type: "error" - }); - } + createNotification({ + text: "Successfully deactivated user in organization", + type: "success" + }); handlePopUpClose("deactivateMember"); }; const onRemoveMemberSubmit = async (orgMembershipId: string) => { - try { - await deleteMutateAsync({ - orgId, - membershipId: orgMembershipId - }); + await deleteMutateAsync({ + orgId, + membershipId: orgMembershipId + }); - createNotification({ - text: "Successfully removed user from org", - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to remove user from the organization", - type: "error" - }); - } + createNotification({ + text: "Successfully removed user from org", + type: "success" + }); handlePopUpClose("removeMember"); }; @@ -132,27 +116,20 @@ export const OrgMembersSection = () => { const { data: members = [] } = useGetOrgUsers(orgId); const handleRemoveMembers = async (selectedMembers: OrgUser[]) => { - try { - await deleteBatchMutateAsync({ - orgId, - membershipIds: selectedMembers - .filter((member) => member.user.id !== userId) - .map((member) => member.id) - }); + await deleteBatchMutateAsync({ + orgId, + membershipIds: selectedMembers + .filter((member) => member.user.id !== userId) + .map((member) => member.id) + }); - createNotification({ - text: "Successfully removed users from organization", - type: "success" - }); + createNotification({ + text: "Successfully removed users from organization", + type: "success" + }); - setSelectedMemberIds([]); - handlePopUpClose("removeMembers"); - } catch { - createNotification({ - text: "Failed to remove users from the organization", - type: "error" - }); - } + setSelectedMemberIds([]); + handlePopUpClose("removeMembers"); }; return ( diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersTable.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersTable.tsx index 68a4e795a..fe71c207d 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersTable.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersTable.tsx @@ -127,35 +127,26 @@ export const OrgMembersTable = ({ const onRoleChange = async (membershipId: string, role: string) => { if (!currentOrg?.id) return; - try { - // TODO: replace hardcoding default role - const isCustomRole = !["admin", "member", "no-access"].includes(role); + // TODO: replace hardcoding default role + const isCustomRole = !["admin", "member", "no-access"].includes(role); - if (isCustomRole && subscription && !subscription?.rbac) { - handlePopUpOpen("upgradePlan", { - description: - "You can assign custom roles to members if you switch to Infisical's Pro plan." - }); - return; - } - - await updateOrgMembership({ - organizationId: currentOrg?.id, - membershipId, - role - }); - - createNotification({ - text: "Successfully updated user role", - type: "success" - }); - } catch (error) { - console.error(error); - createNotification({ - text: "Failed to update user role", - type: "error" + if (isCustomRole && subscription && !subscription?.rbac) { + handlePopUpOpen("upgradePlan", { + description: "You can assign custom roles to members if you switch to Infisical's Pro plan." }); + return; } + + await updateOrgMembership({ + organizationId: currentOrg?.id, + membershipId, + role + }); + + createNotification({ + text: "Successfully updated user role", + type: "success" + }); }; const onResendInvite = async (membershipId: string) => { @@ -174,12 +165,6 @@ export const OrgMembersTable = ({ text: "Successfully resent org invitation", type: "success" }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to resend org invitation", - type: "error" - }); } finally { setResendInviteId(null); } diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgRoleTabSection/OrgRoleTable.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgRoleTabSection/OrgRoleTable.tsx index d6dae6ae2..36249967a 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgRoleTabSection/OrgRoleTable.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgRoleTabSection/OrgRoleTable.tsx @@ -86,17 +86,12 @@ export const OrgRoleTable = () => { const handleRoleDelete = async () => { const { id } = popUp?.deleteRole?.data as TOrgRole; - try { - await deleteRole({ - orgId, - id - }); - createNotification({ type: "success", text: "Successfully removed the role" }); - handlePopUpClose("deleteRole"); - } catch (err) { - console.log(err); - createNotification({ type: "error", text: "Failed to delete role" }); - } + await deleteRole({ + orgId, + id + }); + createNotification({ type: "success", text: "Successfully removed the role" }); + handlePopUpClose("deleteRole"); }; const handleSetRoleAsDefault = async (defaultMembershipRoleSlug: string) => { @@ -110,17 +105,12 @@ export const OrgRoleTable = () => { return; } - try { - await updateOrg({ - orgId, - defaultMembershipRoleSlug - }); - createNotification({ type: "success", text: "Successfully updated default membership role" }); - handlePopUpClose("deleteRole"); - } catch (err) { - console.log(err); - createNotification({ type: "error", text: "Failed to update default membership role" }); - } + await updateOrg({ + orgId, + defaultMembershipRoleSlug + }); + createNotification({ type: "success", text: "Successfully updated default membership role" }); + handlePopUpClose("deleteRole"); }; const { diff --git a/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/AppConnectionForm.tsx b/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/AppConnectionForm.tsx index c09a58960..9d7e3ab48 100644 --- a/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/AppConnectionForm.tsx +++ b/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/AppConnectionForm.tsx @@ -73,24 +73,15 @@ const CreateForm = ({ app, onComplete, projectId }: CreateFormProps) => { "method" | "name" | "app" | "credentials" | "isPlatformManagedCredentials" > ) => { - try { - const connection = await createAppConnection.mutateAsync({ - ...formData, - projectId - }); - createNotification({ - text: `Successfully added ${appName} Connection`, - type: "success" - }); - onComplete(connection); - } catch (err: any) { - console.error(err); - createNotification({ - title: `Failed to add ${appName} Connection`, - text: err.message, - type: "error" - }); - } + const connection = await createAppConnection.mutateAsync({ + ...formData, + projectId + }); + createNotification({ + text: `Successfully added ${appName} Connection`, + type: "success" + }); + onComplete(connection); }; switch (app) { @@ -191,24 +182,15 @@ const UpdateForm = ({ appConnection, onComplete }: UpdateFormProps) => { "method" | "name" | "app" | "credentials" | "isPlatformManagedCredentials" > ) => { - try { - const connection = await updateAppConnection.mutateAsync({ - connectionId: appConnection.id, - ...formData - }); - createNotification({ - text: `Successfully updated ${appName} Connection`, - type: "success" - }); - onComplete(connection); - } catch (err: any) { - console.error(err); - createNotification({ - title: `Failed to update ${appName} Connection`, - text: err.message, - type: "error" - }); - } + const connection = await updateAppConnection.mutateAsync({ + connectionId: appConnection.id, + ...formData + }); + createNotification({ + text: `Successfully updated ${appName} Connection`, + type: "success" + }); + onComplete(connection); }; switch (appConnection.app) { diff --git a/frontend/src/pages/organization/GroupDetailsByIDPage/components/GroupCreateUpdateModal.tsx b/frontend/src/pages/organization/GroupDetailsByIDPage/components/GroupCreateUpdateModal.tsx index e4364e874..bc6e3fab5 100644 --- a/frontend/src/pages/organization/GroupDetailsByIDPage/components/GroupCreateUpdateModal.tsx +++ b/frontend/src/pages/organization/GroupDetailsByIDPage/components/GroupCreateUpdateModal.tsx @@ -77,43 +77,36 @@ export const GroupCreateUpdateModal = ({ popUp, handlePopUpClose, handlePopUpTog }, [popUp?.groupCreateUpdate?.data, roles]); const onGroupModalSubmit = async ({ name, slug, role }: TGroupFormData) => { - try { - if (!currentOrg?.id) return; + if (!currentOrg?.id) return; - const group = popUp?.groupCreateUpdate?.data as { - groupId: string; - name: string; - slug: string; - }; + const group = popUp?.groupCreateUpdate?.data as { + groupId: string; + name: string; + slug: string; + }; - if (group) { - await updateMutateAsync({ - id: group.groupId, - name, - slug, - role: role.slug || undefined - }); - } else { - await createMutateAsync({ - name, - slug, - organizationId: currentOrg.id, - role: role.slug || undefined - }); - } - handlePopUpToggle("groupCreateUpdate", false); - reset(); - - createNotification({ - text: `Successfully ${popUp?.groupCreateUpdate?.data ? "updated" : "created"} group`, - type: "success" + if (group) { + await updateMutateAsync({ + id: group.groupId, + name, + slug, + role: role.slug || undefined }); - } catch { - createNotification({ - text: `Failed to ${popUp?.groupCreateUpdate?.data ? "updated" : "created"} group`, - type: "error" + } else { + await createMutateAsync({ + name, + slug, + organizationId: currentOrg.id, + role: role.slug || undefined }); } + handlePopUpToggle("groupCreateUpdate", false); + reset(); + + createNotification({ + text: `Successfully ${popUp?.groupCreateUpdate?.data ? "updated" : "created"} group`, + type: "success" + }); }; return ( diff --git a/frontend/src/pages/organization/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx b/frontend/src/pages/organization/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx index f3bd05eeb..c2e7bbe57 100644 --- a/frontend/src/pages/organization/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx +++ b/frontend/src/pages/organization/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx @@ -44,34 +44,23 @@ const Page = () => { ] as const); const onDeleteIdentitySubmit = async (id: string) => { - try { - await deleteIdentity({ - identityId: id, - organizationId: orgId - }); + await deleteIdentity({ + identityId: id, + organizationId: orgId + }); - createNotification({ - text: "Successfully deleted identity", - type: "success" - }); + createNotification({ + text: "Successfully deleted identity", + type: "success" + }); - handlePopUpClose("deleteIdentity"); - navigate({ - to: "/organization/access-management", - search: { - selectedTab: OrgAccessControlTabSections.Identities - } - }); - } catch (err) { - console.error(err); - const error = err as any; - const text = error?.response?.data?.message ?? "Failed to delete identity"; - - createNotification({ - text, - type: "error" - }); - } + handlePopUpClose("deleteIdentity"); + navigate({ + to: "/organization/access-management", + search: { + selectedTab: OrgAccessControlTabSections.Identities + } + }); }; return ( diff --git a/frontend/src/pages/organization/RoleByIDPage/components/RolePermissionsSection/RolePermissionsSection.tsx b/frontend/src/pages/organization/RoleByIDPage/components/RolePermissionsSection/RolePermissionsSection.tsx index 0d6b269a8..c25d11cb7 100644 --- a/frontend/src/pages/organization/RoleByIDPage/components/RolePermissionsSection/RolePermissionsSection.tsx +++ b/frontend/src/pages/organization/RoleByIDPage/components/RolePermissionsSection/RolePermissionsSection.tsx @@ -107,18 +107,13 @@ export const RolePermissionsSection = ({ roleId }: Props) => { const { mutateAsync: updateRole } = useUpdateOrgRole(); const onSubmit = async (el: TFormSchema) => { - try { - await updateRole({ - orgId, - id: roleId, - ...el, - permissions: formRolePermission2API(el.permissions) - }); - createNotification({ type: "success", text: "Successfully updated role" }); - } catch (err) { - console.log(err); - createNotification({ type: "error", text: "Failed to update role" }); - } + await updateRole({ + orgId, + id: roleId, + ...el, + permissions: formRolePermission2API(el.permissions) + }); + createNotification({ type: "success", text: "Successfully updated role" }); }; const isCustomRole = !["admin", "member", "no-access"].includes(role?.slug ?? ""); diff --git a/frontend/src/pages/organization/UserDetailsByIDPage/UserDetailsByIDPage.tsx b/frontend/src/pages/organization/UserDetailsByIDPage/UserDetailsByIDPage.tsx index 2d433bba8..8ddc27763 100644 --- a/frontend/src/pages/organization/UserDetailsByIDPage/UserDetailsByIDPage.tsx +++ b/frontend/src/pages/organization/UserDetailsByIDPage/UserDetailsByIDPage.tsx @@ -64,56 +64,38 @@ const Page = withPermission( ] as const); const onDeactivateMemberSubmit = async (orgMembershipId: string) => { - try { - await updateOrgMembership({ - organizationId: orgId, - membershipId: orgMembershipId, - isActive: false - }); + await updateOrgMembership({ + organizationId: orgId, + membershipId: orgMembershipId, + isActive: false + }); - createNotification({ - text: "Successfully deactivated user in organization", - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to deactivate user in organization", - type: "error" - }); - } + createNotification({ + text: "Successfully deactivated user in organization", + type: "success" + }); handlePopUpClose("deactivateMember"); }; const onRemoveMemberSubmit = async (orgMembershipId: string) => { - try { - await deleteOrgMembership({ - orgId, - membershipId: orgMembershipId - }); + await deleteOrgMembership({ + orgId, + membershipId: orgMembershipId + }); - createNotification({ - text: "Successfully removed user from org", - type: "success" - }); - - handlePopUpClose("removeMember"); - navigate({ - to: "/organization/access-management" as const, - search: { - selectedTab: OrgAccessControlTabSections.Member - } - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to remove user from the organization", - type: "error" - }); - } + createNotification({ + text: "Successfully removed user from org", + type: "success" + }); handlePopUpClose("removeMember"); + navigate({ + to: "/organization/access-management" as const, + search: { + selectedTab: OrgAccessControlTabSections.Member + } + }); }; return ( diff --git a/frontend/src/pages/organization/UserDetailsByIDPage/components/UserDetailsSection.tsx b/frontend/src/pages/organization/UserDetailsByIDPage/components/UserDetailsSection.tsx index bef98e875..d26163de0 100644 --- a/frontend/src/pages/organization/UserDetailsByIDPage/components/UserDetailsSection.tsx +++ b/frontend/src/pages/organization/UserDetailsByIDPage/components/UserDetailsSection.tsx @@ -46,26 +46,18 @@ export const UserDetailsSection = ({ membershipId, handlePopUpOpen }: Props) => const { mutateAsync: resendOrgMemberInvitation, isPending } = useResendOrgMemberInvitation(); const onResendInvite = async () => { - try { - const signupToken = await resendOrgMemberInvitation({ - membershipId - }); + const signupToken = await resendOrgMemberInvitation({ + membershipId + }); - if (signupToken) { - return; - } - - createNotification({ - text: "Successfully resent org invitation", - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to resend org invitation", - type: "error" - }); + if (signupToken) { + return; } + + createNotification({ + text: "Successfully resent org invitation", + type: "success" + }); }; const getStatus = (m: OrgUser) => { diff --git a/frontend/src/pages/pam/PamAccountsPage/components/PamAccountForm/PamAccountForm.tsx b/frontend/src/pages/pam/PamAccountsPage/components/PamAccountForm/PamAccountForm.tsx index b9599be2d..346195e11 100644 --- a/frontend/src/pages/pam/PamAccountsPage/components/PamAccountForm/PamAccountForm.tsx +++ b/frontend/src/pages/pam/PamAccountsPage/components/PamAccountForm/PamAccountForm.tsx @@ -38,27 +38,18 @@ const CreateForm = ({ const onSubmit = async ( formData: DiscriminativePick ) => { - try { - const account = await createPamAccount.mutateAsync({ - ...formData, - folderId, - resourceId, - resourceType, - projectId - }); - createNotification({ - text: "Successfully created account", - type: "success" - }); - onComplete(account); - } catch (err: any) { - console.error(err); - createNotification({ - title: "Failed to create account", - text: err.message, - type: "error" - }); - } + const account = await createPamAccount.mutateAsync({ + ...formData, + folderId, + resourceId, + resourceType, + projectId + }); + createNotification({ + text: "Successfully created account", + type: "success" + }); + onComplete(account); }; switch (resourceType) { @@ -85,25 +76,16 @@ const UpdateForm = ({ account, onComplete }: UpdateFormProps) => { const onSubmit = async ( formData: DiscriminativePick ) => { - try { - const updatedAccount = await updatePamAccount.mutateAsync({ - accountId: account.id, - resourceType: account.resource.resourceType, - ...formData - }); - createNotification({ - text: "Successfully updated account", - type: "success" - }); - onComplete(updatedAccount); - } catch (err: any) { - console.error(err); - createNotification({ - title: "Failed to update account", - text: err.message, - type: "error" - }); - } + const updatedAccount = await updatePamAccount.mutateAsync({ + accountId: account.id, + resourceType: account.resource.resourceType, + ...formData + }); + createNotification({ + text: "Successfully updated account", + type: "success" + }); + onComplete(updatedAccount); }; switch (account.resource.resourceType) { diff --git a/frontend/src/pages/pam/PamAccountsPage/components/PamAddFolderModal.tsx b/frontend/src/pages/pam/PamAccountsPage/components/PamAddFolderModal.tsx index 7b057a648..266a724cd 100644 --- a/frontend/src/pages/pam/PamAccountsPage/components/PamAddFolderModal.tsx +++ b/frontend/src/pages/pam/PamAccountsPage/components/PamAddFolderModal.tsx @@ -17,25 +17,16 @@ export const PamAddFolderModal = ({ isOpen, onOpenChange, projectId, currentFold console.log({ currentFolderId }); const onSubmit = async (formData: Pick) => { - try { - await createPamFolder.mutateAsync({ - ...formData, - parentId: currentFolderId, - projectId - }); - createNotification({ - text: "Successfully created folder", - type: "success" - }); - onOpenChange(false); - } catch (err: any) { - console.error(err); - createNotification({ - title: "Failed to create folder", - text: err.message, - type: "error" - }); - } + await createPamFolder.mutateAsync({ + ...formData, + parentId: currentFolderId, + projectId + }); + createNotification({ + text: "Successfully created folder", + type: "success" + }); + onOpenChange(false); }; return ( diff --git a/frontend/src/pages/pam/PamAccountsPage/components/PamDeleteAccountModal.tsx b/frontend/src/pages/pam/PamAccountsPage/components/PamDeleteAccountModal.tsx index 45ac03082..c094d3c53 100644 --- a/frontend/src/pages/pam/PamAccountsPage/components/PamDeleteAccountModal.tsx +++ b/frontend/src/pages/pam/PamAccountsPage/components/PamDeleteAccountModal.tsx @@ -20,25 +20,17 @@ export const PamDeleteAccountModal = ({ isOpen, onOpenChange, account }: Props) } = account; const handleDelete = async () => { - try { - await deletePamAccount.mutateAsync({ - accountId, - resourceType - }); + await deletePamAccount.mutateAsync({ + accountId, + resourceType + }); - createNotification({ - text: "Successfully deleted account", - type: "success" - }); + createNotification({ + text: "Successfully deleted account", + type: "success" + }); - onOpenChange(false); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to delete account", - type: "error" - }); - } + onOpenChange(false); }; return ( diff --git a/frontend/src/pages/pam/PamAccountsPage/components/PamDeleteFolderModal.tsx b/frontend/src/pages/pam/PamAccountsPage/components/PamDeleteFolderModal.tsx index f0e2476c2..d901d0ba0 100644 --- a/frontend/src/pages/pam/PamAccountsPage/components/PamDeleteFolderModal.tsx +++ b/frontend/src/pages/pam/PamAccountsPage/components/PamDeleteFolderModal.tsx @@ -16,24 +16,16 @@ export const PamDeleteFolderModal = ({ isOpen, onOpenChange, folder }: Props) => const { id: folderId, name } = folder; const handleDelete = async () => { - try { - await deletePamFolder.mutateAsync({ - folderId - }); + await deletePamFolder.mutateAsync({ + folderId + }); - createNotification({ - text: "Successfully deleted folder", - type: "success" - }); + createNotification({ + text: "Successfully deleted folder", + type: "success" + }); - onOpenChange(false); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to delete folder", - type: "error" - }); - } + onOpenChange(false); }; return ( diff --git a/frontend/src/pages/pam/PamAccountsPage/components/PamUpdateFolderModal.tsx b/frontend/src/pages/pam/PamAccountsPage/components/PamUpdateFolderModal.tsx index b4bcc46a4..4162ce25f 100644 --- a/frontend/src/pages/pam/PamAccountsPage/components/PamUpdateFolderModal.tsx +++ b/frontend/src/pages/pam/PamAccountsPage/components/PamUpdateFolderModal.tsx @@ -16,24 +16,15 @@ export const PamUpdateFolderModal = ({ isOpen, onOpenChange, folder }: Props) => if (!folder) return null; const onSubmit = async (formData: Pick) => { - try { - await updatePamFolder.mutateAsync({ - ...formData, - folderId: folder.id - }); - createNotification({ - text: "Successfully updated folder", - type: "success" - }); - onOpenChange(false); - } catch (err: any) { - console.error(err); - createNotification({ - title: "Failed to updated folder", - text: err.message, - type: "error" - }); - } + await updatePamFolder.mutateAsync({ + ...formData, + folderId: folder.id + }); + createNotification({ + text: "Successfully updated folder", + type: "success" + }); + onOpenChange(false); }; return ( diff --git a/frontend/src/pages/pam/PamResourcesPage/components/PamDeleteResourceModal.tsx b/frontend/src/pages/pam/PamResourcesPage/components/PamDeleteResourceModal.tsx index efda53466..7f0d2bd19 100644 --- a/frontend/src/pages/pam/PamResourcesPage/components/PamDeleteResourceModal.tsx +++ b/frontend/src/pages/pam/PamResourcesPage/components/PamDeleteResourceModal.tsx @@ -16,25 +16,17 @@ export const PamDeleteResourceModal = ({ isOpen, onOpenChange, resource }: Props const { id: resourceId, name, resourceType } = resource; const handleDelete = async () => { - try { - await deletePamResource.mutateAsync({ - resourceId, - resourceType - }); + await deletePamResource.mutateAsync({ + resourceId, + resourceType + }); - createNotification({ - text: `Successfully removed ${PAM_RESOURCE_TYPE_MAP[resourceType].name} resource`, - type: "success" - }); + createNotification({ + text: `Successfully removed ${PAM_RESOURCE_TYPE_MAP[resourceType].name} resource`, + type: "success" + }); - onOpenChange(false); - } catch (err) { - console.error(err); - createNotification({ - text: `Failed to remove ${PAM_RESOURCE_TYPE_MAP[resourceType].name} resource`, - type: "error" - }); - } + onOpenChange(false); }; return ( diff --git a/frontend/src/pages/pam/PamResourcesPage/components/PamResourceForm/PamResourceForm.tsx b/frontend/src/pages/pam/PamResourcesPage/components/PamResourceForm/PamResourceForm.tsx index 2bc54e7cd..3dd3aeec8 100644 --- a/frontend/src/pages/pam/PamResourcesPage/components/PamResourceForm/PamResourceForm.tsx +++ b/frontend/src/pages/pam/PamResourcesPage/components/PamResourceForm/PamResourceForm.tsx @@ -35,24 +35,15 @@ const CreateForm = ({ resourceType, onComplete, projectId }: CreateFormProps) => "name" | "resourceType" | "connectionDetails" | "gatewayId" > ) => { - try { - const resource = await createPamResource.mutateAsync({ - ...formData, - projectId - }); - createNotification({ - text: `Successfully created ${resourceName} resource`, - type: "success" - }); - onComplete(resource); - } catch (err: any) { - console.error(err); - createNotification({ - title: `Failed to create ${resourceName} resource`, - text: err.message, - type: "error" - }); - } + const resource = await createPamResource.mutateAsync({ + ...formData, + projectId + }); + createNotification({ + text: `Successfully created ${resourceName} resource`, + type: "success" + }); + onComplete(resource); }; switch (resourceType) { @@ -72,24 +63,15 @@ const UpdateForm = ({ resource, onComplete }: UpdateFormProps) => { const onSubmit = async ( formData: DiscriminativePick ) => { - try { - const updatedResource = await updatePamResource.mutateAsync({ - resourceId: resource.id, - ...formData - }); - createNotification({ - text: `Successfully updated ${resourceName} resource`, - type: "success" - }); - onComplete(updatedResource); - } catch (err: any) { - console.error(err); - createNotification({ - title: `Failed to update ${resourceName} resource`, - text: err.message, - type: "error" - }); - } + const updatedResource = await updatePamResource.mutateAsync({ + resourceId: resource.id, + ...formData + }); + createNotification({ + text: `Successfully updated ${resourceName} resource`, + type: "success" + }); + onComplete(updatedResource); }; switch (resource.resourceType) { diff --git a/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MemberRoleForm/MemberRbacSection.tsx b/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MemberRoleForm/MemberRbacSection.tsx index 291a5b58b..5be239042 100644 --- a/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MemberRoleForm/MemberRbacSection.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MemberRoleForm/MemberRbacSection.tsx @@ -127,17 +127,13 @@ export const MemberRbacSection = ({ projectMember, onOpenUpgradeModal }: Props) return; } - try { - await updateMembershipRole.mutateAsync({ - projectId, - membershipId: projectMember.id, - roles: sanitizedRoles - }); - createNotification({ text: "Successfully updated roles", type: "success" }); - roleForm.reset(undefined, { keepValues: true }); - } catch { - createNotification({ text: "Failed to update role", type: "error" }); - } + await updateMembershipRole.mutateAsync({ + projectId, + membershipId: projectMember.id, + roles: sanitizedRoles + }); + createNotification({ text: "Successfully updated roles", type: "success" }); + roleForm.reset(undefined, { keepValues: true }); }; if (isRolesLoading) diff --git a/frontend/src/pages/project/IdentityDetailsByIDPage/components/IdentityRoleDetailsSection/IdentityRoleModify.tsx b/frontend/src/pages/project/IdentityDetailsByIDPage/components/IdentityRoleDetailsSection/IdentityRoleModify.tsx index a74428e98..8bc451151 100644 --- a/frontend/src/pages/project/IdentityDetailsByIDPage/components/IdentityRoleDetailsSection/IdentityRoleModify.tsx +++ b/frontend/src/pages/project/IdentityDetailsByIDPage/components/IdentityRoleDetailsSection/IdentityRoleModify.tsx @@ -114,16 +114,12 @@ export const IdentityRoleModify = ({ identityProjectMembership }: Props) => { }; }); - try { - await updateIdentityWorkspaceRole.mutateAsync({ - projectId, - identityId: identityProjectMembership.identity.id, - roles: sanitizedRoles - }); - createNotification({ text: "Successfully updated roles", type: "success" }); - } catch { - createNotification({ text: "Failed to update roles", type: "error" }); - } + await updateIdentityWorkspaceRole.mutateAsync({ + projectId, + identityId: identityProjectMembership.identity.id, + roles: sanitizedRoles + }); + createNotification({ text: "Successfully updated roles", type: "success" }); }; if (isRolesLoading) diff --git a/frontend/src/pages/project/MemberDetailsByIDPage/components/MemberRoleDetailsSection/MemberRoleDetailsSection.tsx b/frontend/src/pages/project/MemberDetailsByIDPage/components/MemberRoleDetailsSection/MemberRoleDetailsSection.tsx index 703511c84..2654e237e 100644 --- a/frontend/src/pages/project/MemberDetailsByIDPage/components/MemberRoleDetailsSection/MemberRoleDetailsSection.tsx +++ b/frontend/src/pages/project/MemberDetailsByIDPage/components/MemberRoleDetailsSection/MemberRoleDetailsSection.tsx @@ -55,42 +55,37 @@ export const MemberRoleDetailsSection = ({ const handleRoleDelete = async () => { const { id } = popUp?.deleteRole?.data as TProjectRole; - try { - const updatedRoles = membershipDetails?.roles?.filter((el) => el.id !== id); - await updateUserWorkspaceRole({ - projectId, - roles: updatedRoles.map( - ({ - role, - customRoleSlug, - isTemporary, - temporaryMode, - temporaryRange, - temporaryAccessStartTime, - temporaryAccessEndTime - }) => ({ - role: role === "custom" ? customRoleSlug : role, - ...(isTemporary - ? { - isTemporary, - temporaryMode, - temporaryRange, - temporaryAccessStartTime, - temporaryAccessEndTime - } - : { - isTemporary - }) - }) - ), - membershipId: membershipDetails.id - }); - createNotification({ type: "success", text: "Successfully removed role" }); - handlePopUpClose("deleteRole"); - } catch (err) { - console.log(err); - createNotification({ type: "error", text: "Failed to delete role" }); - } + const updatedRoles = membershipDetails?.roles?.filter((el) => el.id !== id); + await updateUserWorkspaceRole({ + projectId, + roles: updatedRoles.map( + ({ + role, + customRoleSlug, + isTemporary, + temporaryMode, + temporaryRange, + temporaryAccessStartTime, + temporaryAccessEndTime + }) => ({ + role: role === "custom" ? customRoleSlug : role, + ...(isTemporary + ? { + isTemporary, + temporaryMode, + temporaryRange, + temporaryAccessStartTime, + temporaryAccessEndTime + } + : { + isTemporary + }) + }) + ), + membershipId: membershipDetails.id + }); + createNotification({ type: "success", text: "Successfully removed role" }); + handlePopUpClose("deleteRole"); }; return ( diff --git a/frontend/src/pages/project/MemberDetailsByIDPage/components/MemberRoleDetailsSection/MemberRoleModify.tsx b/frontend/src/pages/project/MemberDetailsByIDPage/components/MemberRoleDetailsSection/MemberRoleModify.tsx index 287ea3ad7..947424191 100644 --- a/frontend/src/pages/project/MemberDetailsByIDPage/components/MemberRoleDetailsSection/MemberRoleModify.tsx +++ b/frontend/src/pages/project/MemberDetailsByIDPage/components/MemberRoleDetailsSection/MemberRoleModify.tsx @@ -126,16 +126,12 @@ export const MemberRoleModify = ({ projectMember, onOpenUpgradeModal }: Props) = return; } - try { - await updateMembershipRole.mutateAsync({ - projectId, - membershipId: projectMember.id, - roles: sanitizedRoles - }); - createNotification({ text: "Successfully updated roles", type: "success" }); - } catch { - createNotification({ text: "Failed to update roles", type: "error" }); - } + await updateMembershipRole.mutateAsync({ + projectId, + membershipId: projectMember.id, + roles: sanitizedRoles + }); + createNotification({ text: "Successfully updated roles", type: "success" }); }; if (isRolesLoading) diff --git a/frontend/src/pages/secret-manager/SecretRotationPage/SecretRotationPage.tsx b/frontend/src/pages/secret-manager/SecretRotationPage/SecretRotationPage.tsx index 8efa28a63..b69d8fadb 100644 --- a/frontend/src/pages/secret-manager/SecretRotationPage/SecretRotationPage.tsx +++ b/frontend/src/pages/secret-manager/SecretRotationPage/SecretRotationPage.tsx @@ -95,42 +95,26 @@ const Page = () => { const handleDeleteRotation = async () => { const { id } = popUp.deleteRotation.data as { id: string }; - try { - await deleteSecretRotation({ - id, - workspaceId - }); - handlePopUpClose("deleteRotation"); - createNotification({ - type: "success", - text: "Successfully removed rotation" - }); - } catch (error) { - console.log(error); - createNotification({ - type: "error", - text: "Failed to remove rotation" - }); - } + await deleteSecretRotation({ + id, + workspaceId + }); + handlePopUpClose("deleteRotation"); + createNotification({ + type: "success", + text: "Successfully removed rotation" + }); }; const handleRestartRotation = async (id: string) => { - try { - await restartSecretRotation({ - id, - workspaceId - }); - createNotification({ - type: "success", - text: "Secret rotation initiated" - }); - } catch (error) { - console.log(error); - createNotification({ - type: "error", - text: "Failed to restart rotation" - }); - } + await restartSecretRotation({ + id, + workspaceId + }); + createNotification({ + type: "success", + text: "Secret rotation initiated" + }); }; const handleCreateRotation = (provider: TSecretRotationProviderTemplate) => { diff --git a/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncActionTriggers.tsx b/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncActionTriggers.tsx index 78cdf899e..ad82460eb 100644 --- a/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncActionTriggers.tsx +++ b/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncActionTriggers.tsx @@ -89,44 +89,30 @@ export const SecretSyncActionTriggers = ({ secretSync }: Props) => { const handleToggleEnableSync = async () => { const isAutoSyncEnabled = !secretSync.isAutoSyncEnabled; - try { - await updateSync.mutateAsync({ - syncId: secretSync.id, - destination: secretSync.destination, - isAutoSyncEnabled, - projectId: secretSync.projectId - }); + await updateSync.mutateAsync({ + syncId: secretSync.id, + destination: secretSync.destination, + isAutoSyncEnabled, + projectId: secretSync.projectId + }); - createNotification({ - text: `Successfully ${isAutoSyncEnabled ? "enabled" : "disabled"} auto-sync for ${destinationName} Sync`, - type: "success" - }); - } catch { - createNotification({ - text: `Failed to ${isAutoSyncEnabled ? "enable" : "disable"} auto-sync for ${destinationName} Sync`, - type: "error" - }); - } + createNotification({ + text: `Successfully ${isAutoSyncEnabled ? "enabled" : "disabled"} auto-sync for ${destinationName} Sync`, + type: "success" + }); }; const handleTriggerSync = async () => { - try { - await triggerSyncSecrets.mutateAsync({ - syncId: secretSync.id, - destination: secretSync.destination, - projectId: secretSync.projectId - }); + await triggerSyncSecrets.mutateAsync({ + syncId: secretSync.id, + destination: secretSync.destination, + projectId: secretSync.projectId + }); - createNotification({ - text: `Successfully triggered ${destinationName} Sync`, - type: "success" - }); - } catch { - createNotification({ - text: `Failed to trigger ${destinationName} Sync`, - type: "error" - }); - } + createNotification({ + text: `Successfully triggered ${destinationName} Sync`, + type: "success" + }); }; const permissionSubject = diff --git a/frontend/src/pages/secret-manager/SettingsPage/components/WorkflowIntegrationSection/components/SlackIntegrationForm.tsx b/frontend/src/pages/secret-manager/SettingsPage/components/WorkflowIntegrationSection/components/SlackIntegrationForm.tsx index bcc2d81b5..4af602e12 100644 --- a/frontend/src/pages/secret-manager/SettingsPage/components/WorkflowIntegrationSection/components/SlackIntegrationForm.tsx +++ b/frontend/src/pages/secret-manager/SettingsPage/components/WorkflowIntegrationSection/components/SlackIntegrationForm.tsx @@ -76,32 +76,25 @@ export const SlackIntegrationForm = ({ onClose }: Props) => { }); const handleIntegrationSave = async (data: TSlackConfigForm) => { - try { - if (!currentProject) { - return; - } - - await updateProjectSlackConfig({ - ...data, - projectId: currentProject.id, - integration: WorkflowIntegrationPlatform.SLACK, - integrationId: data.slackIntegrationId, - accessRequestChannels: data.accessRequestChannels.filter(Boolean).join(", "), - secretRequestChannels: data.secretRequestChannels.filter(Boolean).join(", ") - }); - - createNotification({ - type: "success", - text: "Successfully created slack integration" - }); - - onClose(); - } catch { - createNotification({ - type: "error", - text: "Failed to create slack integration" - }); + if (!currentProject) { + return; } + + await updateProjectSlackConfig({ + ...data, + projectId: currentProject.id, + integration: WorkflowIntegrationPlatform.SLACK, + integrationId: data.slackIntegrationId, + accessRequestChannels: data.accessRequestChannels.filter(Boolean).join(", "), + secretRequestChannels: data.secretRequestChannels.filter(Boolean).join(", ") + }); + + createNotification({ + type: "success", + text: "Successfully created slack integration" + }); + + onClose(); }; const secretRequestNotifState = watch("isSecretRequestNotificationEnabled"); diff --git a/frontend/src/pages/secret-scanning/SecretScanningDataSourceByIdPage/components/SecretScanningResourceRow.tsx b/frontend/src/pages/secret-scanning/SecretScanningDataSourceByIdPage/components/SecretScanningResourceRow.tsx index 740cf6d71..b2021bf5c 100644 --- a/frontend/src/pages/secret-scanning/SecretScanningDataSourceByIdPage/components/SecretScanningResourceRow.tsx +++ b/frontend/src/pages/secret-scanning/SecretScanningDataSourceByIdPage/components/SecretScanningResourceRow.tsx @@ -81,24 +81,17 @@ export const SecretScanningResourceRow = ({ resource, dataSource }: Props) => { const navigate = useNavigate(); const handleTriggerScan = async () => { - try { - await triggerDataSourceScan.mutateAsync({ - dataSourceId: dataSource.id, - type: dataSource.type, - projectId: dataSource.projectId, - resourceId: id - }); + await triggerDataSourceScan.mutateAsync({ + dataSourceId: dataSource.id, + type: dataSource.type, + projectId: dataSource.projectId, + resourceId: id + }); - createNotification({ - text: `Successfully triggered scan for ${name}`, - type: "success" - }); - } catch { - createNotification({ - text: `Failed to trigger scan for ${name}`, - type: "error" - }); - } + createNotification({ + text: `Successfully triggered scan for ${name}`, + type: "success" + }); }; const [isIdCopied, setIsIdCopied] = useToggle(false); diff --git a/frontend/src/pages/secret-scanning/SecretScanningFindingsPage/components/SecretScanningUpdateFindingModal.tsx b/frontend/src/pages/secret-scanning/SecretScanningFindingsPage/components/SecretScanningUpdateFindingModal.tsx index 484cbcf36..c4838673b 100644 --- a/frontend/src/pages/secret-scanning/SecretScanningFindingsPage/components/SecretScanningUpdateFindingModal.tsx +++ b/frontend/src/pages/secret-scanning/SecretScanningFindingsPage/components/SecretScanningUpdateFindingModal.tsx @@ -55,39 +55,32 @@ const Content = ({ findings, onComplete }: ContentProps) => { const onSubmit = async (data: FormType) => { if (!data.status) return; - try { - if (findings.length > 1) { - await updateMultipleFindings.mutateAsync( - findings.map((f) => ({ - ...data, - status: data.status!, - findingId: f.id, - projectId: f.projectId - })) - ); - } else { - await updateMultipleFindings.mutateAsync([ - { - ...data, - status: data.status, - findingId: findings[0].id, - projectId: findings[0].projectId - } - ]); - } - - createNotification({ - type: "success", - text: `Finding status${single ? "" : "es"} successfully updated` - }); - - onComplete(); - } catch { - createNotification({ - type: "error", - text: `Failed to update finding status${single ? "" : "es"}` - }); + if (findings.length > 1) { + await updateMultipleFindings.mutateAsync( + findings.map((f) => ({ + ...data, + status: data.status!, + findingId: f.id, + projectId: f.projectId + })) + ); + } else { + await updateMultipleFindings.mutateAsync([ + { + ...data, + status: data.status, + findingId: findings[0].id, + projectId: findings[0].projectId + } + ]); } + + createNotification({ + type: "success", + text: `Finding status${single ? "" : "es"} successfully updated` + }); + + onComplete(); }; return ( diff --git a/frontend/src/pages/secret-scanning/SettingsPage/components/ProjectScanningConfigTab/SecretScanningConfigForm.tsx b/frontend/src/pages/secret-scanning/SettingsPage/components/ProjectScanningConfigTab/SecretScanningConfigForm.tsx index c9df333c4..7ff36964d 100644 --- a/frontend/src/pages/secret-scanning/SettingsPage/components/ProjectScanningConfigTab/SecretScanningConfigForm.tsx +++ b/frontend/src/pages/secret-scanning/SettingsPage/components/ProjectScanningConfigTab/SecretScanningConfigForm.tsx @@ -38,22 +38,15 @@ export const SecretScanningConfigForm = ({ config }: Props) => { }); const onSubmit = async ({ content }: FormType) => { - try { - await updateConfig.mutateAsync({ - projectId: config.projectId, - content: content || null - }); + await updateConfig.mutateAsync({ + projectId: config.projectId, + content: content || null + }); - createNotification({ - type: "success", - text: "Configuration successfully updated" - }); - } catch { - createNotification({ - type: "error", - text: "Failed to update Configuration" - }); - } + createNotification({ + type: "success", + text: "Configuration successfully updated" + }); }; return ( diff --git a/frontend/src/pages/ssh/SshHostGroupDetailsByIDPage/components/SshHostGroupHostsSection.tsx b/frontend/src/pages/ssh/SshHostGroupDetailsByIDPage/components/SshHostGroupHostsSection.tsx index df6f2b723..9b482538c 100644 --- a/frontend/src/pages/ssh/SshHostGroupDetailsByIDPage/components/SshHostGroupHostsSection.tsx +++ b/frontend/src/pages/ssh/SshHostGroupDetailsByIDPage/components/SshHostGroupHostsSection.tsx @@ -41,25 +41,17 @@ export const SshHostGroupHostsSection = ({ sshHostGroupId }: Props) => { }; const onRemoveSshHostSubmit = async (sshHostId: string) => { - try { - await removeHostFromGroup({ - sshHostId, - sshHostGroupId - }); + await removeHostFromGroup({ + sshHostId, + sshHostGroupId + }); - await createNotification({ - text: "Successfully removed host from SSH group", - type: "success" - }); + createNotification({ + text: "Successfully removed host from SSH group", + type: "success" + }); - handlePopUpClose("removeHostFromSshHostGroup"); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to remove host from SSH group", - type: "error" - }); - } + handlePopUpClose("removeHostFromSshHostGroup"); }; return ( diff --git a/frontend/src/pages/ssh/SshHostsPage/components/SshHostGroupsSection.tsx b/frontend/src/pages/ssh/SshHostsPage/components/SshHostGroupsSection.tsx index 189a49686..e690480e1 100644 --- a/frontend/src/pages/ssh/SshHostsPage/components/SshHostGroupsSection.tsx +++ b/frontend/src/pages/ssh/SshHostsPage/components/SshHostGroupsSection.tsx @@ -35,22 +35,14 @@ export const SshHostGroupsSection = () => { }; const onRemoveSshHostGroupSubmit = async (sshHostGroupId: string) => { - try { - const hostGroup = await deleteSshHostGroup({ sshHostGroupId }); + const hostGroup = await deleteSshHostGroup({ sshHostGroupId }); - createNotification({ - text: `Successfully deleted SSH host group: ${hostGroup.name}`, - type: "success" - }); + createNotification({ + text: `Successfully deleted SSH host group: ${hostGroup.name}`, + type: "success" + }); - handlePopUpClose("deleteSshHostGroup"); - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to delete SSH host group", - type: "error" - }); - } + handlePopUpClose("deleteSshHostGroup"); }; return ( diff --git a/frontend/src/pages/ssh/SshHostsPage/components/SshHostModal.tsx b/frontend/src/pages/ssh/SshHostsPage/components/SshHostModal.tsx index e9b0d870a..afcde908f 100644 --- a/frontend/src/pages/ssh/SshHostsPage/components/SshHostModal.tsx +++ b/frontend/src/pages/ssh/SshHostsPage/components/SshHostModal.tsx @@ -140,93 +140,84 @@ export const SshHostModal = ({ popUp, handlePopUpToggle }: Props) => { }, [sshHost]); const onFormSubmit = async ({ hostname, alias, userCertTtl, loginMappings }: FormData) => { - try { - if (!projectId) return; + if (!projectId) return; - // Filter out login mappings that are from host groups - const hostLoginMappings = loginMappings.filter( - (mapping) => mapping.source === LoginMappingSource.HOST - ); + // Filter out login mappings that are from host groups + const hostLoginMappings = loginMappings.filter( + (mapping) => mapping.source === LoginMappingSource.HOST + ); - // check if there is already a different host with the same hostname - const existingHostnames = - sshHosts?.filter((h) => h.id !== sshHost?.id).map((h) => h.hostname) || []; + // check if there is already a different host with the same hostname + const existingHostnames = + sshHosts?.filter((h) => h.id !== sshHost?.id).map((h) => h.hostname) || []; - if (existingHostnames.includes(hostname.trim())) { + if (existingHostnames.includes(hostname.trim())) { + createNotification({ + text: "A host with this hostname already exists.", + type: "error" + }); + return; + } + + const trimmedAlias = alias.trim(); + + // check if there is already a different host with the same non-null alias + if (trimmedAlias) { + const existingAliases = + sshHosts?.filter((h) => h.id !== sshHost?.id && h.alias !== null).map((h) => h.alias) || []; + + if (existingAliases.includes(trimmedAlias)) { createNotification({ - text: "A host with this hostname already exists.", + text: "A host with this alias already exists.", type: "error" }); return; } + } - const trimmedAlias = alias.trim(); + const transformedLoginMappings = hostLoginMappings.map(({ loginUser, allowedPrincipals }) => { + const usernames = allowedPrincipals + .filter((p) => p.type === "user" && p.value) + .map((p) => p.value); - // check if there is already a different host with the same non-null alias - if (trimmedAlias) { - const existingAliases = - sshHosts?.filter((h) => h.id !== sshHost?.id && h.alias !== null).map((h) => h.alias) || - []; + const groupNames = allowedPrincipals + .filter((p) => p.type === "group" && p.value) + .map((p) => p.value); - if (existingAliases.includes(trimmedAlias)) { - createNotification({ - text: "A host with this alias already exists.", - type: "error" - }); - return; + return { + loginUser, + allowedPrincipals: { + usernames, + groups: groupNames } - } + }; + }); - const transformedLoginMappings = hostLoginMappings.map(({ loginUser, allowedPrincipals }) => { - const usernames = allowedPrincipals - .filter((p) => p.type === "user" && p.value) - .map((p) => p.value); - - const groupNames = allowedPrincipals - .filter((p) => p.type === "group" && p.value) - .map((p) => p.value); - - return { - loginUser, - allowedPrincipals: { - usernames, - groups: groupNames - } - }; + if (sshHost) { + await updateMutateAsync({ + sshHostId: sshHost.id, + hostname, + alias: trimmedAlias, + userCertTtl, + loginMappings: transformedLoginMappings }); - - if (sshHost) { - await updateMutateAsync({ - sshHostId: sshHost.id, - hostname, - alias: trimmedAlias, - userCertTtl, - loginMappings: transformedLoginMappings - }); - } else { - await createMutateAsync({ - projectId, - hostname, - alias: trimmedAlias, - userCertTtl, - loginMappings: transformedLoginMappings - }); - } - - reset(); - handlePopUpToggle("sshHost", false); - - createNotification({ - text: `Successfully ${sshHost ? "updated" : "added"} SSH host`, - type: "success" - }); - } catch (err) { - console.error(err); - createNotification({ - text: `Failed to ${sshHost ? "update" : "add"} SSH host`, - type: "error" + } else { + await createMutateAsync({ + projectId, + hostname, + alias: trimmedAlias, + userCertTtl, + loginMappings: transformedLoginMappings }); } + + reset(); + handlePopUpToggle("sshHost", false); + + createNotification({ + text: `Successfully ${sshHost ? "updated" : "added"} SSH host`, + type: "success" + }); }; const toggleMapping = (index: number) => { From eba04e4278ba71814daee4b5c7631adebfbcc7b4 Mon Sep 17 00:00:00 2001 From: Victor Santos Date: Fri, 31 Oct 2025 19:23:32 -0300 Subject: [PATCH 23/79] refactor: simplify authentication form submission logic across multiple identity sections --- .../IdentityAliCloudAuthForm.tsx | 63 ++++---- .../IdentityAuthTemplateModal.tsx | 82 +++++------ .../IdentitySection/IdentityAwsAuthForm.tsx | 71 +++++---- .../IdentitySection/IdentityAzureAuthForm.tsx | 71 +++++---- .../IdentitySection/IdentityGcpAuthForm.tsx | 75 +++++----- .../IdentitySection/IdentityJwtAuthForm.tsx | 95 ++++++------ .../IdentityKubernetesAuthForm.tsx | 115 +++++++-------- .../IdentitySection/IdentityLdapAuthForm.tsx | 135 +++++++++--------- .../IdentitySection/IdentityLinkForm.tsx | 39 ++--- .../IdentitySection/IdentityModal.tsx | 123 +++++++--------- .../IdentitySection/IdentityOciAuthForm.tsx | 67 ++++----- .../IdentitySection/IdentityOidcAuthForm.tsx | 99 ++++++------- 12 files changed, 468 insertions(+), 567 deletions(-) diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAliCloudAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAliCloudAuthForm.tsx index 4ddcf964e..7dc5d7f70 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAliCloudAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAliCloudAuthForm.tsx @@ -137,45 +137,38 @@ export const IdentityAliCloudAuthForm = ({ accessTokenNumUsesLimit, accessTokenTrustedIps }: FormData) => { - try { - if (!identityId) return; + if (!identityId) return; - if (data) { - await updateMutateAsync({ - organizationId: orgId, - allowedArns, - identityId, - accessTokenTTL: Number(accessTokenTTL), - accessTokenMaxTTL: Number(accessTokenMaxTTL), - accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), - accessTokenTrustedIps - }); - } else { - await addMutateAsync({ - organizationId: orgId, - identityId, - allowedArns, - accessTokenTTL: Number(accessTokenTTL), - accessTokenMaxTTL: Number(accessTokenMaxTTL), - accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), - accessTokenTrustedIps - }); - } - - handlePopUpToggle("identityAuthMethod", false); - - createNotification({ - text: `Successfully ${isUpdate ? "updated" : "configured"} auth method`, - type: "success" + if (data) { + await updateMutateAsync({ + organizationId: orgId, + allowedArns, + identityId, + accessTokenTTL: Number(accessTokenTTL), + accessTokenMaxTTL: Number(accessTokenMaxTTL), + accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), + accessTokenTrustedIps }); - - reset(); - } catch { - createNotification({ - text: `Failed to ${isUpdate ? "update" : "configure"} identity`, - type: "error" + } else { + await addMutateAsync({ + organizationId: orgId, + identityId, + allowedArns, + accessTokenTTL: Number(accessTokenTTL), + accessTokenMaxTTL: Number(accessTokenMaxTTL), + accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), + accessTokenTrustedIps }); } + + handlePopUpToggle("identityAuthMethod", false); + + createNotification({ + text: `Successfully ${isUpdate ? "updated" : "configured"} auth method`, + type: "success" + }); + + reset(); }; return ( diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAuthTemplateModal.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAuthTemplateModal.tsx index 3bd423982..6db81f19e 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAuthTemplateModal.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAuthTemplateModal.tsx @@ -103,56 +103,44 @@ export const IdentityAuthTemplateModal = ({ popUp, handlePopUpToggle }: Props) = const selectedMethod = watch("method"); const onFormSubmit = async (data: FormData) => { - try { - if (isEdit && template) { - await updateTemplate({ - templateId: template.id, - organizationId: orgId, - name: data.name, - templateFields: { - url: data.url, - bindDN: data.bindDN, - bindPass: data.bindPass, - searchBase: data.searchBase, - ldapCaCertificate: data.ldapCaCertificate - } - }); - createNotification({ - text: "Successfully updated auth template", - type: "success" - }); - } else { - await createTemplate({ - organizationId: orgId, - name: data.name, - authMethod: data.method, - templateFields: { - url: data.url, - bindDN: data.bindDN, - bindPass: data.bindPass, - searchBase: data.searchBase, - ldapCaCertificate: data.ldapCaCertificate - } - }); - createNotification({ - text: "Successfully created auth template", - type: "success" - }); - } - - handlePopUpToggle(isEdit ? "editTemplate" : "createTemplate", false); - reset(); - } catch (err) { - console.error(err); - const error = err as any; - const text = - error?.response?.data?.message ?? `Failed to ${isEdit ? "update" : "create"} auth template`; - + if (isEdit && template) { + await updateTemplate({ + templateId: template.id, + organizationId: orgId, + name: data.name, + templateFields: { + url: data.url, + bindDN: data.bindDN, + bindPass: data.bindPass, + searchBase: data.searchBase, + ldapCaCertificate: data.ldapCaCertificate + } + }); createNotification({ - text, - type: "error" + text: "Successfully updated auth template", + type: "success" + }); + } else { + await createTemplate({ + organizationId: orgId, + name: data.name, + authMethod: data.method, + templateFields: { + url: data.url, + bindDN: data.bindDN, + bindPass: data.bindPass, + searchBase: data.searchBase, + ldapCaCertificate: data.ldapCaCertificate + } + }); + createNotification({ + text: "Successfully created auth template", + type: "success" }); } + + handlePopUpToggle(isEdit ? "editTemplate" : "createTemplate", false); + reset(); }; const handleClose = () => { diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAwsAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAwsAuthForm.tsx index 7e3292c18..db1066731 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAwsAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAwsAuthForm.tsx @@ -147,49 +147,42 @@ export const IdentityAwsAuthForm = ({ accessTokenNumUsesLimit, accessTokenTrustedIps }: FormData) => { - try { - if (!identityId) return; + if (!identityId) return; - if (data) { - await updateMutateAsync({ - organizationId: orgId, - stsEndpoint, - allowedPrincipalArns, - allowedAccountIds, - identityId, - accessTokenTTL: Number(accessTokenTTL), - accessTokenMaxTTL: Number(accessTokenMaxTTL), - accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), - accessTokenTrustedIps - }); - } else { - await addMutateAsync({ - organizationId: orgId, - identityId, - stsEndpoint: stsEndpoint || "", - allowedPrincipalArns: allowedPrincipalArns || "", - allowedAccountIds: allowedAccountIds || "", - accessTokenTTL: Number(accessTokenTTL), - accessTokenMaxTTL: Number(accessTokenMaxTTL), - accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), - accessTokenTrustedIps - }); - } - - handlePopUpToggle("identityAuthMethod", false); - - createNotification({ - text: `Successfully ${isUpdate ? "updated" : "configured"} auth method`, - type: "success" + if (data) { + await updateMutateAsync({ + organizationId: orgId, + stsEndpoint, + allowedPrincipalArns, + allowedAccountIds, + identityId, + accessTokenTTL: Number(accessTokenTTL), + accessTokenMaxTTL: Number(accessTokenMaxTTL), + accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), + accessTokenTrustedIps }); - - reset(); - } catch { - createNotification({ - text: `Failed to ${isUpdate ? "update" : "configure"} identity`, - type: "error" + } else { + await addMutateAsync({ + organizationId: orgId, + identityId, + stsEndpoint: stsEndpoint || "", + allowedPrincipalArns: allowedPrincipalArns || "", + allowedAccountIds: allowedAccountIds || "", + accessTokenTTL: Number(accessTokenTTL), + accessTokenMaxTTL: Number(accessTokenMaxTTL), + accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), + accessTokenTrustedIps }); } + + handlePopUpToggle("identityAuthMethod", false); + + createNotification({ + text: `Successfully ${isUpdate ? "updated" : "configured"} auth method`, + type: "success" + }); + + reset(); }; return ( diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAzureAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAzureAuthForm.tsx index 518d97e7b..86f22c27e 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAzureAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAzureAuthForm.tsx @@ -143,49 +143,42 @@ export const IdentityAzureAuthForm = ({ accessTokenNumUsesLimit, accessTokenTrustedIps }: FormData) => { - try { - if (!identityId) return; + if (!identityId) return; - if (data) { - await updateMutateAsync({ - organizationId: orgId, - identityId, - tenantId, - resource, - allowedServicePrincipalIds, - accessTokenTTL: Number(accessTokenTTL), - accessTokenMaxTTL: Number(accessTokenMaxTTL), - accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), - accessTokenTrustedIps - }); - } else { - await addMutateAsync({ - organizationId: orgId, - identityId, - tenantId: tenantId || "", - resource: resource || "", - allowedServicePrincipalIds: allowedServicePrincipalIds || "", - accessTokenTTL: Number(accessTokenTTL), - accessTokenMaxTTL: Number(accessTokenMaxTTL), - accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), - accessTokenTrustedIps - }); - } - - handlePopUpToggle("identityAuthMethod", false); - - createNotification({ - text: `Successfully ${isUpdate ? "updated" : "configured"} auth method`, - type: "success" + if (data) { + await updateMutateAsync({ + organizationId: orgId, + identityId, + tenantId, + resource, + allowedServicePrincipalIds, + accessTokenTTL: Number(accessTokenTTL), + accessTokenMaxTTL: Number(accessTokenMaxTTL), + accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), + accessTokenTrustedIps }); - - reset(); - } catch { - createNotification({ - text: `Failed to ${isUpdate ? "update" : "configure"} identity`, - type: "error" + } else { + await addMutateAsync({ + organizationId: orgId, + identityId, + tenantId: tenantId || "", + resource: resource || "", + allowedServicePrincipalIds: allowedServicePrincipalIds || "", + accessTokenTTL: Number(accessTokenTTL), + accessTokenMaxTTL: Number(accessTokenMaxTTL), + accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), + accessTokenTrustedIps }); } + + handlePopUpToggle("identityAuthMethod", false); + + createNotification({ + text: `Successfully ${isUpdate ? "updated" : "configured"} auth method`, + type: "success" + }); + + reset(); }; return ( diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityGcpAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityGcpAuthForm.tsx index 7175e8b62..4d6ea63b2 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityGcpAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityGcpAuthForm.tsx @@ -152,51 +152,44 @@ export const IdentityGcpAuthForm = ({ accessTokenNumUsesLimit, accessTokenTrustedIps }: FormData) => { - try { - if (!identityId) return; + if (!identityId) return; - if (data) { - await updateMutateAsync({ - identityId, - organizationId: orgId, - type, - allowedServiceAccounts, - allowedProjects, - allowedZones, - accessTokenTTL: Number(accessTokenTTL), - accessTokenMaxTTL: Number(accessTokenMaxTTL), - accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), - accessTokenTrustedIps - }); - } else { - await addMutateAsync({ - identityId, - organizationId: orgId, - type, - allowedServiceAccounts: allowedServiceAccounts || "", - allowedProjects: allowedProjects || "", - allowedZones: allowedZones || "", - accessTokenTTL: Number(accessTokenTTL), - accessTokenMaxTTL: Number(accessTokenMaxTTL), - accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), - accessTokenTrustedIps - }); - } - - handlePopUpToggle("identityAuthMethod", false); - - createNotification({ - text: `Successfully ${isUpdate ? "updated" : "configured"} auth method`, - type: "success" + if (data) { + await updateMutateAsync({ + identityId, + organizationId: orgId, + type, + allowedServiceAccounts, + allowedProjects, + allowedZones, + accessTokenTTL: Number(accessTokenTTL), + accessTokenMaxTTL: Number(accessTokenMaxTTL), + accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), + accessTokenTrustedIps }); - - reset(); - } catch { - createNotification({ - text: `Failed to ${isUpdate ? "update" : "configure"} identity`, - type: "error" + } else { + await addMutateAsync({ + identityId, + organizationId: orgId, + type, + allowedServiceAccounts: allowedServiceAccounts || "", + allowedProjects: allowedProjects || "", + allowedZones: allowedZones || "", + accessTokenTTL: Number(accessTokenTTL), + accessTokenMaxTTL: Number(accessTokenMaxTTL), + accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), + accessTokenTrustedIps }); } + + handlePopUpToggle("identityAuthMethod", false); + + createNotification({ + text: `Successfully ${isUpdate ? "updated" : "configured"} auth method`, + type: "success" + }); + + reset(); }; return ( diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityJwtAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityJwtAuthForm.tsx index f62045810..dfc079790 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityJwtAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityJwtAuthForm.tsx @@ -217,61 +217,54 @@ export const IdentityJwtAuthForm = ({ boundClaims, boundSubject }: FormData) => { - try { - if (!identityId) { - return; - } + if (!identityId) { + return; + } - if (data) { - await updateMutateAsync({ - identityId, - organizationId: orgId, - configurationType, - jwksUrl, - jwksCaCert, - publicKeys: publicKeys?.map((field) => field.value).filter(Boolean), - boundIssuer, - boundAudiences, - boundClaims: Object.fromEntries(boundClaims.map((entry) => [entry.key, entry.value])), - boundSubject, - accessTokenTTL: Number(accessTokenTTL), - accessTokenMaxTTL: Number(accessTokenMaxTTL), - accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), - accessTokenTrustedIps - }); - } else { - await addMutateAsync({ - identityId, - configurationType, - jwksUrl, - jwksCaCert, - publicKeys: publicKeys?.map((field) => field.value).filter(Boolean), - boundIssuer, - boundAudiences, - boundClaims: Object.fromEntries(boundClaims.map((entry) => [entry.key, entry.value])), - boundSubject, - organizationId: orgId, - accessTokenTTL: Number(accessTokenTTL), - accessTokenMaxTTL: Number(accessTokenMaxTTL), - accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), - accessTokenTrustedIps - }); - } - - handlePopUpToggle("identityAuthMethod", false); - - createNotification({ - text: `Successfully ${isUpdate ? "updated" : "configured"} auth method`, - type: "success" + if (data) { + await updateMutateAsync({ + identityId, + organizationId: orgId, + configurationType, + jwksUrl, + jwksCaCert, + publicKeys: publicKeys?.map((field) => field.value).filter(Boolean), + boundIssuer, + boundAudiences, + boundClaims: Object.fromEntries(boundClaims.map((entry) => [entry.key, entry.value])), + boundSubject, + accessTokenTTL: Number(accessTokenTTL), + accessTokenMaxTTL: Number(accessTokenMaxTTL), + accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), + accessTokenTrustedIps }); - - reset(); - } catch { - createNotification({ - text: `Failed to ${isUpdate ? "update" : "configure"} identity`, - type: "error" + } else { + await addMutateAsync({ + identityId, + configurationType, + jwksUrl, + jwksCaCert, + publicKeys: publicKeys?.map((field) => field.value).filter(Boolean), + boundIssuer, + boundAudiences, + boundClaims: Object.fromEntries(boundClaims.map((entry) => [entry.key, entry.value])), + boundSubject, + organizationId: orgId, + accessTokenTTL: Number(accessTokenTTL), + accessTokenMaxTTL: Number(accessTokenMaxTTL), + accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), + accessTokenTrustedIps }); } + + handlePopUpToggle("identityAuthMethod", false); + + createNotification({ + text: `Successfully ${isUpdate ? "updated" : "configured"} auth method`, + type: "success" + }); + + reset(); }; return ( diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityKubernetesAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityKubernetesAuthForm.tsx index 9b8624990..7fedf4a99 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityKubernetesAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityKubernetesAuthForm.tsx @@ -311,71 +311,64 @@ export const IdentityKubernetesAuthForm = ({ tokenReviewMode, accessTokenTrustedIps }: FormData) => { - try { - if (!identityId) return; + if (!identityId) return; - if (data) { - await updateMutateAsync({ - organizationId: orgId, - ...(tokenReviewMode === IdentityKubernetesAuthTokenReviewMode.Api - ? { - kubernetesHost: kubernetesHost || "" - } - : { - kubernetesHost: null - }), - tokenReviewerJwt: tokenReviewerJwt || null, - allowedNames, - allowedNamespaces, - allowedAudience, - caCert, - identityId, - gatewayId: gatewayId || null, - tokenReviewMode, - accessTokenTTL: Number(accessTokenTTL), - accessTokenMaxTTL: Number(accessTokenMaxTTL), - accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), - accessTokenTrustedIps - }); - } else { - await addMutateAsync({ - organizationId: orgId, - identityId, - ...(tokenReviewMode === IdentityKubernetesAuthTokenReviewMode.Api - ? { - kubernetesHost: kubernetesHost || "" - } - : { - kubernetesHost: null - }), - tokenReviewerJwt: tokenReviewerJwt || undefined, - allowedNames: allowedNames || "", - allowedNamespaces: allowedNamespaces || "", - allowedAudience: allowedAudience || "", - gatewayId: gatewayId || null, - caCert: caCert || "", - tokenReviewMode, - accessTokenTTL: Number(accessTokenTTL), - accessTokenMaxTTL: Number(accessTokenMaxTTL), - accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), - accessTokenTrustedIps - }); - } - - handlePopUpToggle("identityAuthMethod", false); - - createNotification({ - text: `Successfully ${isUpdate ? "updated" : "configured"} auth method`, - type: "success" + if (data) { + await updateMutateAsync({ + organizationId: orgId, + ...(tokenReviewMode === IdentityKubernetesAuthTokenReviewMode.Api + ? { + kubernetesHost: kubernetesHost || "" + } + : { + kubernetesHost: null + }), + tokenReviewerJwt: tokenReviewerJwt || null, + allowedNames, + allowedNamespaces, + allowedAudience, + caCert, + identityId, + gatewayId: gatewayId || null, + tokenReviewMode, + accessTokenTTL: Number(accessTokenTTL), + accessTokenMaxTTL: Number(accessTokenMaxTTL), + accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), + accessTokenTrustedIps }); - - reset(); - } catch { - createNotification({ - text: `Failed to ${isUpdate ? "update" : "configure"} identity`, - type: "error" + } else { + await addMutateAsync({ + organizationId: orgId, + identityId, + ...(tokenReviewMode === IdentityKubernetesAuthTokenReviewMode.Api + ? { + kubernetesHost: kubernetesHost || "" + } + : { + kubernetesHost: null + }), + tokenReviewerJwt: tokenReviewerJwt || undefined, + allowedNames: allowedNames || "", + allowedNamespaces: allowedNamespaces || "", + allowedAudience: allowedAudience || "", + gatewayId: gatewayId || null, + caCert: caCert || "", + tokenReviewMode, + accessTokenTTL: Number(accessTokenTTL), + accessTokenMaxTTL: Number(accessTokenMaxTTL), + accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), + accessTokenTrustedIps }); } + + handlePopUpToggle("identityAuthMethod", false); + + createNotification({ + text: `Successfully ${isUpdate ? "updated" : "configured"} auth method`, + type: "success" + }); + + reset(); }; const tokenReviewMode = watch("tokenReviewMode"); diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityLdapAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityLdapAuthForm.tsx index b2096fa06..44b3a32de 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityLdapAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityLdapAuthForm.tsx @@ -316,83 +316,76 @@ export const IdentityLdapAuthForm = ({ }, [subscription, handlePopUpOpen, handlePopUpToggle]); const onFormSubmit = async (formData: FormData) => { - try { - if (!identityId) return; + if (!identityId) return; - const { - scope: submissionScope, - templateId: submissionTemplateId, - url: submissionUrl, - bindDN: submissionBindDN, - bindPass: submissionBindPass, - searchBase: submissionSearchBase, - searchFilter, - ldapCaCertificate, - allowedFields, - accessTokenTTL, - accessTokenMaxTTL, - accessTokenNumUsesLimit, - accessTokenTrustedIps, - lockoutEnabled, - lockoutThreshold, - lockoutDurationValue, - lockoutDurationUnit, - lockoutCounterResetValue, - lockoutCounterResetUnit - } = formData; + const { + scope: submissionScope, + templateId: submissionTemplateId, + url: submissionUrl, + bindDN: submissionBindDN, + bindPass: submissionBindPass, + searchBase: submissionSearchBase, + searchFilter, + ldapCaCertificate, + allowedFields, + accessTokenTTL, + accessTokenMaxTTL, + accessTokenNumUsesLimit, + accessTokenTrustedIps, + lockoutEnabled, + lockoutThreshold, + lockoutDurationValue, + lockoutDurationUnit, + lockoutCounterResetValue, + lockoutCounterResetUnit + } = formData; - const lockoutDurationSeconds = ms(`${lockoutDurationValue}${lockoutDurationUnit}`) / 1000; - const lockoutCounterResetSeconds = - ms(`${lockoutCounterResetValue}${lockoutCounterResetUnit}`) / 1000; + const lockoutDurationSeconds = ms(`${lockoutDurationValue}${lockoutDurationUnit}`) / 1000; + const lockoutCounterResetSeconds = + ms(`${lockoutCounterResetValue}${lockoutCounterResetUnit}`) / 1000; - const basePayload = { - organizationId: orgId, - identityId, - searchFilter, - ldapCaCertificate, - allowedFields, - accessTokenTTL: Number(accessTokenTTL), - accessTokenMaxTTL: Number(accessTokenMaxTTL), - accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), - accessTokenTrustedIps, - lockoutEnabled, - lockoutThreshold: Number(lockoutThreshold), - lockoutDurationSeconds, - lockoutCounterResetSeconds - }; + const basePayload = { + organizationId: orgId, + identityId, + searchFilter, + ldapCaCertificate, + allowedFields, + accessTokenTTL: Number(accessTokenTTL), + accessTokenMaxTTL: Number(accessTokenMaxTTL), + accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), + accessTokenTrustedIps, + lockoutEnabled, + lockoutThreshold: Number(lockoutThreshold), + lockoutDurationSeconds, + lockoutCounterResetSeconds + }; - // Add scope-specific fields - const payload = - submissionScope === "template" - ? { ...basePayload, templateId: submissionTemplateId } - : { - ...basePayload, - url: submissionUrl, - bindDN: submissionBindDN, - bindPass: submissionBindPass, - searchBase: submissionSearchBase - }; + // Add scope-specific fields + const payload = + submissionScope === "template" + ? { ...basePayload, templateId: submissionTemplateId } + : { + ...basePayload, + url: submissionUrl, + bindDN: submissionBindDN, + bindPass: submissionBindPass, + searchBase: submissionSearchBase + }; - if (data) { - await updateMutateAsync(payload); - } else { - await addMutateAsync(payload); - } - - handlePopUpToggle("identityAuthMethod", false); - - createNotification({ - text: `Successfully ${isUpdate ? "updated" : "configured"} auth method`, - type: "success" - }); - - reset(); - } catch { - createNotification({ - text: `Failed to ${isUpdate ? "update" : "configure"} identity`, - type: "error" - }); + if (data) { + await updateMutateAsync(payload); + } else { + await addMutateAsync(payload); } + + handlePopUpToggle("identityAuthMethod", false); + + createNotification({ + text: `Successfully ${isUpdate ? "updated" : "configured"} auth method`, + type: "success" + }); + + reset(); }; return ( diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityLinkForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityLinkForm.tsx index b0977437b..545aea5aa 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityLinkForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityLinkForm.tsx @@ -42,31 +42,20 @@ export const IdentityLinkForm = ({ onClose }: Props) => { }); const onFormSubmit = async ({ identity, role }: FormData) => { - try { - await createMutateAsync({ - identityId: identity.id, - roles: [{ role: role.slug, isTemporary: false }] - }); - createNotification({ - text: "Successfully linked identity", - type: "success" - }); - navigate({ - to: "/organization/identities/$identityId", - params: { - identityId: identity.id - } - }); - } catch (err) { - console.error(err); - const error = err as any; - const text = error?.response?.data?.message ?? "Failed to link identity"; - - createNotification({ - text, - type: "error" - }); - } + await createMutateAsync({ + identityId: identity.id, + roles: [{ role: role.slug, isTemporary: false }] + }); + createNotification({ + text: "Successfully linked identity", + type: "success" + }); + navigate({ + to: "/organization/identities/$identityId", + params: { + identityId: identity.id + } + }); }; return ( diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityModal.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityModal.tsx index dacbba428..09e779fa9 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityModal.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityModal.tsx @@ -108,81 +108,68 @@ export const IdentityModal = ({ popUp, handlePopUpToggle }: Props) => { }, [popUp?.identity?.data, roles]); const onFormSubmit = async ({ name, role, metadata, hasDeleteProtection }: FormData) => { - try { - const identity = popUp?.identity?.data as { - identityId: string; - name: string; - role: string; - hasDeleteProtection: boolean; - orgId: string; - }; + const identity = popUp?.identity?.data as { + identityId: string; + name: string; + role: string; + hasDeleteProtection: boolean; + orgId: string; + }; - if (identity) { - // update + if (identity) { + // update - await updateMutateAsync({ - identityId: identity.identityId, - name, - role: role.slug || undefined, - hasDeleteProtection, - organizationId: orgId, - metadata - }); - - handlePopUpToggle("identity", false); - } else { - // create - - const { id: createdId } = await createMutateAsync({ - name, - role: role.slug || undefined, - hasDeleteProtection, - organizationId: orgId, - metadata - }); - - await addMutateAsync({ - organizationId: orgId, - identityId: createdId, - clientSecretTrustedIps: [{ ipAddress: "0.0.0.0/0" }, { ipAddress: "::/0" }], - accessTokenTrustedIps: [{ ipAddress: "0.0.0.0/0" }, { ipAddress: "::/0" }], - accessTokenTTL: 2592000, - accessTokenMaxTTL: 2592000, - accessTokenNumUsesLimit: 0, - accessTokenPeriod: 0, - lockoutEnabled: true, - lockoutThreshold: 3, - lockoutDurationSeconds: 300, - lockoutCounterResetSeconds: 30 - }); - - handlePopUpToggle("identity", false); - navigate({ - to: "/organization/identities/$identityId", - params: { - identityId: createdId - } - }); - } - - createNotification({ - text: `Successfully ${popUp?.identity?.data ? "updated" : "created"} identity`, - type: "success" + await updateMutateAsync({ + identityId: identity.identityId, + name, + role: role.slug || undefined, + hasDeleteProtection, + organizationId: orgId, + metadata }); - reset(); - } catch (err) { - console.error(err); - const error = err as any; - const text = - error?.response?.data?.message ?? - `Failed to ${popUp?.identity?.data ? "update" : "create"} identity`; + handlePopUpToggle("identity", false); + } else { + // create - createNotification({ - text, - type: "error" + const { id: createdId } = await createMutateAsync({ + name, + role: role.slug || undefined, + hasDeleteProtection, + organizationId: orgId, + metadata + }); + + await addMutateAsync({ + organizationId: orgId, + identityId: createdId, + clientSecretTrustedIps: [{ ipAddress: "0.0.0.0/0" }, { ipAddress: "::/0" }], + accessTokenTrustedIps: [{ ipAddress: "0.0.0.0/0" }, { ipAddress: "::/0" }], + accessTokenTTL: 2592000, + accessTokenMaxTTL: 2592000, + accessTokenNumUsesLimit: 0, + accessTokenPeriod: 0, + lockoutEnabled: true, + lockoutThreshold: 3, + lockoutDurationSeconds: 300, + lockoutCounterResetSeconds: 30 + }); + + handlePopUpToggle("identity", false); + navigate({ + to: "/organization/identities/$identityId", + params: { + identityId: createdId + } }); } + + createNotification({ + text: `Successfully ${popUp?.identity?.data ? "updated" : "created"} identity`, + type: "success" + }); + + reset(); }; return ( diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityOciAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityOciAuthForm.tsx index 5e33c71bb..ffbde6f7a 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityOciAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityOciAuthForm.tsx @@ -149,47 +149,40 @@ export const IdentityOciAuthForm = ({ accessTokenNumUsesLimit, accessTokenTrustedIps }: FormData) => { - try { - if (!identityId) return; + if (!identityId) return; - if (data) { - await updateMutateAsync({ - organizationId: orgId, - tenancyOcid, - allowedUsernames, - identityId, - accessTokenTTL: Number(accessTokenTTL), - accessTokenMaxTTL: Number(accessTokenMaxTTL), - accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), - accessTokenTrustedIps - }); - } else { - await addMutateAsync({ - organizationId: orgId, - identityId, - tenancyOcid, - allowedUsernames: allowedUsernames || undefined, - accessTokenTTL: Number(accessTokenTTL), - accessTokenMaxTTL: Number(accessTokenMaxTTL), - accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), - accessTokenTrustedIps - }); - } - - handlePopUpToggle("identityAuthMethod", false); - - createNotification({ - text: `Successfully ${isUpdate ? "updated" : "configured"} auth method`, - type: "success" + if (data) { + await updateMutateAsync({ + organizationId: orgId, + tenancyOcid, + allowedUsernames, + identityId, + accessTokenTTL: Number(accessTokenTTL), + accessTokenMaxTTL: Number(accessTokenMaxTTL), + accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), + accessTokenTrustedIps }); - - reset(); - } catch { - createNotification({ - text: `Failed to ${isUpdate ? "update" : "configure"} identity`, - type: "error" + } else { + await addMutateAsync({ + organizationId: orgId, + identityId, + tenancyOcid, + allowedUsernames: allowedUsernames || undefined, + accessTokenTTL: Number(accessTokenTTL), + accessTokenMaxTTL: Number(accessTokenMaxTTL), + accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), + accessTokenTrustedIps }); } + + handlePopUpToggle("identityAuthMethod", false); + + createNotification({ + text: `Successfully ${isUpdate ? "updated" : "configured"} auth method`, + type: "success" + }); + + reset(); }; return ( diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityOidcAuthForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityOidcAuthForm.tsx index 15fbc4b72..0ada2e663 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityOidcAuthForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityOidcAuthForm.tsx @@ -201,63 +201,56 @@ export const IdentityOidcAuthForm = ({ claimMetadataMapping, boundSubject }: FormData) => { - try { - if (!identityId) { - return; - } + if (!identityId) { + return; + } - if (data) { - await updateMutateAsync({ - identityId, - organizationId: orgId, - oidcDiscoveryUrl, - caCert, - boundIssuer, - boundAudiences, - boundClaims: Object.fromEntries(boundClaims.map((entry) => [entry.key, entry.value])), - claimMetadataMapping: claimMetadataMapping - ? Object.fromEntries(claimMetadataMapping.map((entry) => [entry.key, entry.value])) - : undefined, - boundSubject, - accessTokenTTL: Number(accessTokenTTL), - accessTokenMaxTTL: Number(accessTokenMaxTTL), - accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), - accessTokenTrustedIps - }); - } else { - await addMutateAsync({ - identityId, - oidcDiscoveryUrl, - caCert, - boundIssuer, - boundAudiences, - boundClaims: Object.fromEntries(boundClaims.map((entry) => [entry.key, entry.value])), - claimMetadataMapping: claimMetadataMapping - ? Object.fromEntries(claimMetadataMapping.map((entry) => [entry.key, entry.value])) - : undefined, - boundSubject, - organizationId: orgId, - accessTokenTTL: Number(accessTokenTTL), - accessTokenMaxTTL: Number(accessTokenMaxTTL), - accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), - accessTokenTrustedIps - }); - } - - handlePopUpToggle("identityAuthMethod", false); - - createNotification({ - text: `Successfully ${isUpdate ? "updated" : "configured"} auth method`, - type: "success" + if (data) { + await updateMutateAsync({ + identityId, + organizationId: orgId, + oidcDiscoveryUrl, + caCert, + boundIssuer, + boundAudiences, + boundClaims: Object.fromEntries(boundClaims.map((entry) => [entry.key, entry.value])), + claimMetadataMapping: claimMetadataMapping + ? Object.fromEntries(claimMetadataMapping.map((entry) => [entry.key, entry.value])) + : undefined, + boundSubject, + accessTokenTTL: Number(accessTokenTTL), + accessTokenMaxTTL: Number(accessTokenMaxTTL), + accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), + accessTokenTrustedIps }); - - reset(); - } catch { - createNotification({ - text: `Failed to ${isUpdate ? "update" : "configure"} identity`, - type: "error" + } else { + await addMutateAsync({ + identityId, + oidcDiscoveryUrl, + caCert, + boundIssuer, + boundAudiences, + boundClaims: Object.fromEntries(boundClaims.map((entry) => [entry.key, entry.value])), + claimMetadataMapping: claimMetadataMapping + ? Object.fromEntries(claimMetadataMapping.map((entry) => [entry.key, entry.value])) + : undefined, + boundSubject, + organizationId: orgId, + accessTokenTTL: Number(accessTokenTTL), + accessTokenMaxTTL: Number(accessTokenMaxTTL), + accessTokenNumUsesLimit: Number(accessTokenNumUsesLimit), + accessTokenTrustedIps }); } + + handlePopUpToggle("identityAuthMethod", false); + + createNotification({ + text: `Successfully ${isUpdate ? "updated" : "configured"} auth method`, + type: "success" + }); + + reset(); }; return ( From 29d0fe8073404f9a432f477ef10601bf6ebdca5c Mon Sep 17 00:00:00 2001 From: x032205 Date: Fri, 31 Oct 2025 19:04:27 -0400 Subject: [PATCH 24/79] a few review improvements + lint --- backend/src/lib/api-docs/constants.ts | 2 +- .../services/app-connection/app-connection-types.ts | 12 ++++++------ .../app-connection/chef/chef-connection-service.ts | 1 - docs/integrations/app-connections/chef.mdx | 4 ++-- docs/integrations/secret-syncs/chef.mdx | 8 ++++---- .../SecretSyncDestinationFields/ChefSyncFields.tsx | 4 ++-- .../SecretSyncDestinationFields.tsx | 2 +- .../SecretSyncReviewFields.tsx | 2 +- .../forms/schemas/chef-sync-destination-schema.ts | 4 ++-- .../secret-syncs/forms/schemas/secret-sync-schema.ts | 2 +- frontend/src/helpers/appConnections.ts | 2 +- frontend/src/hooks/api/appConnections/types/index.ts | 4 ++-- frontend/src/hooks/api/secretSyncs/types/index.ts | 2 +- .../AppConnectionForm/ChefConnectionForm.tsx | 2 +- .../SecretSyncDestinationCol.tsx | 2 +- .../SecretSyncDestinatonSection.tsx | 2 +- 16 files changed, 27 insertions(+), 28 deletions(-) diff --git a/backend/src/lib/api-docs/constants.ts b/backend/src/lib/api-docs/constants.ts index 3a62a4790..0cb606cbf 100644 --- a/backend/src/lib/api-docs/constants.ts +++ b/backend/src/lib/api-docs/constants.ts @@ -2382,7 +2382,7 @@ export const AppConnections = { }, CHEF: { serverUrl: "The URL of the Chef server to connect to.", - orgName: "The name of the Chef organization to connect to.", + orgName: "The short name of the Chef organization to connect to.", userName: "The username used to access Chef.", privateKey: "The private key used to access Chef." } diff --git a/backend/src/services/app-connection/app-connection-types.ts b/backend/src/services/app-connection/app-connection-types.ts index 47c559ebb..f5116a56a 100644 --- a/backend/src/services/app-connection/app-connection-types.ts +++ b/backend/src/services/app-connection/app-connection-types.ts @@ -82,6 +82,12 @@ import { TChecklyConnectionInput, TValidateChecklyConnectionCredentialsSchema } from "./checkly"; +import { + TChefConnection, + TChefConnectionConfig, + TChefConnectionInput, + TValidateChefConnectionCredentialsSchema +} from "./chef"; import { TCloudflareConnection, TCloudflareConnectionConfig, @@ -239,12 +245,6 @@ import { TZabbixConnectionConfig, TZabbixConnectionInput } from "./zabbix"; -import { - TChefConnection, - TChefConnectionConfig, - TChefConnectionInput, - TValidateChefConnectionCredentialsSchema -} from "./chef"; export type TAppConnection = { id: string } & ( | TAwsConnection diff --git a/backend/src/services/app-connection/chef/chef-connection-service.ts b/backend/src/services/app-connection/chef/chef-connection-service.ts index 8357a8e4d..c989e7eaf 100644 --- a/backend/src/services/app-connection/chef/chef-connection-service.ts +++ b/backend/src/services/app-connection/chef/chef-connection-service.ts @@ -1,5 +1,4 @@ import { ForbiddenRequestError } from "@app/lib/errors"; -// import { logger } from "@app/lib/logger"; import { OrgServiceActor } from "@app/lib/types"; import { AppConnection } from "../app-connection-enums"; diff --git a/docs/integrations/app-connections/chef.mdx b/docs/integrations/app-connections/chef.mdx index 8e22b808d..60c49fb1f 100644 --- a/docs/integrations/app-connections/chef.mdx +++ b/docs/integrations/app-connections/chef.mdx @@ -77,8 +77,8 @@ Please access your **starter kit** to get all the required information to create Complete the form by providing: - A descriptive name for the connection - An optional description - - Server URL(optional): The URL of the Chef server to connect to(defaults to https://api.chef.io) - - Organization name + - Server URL(optional): The URL of the Chef server to connect with (defaults to https://api.chef.io) + - Organization short name - User name - Private key: Your Chef user's private key (.pem file) diff --git a/docs/integrations/secret-syncs/chef.mdx b/docs/integrations/secret-syncs/chef.mdx index 17daaf37d..13f3b3474 100644 --- a/docs/integrations/secret-syncs/chef.mdx +++ b/docs/integrations/secret-syncs/chef.mdx @@ -36,8 +36,8 @@ description: "Learn how to configure a Chef Sync for Infisical." ![Configure Destination](/images/secret-syncs/chef/sync-destination.png) - **Chef Connection**: The Chef Connection to authenticate with. - - **Data Bag**: The Data Bag Name to sync secrets to. - - **Data Bag Item**: The Data Bag Item Name to sync secrets to. + - **Data Bag**: The Data Bag to sync secrets to. + - **Data Bag Item**: The Data Bag Item to sync secrets to. Configure the **Sync Options** to specify how secrets should be synced, then click **Next**. @@ -46,8 +46,8 @@ description: "Learn how to configure a Chef Sync for Infisical." - **Initial Sync Behavior**: Determines how Infisical should resolve the initial sync. - **Overwrite Destination Secrets**: Removes any secrets at the destination endpoint not present in Infisical. - - **Import Secrets (Prioritize Infisical)**: Imports secrets from the destination endpoint before syncing, prioritizing values from Infisical over Laravel Forge when keys conflict. - - **Import Secrets (Prioritize Laravel Forge)**: Imports secrets from the destination endpoint before syncing, prioritizing values from Laravel Forge over Infisical when keys conflict. + - **Import Secrets (Prioritize Infisical)**: Imports secrets from the destination endpoint before syncing, prioritizing values from Infisical over Chef when keys conflict. + - **Import Secrets (Prioritize Chef)**: Imports secrets from the destination endpoint before syncing, prioritizing values from Chef over Infisical when keys conflict. - **Key Schema**: Template that determines how secret names are transformed when syncing, using `{{secretKey}}` as a placeholder for the original secret name and `{{environment}}` for the environment. We highly recommend using a Key Schema to ensure that Infisical only manages the specific keys you intend, keeping everything else untouched. diff --git a/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/ChefSyncFields.tsx b/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/ChefSyncFields.tsx index 363f682fd..bf5e0908c 100644 --- a/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/ChefSyncFields.tsx +++ b/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/ChefSyncFields.tsx @@ -5,9 +5,9 @@ import { SecretSyncConnectionField } from "@app/components/secret-syncs/forms/Se import { FilterableSelect, FormControl } from "@app/components/v2"; import { TChefDataBag, - useChefConnectionListDataBags, + TChefDataBagItem, useChefConnectionListDataBagItems, - TChefDataBagItem + useChefConnectionListDataBags } from "@app/hooks/api/appConnections/chef"; import { SecretSync } from "@app/hooks/api/secretSyncs"; diff --git a/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/SecretSyncDestinationFields.tsx b/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/SecretSyncDestinationFields.tsx index a7a4bcbe5..50fee8b9b 100644 --- a/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/SecretSyncDestinationFields.tsx +++ b/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/SecretSyncDestinationFields.tsx @@ -12,6 +12,7 @@ import { AzureKeyVaultSyncFields } from "./AzureKeyVaultSyncFields"; import { BitbucketSyncFields } from "./BitbucketSyncFields"; import { CamundaSyncFields } from "./CamundaSyncFields"; import { ChecklySyncFields } from "./ChecklySyncFields"; +import { ChefSyncFields } from "./ChefSyncFields"; import { CloudflarePagesSyncFields } from "./CloudflarePagesSyncFields"; import { CloudflareWorkersSyncFields } from "./CloudflareWorkersSyncFields"; import { DatabricksSyncFields } from "./DatabricksSyncFields"; @@ -35,7 +36,6 @@ import { TerraformCloudSyncFields } from "./TerraformCloudSyncFields"; import { VercelSyncFields } from "./VercelSyncFields"; import { WindmillSyncFields } from "./WindmillSyncFields"; import { ZabbixSyncFields } from "./ZabbixSyncFields"; -import { ChefSyncFields } from "./ChefSyncFields"; export const SecretSyncDestinationFields = () => { const { watch } = useFormContext(); diff --git a/frontend/src/components/secret-syncs/forms/SecretSyncReviewFields/SecretSyncReviewFields.tsx b/frontend/src/components/secret-syncs/forms/SecretSyncReviewFields/SecretSyncReviewFields.tsx index af0748db7..940b3c173 100644 --- a/frontend/src/components/secret-syncs/forms/SecretSyncReviewFields/SecretSyncReviewFields.tsx +++ b/frontend/src/components/secret-syncs/forms/SecretSyncReviewFields/SecretSyncReviewFields.tsx @@ -24,6 +24,7 @@ import { AzureKeyVaultSyncReviewFields } from "./AzureKeyVaultSyncReviewFields"; import { BitbucketSyncReviewFields } from "./BitbucketSyncReviewFields"; import { CamundaSyncReviewFields } from "./CamundaSyncReviewFields"; import { ChecklySyncReviewFields } from "./ChecklySyncReviewFields"; +import { ChefSyncReviewFields } from "./ChefSyncReviewFields"; import { CloudflarePagesSyncReviewFields } from "./CloudflarePagesReviewFields"; import { CloudflareWorkersSyncReviewFields } from "./CloudflareWorkersReviewFields"; import { DatabricksSyncReviewFields } from "./DatabricksSyncReviewFields"; @@ -48,7 +49,6 @@ import { TerraformCloudSyncReviewFields } from "./TerraformCloudSyncReviewFields import { VercelSyncReviewFields } from "./VercelSyncReviewFields"; import { WindmillSyncReviewFields } from "./WindmillSyncReviewFields"; import { ZabbixSyncReviewFields } from "./ZabbixSyncReviewFields"; -import { ChefSyncReviewFields } from "./ChefSyncReviewFields"; export const SecretSyncReviewFields = () => { const { watch } = useFormContext(); diff --git a/frontend/src/components/secret-syncs/forms/schemas/chef-sync-destination-schema.ts b/frontend/src/components/secret-syncs/forms/schemas/chef-sync-destination-schema.ts index b69781ce1..8d27b616f 100644 --- a/frontend/src/components/secret-syncs/forms/schemas/chef-sync-destination-schema.ts +++ b/frontend/src/components/secret-syncs/forms/schemas/chef-sync-destination-schema.ts @@ -7,8 +7,8 @@ export const ChefSyncDestinationSchema = BaseSecretSyncSchema().merge( z.object({ destination: z.literal(SecretSync.Chef), destinationConfig: z.object({ - dataBagName: z.string().trim().min(1, "Data Bag Name required"), - dataBagItemName: z.string().trim().min(1, "Data Bag Item Name required") + dataBagName: z.string().trim().min(1, "Data Bag required"), + dataBagItemName: z.string().trim().min(1, "Data Bag Item required") }) }) ); diff --git a/frontend/src/components/secret-syncs/forms/schemas/secret-sync-schema.ts b/frontend/src/components/secret-syncs/forms/schemas/secret-sync-schema.ts index ea3823163..561191da0 100644 --- a/frontend/src/components/secret-syncs/forms/schemas/secret-sync-schema.ts +++ b/frontend/src/components/secret-syncs/forms/schemas/secret-sync-schema.ts @@ -9,6 +9,7 @@ import { AzureKeyVaultSyncDestinationSchema } from "./azure-key-vault-sync-desti import { BitbucketSyncDestinationSchema } from "./bitbucket-sync-destination-schema"; import { CamundaSyncDestinationSchema } from "./camunda-sync-destination-schema"; import { ChecklySyncDestinationSchema } from "./checkly-sync-destination-schema"; +import { ChefSyncDestinationSchema } from "./chef-sync-destination-schema"; import { CloudflarePagesSyncDestinationSchema } from "./cloudflare-pages-sync-destination-schema"; import { CloudflareWorkersSyncDestinationSchema } from "./cloudflare-workers-sync-destination-schema"; import { DatabricksSyncDestinationSchema } from "./databricks-sync-destination-schema"; @@ -32,7 +33,6 @@ import { TerraformCloudSyncDestinationSchema } from "./terraform-cloud-destinati import { VercelSyncDestinationSchema } from "./vercel-sync-destination-schema"; import { WindmillSyncDestinationSchema } from "./windmill-sync-destination-schema"; import { ZabbixSyncDestinationSchema } from "./zabbix-sync-destination-schema"; -import { ChefSyncDestinationSchema } from "./chef-sync-destination-schema"; const SecretSyncUnionSchema = z.discriminatedUnion("destination", [ AwsParameterStoreSyncDestinationSchema, diff --git a/frontend/src/helpers/appConnections.ts b/frontend/src/helpers/appConnections.ts index 1b0d4fd2e..1d0d7bec3 100644 --- a/frontend/src/helpers/appConnections.ts +++ b/frontend/src/helpers/appConnections.ts @@ -46,6 +46,7 @@ import { } from "@app/hooks/api/appConnections/types"; import { BitbucketConnectionMethod } from "@app/hooks/api/appConnections/types/bitbucket-connection"; import { ChecklyConnectionMethod } from "@app/hooks/api/appConnections/types/checkly-connection"; +import { ChefConnectionMethod } from "@app/hooks/api/appConnections/types/chef-connection"; import { DigitalOceanConnectionMethod } from "@app/hooks/api/appConnections/types/digital-ocean"; import { HerokuConnectionMethod } from "@app/hooks/api/appConnections/types/heroku-connection"; import { LaravelForgeConnectionMethod } from "@app/hooks/api/appConnections/types/laravel-forge-connection"; @@ -55,7 +56,6 @@ import { OCIConnectionMethod } from "@app/hooks/api/appConnections/types/oci-con import { RailwayConnectionMethod } from "@app/hooks/api/appConnections/types/railway-connection"; import { RenderConnectionMethod } from "@app/hooks/api/appConnections/types/render-connection"; import { SupabaseConnectionMethod } from "@app/hooks/api/appConnections/types/supabase-connection"; -import { ChefConnectionMethod } from "@app/hooks/api/appConnections/types/chef-connection"; export const APP_CONNECTION_MAP: Record< AppConnection, diff --git a/frontend/src/hooks/api/appConnections/types/index.ts b/frontend/src/hooks/api/appConnections/types/index.ts index 3358c1129..3e62031b3 100644 --- a/frontend/src/hooks/api/appConnections/types/index.ts +++ b/frontend/src/hooks/api/appConnections/types/index.ts @@ -11,6 +11,7 @@ import { TAzureKeyVaultConnection } from "./azure-key-vault-connection"; import { TBitbucketConnection } from "./bitbucket-connection"; import { TCamundaConnection } from "./camunda-connection"; import { TChecklyConnection } from "./checkly-connection"; +import { TChefConnection } from "./chef-connection"; import { TCloudflareConnection } from "./cloudflare-connection"; import { TDatabricksConnection } from "./databricks-connection"; import { TDigitalOceanConnection } from "./digital-ocean"; @@ -41,7 +42,6 @@ import { TTerraformCloudConnection } from "./terraform-cloud-connection"; import { TVercelConnection } from "./vercel-connection"; import { TWindmillConnection } from "./windmill-connection"; import { TZabbixConnection } from "./zabbix-connection"; -import { TChefConnection } from "./chef-connection"; export * from "./1password-connection"; export * from "./auth0-connection"; @@ -54,6 +54,7 @@ export * from "./azure-key-vault-connection"; export * from "./bitbucket-connection"; export * from "./camunda-connection"; export * from "./checkly-connection"; +export * from "./chef-connection"; export * from "./cloudflare-connection"; export * from "./databricks-connection"; export * from "./flyio-connection"; @@ -83,7 +84,6 @@ export * from "./terraform-cloud-connection"; export * from "./vercel-connection"; export * from "./windmill-connection"; export * from "./zabbix-connection"; -export * from "./chef-connection"; export type TAppConnection = | TAwsConnection diff --git a/frontend/src/hooks/api/secretSyncs/types/index.ts b/frontend/src/hooks/api/secretSyncs/types/index.ts index 3611ed2f5..b4088728b 100644 --- a/frontend/src/hooks/api/secretSyncs/types/index.ts +++ b/frontend/src/hooks/api/secretSyncs/types/index.ts @@ -10,6 +10,7 @@ import { TAzureKeyVaultSync } from "./azure-key-vault-sync"; import { TBitbucketSync } from "./bitbucket-sync"; import { TCamundaSync } from "./camunda-sync"; import { TChecklySync } from "./checkly-sync"; +import { TChefSync } from "./chef-sync"; import { TCloudflarePagesSync } from "./cloudflare-pages-sync"; import { TCloudflareWorkersSync } from "./cloudflare-workers-sync"; import { TDatabricksSync } from "./databricks-sync"; @@ -33,7 +34,6 @@ import { TTerraformCloudSync } from "./terraform-cloud-sync"; import { TVercelSync } from "./vercel-sync"; import { TWindmillSync } from "./windmill-sync"; import { TZabbixSync } from "./zabbix-sync"; -import { TChefSync } from "./chef-sync"; export type TSecretSyncOption = { name: string; diff --git a/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/ChefConnectionForm.tsx b/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/ChefConnectionForm.tsx index 3b97ef9ce..862b4e2bd 100644 --- a/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/ChefConnectionForm.tsx +++ b/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/ChefConnectionForm.tsx @@ -123,7 +123,7 @@ export const ChefConnectionForm = ({ appConnection, onSubmit }: Props) => { Date: Fri, 31 Oct 2025 16:17:46 -0700 Subject: [PATCH 25/79] fix: update audit log clear filters to apply to subsequent filter settings --- .../AuditLogsPage/components/LogsFilter.tsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/frontend/src/pages/organization/AuditLogsPage/components/LogsFilter.tsx b/frontend/src/pages/organization/AuditLogsPage/components/LogsFilter.tsx index 72561b90d..8e0124fb5 100644 --- a/frontend/src/pages/organization/AuditLogsPage/components/LogsFilter.tsx +++ b/frontend/src/pages/organization/AuditLogsPage/components/LogsFilter.tsx @@ -165,7 +165,7 @@ export const LogsFilter = ({ presets, setFilter, filter, project }: Props) => { { - resetField("eventType"); + setValue("eventType", [], { shouldDirty: true }); }} > { { - resetField("userAgentType"); + setValue("userAgentType", undefined, { shouldDirty: true }); }} > { { - resetField("project"); - resetField("environment"); - setValue("secretPath", ""); - setValue("secretKey", ""); + setValue("project", null, { shouldDirty: true }); + setValue("environment", undefined, { shouldDirty: true }); + setValue("secretPath", "", { shouldDirty: true }); + setValue("secretKey", "", { shouldDirty: true }); }} > { } className={twMerge(!selectedProject && "opacity-50")} onClear={() => { - resetField("environment"); + setValue("environment", undefined, { shouldDirty: true }); }} > { } className={twMerge(!selectedProject && "opacity-50")} onClear={() => { - setValue("secretPath", ""); + setValue("secretPath", "", { shouldDirty: true }); }} > { className={twMerge(!selectedProject && "opacity-50")} label="Secret Key" onClear={() => { - setValue("secretKey", ""); + setValue("secretKey", "", { shouldDirty: true }); }} > Date: Fri, 31 Oct 2025 20:35:04 -0300 Subject: [PATCH 26/79] Enable creation of PKI Subscribers and Templates using the UI --- .../hooks/api/certificateTemplates/types.ts | 16 +++---- frontend/src/hooks/api/pkiSubscriber/types.ts | 8 ++-- .../components/CertificateTemplateModal.tsx | 8 ++-- .../components/CertificatesSection.tsx | 7 ++- .../components/CertificatesTable.tsx | 7 ++- .../components/PkiSubscriberModal.tsx | 16 +++++-- .../components/PkiSubscriberSection.tsx | 7 ++- .../PkiTemplateListPage.tsx | 45 +++++++++---------- .../components/PkiTemplateForm.tsx | 8 ++-- 9 files changed, 63 insertions(+), 59 deletions(-) diff --git a/frontend/src/hooks/api/certificateTemplates/types.ts b/frontend/src/hooks/api/certificateTemplates/types.ts index 373bbef2a..a6653cbec 100644 --- a/frontend/src/hooks/api/certificateTemplates/types.ts +++ b/frontend/src/hooks/api/certificateTemplates/types.ts @@ -42,8 +42,8 @@ export type TCreateCertificateTemplateDTO = { subjectAlternativeName: string; ttl: string; projectId: string; - keyUsages: CertKeyUsage[]; - extendedKeyUsages: CertExtendedKeyUsage[]; + keyUsages: string[]; + extendedKeyUsages: string[]; }; export type TUpdateCertificateTemplateDTO = { @@ -55,8 +55,8 @@ export type TUpdateCertificateTemplateDTO = { subjectAlternativeName?: string; ttl?: string; projectId: string; - keyUsages?: CertKeyUsage[]; - extendedKeyUsages?: CertExtendedKeyUsage[]; + keyUsages?: string[]; + extendedKeyUsages?: string[]; }; export type TDeleteCertificateTemplateDTO = { @@ -71,8 +71,8 @@ export type TCreateCertificateTemplateV2DTO = { subjectAlternativeName: string; ttl: string; projectId: string; - keyUsages: CertKeyUsage[]; - extendedKeyUsages: CertExtendedKeyUsage[]; + keyUsages: string[]; + extendedKeyUsages: string[]; }; export type TUpdateCertificateTemplateV2DTO = { @@ -83,8 +83,8 @@ export type TUpdateCertificateTemplateV2DTO = { subjectAlternativeName?: string; ttl?: string; projectId: string; - keyUsages?: CertKeyUsage[]; - extendedKeyUsages?: CertExtendedKeyUsage[]; + keyUsages?: string[]; + extendedKeyUsages?: string[]; }; export type TDeleteCertificateTemplateV2DTO = { diff --git a/frontend/src/hooks/api/pkiSubscriber/types.ts b/frontend/src/hooks/api/pkiSubscriber/types.ts index 23ca6baf3..239d56148 100644 --- a/frontend/src/hooks/api/pkiSubscriber/types.ts +++ b/frontend/src/hooks/api/pkiSubscriber/types.ts @@ -47,8 +47,8 @@ export type TCreatePkiSubscriberDTO = { commonName: string; ttl?: string; subjectAlternativeNames: string[]; - keyUsages: CertKeyUsage[]; - extendedKeyUsages: CertExtendedKeyUsage[]; + keyUsages: string[]; + extendedKeyUsages: string[]; enableAutoRenewal?: boolean; autoRenewalPeriodInDays?: number; properties?: TPkiSubscriberProperties; @@ -63,8 +63,8 @@ export type TUpdatePkiSubscriberDTO = { status?: PkiSubscriberStatus; ttl?: string; subjectAlternativeNames?: string[]; - keyUsages?: CertKeyUsage[]; - extendedKeyUsages?: CertExtendedKeyUsage[]; + keyUsages?: string[]; + extendedKeyUsages?: string[]; enableAutoRenewal?: boolean; autoRenewalPeriodInDays?: number; properties?: TPkiSubscriberProperties; diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplateModal.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplateModal.tsx index 9d5d9355f..477aa0356 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplateModal.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplateModal.tsx @@ -172,10 +172,10 @@ export const CertificateTemplateModal = ({ popUp, handlePopUpToggle, caId }: Pro ttl, keyUsages: Object.entries(keyUsages) .filter(([, value]) => value) - .map(([key]) => key as CertKeyUsage), + .map(([key]) => key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase())), extendedKeyUsages: Object.entries(extendedKeyUsages) .filter(([, value]) => value) - .map(([key]) => key as CertExtendedKeyUsage) + .map(([key]) => key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase())) }); createNotification({ @@ -193,10 +193,10 @@ export const CertificateTemplateModal = ({ popUp, handlePopUpToggle, caId }: Pro ttl, keyUsages: Object.entries(keyUsages) .filter(([, value]) => value) - .map(([key]) => key as CertKeyUsage), + .map(([key]) => key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase())), extendedKeyUsages: Object.entries(extendedKeyUsages) .filter(([, value]) => value) - .map(([key]) => key as CertExtendedKeyUsage) + .map(([key]) => key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase())) }); createNotification({ diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesSection.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesSection.tsx index 4102d8ea5..e60dea077 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesSection.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesSection.tsx @@ -7,8 +7,7 @@ import { Button, DeleteActionModal } from "@app/components/v2"; import { ProjectPermissionCertificateActions, ProjectPermissionSub, - useProject, - useSubscription + useProject } from "@app/context"; import { useDeleteCert } from "@app/hooks/api"; import { usePopUp } from "@app/hooks/usePopUp"; @@ -24,10 +23,10 @@ import { CertificatesTable } from "./CertificatesTable"; export const CertificatesSection = () => { const { currentProject } = useProject(); - const { subscription } = useSubscription(); const { mutateAsync: deleteCert } = useDeleteCert(); - const isLegacyTemplatesEnabled = subscription.pkiLegacyTemplates; + // TODO: Use subscription.pkiLegacyTemplates to block legacy templates creation + const isLegacyTemplatesEnabled = true; const { popUp, handlePopUpOpen, handlePopUpClose, handlePopUpToggle } = usePopUp([ "certificateIssuance", diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx index 500286d67..4f26f851c 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificatesTable.tsx @@ -36,8 +36,7 @@ import { Badge } from "@app/components/v3"; import { ProjectPermissionCertificateActions, ProjectPermissionSub, - useProject, - useSubscription + useProject } from "@app/context"; import { useListWorkspaceCertificates, useUpdateRenewalConfig } from "@app/hooks/api"; import { caSupportsCapability } from "@app/hooks/api/ca/constants"; @@ -175,7 +174,6 @@ const PER_PAGE_INIT = 25; export const CertificatesTable = ({ handlePopUpOpen }: Props) => { const [page, setPage] = useState(1); const [perPage, setPerPage] = useState(PER_PAGE_INIT); - const { subscription } = useSubscription(); const { currentProject } = useProject(); const { data, isPending } = useListWorkspaceCertificates({ @@ -185,7 +183,8 @@ export const CertificatesTable = ({ handlePopUpOpen }: Props) => { }); const { mutateAsync: updateRenewalConfig } = useUpdateRenewalConfig(); - const isLegacyTemplatesEnabled = subscription.pkiLegacyTemplates; + // TODO: Use subscription.pkiLegacyTemplates to block legacy templates creation + const isLegacyTemplatesEnabled = true; const { data: caData } = useListCasByProjectId(currentProject?.id ?? ""); diff --git a/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberModal.tsx b/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberModal.tsx index 4bc427e48..020bf5c6c 100644 --- a/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberModal.tsx +++ b/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberModal.tsx @@ -351,8 +351,12 @@ export const PkiSubscriberModal = ({ popUp, handlePopUpToggle }: Props) => { commonName, subjectAlternativeNames: subjectAlternativeNamesList, ttl, - keyUsages: keyUsagesList, - extendedKeyUsages: extendedKeyUsagesList, + keyUsages: keyUsagesList.map((key) => + key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()) + ), + extendedKeyUsages: extendedKeyUsagesList.map((key) => + key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()) + ), enableAutoRenewal, autoRenewalPeriodInDays, properties: Object.keys(properties).length > 0 ? properties : undefined @@ -365,8 +369,12 @@ export const PkiSubscriberModal = ({ popUp, handlePopUpToggle }: Props) => { commonName, subjectAlternativeNames: subjectAlternativeNamesList, ttl, - keyUsages: keyUsagesList, - extendedKeyUsages: extendedKeyUsagesList, + keyUsages: keyUsagesList.map((key) => + key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()) + ), + extendedKeyUsages: extendedKeyUsagesList.map((key) => + key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()) + ), enableAutoRenewal, autoRenewalPeriodInDays, properties: Object.keys(properties).length > 0 ? properties : undefined diff --git a/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberSection.tsx b/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberSection.tsx index cb4b9ef39..8c9196dc9 100644 --- a/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberSection.tsx +++ b/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberSection.tsx @@ -7,8 +7,7 @@ import { Button, DeleteActionModal } from "@app/components/v2"; import { ProjectPermissionPkiSubscriberActions, ProjectPermissionSub, - useProject, - useSubscription + useProject } from "@app/context"; import { useDeletePkiSubscriber, useUpdatePkiSubscriber } from "@app/hooks/api"; import { PkiSubscriberStatus } from "@app/hooks/api/pkiSubscriber/types"; @@ -19,10 +18,10 @@ import { PkiSubscribersTable } from "./PkiSubscribersTable"; export const PkiSubscriberSection = () => { const { currentProject } = useProject(); - const { subscription } = useSubscription(); const projectId = currentProject.id; - const canCreateLegacySubscribers = subscription.pkiLegacyTemplates; + // TODO: Use subscription.pkiLegacyTemplates to block legacy templates creation + const canCreateLegacySubscribers = true; const { mutateAsync: deletePkiSubscriber } = useDeletePkiSubscriber(); const { mutateAsync: updatePkiSubscriber } = useUpdatePkiSubscriber(); diff --git a/frontend/src/pages/cert-manager/PkiTemplateListPage/PkiTemplateListPage.tsx b/frontend/src/pages/cert-manager/PkiTemplateListPage/PkiTemplateListPage.tsx index b395d0ec2..79a956373 100644 --- a/frontend/src/pages/cert-manager/PkiTemplateListPage/PkiTemplateListPage.tsx +++ b/frontend/src/pages/cert-manager/PkiTemplateListPage/PkiTemplateListPage.tsx @@ -114,30 +114,29 @@ export const PkiTemplateListPage = () => { />
- {subscription?.pkiLegacyTemplates && ( -
-

Templates

-
- - {(isAllowed) => ( - - )} - -
+ {/* TODO: Use subscription.pkiLegacyTemplates to block legacy templates creation */} +
+

Templates

+
+ + {(isAllowed) => ( + + )} +
- )} +
diff --git a/frontend/src/pages/cert-manager/PkiTemplateListPage/components/PkiTemplateForm.tsx b/frontend/src/pages/cert-manager/PkiTemplateListPage/components/PkiTemplateForm.tsx index 093a2fcc1..36a729b73 100644 --- a/frontend/src/pages/cert-manager/PkiTemplateListPage/components/PkiTemplateForm.tsx +++ b/frontend/src/pages/cert-manager/PkiTemplateListPage/components/PkiTemplateForm.tsx @@ -140,10 +140,10 @@ export const PkiTemplateForm = ({ certTemplate, handlePopUpToggle }: Props) => { ttl, keyUsages: Object.entries(keyUsages) .filter(([, value]) => value) - .map(([key]) => key as CertKeyUsage), + .map(([key]) => key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase())), extendedKeyUsages: Object.entries(extendedKeyUsages) .filter(([, value]) => value) - .map(([key]) => key as CertExtendedKeyUsage) + .map(([key]) => key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase())) }); createNotification({ @@ -160,10 +160,10 @@ export const PkiTemplateForm = ({ certTemplate, handlePopUpToggle }: Props) => { ttl, keyUsages: Object.entries(keyUsages) .filter(([, value]) => value) - .map(([key]) => key as CertKeyUsage), + .map(([key]) => key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase())), extendedKeyUsages: Object.entries(extendedKeyUsages) .filter(([, value]) => value) - .map(([key]) => key as CertExtendedKeyUsage) + .map(([key]) => key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase())) }); createNotification({ From b80317e49f99ba0a0e97bdcaab95aa5cb3316660 Mon Sep 17 00:00:00 2001 From: Carlos Monastyrski Date: Fri, 31 Oct 2025 21:06:33 -0300 Subject: [PATCH 27/79] Fix subscribers check for CRL_SIGN --- .../components/CertificateTemplateModal.tsx | 12 ++++++++++-- .../components/PkiSubscriberModal.tsx | 8 ++++++-- .../components/PkiTemplateForm.tsx | 12 ++++++++++-- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplateModal.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplateModal.tsx index 477aa0356..86f75f149 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplateModal.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateTemplateModal.tsx @@ -172,7 +172,11 @@ export const CertificateTemplateModal = ({ popUp, handlePopUpToggle, caId }: Pro ttl, keyUsages: Object.entries(keyUsages) .filter(([, value]) => value) - .map(([key]) => key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase())), + .map(([key]) => + key === CertKeyUsage.CRL_SIGN + ? "cRLSign" + : key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()) + ), extendedKeyUsages: Object.entries(extendedKeyUsages) .filter(([, value]) => value) .map(([key]) => key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase())) @@ -193,7 +197,11 @@ export const CertificateTemplateModal = ({ popUp, handlePopUpToggle, caId }: Pro ttl, keyUsages: Object.entries(keyUsages) .filter(([, value]) => value) - .map(([key]) => key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase())), + .map(([key]) => + key === CertKeyUsage.CRL_SIGN + ? "cRLSign" + : key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()) + ), extendedKeyUsages: Object.entries(extendedKeyUsages) .filter(([, value]) => value) .map(([key]) => key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase())) diff --git a/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberModal.tsx b/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberModal.tsx index 020bf5c6c..52104ed1f 100644 --- a/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberModal.tsx +++ b/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscriberModal.tsx @@ -352,7 +352,9 @@ export const PkiSubscriberModal = ({ popUp, handlePopUpToggle }: Props) => { subjectAlternativeNames: subjectAlternativeNamesList, ttl, keyUsages: keyUsagesList.map((key) => - key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()) + key === CertKeyUsage.CRL_SIGN + ? "cRLSign" + : key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()) ), extendedKeyUsages: extendedKeyUsagesList.map((key) => key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()) @@ -370,7 +372,9 @@ export const PkiSubscriberModal = ({ popUp, handlePopUpToggle }: Props) => { subjectAlternativeNames: subjectAlternativeNamesList, ttl, keyUsages: keyUsagesList.map((key) => - key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()) + key === CertKeyUsage.CRL_SIGN + ? "cRLSign" + : key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()) ), extendedKeyUsages: extendedKeyUsagesList.map((key) => key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()) diff --git a/frontend/src/pages/cert-manager/PkiTemplateListPage/components/PkiTemplateForm.tsx b/frontend/src/pages/cert-manager/PkiTemplateListPage/components/PkiTemplateForm.tsx index 36a729b73..94cf66ff8 100644 --- a/frontend/src/pages/cert-manager/PkiTemplateListPage/components/PkiTemplateForm.tsx +++ b/frontend/src/pages/cert-manager/PkiTemplateListPage/components/PkiTemplateForm.tsx @@ -140,7 +140,11 @@ export const PkiTemplateForm = ({ certTemplate, handlePopUpToggle }: Props) => { ttl, keyUsages: Object.entries(keyUsages) .filter(([, value]) => value) - .map(([key]) => key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase())), + .map(([key]) => + key === CertKeyUsage.CRL_SIGN + ? "cRLSign" + : key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()) + ), extendedKeyUsages: Object.entries(extendedKeyUsages) .filter(([, value]) => value) .map(([key]) => key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase())) @@ -160,7 +164,11 @@ export const PkiTemplateForm = ({ certTemplate, handlePopUpToggle }: Props) => { ttl, keyUsages: Object.entries(keyUsages) .filter(([, value]) => value) - .map(([key]) => key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase())), + .map(([key]) => + key === CertKeyUsage.CRL_SIGN + ? "cRLSign" + : key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()) + ), extendedKeyUsages: Object.entries(extendedKeyUsages) .filter(([, value]) => value) .map(([key]) => key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase())) From 4993876ed5cd0e8c8a582b0cc2d76cf2d489f323 Mon Sep 17 00:00:00 2001 From: x032205 Date: Sat, 1 Nov 2025 02:31:43 -0400 Subject: [PATCH 28/79] disabled email notifications for gateway and relay health check, keeping the instance relay email for instance admins --- .../services/gateway-v2/gateway-v2-service.ts | 20 ++++++++++--------- .../src/ee/services/relay/relay-service.ts | 20 ++++++++++--------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/backend/src/ee/services/gateway-v2/gateway-v2-service.ts b/backend/src/ee/services/gateway-v2/gateway-v2-service.ts index fd4954a00..2ed21e380 100644 --- a/backend/src/ee/services/gateway-v2/gateway-v2-service.ts +++ b/backend/src/ee/services/gateway-v2/gateway-v2-service.ts @@ -931,15 +931,17 @@ export const gatewayV2ServiceFactory = ({ })) ); - await smtpService.sendMail({ - recipients: admins.map((admin) => admin.user.email).filter((v): v is string => !!v), - subjectLine: "Gateway Health Alert", - substitutions: { - type: "gateway", - names: gatewayNames - }, - template: SmtpTemplates.HealthAlert - }); + // Temporarily disabled email notifications due to excessive noise. Will be revised later + // + // await smtpService.sendMail({ + // recipients: admins.map((admin) => admin.user.email).filter((v): v is string => !!v), + // subjectLine: "Gateway Health Alert", + // substitutions: { + // type: "gateway", + // names: gatewayNames + // }, + // template: SmtpTemplates.HealthAlert + // }); await Promise.all(gateways.map((gw) => gatewayV2DAL.updateById(gw.id, { healthAlertedAt: new Date() }))); } catch (error) { diff --git a/backend/src/ee/services/relay/relay-service.ts b/backend/src/ee/services/relay/relay-service.ts index b2eb932ed..096011765 100644 --- a/backend/src/ee/services/relay/relay-service.ts +++ b/backend/src/ee/services/relay/relay-service.ts @@ -1268,15 +1268,17 @@ export const relayServiceFactory = ({ })) ); - await smtpService.sendMail({ - recipients: admins.map((admin) => admin.user.email).filter((v): v is string => !!v), - subjectLine: "Relay Health Alert", - substitutions: { - type: "relay", - names: relayNames - }, - template: SmtpTemplates.HealthAlert - }); + // Temporarily disabled email notifications due to excessive noise. Will be revised later + // + // await smtpService.sendMail({ + // recipients: admins.map((admin) => admin.user.email).filter((v): v is string => !!v), + // subjectLine: "Relay Health Alert", + // substitutions: { + // type: "relay", + // names: relayNames + // }, + // template: SmtpTemplates.HealthAlert + // }); } await Promise.all(relays.map((r) => relayDAL.updateById(r.id, { healthAlertedAt: new Date() }))); From f69affb634cfa1e855c4876694858c943a3d5cc7 Mon Sep 17 00:00:00 2001 From: x032205 Date: Sat, 1 Nov 2025 02:40:28 -0400 Subject: [PATCH 29/79] fix type errors --- backend/src/ee/services/gateway-v2/gateway-v2-service.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/backend/src/ee/services/gateway-v2/gateway-v2-service.ts b/backend/src/ee/services/gateway-v2/gateway-v2-service.ts index 2ed21e380..eaec31e50 100644 --- a/backend/src/ee/services/gateway-v2/gateway-v2-service.ts +++ b/backend/src/ee/services/gateway-v2/gateway-v2-service.ts @@ -25,7 +25,7 @@ import { KmsDataKey } from "@app/services/kms/kms-types"; import { TNotificationServiceFactory } from "@app/services/notification/notification-service"; import { NotificationType } from "@app/services/notification/notification-types"; import { TOrgDALFactory } from "@app/services/org/org-dal"; -import { SmtpTemplates, TSmtpService } from "@app/services/smtp/smtp-service"; +import { TSmtpService } from "@app/services/smtp/smtp-service"; import { TLicenseServiceFactory } from "../license/license-service"; import { PamResource } from "../pam-resource/pam-resource-enums"; @@ -61,8 +61,7 @@ export const gatewayV2ServiceFactory = ({ relayDAL, permissionService, orgDAL, - notificationService, - smtpService + notificationService }: TGatewayV2ServiceFactoryDep) => { const $validateIdentityAccessToGateway = async (orgId: string, actorId: string, actorAuthMethod: ActorAuthMethod) => { const orgLicensePlan = await licenseService.getPlan(orgId); From b65078d28c72ddb119b437a02055992d17b28626 Mon Sep 17 00:00:00 2001 From: x032205 Date: Sat, 1 Nov 2025 03:21:22 -0400 Subject: [PATCH 30/79] Fix focus ring & trim logs --- .../components/PamSessionLogsSection.tsx | 55 ++++++++++++++++++- 1 file changed, 52 insertions(+), 3 deletions(-) diff --git a/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx b/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx index 5f06a64e2..66d2fad8d 100644 --- a/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx +++ b/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx @@ -4,6 +4,52 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { TPamSession } from "@app/hooks/api/pam"; +const formatLogContent = (text: string | null | undefined): string => { + if (!text) return ""; + + let lines = text.split("\n"); + + // Find the first and last non-empty lines to trim vertical padding + let firstLineIndex = -1; + for (let i = 0; i < lines.length; i += 1) { + if (lines[i].trim() !== "") { + firstLineIndex = i; + break; + } + } + + if (firstLineIndex === -1) { + return ""; + } + + let lastLineIndex = -1; + for (let i = lines.length - 1; i >= 0; i -= 1) { + if (lines[i].trim() !== "") { + lastLineIndex = i; + break; + } + } + + lines = lines.slice(firstLineIndex, lastLineIndex + 1); + + // Determine the minimum indentation of non-empty lines + const indentations = lines + .filter((line) => line.trim() !== "") + .map((line) => { + const match = line.match(/^\s*/); + return match ? match[0].length : 0; + }); + + const minIndentation = Math.min(...indentations); + + // Remove the common indentation from all lines + if (minIndentation > 0) { + lines = lines.map((line) => line.substring(minIndentation)); + } + + return lines.join("\n"); +}; + type Props = { session: TPamSession; }; @@ -32,11 +78,14 @@ export const PamSessionLogsSection = ({ session }: Props) => { {session.commandLogs.length > 0 ? ( session.commandLogs.map((log) => { const isExpanded = expandedLogTimestamps.has(log.timestamp); + const formattedInput = formatLogContent(log.input); + const formattedOutput = formatLogContent(log.output); + return ( From 0425a085feea885bd1b2b2572dd21f6b57c98d2d Mon Sep 17 00:00:00 2001 From: x032205 Date: Sat, 1 Nov 2025 03:43:30 -0400 Subject: [PATCH 31/79] Format row outputs into tables, and only allow one log expanded at a time --- .../components/PamSessionLogOutput.tsx | 95 +++++++++++++++++++ .../components/PamSessionLogsSection.tsx | 23 +++-- 2 files changed, 109 insertions(+), 9 deletions(-) create mode 100644 frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogOutput.tsx diff --git a/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogOutput.tsx b/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogOutput.tsx new file mode 100644 index 000000000..92d173f7e --- /dev/null +++ b/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogOutput.tsx @@ -0,0 +1,95 @@ +import { useState } from "react"; + +type TableLog = { + command?: string; + data_rows: Record[]; + total_rows?: number; +}; + +export const PamSessionLogOutput = ({ content }: { content: string }) => { + const [isRawView, setIsRawView] = useState(false); + + let parsedContent: TableLog | null = null; + try { + const parsed = JSON.parse(content); + if ( + parsed && + typeof parsed === "object" && + !Array.isArray(parsed) && + parsed.data_rows && + Array.isArray(parsed.data_rows) && + parsed.data_rows.length > 0 && + typeof parsed.data_rows[0] === "object" && + parsed.data_rows[0] !== null + ) { + parsedContent = parsed; + } + } catch (error) { + // Not a valid JSON or doesn't match structure, will render as plain text + } + + if (parsedContent) { + const headers = Object.keys(parsedContent.data_rows[0]); + return ( +
+ {isRawView ? ( +
{content}
+ ) : ( + <> + {parsedContent.command && ( +
{`> ${parsedContent.command}`}
+ )} +
+
+ + + {headers.map((header) => ( + + ))} + + + + {parsedContent.data_rows.map((row, rowIndex) => ( + + {headers.map((header) => ( + + ))} + + ))} + +
+ {header.replace(/_/g, " ")} +
+ {String(row[header] ?? "")} +
+
+ + )} +
+ + + {parsedContent.total_rows !== undefined && ( +
+ Total rows: {parsedContent.total_rows} +
+ )} +
+
+ ); + } + + return
{content}
; +}; diff --git a/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx b/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx index 66d2fad8d..d620cf4cc 100644 --- a/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx +++ b/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx @@ -3,6 +3,7 @@ import { faChevronDown, faChevronRight } from "@fortawesome/free-solid-svg-icons import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { TPamSession } from "@app/hooks/api/pam"; +import { PamSessionLogOutput } from "./PamSessionLogOutput"; const formatLogContent = (text: string | null | undefined): string => { if (!text) return ""; @@ -59,13 +60,10 @@ export const PamSessionLogsSection = ({ session }: Props) => { const toggleExpand = (timestamp: string) => { setExpandedLogTimestamps((prev) => { - const newSet = new Set(prev); - if (newSet.has(timestamp)) { - newSet.delete(timestamp); - } else { - newSet.add(timestamp); + if (prev.has(timestamp)) { + return new Set(); } - return newSet; + return new Set([timestamp]); }); }; @@ -109,9 +107,16 @@ export const PamSessionLogsSection = ({ session }: Props) => { {isExpanded && log.output && ( -
- {formattedOutput} -
+ <> +
+
+ OUTPUT +
+
+
+ +
+ )} ); From 7d978443c7e0f02a6579b8ce4128b7742291055d Mon Sep 17 00:00:00 2001 From: x032205 Date: Sat, 1 Nov 2025 03:47:03 -0400 Subject: [PATCH 32/79] Move formatLogContent to a utils file --- .../components/PamSessionLogsSection.tsx | 50 +------------------ .../components/PamSessionLogsSection.utils.ts | 46 +++++++++++++++++ 2 files changed, 48 insertions(+), 48 deletions(-) create mode 100644 frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.utils.ts diff --git a/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx b/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx index d620cf4cc..9350f6cd9 100644 --- a/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx +++ b/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx @@ -4,52 +4,7 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { TPamSession } from "@app/hooks/api/pam"; import { PamSessionLogOutput } from "./PamSessionLogOutput"; - -const formatLogContent = (text: string | null | undefined): string => { - if (!text) return ""; - - let lines = text.split("\n"); - - // Find the first and last non-empty lines to trim vertical padding - let firstLineIndex = -1; - for (let i = 0; i < lines.length; i += 1) { - if (lines[i].trim() !== "") { - firstLineIndex = i; - break; - } - } - - if (firstLineIndex === -1) { - return ""; - } - - let lastLineIndex = -1; - for (let i = lines.length - 1; i >= 0; i -= 1) { - if (lines[i].trim() !== "") { - lastLineIndex = i; - break; - } - } - - lines = lines.slice(firstLineIndex, lastLineIndex + 1); - - // Determine the minimum indentation of non-empty lines - const indentations = lines - .filter((line) => line.trim() !== "") - .map((line) => { - const match = line.match(/^\s*/); - return match ? match[0].length : 0; - }); - - const minIndentation = Math.min(...indentations); - - // Remove the common indentation from all lines - if (minIndentation > 0) { - lines = lines.map((line) => line.substring(minIndentation)); - } - - return lines.join("\n"); -}; +import { formatLogContent } from "./PamSessionLogsSection.utils"; type Props = { session: TPamSession; @@ -77,7 +32,6 @@ export const PamSessionLogsSection = ({ session }: Props) => { session.commandLogs.map((log) => { const isExpanded = expandedLogTimestamps.has(log.timestamp); const formattedInput = formatLogContent(log.input); - const formattedOutput = formatLogContent(log.output); return (
+ {String(row[header] ?? "")}
- {sync.destination.replace(/-/g, " ")} + {getDestinationDisplayName(sync.destination)}
- {header.replace(/_/g, " ")} +
- {String(row[header] ?? "")} +
- {logsToShow.map((log) => ( -
-
- - {new Date(log.timestamp).toLocaleString()} -
+ {logsToShow.map((log) => { + const formattedInput = formatLogContent(log.input); -
- + return ( +
+
+ + {new Date(log.timestamp).toLocaleString()} +
+ +
+ +
+
+ +
-
- -
-
- ))} + ); + })} {filteredCommandLogs.length > LOGS_TO_SHOW && (
- - {parsedContent.total_rows !== undefined && ( -
- Total rows: {parsedContent.total_rows} -
- )} -
-
- ); - } - - return ( -
- -
- ); -}; diff --git a/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx b/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx index 0fbccbc9b..7a4945540 100644 --- a/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx +++ b/frontend/src/pages/pam/PamSessionsByIDPage/components/PamSessionLogsSection.tsx @@ -7,7 +7,6 @@ import { Input } from "@app/components/v2"; import { HighlightText } from "@app/components/v2/HighlightText"; import { TPamSession } from "@app/hooks/api/pam"; -import { PamSessionLogOutput } from "./PamSessionLogOutput"; import { formatLogContent } from "./PamSessionLogsSection.utils"; type Props = { @@ -104,20 +103,9 @@ export const PamSessionLogsSection = ({ session }: Props) => { >
{log.output && ( - <> -
-
- OUTPUT -
-
-
- -
- +
+ +
)}
From eff4bcb886c94835a860ac92fb8c1b5c5742cb5e Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Wed, 5 Nov 2025 03:21:06 +0530 Subject: [PATCH 65/79] refactor: fix conditional ordering logic in folder sorting to ensure correct rank assignment --- backend/src/services/secret-folder/secret-folder-dal.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/services/secret-folder/secret-folder-dal.ts b/backend/src/services/secret-folder/secret-folder-dal.ts index 1923add8e..f4bb18005 100644 --- a/backend/src/services/secret-folder/secret-folder-dal.ts +++ b/backend/src/services/secret-folder/secret-folder-dal.ts @@ -419,7 +419,7 @@ export const secretFolderDALFactory = (db: TDbClient) => { .select( selectAllTableCols(TableName.SecretFolder), db.raw( - `DENSE_RANK() OVER (ORDER BY ${TableName.SecretFolder}."name" COLLATE "en-x-icu" ${orderDirection}) as rank` + `DENSE_RANK() OVER (ORDER BY ${TableName.SecretFolder}."name" COLLATE "en-x-icu" ${orderDirection === OrderByDirection.ASC ? "ASC" : "DESC"} as rank` ), db.ref("slug").withSchema(TableName.Environment).as("environment") ) From b1e7cbf10ad76d3517d473fe72ab5f7e38c0a2e7 Mon Sep 17 00:00:00 2001 From: Scott Wilson Date: Tue, 4 Nov 2025 15:49:34 -0800 Subject: [PATCH 66/79] fix: handle null for skip multiline encoding on commit endpoint --- backend/src/ee/routes/v1/pit-router.ts | 5 ++++- .../components/SecretApprovalRequestChangeItem.tsx | 9 +++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/backend/src/ee/routes/v1/pit-router.ts b/backend/src/ee/routes/v1/pit-router.ts index 14a82bce4..26909d294 100644 --- a/backend/src/ee/routes/v1/pit-router.ts +++ b/backend/src/ee/routes/v1/pit-router.ts @@ -468,7 +468,10 @@ export const registerPITRouter = async (server: FastifyZodProvider) => { .transform((val) => (val.at(-1) === "\n" ? `${val.trim()}\n` : val.trim())) .optional(), secretComment: z.string().trim().optional().default(""), - skipMultilineEncoding: z.boolean().optional(), + skipMultilineEncoding: z + .boolean() + .nullish() + .transform((val) => (val === null ? false : val)), metadata: z.record(z.string()).optional(), secretMetadata: ResourceMetadataSchema.optional(), tagIds: z.string().array().optional() diff --git a/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/components/SecretApprovalRequestChangeItem.tsx b/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/components/SecretApprovalRequestChangeItem.tsx index c54ee8502..cbab034ed 100644 --- a/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/components/SecretApprovalRequestChangeItem.tsx +++ b/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/components/SecretApprovalRequestChangeItem.tsx @@ -221,9 +221,7 @@ export const SecretApprovalRequestChangeItem = ({
Multi-line Encoding
- {secretVersion?.skipMultilineEncoding?.toString() || ( - - - )}{" "} + {secretVersion?.skipMultilineEncoding?.toString() || "false"}
@@ -366,9 +364,8 @@ export const SecretApprovalRequestChangeItem = ({
Multi-line Encoding
{newVersion?.skipMultilineEncoding?.toString() ?? - secretVersion?.skipMultilineEncoding?.toString() ?? ( - - - )}{" "} + secretVersion?.skipMultilineEncoding?.toString() ?? + "false"}
From 5d51280071d759d6b5d789256cb8fc1592ffeaec Mon Sep 17 00:00:00 2001 From: ArshBallagan Date: Tue, 4 Nov 2025 16:33:12 -0800 Subject: [PATCH 67/79] Update organization-structure.mdx --- docs/documentation/guides/organization-structure.mdx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/documentation/guides/organization-structure.mdx b/docs/documentation/guides/organization-structure.mdx index 3cba64678..752c06ccc 100644 --- a/docs/documentation/guides/organization-structure.mdx +++ b/docs/documentation/guides/organization-structure.mdx @@ -24,9 +24,11 @@ Infisical is designed to provide comprehensive, centralized, and efficient manag ### 2. Projects - **Definition and Role**: [Projects](/documentation/platform/project) are the highest-level construct within an [organization](/documentation/platform/organization) in Infisical. They serve as the primary container for all functionalities. -- **Correspondence to Code Repositories**: Projects typically align with specific code repositories. +- **Common Project Mappings**: Projects typically align with applications, services, or code repositories — each being a valid and common approach depending on your organizational structure. - **Functional Capabilities**: Each project encompasses features for managing secrets, certificates, and encryption keys, serving as the central hub for these resources. +Projects are isolated from one another. Secrets, certificates, and other resources cannot be shared or referenced across different projects. Each project maintains its own separate set of resources. + ### 3. Environments - **Purpose**: Environments are designed for organizing and compartmentalizing secrets within projects. @@ -40,8 +42,9 @@ Infisical is designed to provide comprehensive, centralized, and efficient manag ### 5. Imports -- **Purpose and Benefits**: To promote reusability and avoid redundancy, Infisical supports the use of imports. This allows secrets, folders, or entire environments to be referenced across multiple projects as needed. -- **Best Practice**: Utilizing [secret imports](/documentation/platform/secret-reference#secret-imports) or [references](/documentation/platform/secret-reference#secret-referencing) ensures consistency and minimizes manual overhead. +- **Purpose and Benefits**: To promote reusability and avoid redundancy within a project, Infisical supports the use of imports and references. This allows secrets, folders, or entire environments to be referenced within the same project as needed. +- **Project Isolation**: Imports and references only work within a single project. Secrets cannot be imported or referenced across different projects, as projects are isolated from one another. +- **Best Practice**: Utilizing [secret imports](/documentation/platform/secret-reference#secret-imports) or [references](/documentation/platform/secret-reference#secret-referencing) ensures consistency and minimizes manual overhead when managing secrets within a project. ### 6. Approval Workflows From cab093b805f51f8f2ff265b9308c644817e44bf4 Mon Sep 17 00:00:00 2001 From: Scott Wilson Date: Tue, 4 Nov 2025 16:42:23 -0800 Subject: [PATCH 68/79] fix: include group members in change request author filter --- .../components/SecretApprovalRequest/SecretApprovalRequest.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/SecretApprovalRequest.tsx b/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/SecretApprovalRequest.tsx index 0b8e6f03f..a62d2ec27 100644 --- a/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/SecretApprovalRequest.tsx +++ b/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/SecretApprovalRequest.tsx @@ -107,7 +107,7 @@ export const SecretApprovalRequest = () => { }); const { permission } = useProjectPermission(); - const { data: members } = useGetWorkspaceUsers(projectId); + const { data: members } = useGetWorkspaceUsers(projectId, true); const isSecretApprovalScreen = Boolean(selectedApprovalId); const { requestId } = search; From b0c8bcf2a33fe4cbf1e58b701d7e05287c558c63 Mon Sep 17 00:00:00 2001 From: Scott Wilson Date: Tue, 4 Nov 2025 18:20:43 -0800 Subject: [PATCH 69/79] fix: correct secret approval query filters column references, correct count query and handle pagination reset on frontend --- .../secret-approval-request-dal.ts | 27 ++++++++++--------- .../SecretApprovalRequest.tsx | 8 +++++- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/backend/src/ee/services/secret-approval-request/secret-approval-request-dal.ts b/backend/src/ee/services/secret-approval-request/secret-approval-request-dal.ts index 7597dcfd4..db300720f 100644 --- a/backend/src/ee/services/secret-approval-request/secret-approval-request-dal.ts +++ b/backend/src/ee/services/secret-approval-request/secret-approval-request-dal.ts @@ -670,6 +670,7 @@ export const secretApprovalRequestDALFactory = (db: TDbClient) => { .select( db.ref("projectId").withSchema(TableName.Environment), db.ref("slug").withSchema(TableName.Environment).as("environment"), + db.ref("name").withSchema(TableName.Environment).as("environmentName"), db.ref("id").withSchema(TableName.SecretApprovalRequestReviewer).as("reviewerId"), db.ref("reviewerUserId").withSchema(TableName.SecretApprovalRequestReviewer), db.ref("status").withSchema(TableName.SecretApprovalRequestReviewer).as("reviewerStatus"), @@ -699,30 +700,30 @@ export const secretApprovalRequestDALFactory = (db: TDbClient) => { ) .as("inner"); - const countQuery = (await (tx || db) - .select(db.raw("count(*) OVER() as total_count")) - .from(innerQuery.clone().distinctOn(`${TableName.SecretApprovalRequest}.id`))) as Array<{ - total_count: number; - }>; - const query = (tx || db).select("*").from(innerQuery).orderBy("createdAt", "desc") as typeof innerQuery; if (search) { void query.where((qb) => { void qb .whereRaw(`CONCAT_WS(' ', ??, ??) ilike ?`, [ - db.ref("firstName").withSchema("committerUser"), - db.ref("lastName").withSchema("committerUser"), + db.ref("committerUserFirstName"), + db.ref("committerUserLastName"), `%${search}%` ]) - .orWhereRaw(`?? ilike ?`, [db.ref("username").withSchema("committerUser"), `%${search}%`]) - .orWhereRaw(`?? ilike ?`, [db.ref("email").withSchema("committerUser"), `%${search}%`]) - .orWhereILike(`${TableName.Environment}.name`, `%${search}%`) - .orWhereILike(`${TableName.Environment}.slug`, `%${search}%`) - .orWhereILike(`${TableName.SecretApprovalPolicy}.secretPath`, `%${search}%`); + .orWhereRaw(`?? ilike ?`, [db.ref("committerUserUsername"), `%${search}%`]) + .orWhereRaw(`?? ilike ?`, [db.ref("committerUserEmail"), `%${search}%`]) + .orWhereILike(`environmentName`, `%${search}%`) + .orWhereILike(`environment`, `%${search}%`) + .orWhereILike(`policySecretPath`, `%${search}%`); }); } + const countQuery = (await (tx || db) + .select(db.raw("count(*) OVER() as total_count")) + .from(query.clone().as("outer"))) as Array<{ + total_count: number; + }>; + const rankOffset = offset + 1; const docs = await (tx || db) .with("w", query) diff --git a/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/SecretApprovalRequest.tsx b/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/SecretApprovalRequest.tsx index a62d2ec27..c730e4622 100644 --- a/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/SecretApprovalRequest.tsx +++ b/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/SecretApprovalRequest.tsx @@ -40,7 +40,7 @@ import { PreferenceKey, setUserTablePreference } from "@app/helpers/userTablePreferences"; -import { usePagination } from "@app/hooks"; +import { usePagination, useResetPageHelper } from "@app/hooks"; import { useGetSecretApprovalRequestCount, useGetSecretApprovalRequests, @@ -99,6 +99,12 @@ export const SecretApprovalRequest = () => { const totalApprovalCount = data?.totalCount ?? 0; const secretApprovalRequests = data?.approvals ?? []; + useResetPageHelper({ + totalCount: totalApprovalCount, + offset, + setPage + }); + const { data: secretApprovalRequestCount, isSuccess: isSecretApprovalReqCountSuccess } = useGetSecretApprovalRequestCount({ projectId }); const { user: userSession } = useUser(); From fc395bf661001d158796121b8de8b84af240fb74 Mon Sep 17 00:00:00 2001 From: x032205 Date: Tue, 4 Nov 2025 21:29:05 -0500 Subject: [PATCH 70/79] pam: return metadata for pam access requests --- .../pam-account-routers/pam-account-router.ts | 3 ++- .../pam-account/pam-account-service.ts | 27 ++++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/backend/src/ee/routes/v1/pam-account-routers/pam-account-router.ts b/backend/src/ee/routes/v1/pam-account-routers/pam-account-router.ts index d2e0183ff..286e0896f 100644 --- a/backend/src/ee/routes/v1/pam-account-routers/pam-account-router.ts +++ b/backend/src/ee/routes/v1/pam-account-routers/pam-account-router.ts @@ -92,7 +92,8 @@ export const registerPamAccountRouter = async (server: FastifyZodProvider) => { gatewayClientCertificate: z.string(), gatewayClientPrivateKey: z.string(), gatewayServerCertificateChain: z.string(), - relayHost: z.string() + relayHost: z.string(), + metadata: z.record(z.string(), z.string()).optional() }) } }, diff --git a/backend/src/ee/services/pam-account/pam-account-service.ts b/backend/src/ee/services/pam-account/pam-account-service.ts index 00b84943f..0316ecebf 100644 --- a/backend/src/ee/services/pam-account/pam-account-service.ts +++ b/backend/src/ee/services/pam-account/pam-account-service.ts @@ -480,6 +480,30 @@ export const pamAccountServiceFactory = ({ throw new NotFoundError({ message: `Gateway connection details for gateway '${gatewayId}' not found.` }); } + let metadata; + + switch (resourceType) { + case PamResource.Postgres: + case PamResource.MySQL: { + const connectionCredentials = await decryptResourceConnectionDetails({ + encryptedConnectionDetails: resource.encryptedConnectionDetails, + kmsService, + projectId: account.projectId + }); + + const credentials = await decryptAccountCredentials({ + encryptedCredentials: account.encryptedCredentials, + kmsService, + projectId: account.projectId + }); + + metadata = { + username: credentials.username, + database: connectionCredentials.database + }; + } + } + return { sessionId: session.id, resourceType, @@ -491,7 +515,8 @@ export const pamAccountServiceFactory = ({ gatewayServerCertificateChain: gatewayConnectionDetails.gateway.serverCertificateChain, relayHost: gatewayConnectionDetails.relayHost, projectId: account.projectId, - account + account, + metadata }; }; From 43c936e633d025e00b114cc28725151007d74cc4 Mon Sep 17 00:00:00 2001 From: x032205 Date: Tue, 4 Nov 2025 21:57:02 -0500 Subject: [PATCH 71/79] added default case to switch --- .../pam-account/pam-account-service.ts | 36 ++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/backend/src/ee/services/pam-account/pam-account-service.ts b/backend/src/ee/services/pam-account/pam-account-service.ts index 0316ecebf..7d766a532 100644 --- a/backend/src/ee/services/pam-account/pam-account-service.ts +++ b/backend/src/ee/services/pam-account/pam-account-service.ts @@ -484,24 +484,28 @@ export const pamAccountServiceFactory = ({ switch (resourceType) { case PamResource.Postgres: - case PamResource.MySQL: { - const connectionCredentials = await decryptResourceConnectionDetails({ - encryptedConnectionDetails: resource.encryptedConnectionDetails, - kmsService, - projectId: account.projectId - }); + case PamResource.MySQL: + { + const connectionCredentials = await decryptResourceConnectionDetails({ + encryptedConnectionDetails: resource.encryptedConnectionDetails, + kmsService, + projectId: account.projectId + }); - const credentials = await decryptAccountCredentials({ - encryptedCredentials: account.encryptedCredentials, - kmsService, - projectId: account.projectId - }); + const credentials = await decryptAccountCredentials({ + encryptedCredentials: account.encryptedCredentials, + kmsService, + projectId: account.projectId + }); - metadata = { - username: credentials.username, - database: connectionCredentials.database - }; - } + metadata = { + username: credentials.username, + database: connectionCredentials.database + }; + } + break; + default: + break; } return { From 3463d0d03c38b1f19a28b4b5638cf7e303a0a15f Mon Sep 17 00:00:00 2001 From: x032205 Date: Tue, 4 Nov 2025 23:03:42 -0500 Subject: [PATCH 72/79] add account info to metadata --- .../src/ee/services/pam-account/pam-account-service.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/backend/src/ee/services/pam-account/pam-account-service.ts b/backend/src/ee/services/pam-account/pam-account-service.ts index 7d766a532..41a049deb 100644 --- a/backend/src/ee/services/pam-account/pam-account-service.ts +++ b/backend/src/ee/services/pam-account/pam-account-service.ts @@ -498,9 +498,17 @@ export const pamAccountServiceFactory = ({ projectId: account.projectId }); + const accountPath = await getFullPamFolderPath({ + pamFolderDAL, + folderId: account.folderId, + projectId: resource.projectId + }); + metadata = { username: credentials.username, - database: connectionCredentials.database + database: connectionCredentials.database, + accountName: account.name, + accountPath }; } break; From b54cdba82d53d9fac1de7afb8f9fc050b07e4bbc Mon Sep 17 00:00:00 2001 From: x032205 Date: Tue, 4 Nov 2025 23:18:40 -0500 Subject: [PATCH 73/79] fix issue --- backend/src/ee/services/pam-account/pam-account-service.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/backend/src/ee/services/pam-account/pam-account-service.ts b/backend/src/ee/services/pam-account/pam-account-service.ts index 41a049deb..2f66d28d7 100644 --- a/backend/src/ee/services/pam-account/pam-account-service.ts +++ b/backend/src/ee/services/pam-account/pam-account-service.ts @@ -498,12 +498,6 @@ export const pamAccountServiceFactory = ({ projectId: account.projectId }); - const accountPath = await getFullPamFolderPath({ - pamFolderDAL, - folderId: account.folderId, - projectId: resource.projectId - }); - metadata = { username: credentials.username, database: connectionCredentials.database, From a19b2d4b0937072f4b21fb7eb3370ee9c275fcff Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Wed, 5 Nov 2025 16:00:21 +0530 Subject: [PATCH 74/79] fix: e2e --- backend/src/services/secret-folder/secret-folder-dal.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/services/secret-folder/secret-folder-dal.ts b/backend/src/services/secret-folder/secret-folder-dal.ts index f4bb18005..f2befbe1a 100644 --- a/backend/src/services/secret-folder/secret-folder-dal.ts +++ b/backend/src/services/secret-folder/secret-folder-dal.ts @@ -419,7 +419,7 @@ export const secretFolderDALFactory = (db: TDbClient) => { .select( selectAllTableCols(TableName.SecretFolder), db.raw( - `DENSE_RANK() OVER (ORDER BY ${TableName.SecretFolder}."name" COLLATE "en-x-icu" ${orderDirection === OrderByDirection.ASC ? "ASC" : "DESC"} as rank` + `DENSE_RANK() OVER (ORDER BY ${TableName.SecretFolder}."name" COLLATE "en-x-icu" ${orderDirection === OrderByDirection.ASC ? "ASC" : "DESC"}) as rank` ), db.ref("slug").withSchema(TableName.Environment).as("environment") ) From 100c1b07862e5f6ce997d513a4967433fde6ae9b Mon Sep 17 00:00:00 2001 From: x032205 Date: Wed, 5 Nov 2025 13:13:57 -0500 Subject: [PATCH 75/79] fix relays with same identity repalcing each other, throw error instead --- backend/src/ee/services/relay/relay-service.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/src/ee/services/relay/relay-service.ts b/backend/src/ee/services/relay/relay-service.ts index 749a3ca16..2cf090dff 100644 --- a/backend/src/ee/services/relay/relay-service.ts +++ b/backend/src/ee/services/relay/relay-service.ts @@ -996,7 +996,9 @@ export const relayServiceFactory = ({ ); if (existingRelay && (existingRelay.host !== host || existingRelay.name !== name)) { - return relayDAL.updateById(existingRelay.id, { host, name }, tx); + throw new BadRequestError({ + message: `Machine identity already has an existing relay with the name "${existingRelay.name} and host "${existingRelay.host}". Delete the existing relay or use a different machine identity.` + }); } if (!existingRelay) { From d251faf45137d59b61e65da27e924e94f99c6b61 Mon Sep 17 00:00:00 2001 From: Andre <120525481+x032205@users.noreply.github.com> Date: Wed, 5 Nov 2025 13:20:46 -0500 Subject: [PATCH 76/79] Apply suggestion from @greptile-apps[bot] Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- backend/src/ee/services/relay/relay-service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/ee/services/relay/relay-service.ts b/backend/src/ee/services/relay/relay-service.ts index 2cf090dff..ae7758e67 100644 --- a/backend/src/ee/services/relay/relay-service.ts +++ b/backend/src/ee/services/relay/relay-service.ts @@ -997,7 +997,7 @@ export const relayServiceFactory = ({ if (existingRelay && (existingRelay.host !== host || existingRelay.name !== name)) { throw new BadRequestError({ - message: `Machine identity already has an existing relay with the name "${existingRelay.name} and host "${existingRelay.host}". Delete the existing relay or use a different machine identity.` + message: `Machine identity already has an existing relay with the name "${existingRelay.name}" and host "${existingRelay.host}". Delete the existing relay or use a different machine identity.` }); } From 977694d3677416cf2e62dcfe4b68ad1702867e4f Mon Sep 17 00:00:00 2001 From: = Date: Wed, 5 Nov 2025 23:54:34 +0530 Subject: [PATCH 77/79] feat: resolved project membership auto adding to orgnization --- .../server/routes/v1/project-membership-router.ts | 14 ++++++++++++++ .../MembersTab/components/AddMemberModal.tsx | 10 ---------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/backend/src/server/routes/v1/project-membership-router.ts b/backend/src/server/routes/v1/project-membership-router.ts index 57fdad031..dc76efa92 100644 --- a/backend/src/server/routes/v1/project-membership-router.ts +++ b/backend/src/server/routes/v1/project-membership-router.ts @@ -2,6 +2,7 @@ import { z } from "zod"; import { AccessScope, + OrgMembershipRole, ProjectMembershipRole, ProjectMembershipsSchema, ProjectUserMembershipRolesSchema, @@ -266,6 +267,19 @@ export const registerProjectMembershipRouter = async (server: FastifyZodProvider onRequest: verifyAuth([AuthMode.JWT, AuthMode.API_KEY, AuthMode.IDENTITY_ACCESS_TOKEN]), handler: async (req) => { const usernamesAndEmails = [...req.body.emails, ...req.body.usernames]; + + await server.services.membershipUser.createMembership({ + permission: req.permission, + scopeData: { + scope: AccessScope.Organization, + orgId: req.permission.orgId + }, + data: { + roles: [{ isTemporary: false, role: OrgMembershipRole.NoAccess }], + usernames: usernamesAndEmails + } + }); + const { memberships } = await server.services.membershipUser.createMembership({ permission: req.permission, scopeData: { diff --git a/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/AddMemberModal.tsx b/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/AddMemberModal.tsx index cb6934240..7498b3181 100644 --- a/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/AddMemberModal.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/AddMemberModal.tsx @@ -25,14 +25,12 @@ import { useProject } from "@app/context"; import { - useAddUsersToOrg, useAddUserToWsNonE2EE, useGetOrgUsers, useGetProjectRoles, useGetWorkspaceUsers } from "@app/hooks/api"; import { ProjectVersion } from "@app/hooks/api/projects/types"; -import { ProjectMembershipRole } from "@app/hooks/api/roles/types"; import { UsePopUpState } from "@app/hooks/usePopUp"; const addMemberFormSchema = z.object({ @@ -86,7 +84,6 @@ export const AddMemberModal = ({ popUp, handlePopUpToggle }: Props) => { defaultValues: { orgMemberships: [], projectRoleSlugs: [] } }); - const { mutateAsync: addMemberToOrg } = useAddUsersToOrg(); const { mutateAsync: addUserToProject } = useAddUserToWsNonE2EE(); useEffect(() => { @@ -140,13 +137,6 @@ export const AddMemberModal = ({ popUp, handlePopUpToggle }: Props) => { return; } - if (newInvitees.length) { - await addMemberToOrg({ - inviteeEmails: newInvitees, - organizationId: orgId, - organizationRoleSlug: ProjectMembershipRole.Member // only applies to new invites - }); - } if (newInvitees.length || inviteeEmails.length) { await addUserToProject({ usernames: [...inviteeEmails, ...newInvitees], From 76d0f1a419b979e6da8c3561b1ef7e8d44a29997 Mon Sep 17 00:00:00 2001 From: = Date: Thu, 6 Nov 2025 00:54:06 +0530 Subject: [PATCH 78/79] feat: resolved metadata interpolation failing in project due to group only membership --- backend/src/ee/services/permission/permission-dal.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/src/ee/services/permission/permission-dal.ts b/backend/src/ee/services/permission/permission-dal.ts index 95480a54a..88b52be22 100644 --- a/backend/src/ee/services/permission/permission-dal.ts +++ b/backend/src/ee/services/permission/permission-dal.ts @@ -201,11 +201,11 @@ export const permissionDALFactory = (db: TDbClient): TPermissionDALFactory => { .leftJoin(TableName.IdentityMetadata, (queryBuilder) => { if (actorType === ActorType.USER) { void queryBuilder - .on(`${TableName.Membership}.actorUserId`, `${TableName.IdentityMetadata}.userId`) + .on(`${TableName.IdentityMetadata}.userId`, db.raw("?", [actorId])) .andOn(`${TableName.Membership}.scopeOrgId`, `${TableName.IdentityMetadata}.orgId`); } else if (actorType === ActorType.IDENTITY) { void queryBuilder - .on(`${TableName.Membership}.actorIdentityId`, `${TableName.IdentityMetadata}.identityId`) + .on(`${TableName.IdentityMetadata}.identityId`, db.raw("?", [actorId])) .andOn(`${TableName.Membership}.scopeOrgId`, `${TableName.IdentityMetadata}.orgId`); } }) @@ -488,7 +488,7 @@ export const permissionDALFactory = (db: TDbClient): TPermissionDALFactory => { }) .leftJoin(TableName.IdentityMetadata, (queryBuilder) => { void queryBuilder - .on(`${TableName.Membership}.actorUserId`, `${TableName.IdentityMetadata}.userId`) + .on(`${TableName.Users}.id`, `${TableName.IdentityMetadata}.userId`) .andOn(`${TableName.Membership}.scopeOrgId`, `${TableName.IdentityMetadata}.orgId`); }) .where(`${TableName.Membership}.scopeOrgId`, orgId) From 08cb45f9af5586fa6f53fb8eb452e90751c4a812 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Thu, 6 Nov 2025 01:37:17 +0530 Subject: [PATCH 79/79] fix: status code when token auth not found --- .../identity-token-auth/identity-token-auth-service.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/services/identity-token-auth/identity-token-auth-service.ts b/backend/src/services/identity-token-auth/identity-token-auth-service.ts index 2d3e11cd8..e6969da61 100644 --- a/backend/src/services/identity-token-auth/identity-token-auth-service.ts +++ b/backend/src/services/identity-token-auth/identity-token-auth-service.ts @@ -244,8 +244,8 @@ export const identityTokenAuthServiceFactory = ({ } if (!identityMembershipOrg.identity.authMethods.includes(IdentityAuthMethod.TOKEN_AUTH)) { - throw new BadRequestError({ - message: "The identity does not have Token Auth attached" + throw new NotFoundError({ + message: "Token Auth configuration not found for identity" }); }

osZtsRh0Fgk;F`VSU58bG4_GN4Ej> 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�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≤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 aXGrkcnw7E4&7pFT87RuB$reZ(Kl?v%9*Kki literal 0 HcmV?d00001 diff --git a/docs/images/secret-syncs/chef/sync-created.png b/docs/images/secret-syncs/chef/sync-created.png new file mode 100644 index 0000000000000000000000000000000000000000..c6383deb36c26982fde508dd53a0fdd151cef5a9 GIT binary patch literal 200782 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