From 27a848a296cd21a58da65ec9a390a86364c36a51 Mon Sep 17 00:00:00 2001 From: Scott Wilson Date: Fri, 21 Nov 2025 15:28:53 -0800 Subject: [PATCH 01/68] improvement: update frontend identity text refrences to explicit state machine identity --- .../ResourceOverviewPage.tsx | 2 +- .../components/MachineIdentitiesTable.tsx | 4 +- .../AccessManagementPage.tsx | 12 +++--- .../IdentitySection/IdentitySection.tsx | 34 +++++++++-------- .../IdentitySection/IdentityTable.tsx | 18 ++++----- .../IdentitySection/OrgIdentityLinkForm.tsx | 6 +-- .../IdentitySection/OrgIdentityModal.tsx | 6 +-- .../IdentityDetailsByIDPage.tsx | 14 +++---- .../components/IdentityDetailsSection.tsx | 8 ++-- .../IdentityProjectsTable.tsx | 4 +- .../components/GatewayCliDeploymentMethod.tsx | 24 ++++++------ .../GatewayCliSystemdDeploymentMethod.tsx | 24 ++++++------ .../components/RelayCliDeploymentMethod.tsx | 24 ++++++------ .../RelayCliSystemdDeploymentMethod.tsx | 24 ++++++------ .../RelayTerraformDeploymentMethod.tsx | 24 ++++++------ .../AccessControlPage/AccessControlPage.tsx | 6 +-- .../components/IdentityTab/IdentityTab.tsx | 38 ++++++++++--------- .../components/ProjectIdentityModal.tsx | 6 +-- .../components/ProjectLinkIdentityModal.tsx | 10 ++--- .../IdentityDetailsByIDPage.tsx | 26 ++++++------- ...ntityProjectAdditionalPrivilegeSection.tsx | 5 ++- .../ProjectIdentityDetailsSection.tsx | 10 ++--- 22 files changed, 169 insertions(+), 160 deletions(-) diff --git a/frontend/src/pages/admin/ResourceOverviewPage/ResourceOverviewPage.tsx b/frontend/src/pages/admin/ResourceOverviewPage/ResourceOverviewPage.tsx index eab91ef04..199fcb1bd 100644 --- a/frontend/src/pages/admin/ResourceOverviewPage/ResourceOverviewPage.tsx +++ b/frontend/src/pages/admin/ResourceOverviewPage/ResourceOverviewPage.tsx @@ -29,7 +29,7 @@ export const ResourceOverviewPage = () => { Users - Identities + Machine Identities diff --git a/frontend/src/pages/admin/ResourceOverviewPage/components/MachineIdentitiesTable.tsx b/frontend/src/pages/admin/ResourceOverviewPage/components/MachineIdentitiesTable.tsx index d17786712..c2fc1ac84 100644 --- a/frontend/src/pages/admin/ResourceOverviewPage/components/MachineIdentitiesTable.tsx +++ b/frontend/src/pages/admin/ResourceOverviewPage/components/MachineIdentitiesTable.tsx @@ -1,4 +1,3 @@ -import { useState } from "react"; import { faEllipsisV, faMagnifyingGlass, @@ -8,6 +7,7 @@ import { } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { ServerCogIcon } from "lucide-react"; +import { useState } from "react"; import { createNotification } from "@app/components/notifications"; import { @@ -90,7 +90,7 @@ const IdentityPanelTable = ({ value={searchIdentityFilter} onChange={(e) => setSearchIdentityFilter(e.target.value)} leftIcon={} - placeholder="Search identities by name..." + placeholder="Search machine identities by name..." className="flex-1" /> diff --git a/frontend/src/pages/organization/AccessManagementPage/AccessManagementPage.tsx b/frontend/src/pages/organization/AccessManagementPage/AccessManagementPage.tsx index d3e93bcea..f88717e60 100644 --- a/frontend/src/pages/organization/AccessManagementPage/AccessManagementPage.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/AccessManagementPage.tsx @@ -1,9 +1,9 @@ -import { useState } from "react"; -import { Helmet } from "react-helmet"; -import { useTranslation } from "react-i18next"; import { faInfoCircle } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useNavigate, useSearch } from "@tanstack/react-router"; +import { useState } from "react"; +import { Helmet } from "react-helmet"; +import { useTranslation } from "react-i18next"; import { OrgPermissionGuardBanner } from "@app/components/permissions/OrgPermissionCan"; import { Button, PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2"; @@ -18,8 +18,8 @@ import { } from "@app/context"; import { OrgAccessControlTabSections } from "@app/types/org"; -import { UpgradePrivilegeSystemModal } from "./components/UpgradePrivilegeSystemModal/UpgradePrivilegeSystemModal"; import { OrgGroupsTab, OrgIdentityTab, OrgMembersTab, OrgRoleTabSection } from "./components"; +import { UpgradePrivilegeSystemModal } from "./components/UpgradePrivilegeSystemModal/UpgradePrivilegeSystemModal"; export const AccessManagementPage = () => { const { t } = useTranslation(); @@ -58,7 +58,7 @@ export const AccessManagementPage = () => { }, { key: OrgAccessControlTabSections.Identities, - label: "Identities", + label: "Machine Identities", isHidden: permission.cannot( OrgPermissionIdentityActions.Read, OrgPermissionSubjects.Identity @@ -84,7 +84,7 @@ export const AccessManagementPage = () => { {!currentOrg.shouldUseNewPrivilegeSystem && (
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 87a3860bf..22e921806 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 @@ -1,8 +1,8 @@ -import { useState } from "react"; import { faPlus } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { AnimatePresence, motion } from "framer-motion"; import { LinkIcon, PlusIcon } from "lucide-react"; +import { useState } from "react"; import { UpgradePlanModal } from "@app/components/license/UpgradePlanModal"; import { createNotification } from "@app/components/notifications"; @@ -73,7 +73,7 @@ export const IdentitySection = withPermission( }); createNotification({ - text: "Successfully deleted identity", + text: "Successfully deleted machine identity", type: "success" }); @@ -99,7 +99,7 @@ export const IdentitySection = withPermission(
-

Identities

+

Machine Identities

@@ -116,7 +116,7 @@ export const IdentitySection = withPermission( if (!isMoreIdentitiesAllowed && !isEnterprise) { handlePopUpOpen("upgradePlan", { description: - "You can add more identities if you upgrade your Infisical Pro plan." + "You can add more machine identities if you upgrade your Infisical Pro plan." }); return; } @@ -129,7 +129,7 @@ export const IdentitySection = withPermission( }} isDisabled={!isAllowed} > - Create Identity + Add Machine Identity )} @@ -141,7 +141,9 @@ export const IdentitySection = withPermission(
-

Identity Auth Templates

+

+ Machine Identity Auth Templates +

{(isAllowed) => (
-
Assign Existing Identity
+
Assign Existing Machine Identity
- Assign an existing identity from your parent organization. The identity will - continue to be managed at its original scope. + Assign an existing machine identity from your parent organization. The machine + identity will continue to be managed at its original scope.
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 0c8cfd6bb..1342bdfa4 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 @@ -1,4 +1,3 @@ -import { useCallback, useState } from "react"; import { faArrowDown, faArrowUp, @@ -14,6 +13,7 @@ import { } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useNavigate } from "@tanstack/react-router"; +import { useCallback, useState } from "react"; import { twMerge } from "tailwind-merge"; import { createNotification } from "@app/components/notifications"; @@ -152,7 +152,7 @@ export const IdentityTable = ({ handlePopUpOpen }: Props) => { }); createNotification({ - text: "Successfully updated identity role", + text: "Successfully updated machine identity role", type: "success" }); }; @@ -178,7 +178,7 @@ export const IdentityTable = ({ handlePopUpOpen }: Props) => { { - Apply Roles to Filter Identities + Filter Machine Identities by Role {roles?.map(({ id, slug, name }) => ( { value={search} onChange={(e) => setSearch(e.target.value)} leftIcon={} - placeholder="Search identities by name..." + placeholder="Search machine identities by name..." />
@@ -407,7 +407,7 @@ export const IdentityTable = ({ handlePopUpOpen }: Props) => { }} isDisabled={!isAllowed} > - Edit Identity {isSubOrgIdentity ? "" : "Membership"} + Edit Machine Identity {isSubOrgIdentity ? "" : "Membership"} )} @@ -428,7 +428,7 @@ export const IdentityTable = ({ handlePopUpOpen }: Props) => { icon={} > {isSubOrgIdentity - ? "Delete Identity" + ? "Delete Machine Identity" : "Remove From Sub-Organization"} )} @@ -455,8 +455,8 @@ export const IdentityTable = ({ handlePopUpOpen }: Props) => { 0 || filter.roles?.length > 0 - ? "No identities match search filter" - : "No identities have been created in this organization" + ? "No machine identities match search filter" + : "No machine identities have been created in this organization" } icon={faServer} /> diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/OrgIdentityLinkForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/OrgIdentityLinkForm.tsx index dde0588de..a6b1839f1 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/OrgIdentityLinkForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/OrgIdentityLinkForm.tsx @@ -1,7 +1,7 @@ -import { Controller, useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { useQuery } from "@tanstack/react-query"; import { useNavigate } from "@tanstack/react-router"; +import { Controller, useForm } from "react-hook-form"; import { z } from "zod"; import { createNotification } from "@app/components/notifications"; @@ -78,11 +78,11 @@ export const OrgIdentityLinkForm = ({ onClose }: Props) => { control={control} name="identity" render={({ field: { onChange, value }, fieldState: { error } }) => ( - + option.id} diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/OrgIdentityModal.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/OrgIdentityModal.tsx index dfc496ca8..f7ae4513d 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/OrgIdentityModal.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/OrgIdentityModal.tsx @@ -1,9 +1,9 @@ -import { useEffect } from "react"; -import { Controller, useFieldArray, useForm } from "react-hook-form"; import { faPlus, faTrash } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { zodResolver } from "@hookform/resolvers/zod"; import { useNavigate } from "@tanstack/react-router"; +import { useEffect } from "react"; +import { Controller, useFieldArray, useForm } from "react-hook-form"; import { z } from "zod"; import { createNotification } from "@app/components/notifications"; @@ -164,7 +164,7 @@ export const OrgIdentityModal = ({ popUp, handlePopUpToggle }: Props) => { } createNotification({ - text: `Successfully ${popUp?.identity?.data ? "updated" : "created"} identity`, + text: `Successfully ${popUp?.identity?.data ? "updated" : "created"} machine identity`, type: "success" }); diff --git a/frontend/src/pages/organization/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx b/frontend/src/pages/organization/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx index 1cc37a8e8..ee2a212b3 100644 --- a/frontend/src/pages/organization/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx +++ b/frontend/src/pages/organization/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx @@ -1,8 +1,8 @@ -import { Helmet } from "react-helmet"; -import { useTranslation } from "react-i18next"; import { faChevronLeft } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { Link, useNavigate, useParams } from "@tanstack/react-router"; +import { Helmet } from "react-helmet"; +import { useTranslation } from "react-i18next"; import { UpgradePlanModal } from "@app/components/license/UpgradePlanModal"; import { createNotification } from "@app/components/notifications"; @@ -55,7 +55,7 @@ const Page = () => { }); createNotification({ - text: "Successfully deleted identity", + text: "Successfully deleted machine identity", type: "success" }); @@ -82,11 +82,11 @@ const Page = () => { className="mb-4 flex items-center gap-x-2 text-sm text-mineshaft-400" > - Identities + Machine Identities
@@ -111,7 +111,7 @@ const Page = () => { }) } > - Unlink Identity + Unlink Machine Identity )} @@ -142,7 +142,7 @@ const Page = () => { > diff --git a/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityDetailsSection.tsx b/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityDetailsSection.tsx index b19901bef..f9bbdce9d 100644 --- a/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityDetailsSection.tsx +++ b/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityDetailsSection.tsx @@ -45,7 +45,7 @@ export const IdentityDetailsSection = ({ identityId, handlePopUpOpen, isOrgIdent return data ? (
-

Identity Details

+

Details

-

Identity ID

+

Machine Identity ID

{data.identity.id}

diff --git a/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityProjectsSection/IdentityProjectsTable.tsx b/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityProjectsSection/IdentityProjectsTable.tsx index 4dcc1996e..74c7c2549 100644 --- a/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityProjectsSection/IdentityProjectsTable.tsx +++ b/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityProjectsSection/IdentityProjectsTable.tsx @@ -1,4 +1,3 @@ -import { useMemo } from "react"; import { faArrowDown, faArrowUp, @@ -7,6 +6,7 @@ import { faSearch } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { useMemo } from "react"; import { EmptyState, @@ -151,7 +151,7 @@ export const IdentityProjectsTable = ({ identityId, handlePopUpOpen }: Props) => title={ projectMemberships.length ? "No projects match search..." - : "This identity has not been assigned to any projects" + : "This machine identity has not been assigned to any projects" } icon={projectMemberships.length ? faSearch : faFolder} /> 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 4942bf2e2..66f22be8c 100644 --- a/frontend/src/pages/organization/NetworkingPage/components/GatewayTab/components/GatewayCliDeploymentMethod.tsx +++ b/frontend/src/pages/organization/NetworkingPage/components/GatewayTab/components/GatewayCliDeploymentMethod.tsx @@ -1,8 +1,8 @@ -import { useMemo, useState } from "react"; -import { SingleValue } from "react-select"; import { faCopy, faQuestionCircle, faUpRightFromSquare } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useNavigate } from "@tanstack/react-router"; +import { useMemo, useState } from "react"; +import { SingleValue } from "react-select"; import { z } from "zod"; import { createNotification } from "@app/components/notifications"; @@ -275,8 +275,8 @@ export const GatewayCliDeploymentMethod = () => { {canCreateToken && autogenerateToken ? ( <> { ) } isLoading={isIdentitiesLoading} - placeholder="Select identity..." + placeholder="select machine identity..." options={identityMembershipOrgs.map((membership) => membership.identity)} getOptionValue={(option) => option.id} getOptionLabel={(option) => option.name} @@ -300,8 +300,8 @@ export const GatewayCliDeploymentMethod = () => { ) : ( <> { className="mr-2" >
- Automatically enable token auth and generate a token for identity + Automatically enable token auth and generate a token for machine 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. + Token authentication will be automatically enabled for the selected machine + 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. diff --git a/frontend/src/pages/organization/NetworkingPage/components/GatewayTab/components/GatewayCliSystemdDeploymentMethod.tsx b/frontend/src/pages/organization/NetworkingPage/components/GatewayTab/components/GatewayCliSystemdDeploymentMethod.tsx index 860590ffa..2a5cdd300 100644 --- a/frontend/src/pages/organization/NetworkingPage/components/GatewayTab/components/GatewayCliSystemdDeploymentMethod.tsx +++ b/frontend/src/pages/organization/NetworkingPage/components/GatewayTab/components/GatewayCliSystemdDeploymentMethod.tsx @@ -1,8 +1,8 @@ -import { useMemo, useState } from "react"; -import { SingleValue } from "react-select"; import { faCopy, faQuestionCircle, faUpRightFromSquare } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useNavigate } from "@tanstack/react-router"; +import { useMemo, useState } from "react"; +import { SingleValue } from "react-select"; import { z } from "zod"; import { createNotification } from "@app/components/notifications"; @@ -297,8 +297,8 @@ export const GatewayCliSystemdDeploymentMethod = () => { {canCreateToken && autogenerateToken ? ( <> { ) } isLoading={isIdentitiesLoading} - placeholder="Select identity..." + placeholder="select machine identity..." options={identityMembershipOrgs.map((membership) => membership.identity)} getOptionValue={(option) => option.id} getOptionLabel={(option) => option.name} @@ -322,8 +322,8 @@ export const GatewayCliSystemdDeploymentMethod = () => { ) : ( <> { className="mr-2" >
- Automatically enable token auth and generate a token for identity + Automatically enable token auth and generate a token for machine 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. + Token authentication will be automatically enabled for the selected machine + 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. 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 87f2ed75b..563ca1f64 100644 --- a/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayCliDeploymentMethod.tsx +++ b/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayCliDeploymentMethod.tsx @@ -1,7 +1,7 @@ -import { useMemo, useState } from "react"; -import { SingleValue } from "react-select"; import { faCopy, faQuestionCircle, faUpRightFromSquare } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { useMemo, useState } from "react"; +import { SingleValue } from "react-select"; import { z } from "zod"; import { createNotification } from "@app/components/notifications"; @@ -229,8 +229,8 @@ export const RelayCliDeploymentMethod = () => { {canCreateToken && autogenerateToken ? ( <> { ) } isLoading={isIdentitiesLoading} - placeholder="Select identity..." + placeholder="select machine identity..." options={identityMembershipOrgs.map((membership) => membership.identity)} getOptionValue={(option) => option.id} getOptionLabel={(option) => option.name} @@ -254,8 +254,8 @@ export const RelayCliDeploymentMethod = () => { ) : ( <> { className="mr-2" >
- Automatically enable token auth and generate a token for identity + Automatically enable token auth and generate a token for machine 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. + Token authentication will be automatically enabled for the selected machine + 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. diff --git a/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayCliSystemdDeploymentMethod.tsx b/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayCliSystemdDeploymentMethod.tsx index 10e4d9edd..a5b858bc8 100644 --- a/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayCliSystemdDeploymentMethod.tsx +++ b/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayCliSystemdDeploymentMethod.tsx @@ -1,7 +1,7 @@ -import { useMemo, useState } from "react"; -import { SingleValue } from "react-select"; import { faCopy, faQuestionCircle, faUpRightFromSquare } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { useMemo, useState } from "react"; +import { SingleValue } from "react-select"; import { z } from "zod"; import { createNotification } from "@app/components/notifications"; @@ -270,8 +270,8 @@ export const RelayCliSystemdDeploymentMethod = () => { {canCreateToken && autogenerateToken ? ( <> { ) } isLoading={isIdentitiesLoading} - placeholder="Select identity..." + placeholder="select machine identity..." options={identityMembershipOrgs.map((membership) => membership.identity)} getOptionValue={(option) => option.id} getOptionLabel={(option) => option.name} @@ -295,8 +295,8 @@ export const RelayCliSystemdDeploymentMethod = () => { ) : ( <> { className="mr-2" >
- Automatically enable token auth and generate a token for identity + Automatically enable token auth and generate a token for machine 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. + Token authentication will be automatically enabled for the selected machine + 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. diff --git a/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayTerraformDeploymentMethod.tsx b/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayTerraformDeploymentMethod.tsx index d9c67d610..c1aa1141e 100644 --- a/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayTerraformDeploymentMethod.tsx +++ b/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayTerraformDeploymentMethod.tsx @@ -1,8 +1,8 @@ -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 { Tab } from "@headlessui/react"; +import { useMemo, useState } from "react"; +import { SingleValue } from "react-select"; import { z } from "zod"; import { createNotification } from "@app/components/notifications"; @@ -349,8 +349,8 @@ resource "aws_eip_association" "eip_assoc" { {canCreateToken && autogenerateToken ? ( <> membership.identity)} getOptionValue={(option) => option.id} getOptionLabel={(option) => option.name} @@ -374,8 +374,8 @@ resource "aws_eip_association" "eip_assoc" { ) : ( <>
- Automatically enable token auth and generate a token for identity + Automatically enable token auth and generate a token for machine 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. + Token authentication will be automatically enabled for the selected machine + 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. diff --git a/frontend/src/pages/project/AccessControlPage/AccessControlPage.tsx b/frontend/src/pages/project/AccessControlPage/AccessControlPage.tsx index 84a5376ab..b301c5ddc 100644 --- a/frontend/src/pages/project/AccessControlPage/AccessControlPage.tsx +++ b/frontend/src/pages/project/AccessControlPage/AccessControlPage.tsx @@ -1,6 +1,6 @@ +import { useNavigate, useSearch } from "@tanstack/react-router"; import { Helmet } from "react-helmet"; import { useTranslation } from "react-i18next"; -import { useNavigate, useSearch } from "@tanstack/react-router"; import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2"; import { useOrganization, useProject } from "@app/context"; @@ -44,7 +44,7 @@ const Page = () => { @@ -55,7 +55,7 @@ const Page = () => { Groups - Identities + Machine Identities {isSecretManager && ( diff --git a/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx b/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx index 72bae83f2..2f7c351c7 100644 --- a/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx @@ -1,4 +1,3 @@ -import { useState } from "react"; import { subject } from "@casl/ability"; import { faArrowDown, @@ -14,6 +13,7 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useNavigate } from "@tanstack/react-router"; import { AnimatePresence, motion } from "framer-motion"; import { LinkIcon, PlusIcon } from "lucide-react"; +import { useState } from "react"; import { twMerge } from "tailwind-merge"; import { createNotification } from "@app/components/notifications"; @@ -158,7 +158,7 @@ export const IdentityTab = withProjectPermission( }); createNotification({ - text: "Successfully deleted project identity", + text: "Successfully deleted project machine identity", type: "success" }); } else { @@ -168,7 +168,7 @@ export const IdentityTab = withProjectPermission( }); createNotification({ - text: "Successfully removed identity from project", + text: "Successfully removed machine identity from project", type: "success" }); } @@ -197,7 +197,7 @@ export const IdentityTab = withProjectPermission(
-

Identities

+

Machine Identities

@@ -212,7 +212,7 @@ export const IdentityTab = withProjectPermission( onClick={() => handlePopUpOpen("createIdentity")} isDisabled={!isAllowed} > - Create Identity + Add Machine Identity )} @@ -223,7 +223,7 @@ export const IdentityTab = withProjectPermission( value={search} onChange={(e) => setSearch(e.target.value)} leftIcon={} - placeholder="Search identities by name..." + placeholder="Search machine identities by name..." /> @@ -454,7 +454,9 @@ export const IdentityTab = withProjectPermission( }); }} > - {identityProjectId ? "Delete Identity" : "Remove From Project"} + {identityProjectId + ? "Delete Machine Identity" + : "Remove From Project"} )} @@ -474,7 +476,7 @@ export const IdentityTab = withProjectPermission( @@ -497,8 +499,8 @@ export const IdentityTab = withProjectPermission( 0 - ? "No identities match search filter" - : "No identities have been added to this project" + ? "No machine identities match search filter" + : "No machine identities have been added to this project" } icon={faServer} /> @@ -513,8 +515,8 @@ export const IdentityTab = withProjectPermission( > {wizardStep === WizardSteps.SelectAction && ( @@ -538,11 +540,11 @@ export const IdentityTab = withProjectPermission( >
-
Create New Identity
+
Create Machine Identity
- Create a new machine identity specifically for this project. This identity - will be managed at the project-level. + Create a new machine identity specifically for this project. This machine + identity will be managed at the project-level.
-
Assign Existing Identity
+
Assign Existing Machine Identity
- Assign an existing identity from your organization. The identity will continue - to be managed at its original scope. + Assign an existing machine identity from your organization. The machine + identity will continue to be managed at its original scope.
diff --git a/frontend/src/pages/project/AccessControlPage/components/IdentityTab/components/ProjectIdentityModal.tsx b/frontend/src/pages/project/AccessControlPage/components/IdentityTab/components/ProjectIdentityModal.tsx index 327144733..14b888add 100644 --- a/frontend/src/pages/project/AccessControlPage/components/IdentityTab/components/ProjectIdentityModal.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/IdentityTab/components/ProjectIdentityModal.tsx @@ -1,8 +1,8 @@ -import { Controller, useFieldArray, useForm } from "react-hook-form"; import { faPlus, faTrash } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { zodResolver } from "@hookform/resolvers/zod"; import { useNavigate } from "@tanstack/react-router"; +import { Controller, useFieldArray, useForm } from "react-hook-form"; import { z } from "zod"; import { createNotification } from "@app/components/notifications"; @@ -138,7 +138,7 @@ export const ProjectIdentityModal = ({ onClose, identity }: ContentProps) => { } createNotification({ - text: `Successfully ${isUpdate ? "updated" : "created"} project identity`, + text: `Successfully ${isUpdate ? "updated" : "created"} project machine identity`, type: "success" }); @@ -148,7 +148,7 @@ export const ProjectIdentityModal = ({ onClose, identity }: ContentProps) => { const error = err as any; const text = error?.response?.data?.message ?? - `Failed to ${isUpdate ? "update" : "create"} project identity`; + `Failed to ${isUpdate ? "update" : "create"} project machine identity`; createNotification({ text, diff --git a/frontend/src/pages/project/AccessControlPage/components/IdentityTab/components/ProjectLinkIdentityModal.tsx b/frontend/src/pages/project/AccessControlPage/components/IdentityTab/components/ProjectLinkIdentityModal.tsx index 46e910432..7ab98b17f 100644 --- a/frontend/src/pages/project/AccessControlPage/components/IdentityTab/components/ProjectLinkIdentityModal.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/IdentityTab/components/ProjectLinkIdentityModal.tsx @@ -1,7 +1,7 @@ -import { useMemo } from "react"; -import { Controller, useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { useQuery } from "@tanstack/react-query"; +import { useMemo } from "react"; +import { Controller, useForm } from "react-hook-form"; import { z } from "zod"; import { createNotification } from "@app/components/notifications"; @@ -83,7 +83,7 @@ export const ProjectLinkIdentityModal = ({ handlePopUpToggle }: Props) => { }); createNotification({ - text: "Successfully added identity to project", + text: "Successfully added machine identity to project", type: "success" }); @@ -114,11 +114,11 @@ export const ProjectLinkIdentityModal = ({ handlePopUpToggle }: Props) => { control={control} name="identity" render={({ field: { onChange, value }, fieldState: { error } }) => ( - + ({ name: membership.name, diff --git a/frontend/src/pages/project/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx b/frontend/src/pages/project/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx index dbbec5ab5..fccdf2b3d 100644 --- a/frontend/src/pages/project/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx +++ b/frontend/src/pages/project/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx @@ -1,11 +1,11 @@ -import { Helmet } from "react-helmet"; -import { useTranslation } from "react-i18next"; import { subject } from "@casl/ability"; import { faChevronLeft } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useQuery } from "@tanstack/react-query"; import { Link, useNavigate, useParams } from "@tanstack/react-router"; import { formatRelative } from "date-fns"; +import { Helmet } from "react-helmet"; +import { useTranslation } from "react-i18next"; import { createNotification } from "@app/components/notifications"; import { OrgPermissionCan, ProjectPermissionCan } from "@app/components/permissions"; @@ -92,7 +92,7 @@ const Page = () => { onSuccess: () => { createNotification({ type: "success", - text: "Identity privilege assumption has started" + text: "Machine identity privilege assumption has started" }); const url = `${getProjectHomePage(currentProject.type, currentProject.environments)}${isSubOrganization && isNonScopedIdentity ? `?subOrganization=${currentOrg.slug}` : ""}`; window.location.assign( @@ -109,7 +109,7 @@ const Page = () => { projectId }); createNotification({ - text: "Successfully removed identity from project", + text: "Successfully removed machine identity from project", type: "success" }); handlePopUpClose("deleteIdentity"); @@ -149,12 +149,12 @@ const Page = () => { className="mb-4 flex items-center gap-x-2 text-sm text-mineshaft-400" > - Identities + Machine Identities
@@ -177,7 +177,7 @@ const Page = () => { identityId: identityMembershipDetails?.identity.id })} renderTooltip - allowedLabel="Assume privileges of the user" + allowedLabel="Assume privileges of the machine identity" passThrough={false} > {(isAllowed) => ( @@ -209,7 +209,7 @@ const Page = () => { isLoading={isDeletingIdentity} onClick={() => handlePopUpOpen("deleteIdentity")} > - Remove Identity + Remove Machine Identity )} @@ -219,7 +219,7 @@ const Page = () => { {!isProjectIdentity && ( - This identity is managed by your organization.{" "} + This machine identity is managed by your organization.{" "} { }} > - Click here to manage identity. + Click here to manage machine identity. ) : null @@ -286,15 +286,15 @@ const Page = () => { handlePopUpToggle("assumePrivileges", isOpen)} onConfirmed={handleAssumePrivileges} buttonText="Confirm" /> ) : ( - + )}
); diff --git a/frontend/src/pages/project/IdentityDetailsByIDPage/components/IdentityProjectAdditionalPrivilegeSection/IdentityProjectAdditionalPrivilegeSection.tsx b/frontend/src/pages/project/IdentityDetailsByIDPage/components/IdentityProjectAdditionalPrivilegeSection/IdentityProjectAdditionalPrivilegeSection.tsx index b11bd9dae..e43b80538 100644 --- a/frontend/src/pages/project/IdentityDetailsByIDPage/components/IdentityProjectAdditionalPrivilegeSection/IdentityProjectAdditionalPrivilegeSection.tsx +++ b/frontend/src/pages/project/IdentityDetailsByIDPage/components/IdentityProjectAdditionalPrivilegeSection/IdentityProjectAdditionalPrivilegeSection.tsx @@ -235,7 +235,10 @@ export const IdentityProjectAdditionalPrivilegeSection = ({ identityMembershipDe
{!isPending && !identityProjectPrivileges?.length && ( - + )}
diff --git a/frontend/src/pages/project/IdentityDetailsByIDPage/components/ProjectIdentityDetailsSection.tsx b/frontend/src/pages/project/IdentityDetailsByIDPage/components/ProjectIdentityDetailsSection.tsx index dae996489..e4ad97f9d 100644 --- a/frontend/src/pages/project/IdentityDetailsByIDPage/components/ProjectIdentityDetailsSection.tsx +++ b/frontend/src/pages/project/IdentityDetailsByIDPage/components/ProjectIdentityDetailsSection.tsx @@ -69,7 +69,7 @@ export const ProjectIdentityDetailsSection = ({ identity, isOrgIdentity, members } catch { createNotification({ type: "error", - text: "Failed to delete project identity" + text: "Failed to delete project machine identity" }); } }; @@ -77,7 +77,7 @@ export const ProjectIdentityDetailsSection = ({ identity, isOrgIdentity, members return (
-

Identity Details

+

Details

{!isOrgIdentity && ( @@ -114,7 +114,7 @@ export const ProjectIdentityDetailsSection = ({ identity, isOrgIdentity, members }} disabled={!isAllowed} > - Edit Identity + Edit Machine Identity )} @@ -137,7 +137,7 @@ export const ProjectIdentityDetailsSection = ({ identity, isOrgIdentity, members icon={} disabled={!isAllowed} > - Delete Identity + Delete Machine Identity )} @@ -146,7 +146,7 @@ export const ProjectIdentityDetailsSection = ({ identity, isOrgIdentity, members
-

Identity ID

+

Machine Identity ID

{identity.id}

From 5f38751d5a3186a706ef93fef7c36bafd3c6f3dc Mon Sep 17 00:00:00 2001 From: Scott Wilson Date: Fri, 21 Nov 2025 15:44:02 -0800 Subject: [PATCH 02/68] improvement: update casing for relay/gateway select inputs --- .../components/IdentitySection/OrgIdentityLinkForm.tsx | 2 +- .../GatewayTab/components/GatewayCliDeploymentMethod.tsx | 2 +- .../GatewayTab/components/GatewayCliSystemdDeploymentMethod.tsx | 2 +- .../components/RelayTab/components/RelayCliDeploymentMethod.tsx | 2 +- .../RelayTab/components/RelayCliSystemdDeploymentMethod.tsx | 2 +- .../RelayTab/components/RelayTerraformDeploymentMethod.tsx | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/OrgIdentityLinkForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/OrgIdentityLinkForm.tsx index a6b1839f1..ecd951d90 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/OrgIdentityLinkForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/OrgIdentityLinkForm.tsx @@ -82,7 +82,7 @@ export const OrgIdentityLinkForm = ({ onClose }: Props) => { option.id} 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 66f22be8c..c44a89725 100644 --- a/frontend/src/pages/organization/NetworkingPage/components/GatewayTab/components/GatewayCliDeploymentMethod.tsx +++ b/frontend/src/pages/organization/NetworkingPage/components/GatewayTab/components/GatewayCliDeploymentMethod.tsx @@ -290,7 +290,7 @@ export const GatewayCliDeploymentMethod = () => { ) } isLoading={isIdentitiesLoading} - placeholder="select machine identity..." + placeholder="Select machine identity..." options={identityMembershipOrgs.map((membership) => membership.identity)} getOptionValue={(option) => option.id} getOptionLabel={(option) => option.name} diff --git a/frontend/src/pages/organization/NetworkingPage/components/GatewayTab/components/GatewayCliSystemdDeploymentMethod.tsx b/frontend/src/pages/organization/NetworkingPage/components/GatewayTab/components/GatewayCliSystemdDeploymentMethod.tsx index 2a5cdd300..1d4a7dfe5 100644 --- a/frontend/src/pages/organization/NetworkingPage/components/GatewayTab/components/GatewayCliSystemdDeploymentMethod.tsx +++ b/frontend/src/pages/organization/NetworkingPage/components/GatewayTab/components/GatewayCliSystemdDeploymentMethod.tsx @@ -312,7 +312,7 @@ export const GatewayCliSystemdDeploymentMethod = () => { ) } isLoading={isIdentitiesLoading} - placeholder="select machine identity..." + placeholder="Select machine identity..." options={identityMembershipOrgs.map((membership) => membership.identity)} getOptionValue={(option) => option.id} getOptionLabel={(option) => option.name} 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 563ca1f64..54b176861 100644 --- a/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayCliDeploymentMethod.tsx +++ b/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayCliDeploymentMethod.tsx @@ -244,7 +244,7 @@ export const RelayCliDeploymentMethod = () => { ) } isLoading={isIdentitiesLoading} - placeholder="select machine identity..." + placeholder="Select machine identity..." options={identityMembershipOrgs.map((membership) => membership.identity)} getOptionValue={(option) => option.id} getOptionLabel={(option) => option.name} diff --git a/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayCliSystemdDeploymentMethod.tsx b/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayCliSystemdDeploymentMethod.tsx index a5b858bc8..bc82ac4a0 100644 --- a/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayCliSystemdDeploymentMethod.tsx +++ b/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayCliSystemdDeploymentMethod.tsx @@ -285,7 +285,7 @@ export const RelayCliSystemdDeploymentMethod = () => { ) } isLoading={isIdentitiesLoading} - placeholder="select machine identity..." + placeholder="Select machine identity..." options={identityMembershipOrgs.map((membership) => membership.identity)} getOptionValue={(option) => option.id} getOptionLabel={(option) => option.name} diff --git a/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayTerraformDeploymentMethod.tsx b/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayTerraformDeploymentMethod.tsx index c1aa1141e..143952e22 100644 --- a/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayTerraformDeploymentMethod.tsx +++ b/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayTerraformDeploymentMethod.tsx @@ -364,7 +364,7 @@ resource "aws_eip_association" "eip_assoc" { ) } isLoading={isIdentitiesLoading} - placeholder="select machine identity..." + placeholder="Select machine identity..." options={identityMembershipOrgs.map((membership) => membership.identity)} getOptionValue={(option) => option.id} getOptionLabel={(option) => option.name} From 4febc07c202bfa0d229ecbdc7f68d049d2b47d62 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Mon, 24 Nov 2025 15:12:16 -0500 Subject: [PATCH 03/68] Add docs for self-signed certificates --- .../pki/certificates/certificates.mdx | 8 +++++--- .../platform/pki/certificates/profiles.mdx | 3 ++- .../pki/certificate/cert-profile-modal.png | Bin 366908 -> 376852 bytes .../CreateProfileModal.tsx | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/docs/documentation/platform/pki/certificates/certificates.mdx b/docs/documentation/platform/pki/certificates/certificates.mdx index abe198750..79168c4fc 100644 --- a/docs/documentation/platform/pki/certificates/certificates.mdx +++ b/docs/documentation/platform/pki/certificates/certificates.mdx @@ -19,10 +19,12 @@ where you can manage various aspects of its lifecycle including deployment to cl ## Guide to Issuing Certificates -To issue a certificate, you must first create a [certificate profile](/documentation/platform/pki/certificates/profiles) and a [certificate template](/documentation/platform/pki/certificates/templates) to go along with it. +To [issue a certificate](/documentation/platform/pki/concepts/certificate-lifecycle#enrollment-request-%2F-issuance), you must first create a [certificate profile](/documentation/platform/pki/certificates/profiles) and a [certificate template](/documentation/platform/pki/certificates/templates) to go along with it. -The [enrollment method](/documentation/platform/pki/enrollment-methods/overview) configured on the certificate profile determines how a certificate is issued for it. -Refer to the documentation for each enrollment method to learn more about how to issue certificates using it. +- Self-Signed Certificates: To issue a [self-signed certificate](https://en.wikipedia.org/wiki/Self-signed_certificate), you must configure the certificate profile to use the `Self-Signed` issuer type. You can then use the [API enrollment method](/documentation/platform/pki/enrollment-methods/api) to request a self-signed certificate against it. +- CA-Issued Certificates: To issue a certificate from a certificate authority, you must configure the certificate profile to use the `Certificate Authority` issuer type and select the [issuing CA](/documentation/platform/pki/ca/overview) to use. You can then use one of the [enrollment methods](/documentation/platform/pki/enrollment-methods/overview) to request a certificate against it. + +Refer to the documentation for each [enrollment method](/documentation/platform/pki/enrollment-methods/overview) to learn more about how to issue certificates using it. ## Guide to Renewing Certificates diff --git a/docs/documentation/platform/pki/certificates/profiles.mdx b/docs/documentation/platform/pki/certificates/profiles.mdx index ccbef89cd..1121437cf 100644 --- a/docs/documentation/platform/pki/certificates/profiles.mdx +++ b/docs/documentation/platform/pki/certificates/profiles.mdx @@ -21,7 +21,8 @@ Here's some guidance on each field: - Name: A slug-friendly name for the profile such as `web-servers`. - Description: An optional description for the profile. -- Issuing CA: The [issuing CA](/documentation/platform/pki/ca/overview) that should be used to issue certificates for the profile. +- Issuer Type: The type of issuer that should be used to issue certificates for the profile; this can be either `Certificate Authority` or `Self-Signed`. If `Self-Signed` is selected, then the profile will only support the API enrollment method and be used to issue self-signed certificates over REST API. +- Issuing CA: The [issuing CA](/documentation/platform/pki/ca/overview) that should be used to issue certificates for the profile when the **Issuer Type** is set to `Certificate Authority`. - Certificate Template: The [certificate template](/documentation/platform/pki/certificates/templates) that should be used to validate certificate requests for the profile. - Enrollment Method: The enrollment method that should be used to enroll certificates for the profile such as ACME, EST, API, etc. diff --git a/docs/images/platform/pki/certificate/cert-profile-modal.png b/docs/images/platform/pki/certificate/cert-profile-modal.png index 29280d01c0bdd4cfd2538e94683e9ccc93a94461..961ad466afcdea010efb68cb296dada970fdb294 100644 GIT binary patch literal 376852 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 G*ce$}$Iuje?!o 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 z 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 z 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%0AiMVK8qllZ(`p;zu)MN$hIy+; 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�dp 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Πf-MD-#6~@xosN&pAkTtATrR+Hp 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 literal 366908 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

ynA=*q_ae{f^>p;&4=*t4xHB2;NZtP&*~AGYi`z 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 Pid@W3DxhE$h>QCNI9b-57T#&kO0)q0Sp5RRf=J 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 Certificate Authority - Self-signed + Self-Signed )} From 7d5d88ac2b4b1ed6e8841079054583a8a1cbf11f Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Tue, 25 Nov 2025 02:15:10 +0530 Subject: [PATCH 04/68] fix: minor bugs in project role access tree --- .../AccessTree/utils/createFolderNode.ts | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/frontend/src/components/permissions/AccessTree/utils/createFolderNode.ts b/frontend/src/components/permissions/AccessTree/utils/createFolderNode.ts index a40398ba7..b05ea1c52 100644 --- a/frontend/src/components/permissions/AccessTree/utils/createFolderNode.ts +++ b/frontend/src/components/permissions/AccessTree/utils/createFolderNode.ts @@ -87,17 +87,24 @@ const shouldShowConditionalAccess = ( folderPath: string, conditionalFields: string[] ): boolean => { - return actionRuleMap.some((rule) => { + // Find all rules that apply to this environment/path + const applicableRules = actionRuleMap.filter((rule) => { const ruleConditions = rule[action]?.conditions; if (!ruleConditions) return false; - - // Check if any of the conditional fields are present - const hasConditionalField = conditionalFields.some((field) => ruleConditions[field]); - if (!hasConditionalField) return false; - - // Check if base conditions (environment and secretPath) apply return doBaseConditionsApply(ruleConditions, environment, folderPath); }); + + // If no rules apply, don't show conditional + if (applicableRules.length === 0) return false; + + // Check if ALL applicable rules have conditional fields and if at least one rule applies without conditional fields, show full access + const allRulesHaveConditionalFields = applicableRules.every((rule) => { + const ruleConditions = rule[action]?.conditions; + if (!ruleConditions) return false; + return conditionalFields.some((field) => ruleConditions[field]); + }); + + return allRulesHaveConditionalFields; }; const determineAccessLevel = ( From 38b0ba58574464c75294b2215a3a2123889d53cb Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Tue, 25 Nov 2025 03:17:39 +0530 Subject: [PATCH 05/68] fix: adds tooltip to env --- .../OverviewPage/OverviewPage.tsx | 41 +++++++++++++++---- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx b/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx index f3abbec97..6dcf14845 100644 --- a/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx +++ b/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx @@ -10,6 +10,8 @@ import { faArrowRight, faArrowRightToBracket, faArrowUp, + faCheck, + faCopy, faFilter, faFingerprint, faFolder, @@ -79,6 +81,7 @@ import { usePopUp, useResetPageHelper, useResizableHeaderHeight, + useTimedReset, useToggle } from "@app/hooks"; import { @@ -194,6 +197,15 @@ export const OverviewPage = () => { } }; + const [isCopied, , setIsCopied] = useTimedReset({ + initialState: false + }); + + const copyToClipboard = (value: string) => { + navigator.clipboard.writeText(value); + setIsCopied(true); + }; + const [filter, setFilter] = useState(DEFAULT_FILTER_STATE); const [filterHistory, setFilterHistory] = useState< Map @@ -1324,18 +1336,31 @@ export const OverviewPage = () => { > {name}

- ) : ( - "" - ) +
+ {collapseEnvironments ? ( +

{name}

+ ) : ( + "" + )} +
+

{slug}

+ copyToClipboard(slug)} + > + + +
+
} side="bottom" - sideOffset={-1} - align="end" + sideOffset={5} + align="center" className="max-w-xl text-xs normal-case" rootProps={{ - disableHoverableContent: true + disableHoverableContent: false }} >
Date: Tue, 25 Nov 2025 03:29:29 +0530 Subject: [PATCH 06/68] fix: labelling --- .../IdentitySection/IdentityAuthTemplateModal.tsx | 2 +- .../IdentityProjectsSection/IdentityAddToProjectModal.tsx | 2 +- .../GatewayTab/components/GatewayCliDeploymentMethod.tsx | 6 +++--- .../components/GatewayCliSystemdDeploymentMethod.tsx | 6 +++--- .../RelayTab/components/RelayCliDeploymentMethod.tsx | 6 +++--- .../RelayTab/components/RelayCliSystemdDeploymentMethod.tsx | 6 +++--- .../RelayTab/components/RelayTerraformDeploymentMethod.tsx | 6 +++--- 7 files changed, 17 insertions(+), 17 deletions(-) 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 6db81f19e..d676d4c8b 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 @@ -154,7 +154,7 @@ export const IdentityAuthTemplateModal = ({ popUp, handlePopUpToggle }: Props) = onOpenChange={handleClose} > - + 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 c44a89725..2d688ae95 100644 --- a/frontend/src/pages/organization/NetworkingPage/components/GatewayTab/components/GatewayCliDeploymentMethod.tsx +++ b/frontend/src/pages/organization/NetworkingPage/components/GatewayTab/components/GatewayCliDeploymentMethod.tsx @@ -55,10 +55,10 @@ const formSchemaWithIdentity = baseFormSchema.extend({ id: z.string(), name: z.string() }, - { required_error: "Identity is required" } + { required_error: "Machine identity is required" } ) .nullable() - .refine((val) => val !== null, { message: "Identity is required" }) + .refine((val) => val !== null, { message: "Machine identity is required" }) }); const formSchemaWithToken = baseFormSchema.extend({ @@ -307,7 +307,7 @@ export const GatewayCliDeploymentMethod = () => { setIdentityToken(e.target.value)} - placeholder="Enter identity token..." + placeholder="Enter machine identity token..." isError={Boolean(errors.identityToken)} /> {errors.identityToken &&

{errors.identityToken}

} diff --git a/frontend/src/pages/organization/NetworkingPage/components/GatewayTab/components/GatewayCliSystemdDeploymentMethod.tsx b/frontend/src/pages/organization/NetworkingPage/components/GatewayTab/components/GatewayCliSystemdDeploymentMethod.tsx index 1d4a7dfe5..fd316c08b 100644 --- a/frontend/src/pages/organization/NetworkingPage/components/GatewayTab/components/GatewayCliSystemdDeploymentMethod.tsx +++ b/frontend/src/pages/organization/NetworkingPage/components/GatewayTab/components/GatewayCliSystemdDeploymentMethod.tsx @@ -55,10 +55,10 @@ const formSchemaWithIdentity = baseFormSchema.extend({ id: z.string(), name: z.string() }, - { required_error: "Identity is required" } + { required_error: "Machine identity is required" } ) .nullable() - .refine((val) => val !== null, { message: "Identity is required" }) + .refine((val) => val !== null, { message: "Machine identity is required" }) }); const formSchemaWithToken = baseFormSchema.extend({ @@ -329,7 +329,7 @@ export const GatewayCliSystemdDeploymentMethod = () => { setIdentityToken(e.target.value)} - placeholder="Enter identity token..." + placeholder="Enter machine identity token..." isError={Boolean(errors.identityToken)} /> {errors.identityToken &&

{errors.identityToken}

} 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 54b176861..48c09944a 100644 --- a/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayCliDeploymentMethod.tsx +++ b/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayCliDeploymentMethod.tsx @@ -41,10 +41,10 @@ const formSchemaWithIdentity = baseFormSchema.extend({ id: z.string(), name: z.string() }, - { required_error: "Identity is required" } + { required_error: "Machine identity is required" } ) .nullable() - .refine((val) => val !== null, { message: "Identity is required" }) + .refine((val) => val !== null, { message: "Machine identity is required" }) }); const formSchemaWithToken = baseFormSchema.extend({ @@ -261,7 +261,7 @@ export const RelayCliDeploymentMethod = () => { setIdentityToken(e.target.value)} - placeholder="Enter identity token..." + placeholder="Enter machine identity token..." isError={Boolean(errors.identityToken)} /> {errors.identityToken &&

{errors.identityToken}

} diff --git a/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayCliSystemdDeploymentMethod.tsx b/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayCliSystemdDeploymentMethod.tsx index bc82ac4a0..cb2a9e0cd 100644 --- a/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayCliSystemdDeploymentMethod.tsx +++ b/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayCliSystemdDeploymentMethod.tsx @@ -41,10 +41,10 @@ const formSchemaWithIdentity = baseFormSchema.extend({ id: z.string(), name: z.string() }, - { required_error: "Identity is required" } + { required_error: "Machine identity is required" } ) .nullable() - .refine((val) => val !== null, { message: "Identity is required" }) + .refine((val) => val !== null, { message: "Machine identity is required" }) }); const formSchemaWithToken = baseFormSchema.extend({ @@ -302,7 +302,7 @@ export const RelayCliSystemdDeploymentMethod = () => { setIdentityToken(e.target.value)} - placeholder="Enter identity token..." + placeholder="Enter machine identity token..." isError={Boolean(errors.identityToken)} /> {errors.identityToken &&

{errors.identityToken}

} diff --git a/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayTerraformDeploymentMethod.tsx b/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayTerraformDeploymentMethod.tsx index 143952e22..550b52947 100644 --- a/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayTerraformDeploymentMethod.tsx +++ b/frontend/src/pages/organization/NetworkingPage/components/RelayTab/components/RelayTerraformDeploymentMethod.tsx @@ -42,10 +42,10 @@ const formSchemaWithIdentity = baseFormSchema.extend({ id: z.string(), name: z.string() }, - { required_error: "Identity is required" } + { required_error: "Machine identity is required" } ) .nullable() - .refine((val) => val !== null, { message: "Identity is required" }) + .refine((val) => val !== null, { message: "Machine identity is required" }) }); const formSchemaWithToken = baseFormSchema.extend({ @@ -381,7 +381,7 @@ resource "aws_eip_association" "eip_assoc" { setIdentityToken(e.target.value)} - placeholder="Enter identity token..." + placeholder="Enter machine identity token..." isError={Boolean(errors.identityToken)} /> {errors.identityToken &&

{errors.identityToken}

} From d25ab57204c3b01b653a20c59b90c82440344359 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Mon, 24 Nov 2025 11:17:40 -0800 Subject: [PATCH 07/68] Update docs --- docs/docs.json | 2 +- .../getting-started/concepts/client-integrations.mdx | 2 +- .../platform/pki/integration-guides/gloo-mesh.mdx | 2 +- .../pki/{pki-issuer.mdx => k8s-cert-manager.mdx} | 9 ++++++--- 4 files changed, 9 insertions(+), 6 deletions(-) rename docs/documentation/platform/pki/{pki-issuer.mdx => k8s-cert-manager.mdx} (94%) diff --git a/docs/docs.json b/docs/docs.json index 57f44596f..8da9a2a28 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -752,7 +752,7 @@ { "group": "Infrastructure Integrations", "pages": [ - "documentation/platform/pki/pki-issuer", + "documentation/platform/pki/k8s-cert-manager", "documentation/platform/pki/integration-guides/gloo-mesh", "documentation/platform/pki/integration-guides/windows-server-acme", "documentation/platform/pki/integration-guides/nginx-certbot", diff --git a/docs/documentation/getting-started/concepts/client-integrations.mdx b/docs/documentation/getting-started/concepts/client-integrations.mdx index bcd935830..2a575039a 100644 --- a/docs/documentation/getting-started/concepts/client-integrations.mdx +++ b/docs/documentation/getting-started/concepts/client-integrations.mdx @@ -24,7 +24,7 @@ Infisical offers a non-exhaustive set of clients and interfaces to support a wid - [External Secrets Operator (ESO)](https://external-secrets.io/latest/provider/infisical): Allows Infisical to act as a backend provider for syncing secrets into Kubernetes `Secret` objects using the widely adopted External Secrets Operator. -- [Kubernetes PKI Issuer](/documentation/platform/pki/pki-issuer): A controller that issues X.509 certificates from Infisical PKI using the cert-manager Issuer and Certificate CRDs. +- [Kubernetes PKI Issuer](/documentation/platform/pki/k8s-cert-manager): A controller that issues X.509 certificates from Infisical PKI using the cert-manager Issuer and Certificate CRDs. - [Secret Syncs](/integrations/secret-syncs/overview): Native integrations to forward secrets to services like GitHub, GitLab, AWS Secrets Manager, Vercel, and more. diff --git a/docs/documentation/platform/pki/integration-guides/gloo-mesh.mdx b/docs/documentation/platform/pki/integration-guides/gloo-mesh.mdx index d1f1273fd..0f312af01 100644 --- a/docs/documentation/platform/pki/integration-guides/gloo-mesh.mdx +++ b/docs/documentation/platform/pki/integration-guides/gloo-mesh.mdx @@ -25,7 +25,7 @@ When you deploy a `Certificate` CRD in your workload cluster, `cert-manager` use Infisical verifies the request against your certificate templates and returns the signed certificate. From there, Istio's control plane will automatically use this intermediate CA to sign leaf certificates for workloads in the service mesh, enabling secure mTLS communication across your entire Gloo Mesh infrastructure. -Follow the [Infisical PKI Issuer guide](/documentation/platform/pki/pki-issuer) for detailed instructions on how to set up the Infisical PKI Issuer and cert-manager for your Istio intermediate CA certificates in Gloo Mesh clusters. +Follow the [Kubernetes Cert Manager guide](/documentation/platform/pki/k8s-cert-manager) for detailed instructions on how to set up the Infisical PKI Issuer and cert-manager for your Istio intermediate CA certificates in Gloo Mesh clusters. For Gloo Mesh-specific configuration, ensure that: diff --git a/docs/documentation/platform/pki/pki-issuer.mdx b/docs/documentation/platform/pki/k8s-cert-manager.mdx similarity index 94% rename from docs/documentation/platform/pki/pki-issuer.mdx rename to docs/documentation/platform/pki/k8s-cert-manager.mdx index a1d07c98b..a5c9f8143 100644 --- a/docs/documentation/platform/pki/pki-issuer.mdx +++ b/docs/documentation/platform/pki/k8s-cert-manager.mdx @@ -1,13 +1,16 @@ --- -title: "Kubernetes Issuer" +title: "Kubernetes cert-manager" description: "Learn how to automatically provision and manage TLS certificates in Kubernetes using Infisical PKI" --- ## Concept -The Infisical PKI Issuer is an installable Kubernetes [cert-manager](https://cert-manager.io/) controller that uses Infisical PKI to sign certificate requests. The issuer is perfect for getting X.509 certificates for ingresses and other Kubernetes resources and capable of automatically renewing certificates as needed. +The Infisical PKI provides [ACME (Automated Certificate Management Environment)](https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment) integration for various of ACME clients to issue and renew certificates automatically. +Under Kubernetes environment, [cert-manager](https://cert-manager.io) is the most popular issuer to issue certificates via ACME. +The issuer is perfect for getting X.509 certificates for ingresses and other Kubernetes resources and capable of automatically renewing certificates as needed. -As part of the workflow, you install `cert-manager`, the Infisical PKI Issuer, and configure resources to represent the connection details to your Infisical PKI and the certificates you wish to issue. Each issued certificate and corresponding private key is made available in a Kubernetes secret. +As part of the workflow, you install `cert-manager` and configure resources to represent the connection details to your Infisical PKI and the certificates you wish to issue. +Each issued certificate and corresponding private key is made available in a Kubernetes secret. We recommend reading the [cert-manager documentation](https://cert-manager.io/docs/) for a fuller understanding of all the moving parts. From c3fda7d20df7ced629809536d52c0643f2906c04 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Mon, 24 Nov 2025 11:28:46 -0800 Subject: [PATCH 08/68] update doc --- .../platform/pki/k8s-cert-manager.mdx | 38 +++++-------------- 1 file changed, 10 insertions(+), 28 deletions(-) diff --git a/docs/documentation/platform/pki/k8s-cert-manager.mdx b/docs/documentation/platform/pki/k8s-cert-manager.mdx index a5c9f8143..02c00dbdd 100644 --- a/docs/documentation/platform/pki/k8s-cert-manager.mdx +++ b/docs/documentation/platform/pki/k8s-cert-manager.mdx @@ -18,28 +18,27 @@ We recommend reading the [cert-manager documentation](https://cert-manager.io/do A typical workflow for using the Infisical PKI Issuer to issue certificates for your Kubernetes resources consists of the following steps: -1. Creating a machine identity in Infisical. -2. Creating a Kubernetes secret to store the credentials of the machine identity. +1. Creating a certificate profile with ACME as the enrollment method in Infisical. +2. Creating a Kubernetes secret to store the EAB (External Account Binding) credentials of the ACME certificate profile. 3. Installing `cert-manager` into your Kubernetes cluster. -4. Installing the Infisical PKI Issuer controller into your Kubernetes cluster. -5. Creating an `Issuer` or `ClusterIssuer` resource in your Kubernetes cluster to represent the Infisical PKI issuer you wish to use. -6. Create the approver policy to accept certificate request. -7. Creating a `Certificate` resource in your Kubernetes cluster to represent a certificate you wish to issue. As part of this step, you specify the Kubernetes `Secret` to create and store the issued certificate and private key. -8. Consuming the issued certificate across your Kubernetes resources from the specified Kubernetes `Secret`. +4. Creating an `Issuer` or `ClusterIssuer` resource in your Kubernetes cluster to represent the Infisical PKI issuer you wish to use. +5. Create the approver policy to accept certificate request. +6. Creating a `Certificate` resource in your Kubernetes cluster to represent a certificate you wish to issue. As part of this step, you specify the Kubernetes `Secret` to create and store the issued certificate and private key. +7. Consuming the issued certificate across your Kubernetes resources from the specified Kubernetes `Secret`. ## Guide In the following steps, we explore how to install the Infisical PKI Issuer using [kubectl](https://github.com/kubernetes/kubectl) and use it to obtain certificates for your Kubernetes resources. - + - Follow the instructions [here](/documentation/platform/identities/universal-auth) to configure a [machine identity](/documentation/platform/identities/machine-identities) in Infisical with Universal Auth. + Follow the instructions [here](/documentation/platform/pki/enrollment-methods/acme) to create a certificate profile with ACME as the enrollment method. - By the end of this step, you should have a **Client ID** and **Client Secret** on hand as part of the Universal Auth configuration for the Infisical PKI Issuer to authenticate with Infisical; this will be useful in steps 4 and 5. + By the end of this step, you should have a **ACME Directory URL**, **EAB KID** and **EAB Secret** on hand as part of the credentials for the Infisical PKI ACME service to authenticate with Infisical; this will be useful in steps 4 and 5. - Currently, the Infisical PKI Issuer only supports authenticating with Infisical via the [Universal Auth](/documentation/platform/identities/universal-auth) authentication method. + Currently, the Infisical PKI ACME service only supports authenticating with Infisical via the dedicated EAB credentials generated for each certificate profile as the authentication method. We're planning to add support for [Kubernetes Auth](/documentation/platform/identities/kubernetes-auth) in the near future. @@ -51,23 +50,6 @@ In the following steps, we explore how to install the Infisical PKI Issuer using kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.15.3/cert-manager.yaml ``` - - Install the Infisical PKI Issuer controller into your Kubernetes cluster using one of the following methods: - - - - ```bash - helm repo add infisical-helm-charts 'https://dl.cloudsmith.io/public/infisical/helm-charts/helm/charts/' - helm install infisical-pki-issuer infisical-helm-charts/infisical-pki-issuer - ``` - - - ```bash - kubectl apply -f https://raw.githubusercontent.com/Infisical/infisical-issuer/main/build/install.yaml - ``` - - - Start by creating a Kubernetes `Secret` containing the **Client Secret** from step 1. As mentioned previously, this will be used by the Infisical PKI issuer to authenticate with Infisical. From 64f7a8321258691b17fbd531721240a962f38aac Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Mon, 24 Nov 2025 11:38:33 -0800 Subject: [PATCH 09/68] More doc --- .../platform/pki/k8s-cert-manager.mdx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/documentation/platform/pki/k8s-cert-manager.mdx b/docs/documentation/platform/pki/k8s-cert-manager.mdx index 02c00dbdd..3ef294829 100644 --- a/docs/documentation/platform/pki/k8s-cert-manager.mdx +++ b/docs/documentation/platform/pki/k8s-cert-manager.mdx @@ -21,7 +21,7 @@ A typical workflow for using the Infisical PKI Issuer to issue certificates for 1. Creating a certificate profile with ACME as the enrollment method in Infisical. 2. Creating a Kubernetes secret to store the EAB (External Account Binding) credentials of the ACME certificate profile. 3. Installing `cert-manager` into your Kubernetes cluster. -4. Creating an `Issuer` or `ClusterIssuer` resource in your Kubernetes cluster to represent the Infisical PKI issuer you wish to use. +4. Creating an `Issuer` or `ClusterIssuer` resource in your Kubernetes cluster to connect to the Infisical PKI certificate profile you wish to use. 5. Create the approver policy to accept certificate request. 6. Creating a `Certificate` resource in your Kubernetes cluster to represent a certificate you wish to issue. As part of this step, you specify the Kubernetes `Secret` to create and store the issued certificate and private key. 7. Consuming the issued certificate across your Kubernetes resources from the specified Kubernetes `Secret`. @@ -35,7 +35,7 @@ In the following steps, we explore how to install the Infisical PKI Issuer using Follow the instructions [here](/documentation/platform/pki/enrollment-methods/acme) to create a certificate profile with ACME as the enrollment method. - By the end of this step, you should have a **ACME Directory URL**, **EAB KID** and **EAB Secret** on hand as part of the credentials for the Infisical PKI ACME service to authenticate with Infisical; this will be useful in steps 4 and 5. + By the end of this step, you should have a **ACME Directory URL**, **EAB KID** and **EAB Secret** on hand as part of the credentials for the Infisical PKI ACME server to authenticate with Infisical; this will be useful in steps 4 and 5. Currently, the Infisical PKI ACME service only supports authenticating with Infisical via the dedicated EAB credentials generated for each certificate profile as the authentication method. @@ -50,30 +50,30 @@ In the following steps, we explore how to install the Infisical PKI Issuer using kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.15.3/cert-manager.yaml ``` - + Start by creating a Kubernetes `Secret` containing the **Client Secret** from step 1. As mentioned previously, this will be used by the Infisical PKI issuer to authenticate with Infisical. ```bash - kubectl create secret generic issuer-infisical-client-secret \ + kubectl create secret generic infisical-acme-eab-secret \ --namespace \ - --from-literal=clientSecret= + --from-literal=eabSecret= ``` - ```yaml secret-issuer.yaml + ```yaml acme-eab-secret.yaml apiVersion: v1 kind: Secret metadata: - name: issuer-infisical-client-secret + name: infisical-acme-eab-secret namespace: data: - clientSecret: + eabSecret: ``` ```bash - kubectl apply -f secret-issuer.yaml + kubectl apply -f acme-eab-secret.yaml ``` From 5252815b43451802a89ef4bdc82fdf865e3c1456 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Mon, 24 Nov 2025 13:45:47 -0800 Subject: [PATCH 10/68] docs --- .../platform/pki/k8s-cert-manager.mdx | 48 ++++++++++++------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/docs/documentation/platform/pki/k8s-cert-manager.mdx b/docs/documentation/platform/pki/k8s-cert-manager.mdx index 3ef294829..1454208d6 100644 --- a/docs/documentation/platform/pki/k8s-cert-manager.mdx +++ b/docs/documentation/platform/pki/k8s-cert-manager.mdx @@ -13,14 +13,15 @@ As part of the workflow, you install `cert-manager` and configure resources to r Each issued certificate and corresponding private key is made available in a Kubernetes secret. We recommend reading the [cert-manager documentation](https://cert-manager.io/docs/) for a fuller understanding of all the moving parts. +For the ACME part, please reference to the [ACME](https://cert-manager.io/docs/configuration/acme/) section. ## Workflow A typical workflow for using the Infisical PKI Issuer to issue certificates for your Kubernetes resources consists of the following steps: 1. Creating a certificate profile with ACME as the enrollment method in Infisical. -2. Creating a Kubernetes secret to store the EAB (External Account Binding) credentials of the ACME certificate profile. -3. Installing `cert-manager` into your Kubernetes cluster. +2. Installing `cert-manager` into your Kubernetes cluster. +3. Creating a Kubernetes secret to store the EAB (External Account Binding) credentials of the ACME certificate profile. 4. Creating an `Issuer` or `ClusterIssuer` resource in your Kubernetes cluster to connect to the Infisical PKI certificate profile you wish to use. 5. Create the approver policy to accept certificate request. 6. Creating a `Certificate` resource in your Kubernetes cluster to represent a certificate you wish to issue. As part of this step, you specify the Kubernetes `Secret` to create and store the issued certificate and private key. @@ -38,7 +39,7 @@ In the following steps, we explore how to install the Infisical PKI Issuer using By the end of this step, you should have a **ACME Directory URL**, **EAB KID** and **EAB Secret** on hand as part of the credentials for the Infisical PKI ACME server to authenticate with Infisical; this will be useful in steps 4 and 5. - Currently, the Infisical PKI ACME service only supports authenticating with Infisical via the dedicated EAB credentials generated for each certificate profile as the authentication method. + Currently, the Infisical PKI ACME server only supports authenticating with Infisical via the dedicated EAB credentials generated for each certificate profile as the authentication method. We're planning to add support for [Kubernetes Auth](/documentation/platform/identities/kubernetes-auth) in the near future. @@ -78,26 +79,36 @@ In the following steps, we explore how to install the Infisical PKI Issuer using - - Next, create the Infisical PKI Issuer by filling out `url`, `clientId`, `projectId` or `certificateTemplateName`, and applying the following configuration file for the `Issuer` resource. + + Next, create the cert-manager Issuer or ClusterIssuer by filling out `acme_server_url`, `your_email`, `acme_eab_kid`, and applying the following configuration file for the `Issuer` resource. This configuration file specifies the connection details to your Infisical PKI CA to be used for issuing certificates. ```yaml infisical-issuer.yaml - apiVersion: infisical-issuer.infisical.com/v1alpha1 + apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: issuer-infisical - namespace: spec: - url: "https://app.infisical.com" # the URL of your Infisical instance - projectId: # the ID of the project you want to use to issue certificates - certificateTemplateName: # the name of the certificate template you want to use to issue certificates against - authentication: - universalAuth: - clientId: # the Client ID from step 1 - secretRef: # reference to the Secret created in step 4 - name: "issuer-infisical-client-secret" - key: "clientSecret" + acme: + # the URL of your Infisical certificate profile with + # ACME enrollment method from step 1 + server: + # your email address, any email could work. + # currently we just ignore the value + email: + externalAccountBinding: + keyID: # the EAB secret value from step 1 + keySecretRef: # reference to the Secret created in step 3 + name: "issuer-infisical-client-secret" + key: "clientSecret" + privateKeySecretRef: + name: issuer-infisical-account-key + solvers: + - http01: + ingress: + # this doesn't need to be nginx, you can use any + # ingressClassName available in your Kubernetes cluster + ingressClassName: nginx ``` ``` @@ -107,7 +118,7 @@ In the following steps, we explore how to install the Infisical PKI Issuer using You can check that the issuer was created successfully by running the following command: ```bash - kubectl get issuers.infisical-issuer.infisical.com -n -o wide + kubectl get issuers.cert-manager.io -n -o wide ``` ```bash @@ -122,6 +133,9 @@ In the following steps, we explore how to install the Infisical PKI Issuer using If you want to create a single `Issuer` that can be consumed in multiple namespaces, you should consider creating a `ClusterIssuer` resource. This is almost identical to the `Issuer` resource, however is non-namespaced so it can be used to issue `Certificates` across all namespaces. You can read more about the `Issuer` and `ClusterIssuer` resources [here](https://cert-manager.io/docs/configuration/). + + Also, currently Infisical ACME server only supports HTTP-01 and requires all the certificate orders passing the challenge before issuing certificates. + We will allow users to opt-out challenge in the near future and also provide support DNS-01 as well. From 0d80eb6fae4d7fb10dba63e2ad54b26441a76e48 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Mon, 24 Nov 2025 13:54:16 -0800 Subject: [PATCH 11/68] docs --- .../platform/pki/k8s-cert-manager.mdx | 69 ++++--------------- 1 file changed, 15 insertions(+), 54 deletions(-) diff --git a/docs/documentation/platform/pki/k8s-cert-manager.mdx b/docs/documentation/platform/pki/k8s-cert-manager.mdx index 1454208d6..c62dbf97a 100644 --- a/docs/documentation/platform/pki/k8s-cert-manager.mdx +++ b/docs/documentation/platform/pki/k8s-cert-manager.mdx @@ -23,9 +23,8 @@ A typical workflow for using the Infisical PKI Issuer to issue certificates for 2. Installing `cert-manager` into your Kubernetes cluster. 3. Creating a Kubernetes secret to store the EAB (External Account Binding) credentials of the ACME certificate profile. 4. Creating an `Issuer` or `ClusterIssuer` resource in your Kubernetes cluster to connect to the Infisical PKI certificate profile you wish to use. -5. Create the approver policy to accept certificate request. -6. Creating a `Certificate` resource in your Kubernetes cluster to represent a certificate you wish to issue. As part of this step, you specify the Kubernetes `Secret` to create and store the issued certificate and private key. -7. Consuming the issued certificate across your Kubernetes resources from the specified Kubernetes `Secret`. +5. Creating a `Certificate` resource in your Kubernetes cluster to represent a certificate you wish to issue. As part of this step, you specify the Kubernetes `Secret` to create and store the issued certificate and private key. +6. Consuming the issued certificate across your Kubernetes resources from the specified Kubernetes `Secret`. ## Guide @@ -52,7 +51,7 @@ In the following steps, we explore how to install the Infisical PKI Issuer using ``` - Start by creating a Kubernetes `Secret` containing the **Client Secret** from step 1. As mentioned previously, this will be used by the Infisical PKI issuer to authenticate with Infisical. + Start by creating a Kubernetes `Secret` containing the **EAB Secret** from step 1. As mentioned previously, this will be used by the Infisical PKI issuer to authenticate with Infisical. @@ -138,50 +137,6 @@ In the following steps, we explore how to install the Infisical PKI Issuer using We will allow users to opt-out challenge in the near future and also provide support DNS-01 as well. - - If you create a `CertificateRequest` now, you'll notice it's neither approved nor denied. This is expected because by default cert-manager approver controller requires an approver-policy. - - To enable approval, create the following YAML file and apply it: - - ```yaml infisical-approver-policy.yaml - apiVersion: rbac.authorization.k8s.io/v1 - kind: ClusterRole - metadata: - name: infisical-issuer-approver - rules: - # Permission to approve or deny CertificateRequests for signers in cert-manager.io API group - - apiGroups: ['cert-manager.io'] - resources: ['signers'] - verbs: ['approve'] - resourceNames: - # Grant approval permissions for namespaced issuers - - "issuers.infisical-issuer.infisical.com/default.issuer-infisical" - # Grant approval permissions for cluster-scoped issuers - - "clusterissuers.infisical-issuer.infisical.com/clusterissuer-infisical" - --- - # Bind the cert-manager service account to the new role - apiVersion: rbac.authorization.k8s.io/v1 - kind: ClusterRoleBinding - metadata: - name: infisical-issuer-approver-binding - subjects: - - kind: ServiceAccount - name: cert-manager - namespace: cert-manager - roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: infisical-issuer-approver - ``` - - ``` - kubectl apply -f infisical-approver-policy.yaml - ``` - - This configuration creates a `ClusterRole` named `infisical-issuer-approver` that grants approval permissions for specific Infisical issuer types. It then binds this role to the cert-manager service account, allowing it to approve certificate requests from your Infisical issuers. - - For information, check out [cert manager approval policy doc](https://cert-manager.io/docs/policy/approval/approver-policy/). - Finally, create a `Certificate` by applying the following configuration file. @@ -194,17 +149,23 @@ In the following steps, we explore how to install the Infisical PKI Issuer using name: certificate-by-issuer namespace: spec: - commonName: certificate-by-issuer.example.com # the common name for the certificate - secretName: certificate-by-issuer # the name of the Kubernetes Secret to create and store the certificate and private key in + # the common name for the certificate + commonName: certificate-by-issuer.example.com + # the name of the Kubernetes Secret to create and store + # the certificate and private key in + secretName: certificate-by-issuer issuerRef: name: issuer-infisical - group: infisical-issuer.infisical.com + group: issuers.cert-manager.io kind: Issuer - privateKey: # the algorithm and key size to use + # the algorithm and key size to use + privateKey: algorithm: ECDSA size: 256 - duration: 48h # the ttl for the certificate - renewBefore: 12h # the time before the certificate expiry that the certificate should be automatically renewed + # the ttl for the certificate + duration: 48h + # the time before the certificate expiry that the certificate should be automatically renewed + renewBefore: 12h ``` The above sample configuration file specifies a certificate to be issued with the common name `certificate-by-issuer.example.com` and ECDSA private key using the P-256 curve, valid for 48 hours; the certificate will be automatically renewed by `cert-manager` 12 hours before expiry. From 747820c7dd97de022d3f9790ccd8909ecb6029f0 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Mon, 24 Nov 2025 13:57:01 -0800 Subject: [PATCH 12/68] k8s doc --- docs/documentation/platform/pki/k8s-cert-manager.mdx | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/docs/documentation/platform/pki/k8s-cert-manager.mdx b/docs/documentation/platform/pki/k8s-cert-manager.mdx index c62dbf97a..652ef7cb6 100644 --- a/docs/documentation/platform/pki/k8s-cert-manager.mdx +++ b/docs/documentation/platform/pki/k8s-cert-manager.mdx @@ -164,7 +164,8 @@ In the following steps, we explore how to install the Infisical PKI Issuer using size: 256 # the ttl for the certificate duration: 48h - # the time before the certificate expiry that the certificate should be automatically renewed + # the time before the certificate expiry that the certificate should + # be automatically renewed renewBefore: 12h ``` @@ -210,7 +211,7 @@ In the following steps, we explore how to install the Infisical PKI Issuer using cert-manager.io/certificate-name: certificate-by-issuer cert-manager.io/common-name: certificate-by-issuer.example.com cert-manager.io/ip-sans: - cert-manager.io/issuer-group: infisical-issuer.infisical.com + cert-manager.io/issuer-group: issuers.cert-manager.io cert-manager.io/issuer-kind: Issuer cert-manager.io/issuer-name: issuer-infisical cert-manager.io/uri-sans: @@ -255,11 +256,4 @@ In the following steps, we explore how to install the Infisical PKI Issuer using You can read more about the `renewBefore` field [here](https://cert-manager.io/docs/reference/api-docs/#cert-manager.io/v1.CertificateSpec). - - If you see log messages similar to: - ``` - "CertificateRequest has not been approved yet. Ignoring.","controller":"certificaterequest","controllerGroup":"cert-manager.io","controllerKind":"CertificateRequest","CertificateRequest":{"name":"skynet-infisical-rta-rsa2048-1","namespace":"infisical-system"},"namespace":"infisical-system","name":"skynet-infisical-rta-rsa2048-1","reconcileID":"bfb7cad9-d867-45b5-b3a3-0139e731b7a6"} - ``` - This indicates that the `CertificateRequest` has been created, but `cert-manager` has not yet approved it. This typically occurs because a necessary approver policy is missing. Refer to the documentation above to create an approver policy. - From 7bfb4b2969355931b8d781dd8b16f64a08bab168 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Mon, 24 Nov 2025 14:03:52 -0800 Subject: [PATCH 13/68] typo --- docs/documentation/platform/pki/k8s-cert-manager.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/documentation/platform/pki/k8s-cert-manager.mdx b/docs/documentation/platform/pki/k8s-cert-manager.mdx index 652ef7cb6..53e0188ed 100644 --- a/docs/documentation/platform/pki/k8s-cert-manager.mdx +++ b/docs/documentation/platform/pki/k8s-cert-manager.mdx @@ -35,7 +35,7 @@ In the following steps, we explore how to install the Infisical PKI Issuer using Follow the instructions [here](/documentation/platform/pki/enrollment-methods/acme) to create a certificate profile with ACME as the enrollment method. - By the end of this step, you should have a **ACME Directory URL**, **EAB KID** and **EAB Secret** on hand as part of the credentials for the Infisical PKI ACME server to authenticate with Infisical; this will be useful in steps 4 and 5. + By the end of this step, you should have a **ACME Directory URL**, **EAB KID** and **EAB Secret** on hand as part of the credentials for the Infisical PKI ACME server to authenticate with Infisical; this will be useful in step 4. Currently, the Infisical PKI ACME server only supports authenticating with Infisical via the dedicated EAB credentials generated for each certificate profile as the authentication method. From aa556f41ce443262fc1291732e4d75982965128b Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Tue, 25 Nov 2025 03:36:15 +0530 Subject: [PATCH 14/68] fix: review comment --- .../secret-manager/OverviewPage/OverviewPage.tsx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx b/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx index 6dcf14845..ddc7e69ed 100644 --- a/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx +++ b/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx @@ -197,13 +197,13 @@ export const OverviewPage = () => { } }; - const [isCopied, , setIsCopied] = useTimedReset({ - initialState: false + const [copiedSlug, , setCopiedSlug] = useTimedReset({ + initialState: "" }); - const copyToClipboard = (value: string) => { + const copyToClipboard = (value: string, slug: string) => { navigator.clipboard.writeText(value); - setIsCopied(true); + setCopiedSlug(slug); }; const [filter, setFilter] = useState(DEFAULT_FILTER_STATE); @@ -1348,9 +1348,9 @@ export const OverviewPage = () => { variant="plain" colorSchema="secondary" ariaLabel="Copy environment slug" - onClick={() => copyToClipboard(slug)} + onClick={() => copyToClipboard(slug, slug)} > - +
@@ -1362,6 +1362,7 @@ export const OverviewPage = () => { rootProps={{ disableHoverableContent: false }} + key={`tooltip-${name}-${index + 1}`} >
Date: Mon, 24 Nov 2025 14:09:38 -0800 Subject: [PATCH 15/68] docs --- docs/documentation/platform/pki/k8s-cert-manager.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/documentation/platform/pki/k8s-cert-manager.mdx b/docs/documentation/platform/pki/k8s-cert-manager.mdx index 53e0188ed..97de5e877 100644 --- a/docs/documentation/platform/pki/k8s-cert-manager.mdx +++ b/docs/documentation/platform/pki/k8s-cert-manager.mdx @@ -17,7 +17,7 @@ For the ACME part, please reference to the [ACME](https://cert-manager.io/docs/c ## Workflow -A typical workflow for using the Infisical PKI Issuer to issue certificates for your Kubernetes resources consists of the following steps: +A typical workflow for using cert-manager with Infisical PKI via ACME to issue certificates for your Kubernetes resources consists of the following steps: 1. Creating a certificate profile with ACME as the enrollment method in Infisical. 2. Installing `cert-manager` into your Kubernetes cluster. @@ -28,7 +28,7 @@ A typical workflow for using the Infisical PKI Issuer to issue certificates for ## Guide -In the following steps, we explore how to install the Infisical PKI Issuer using [kubectl](https://github.com/kubernetes/kubectl) and use it to obtain certificates for your Kubernetes resources. +In the following steps, we explore how to install the cert-manager using [kubectl](https://github.com/kubernetes/kubectl) and use it to obtain certificates for your Kubernetes resources. From 0b421cf6a5082525c0ec36f1dcf5ddfa41f076d4 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Tue, 25 Nov 2025 03:43:55 +0530 Subject: [PATCH 16/68] fix: lint --- .../components/MachineIdentitiesTable.tsx | 2 +- .../AccessManagementPage/AccessManagementPage.tsx | 8 ++++---- .../IdentitySection/IdentityAuthTemplateModal.tsx | 4 +++- .../components/IdentitySection/IdentitySection.tsx | 2 +- .../components/IdentitySection/IdentityTable.tsx | 2 +- .../components/IdentitySection/OrgIdentityLinkForm.tsx | 2 +- .../components/IdentitySection/OrgIdentityModal.tsx | 4 ++-- .../IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx | 4 ++-- .../IdentityProjectsSection/IdentityProjectsTable.tsx | 2 +- .../GatewayTab/components/GatewayCliDeploymentMethod.tsx | 4 ++-- .../components/GatewayCliSystemdDeploymentMethod.tsx | 4 ++-- .../RelayTab/components/RelayCliDeploymentMethod.tsx | 4 ++-- .../components/RelayCliSystemdDeploymentMethod.tsx | 4 ++-- .../components/RelayTerraformDeploymentMethod.tsx | 4 ++-- .../pages/project/AccessControlPage/AccessControlPage.tsx | 2 +- .../components/IdentityTab/IdentityTab.tsx | 2 +- .../IdentityTab/components/ProjectIdentityModal.tsx | 2 +- .../IdentityTab/components/ProjectLinkIdentityModal.tsx | 4 ++-- .../IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx | 4 ++-- 19 files changed, 33 insertions(+), 31 deletions(-) diff --git a/frontend/src/pages/admin/ResourceOverviewPage/components/MachineIdentitiesTable.tsx b/frontend/src/pages/admin/ResourceOverviewPage/components/MachineIdentitiesTable.tsx index c2fc1ac84..0347fbcf9 100644 --- a/frontend/src/pages/admin/ResourceOverviewPage/components/MachineIdentitiesTable.tsx +++ b/frontend/src/pages/admin/ResourceOverviewPage/components/MachineIdentitiesTable.tsx @@ -1,3 +1,4 @@ +import { useState } from "react"; import { faEllipsisV, faMagnifyingGlass, @@ -7,7 +8,6 @@ import { } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { ServerCogIcon } from "lucide-react"; -import { useState } from "react"; import { createNotification } from "@app/components/notifications"; import { diff --git a/frontend/src/pages/organization/AccessManagementPage/AccessManagementPage.tsx b/frontend/src/pages/organization/AccessManagementPage/AccessManagementPage.tsx index f88717e60..9b5a8e7d3 100644 --- a/frontend/src/pages/organization/AccessManagementPage/AccessManagementPage.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/AccessManagementPage.tsx @@ -1,9 +1,9 @@ -import { faInfoCircle } from "@fortawesome/free-solid-svg-icons"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { useNavigate, useSearch } from "@tanstack/react-router"; import { useState } from "react"; import { Helmet } from "react-helmet"; import { useTranslation } from "react-i18next"; +import { faInfoCircle } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { useNavigate, useSearch } from "@tanstack/react-router"; import { OrgPermissionGuardBanner } from "@app/components/permissions/OrgPermissionCan"; import { Button, PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2"; @@ -18,8 +18,8 @@ import { } from "@app/context"; import { OrgAccessControlTabSections } from "@app/types/org"; -import { OrgGroupsTab, OrgIdentityTab, OrgMembersTab, OrgRoleTabSection } from "./components"; import { UpgradePrivilegeSystemModal } from "./components/UpgradePrivilegeSystemModal/UpgradePrivilegeSystemModal"; +import { OrgGroupsTab, OrgIdentityTab, OrgMembersTab, OrgRoleTabSection } from "./components"; export const AccessManagementPage = () => { const { t } = useTranslation(); 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 d676d4c8b..6871dd3f3 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 @@ -154,7 +154,9 @@ export const IdentityAuthTemplateModal = ({ popUp, handlePopUpToggle }: Props) = onOpenChange={handleClose} > Date: Mon, 24 Nov 2025 14:15:23 -0800 Subject: [PATCH 17/68] Proofread --- .../platform/pki/k8s-cert-manager.mdx | 52 +++++++++++-------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/docs/documentation/platform/pki/k8s-cert-manager.mdx b/docs/documentation/platform/pki/k8s-cert-manager.mdx index 97de5e877..980a16973 100644 --- a/docs/documentation/platform/pki/k8s-cert-manager.mdx +++ b/docs/documentation/platform/pki/k8s-cert-manager.mdx @@ -5,44 +5,50 @@ description: "Learn how to automatically provision and manage TLS certificates i ## Concept -The Infisical PKI provides [ACME (Automated Certificate Management Environment)](https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment) integration for various of ACME clients to issue and renew certificates automatically. -Under Kubernetes environment, [cert-manager](https://cert-manager.io) is the most popular issuer to issue certificates via ACME. -The issuer is perfect for getting X.509 certificates for ingresses and other Kubernetes resources and capable of automatically renewing certificates as needed. +The Infisical PKI provides ACME (Automated Certificate Management Environment) integration, enabling various ACME clients to issue and renew certificates automatically. +In Kubernetes environments, [cert-manager](https://cert-manager.io) is the most popular tool for issuing certificates via ACME. +The issuer is perfect at obtaining X.509 certificates for Ingresses and other Kubernetes resources and can automatically renew them before expiration. -As part of the workflow, you install `cert-manager` and configure resources to represent the connection details to your Infisical PKI and the certificates you wish to issue. -Each issued certificate and corresponding private key is made available in a Kubernetes secret. +The typical workflow involves installing `cert-manager` and configuring resources that represent the connection details to your Infisical PKI as well as the certificates you want to issue. +Each issued certificate and its corresponding private key are stored in a Kubernetes `Secret`. -We recommend reading the [cert-manager documentation](https://cert-manager.io/docs/) for a fuller understanding of all the moving parts. -For the ACME part, please reference to the [ACME](https://cert-manager.io/docs/configuration/acme/) section. +We recommend reading the official [cert-manager documentation](https://cert-manager.io/docs/) for a complete overview. +For the ACME-specific configuration, refer to the [ACME section](https://cert-manager.io/docs/configuration/acme/). ## Workflow -A typical workflow for using cert-manager with Infisical PKI via ACME to issue certificates for your Kubernetes resources consists of the following steps: +A typical workflow for using cert-manager with Infisical PKI via ACME consists of the following steps: -1. Creating a certificate profile with ACME as the enrollment method in Infisical. -2. Installing `cert-manager` into your Kubernetes cluster. -3. Creating a Kubernetes secret to store the EAB (External Account Binding) credentials of the ACME certificate profile. -4. Creating an `Issuer` or `ClusterIssuer` resource in your Kubernetes cluster to connect to the Infisical PKI certificate profile you wish to use. -5. Creating a `Certificate` resource in your Kubernetes cluster to represent a certificate you wish to issue. As part of this step, you specify the Kubernetes `Secret` to create and store the issued certificate and private key. -6. Consuming the issued certificate across your Kubernetes resources from the specified Kubernetes `Secret`. +1. Create a certificate profile in Infisical with ACME as the enrollment method. +2. Install `cert-manager` in your Kubernetes cluster. +3. Create a Kubernetes `Secret` containing the EAB (External Account Binding) credentials for the ACME certificate profile. +4. Create an `Issuer` or `ClusterIssuer` resource that connects to the desired Infisical PKI certificate profile. +5. Create a `Certificate` resource defining the certificate you wish to issue and the target `Secret` where the certificate and private key will be stored. +6. Use the resulting Kubernetes `Secret` in your Ingresses or other resources. ## Guide -In the following steps, we explore how to install the cert-manager using [kubectl](https://github.com/kubernetes/kubectl) and use it to obtain certificates for your Kubernetes resources. +The following steps show how to install cert-manager (using `kubectl`) and obtain certificates from Infisical PKI. - + - Follow the instructions [here](/documentation/platform/pki/enrollment-methods/acme) to create a certificate profile with ACME as the enrollment method. + Follow the instructions [here](/documentation/platform/pki/enrollment-methods/acme) to create a certificate profile that uses ACME enrollment. - By the end of this step, you should have a **ACME Directory URL**, **EAB KID** and **EAB Secret** on hand as part of the credentials for the Infisical PKI ACME server to authenticate with Infisical; this will be useful in step 4. + After completion, you will have the following values: + - **ACME Directory URL** + - **EAB Key ID (KID)** + - **EAB Secret** - - Currently, the Infisical PKI ACME server only supports authenticating with Infisical via the dedicated EAB credentials generated for each certificate profile as the authentication method. + These will be needed in later steps. - We're planning to add support for [Kubernetes Auth](/documentation/platform/identities/kubernetes-auth) in the near future. - - + + Currently, the Infisical PKI ACME server only supports authentication via dedicated EAB credentials generated per certificate profile. + + Support for [Kubernetes Auth](/documentation/platform/identities/kubernetes-auth) is planned for the near future. + + + Install `cert-manager` into your Kubernetes cluster by following the instructions [here](https://cert-manager.io/docs/installation/) or by running the following command: From cdc1e7cc16cf259423335d535444b8c9e0653b66 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Mon, 24 Nov 2025 14:26:23 -0800 Subject: [PATCH 18/68] doc --- .../platform/pki/k8s-cert-manager.mdx | 345 +++++++++--------- 1 file changed, 176 insertions(+), 169 deletions(-) diff --git a/docs/documentation/platform/pki/k8s-cert-manager.mdx b/docs/documentation/platform/pki/k8s-cert-manager.mdx index 980a16973..7bbf183cb 100644 --- a/docs/documentation/platform/pki/k8s-cert-manager.mdx +++ b/docs/documentation/platform/pki/k8s-cert-manager.mdx @@ -49,198 +49,205 @@ The following steps show how to install cert-manager (using `kubectl`) and obtai - - Install `cert-manager` into your Kubernetes cluster by following the instructions [here](https://cert-manager.io/docs/installation/) or by running the following command: + - ```bash - kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.15.3/cert-manager.yaml - ``` - - - Start by creating a Kubernetes `Secret` containing the **EAB Secret** from step 1. As mentioned previously, this will be used by the Infisical PKI issuer to authenticate with Infisical. + Install cert-manager in your Kubernetes cluster by following the official guide [here](https://cert-manager.io/docs/installation/) or by applying the manifest directly: - - - ```bash - kubectl create secret generic infisical-acme-eab-secret \ - --namespace \ - --from-literal=eabSecret= - ``` - - - ```yaml acme-eab-secret.yaml - apiVersion: v1 - kind: Secret - metadata: - name: infisical-acme-eab-secret - namespace: - data: - eabSecret: - ``` + ```bash + kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.15.3/cert-manager.yaml + ``` - ```bash - kubectl apply -f acme-eab-secret.yaml - ``` - - - - - Next, create the cert-manager Issuer or ClusterIssuer by filling out `acme_server_url`, `your_email`, `acme_eab_kid`, and applying the following configuration file for the `Issuer` resource. - This configuration file specifies the connection details to your Infisical PKI CA to be used for issuing certificates. + + + Create a Kubernetes `Secret` that contains the **EAB Secret (HMAC key)** obtained in step 1. + cert-manager uses this secret to authenticate with the Infisical ACME server via External Account Binding (EAB). - ```yaml infisical-issuer.yaml - apiVersion: cert-manager.io/v1 - kind: Issuer - metadata: + + + ```bash + kubectl create secret generic infisical-acme-eab-secret \ + --namespace \ + --from-literal=eabSecret= + ``` + + + ```yaml acme-eab-secret.yaml + apiVersion: v1 + kind: Secret + metadata: + name: infisical-acme-eab-secret + namespace: + data: + eabSecret: + ``` + + ```bash + kubectl apply -f acme-eab-secret.yaml + ``` + + + + + + Next, create the cert-manager Issuer or ClusterIssuer by filling out `acme_server_url`, `your_email`, `acme_eab_kid`, and applying the following configuration file for the `Issuer` resource. + This configuration file specifies the connection details to your Infisical PKI CA to be used for issuing certificates. + + ```yaml infisical-issuer.yaml + apiVersion: cert-manager.io/v1 + kind: Issuer + metadata: + name: issuer-infisical + spec: + acme: + # the URL of your Infisical certificate profile with + # ACME enrollment method from step 1 + server: + # your email address, any email could work. + # currently we just ignore the value + email: + externalAccountBinding: + keyID: # the EAB secret value from step 1 + keySecretRef: # reference to the Secret created in step 3 + name: "issuer-infisical-client-secret" + key: "clientSecret" + privateKeySecretRef: + name: issuer-infisical-account-key + solvers: + - http01: + ingress: + # this doesn't need to be nginx, you can use any + # ingressClassName available in your Kubernetes cluster + ingressClassName: nginx + ``` + + ``` + kubectl apply -f infisical-issuer.yaml + ``` + + You can check that the issuer was created successfully by running the following command: + + ```bash + kubectl get issuers.cert-manager.io -n -o wide + ``` + + ```bash + NAME AGE + issuer-infisical 21h + ``` + + + An `Issuer` is a namespaced resource, and it is not possible to issue certificates from an `Issuer` in a different namespace. + This means you will need to create an `Issuer` in each namespace you wish to obtain `Certificates` in. + + If you want to create a single `Issuer` that can be consumed in multiple namespaces, you should consider creating a `ClusterIssuer` resource. This is almost identical to the `Issuer` resource, however is non-namespaced so it can be used to issue `Certificates` across all namespaces. + + You can read more about the `Issuer` and `ClusterIssuer` resources [here](https://cert-manager.io/docs/configuration/). + + Also, currently Infisical ACME server only supports HTTP-01 and requires all the certificate orders passing the challenge before issuing certificates. + We will allow users to opt-out challenge in the near future and also provide support DNS-01 as well. + + + + + + Finally, create a `Certificate` by applying the following configuration file. + This configuration file specifies the details of the (end-entity/leaf) certificate to be issued. + + ```yaml certificate-issuer.yaml + apiVersion: cert-manager.io/v1 + kind: Certificate + metadata: + name: certificate-by-issuer + namespace: + spec: + # the common name for the certificate + commonName: certificate-by-issuer.example.com + # the name of the Kubernetes Secret to create and store + # the certificate and private key in + secretName: certificate-by-issuer + issuerRef: name: issuer-infisical - spec: - acme: - # the URL of your Infisical certificate profile with - # ACME enrollment method from step 1 - server: - # your email address, any email could work. - # currently we just ignore the value - email: - externalAccountBinding: - keyID: # the EAB secret value from step 1 - keySecretRef: # reference to the Secret created in step 3 - name: "issuer-infisical-client-secret" - key: "clientSecret" - privateKeySecretRef: - name: issuer-infisical-account-key - solvers: - - http01: - ingress: - # this doesn't need to be nginx, you can use any - # ingressClassName available in your Kubernetes cluster - ingressClassName: nginx - ``` + group: issuers.cert-manager.io + kind: Issuer + # the algorithm and key size to use + privateKey: + algorithm: ECDSA + size: 256 + # the ttl for the certificate + duration: 48h + # the time before the certificate expiry that the certificate should + # be automatically renewed + renewBefore: 12h + ``` - ``` - kubectl apply -f infisical-issuer.yaml - ``` + The above sample configuration file specifies a certificate to be issued with the common name `certificate-by-issuer.example.com` and ECDSA private key using the P-256 curve, valid for 48 hours; the certificate will be automatically renewed by `cert-manager` 12 hours before expiry. + The certificate is issued by the issuer `issuer-infisical` created in the previous step and the resulting certificate and private key will be stored in a secret named `certificate-by-issuer`. - You can check that the issuer was created successfully by running the following command: + Note that the full list of the fields supported on the `Certificate` resource can be found in the API reference documentation [here](https://cert-manager.io/docs/reference/api-docs/#cert-manager.io/v1.CertificateSpec). - ```bash - kubectl get issuers.cert-manager.io -n -o wide - ``` + You can check that the certificate was created successfully by running the following command: - ```bash - NAME AGE - issuer-infisical 21h - ``` + ```bash + kubectl get certificates -n -o wide + ``` - - An `Issuer` is a namespaced resource, and it is not possible to issue certificates from an `Issuer` in a different namespace. - This means you will need to create an `Issuer` in each namespace you wish to obtain `Certificates` in. + ```bash + NAME READY SECRET ISSUER STATUS AGE + certificate-by-issuer True certificate-by-issuer issuer-infisical Certificate is up to date and has not expired 20h + ``` - If you want to create a single `Issuer` that can be consumed in multiple namespaces, you should consider creating a `ClusterIssuer` resource. This is almost identical to the `Issuer` resource, however is non-namespaced so it can be used to issue `Certificates` across all namespaces. + + + Since the actual certificate and private key are stored in a Kubernetes secret, we can check that the secret was created successfully by running the following command: - You can read more about the `Issuer` and `ClusterIssuer` resources [here](https://cert-manager.io/docs/configuration/). + ```bash + kubectl get secret certificate-by-issuer -n + ``` - Also, currently Infisical ACME server only supports HTTP-01 and requires all the certificate orders passing the challenge before issuing certificates. - We will allow users to opt-out challenge in the near future and also provide support DNS-01 as well. - - - + ```bash + NAME TYPE DATA AGE + certificate-by-issuer kubernetes.io/tls 2 26h + ``` - Finally, create a `Certificate` by applying the following configuration file. - This configuration file specifies the details of the (end-entity/leaf) certificate to be issued. + We can `describe` the secret to get more information about it: - ```yaml certificate-issuer.yaml - apiVersion: cert-manager.io/v1 - kind: Certificate - metadata: - name: certificate-by-issuer - namespace: - spec: - # the common name for the certificate - commonName: certificate-by-issuer.example.com - # the name of the Kubernetes Secret to create and store - # the certificate and private key in - secretName: certificate-by-issuer - issuerRef: - name: issuer-infisical - group: issuers.cert-manager.io - kind: Issuer - # the algorithm and key size to use - privateKey: - algorithm: ECDSA - size: 256 - # the ttl for the certificate - duration: 48h - # the time before the certificate expiry that the certificate should - # be automatically renewed - renewBefore: 12h - ``` + ```bash + kubectl describe secret certificate-by-issuer -n default + ``` - The above sample configuration file specifies a certificate to be issued with the common name `certificate-by-issuer.example.com` and ECDSA private key using the P-256 curve, valid for 48 hours; the certificate will be automatically renewed by `cert-manager` 12 hours before expiry. - The certificate is issued by the issuer `issuer-infisical` created in the previous step and the resulting certificate and private key will be stored in a secret named `certificate-by-issuer`. + ```bash + Name: certificate-by-issuer + Namespace: default + Labels: controller.cert-manager.io/fao=true + Annotations: cert-manager.io/alt-names: + cert-manager.io/certificate-name: certificate-by-issuer + cert-manager.io/common-name: certificate-by-issuer.example.com + cert-manager.io/ip-sans: + cert-manager.io/issuer-group: issuers.cert-manager.io + cert-manager.io/issuer-kind: Issuer + cert-manager.io/issuer-name: issuer-infisical + cert-manager.io/uri-sans: - Note that the full list of the fields supported on the `Certificate` resource can be found in the API reference documentation [here](https://cert-manager.io/docs/reference/api-docs/#cert-manager.io/v1.CertificateSpec). + Type: kubernetes.io/tls - You can check that the certificate was created successfully by running the following command: + Data + ==== + ca.crt: 1306 bytes + tls.crt: 2380 bytes + tls.key: 227 bytes + ``` - ```bash - kubectl get certificates -n -o wide - ``` + Here, `ca.crt` is the Root CA certificate, `tls.crt` is the requested certificate followed by the certificate chain, and `tls.key` is the private key for the certificate. - ```bash - NAME READY SECRET ISSUER STATUS AGE - certificate-by-issuer True certificate-by-issuer issuer-infisical Certificate is up to date and has not expired 20h - ``` - - - Since the actual certificate and private key are stored in a Kubernetes secret, we can check that the secret was created successfully by running the following command: + We can decode the certificate and print it out using `openssl`: - ```bash - kubectl get secret certificate-by-issuer -n - ``` + ```bash + kubectl get secret certificate-by-issuer -n default -o jsonpath='{.data.tls\.crt}' | base64 --decode | openssl x509 -text -noout + ``` - ```bash - NAME TYPE DATA AGE - certificate-by-issuer kubernetes.io/tls 2 26h - ``` + In any case, the certificate is ready to be used as Kubernetes Secret by your Kubernetes resources. - We can `describe` the secret to get more information about it: - - ```bash - kubectl describe secret certificate-by-issuer -n default - ``` - - ```bash - Name: certificate-by-issuer - Namespace: default - Labels: controller.cert-manager.io/fao=true - Annotations: cert-manager.io/alt-names: - cert-manager.io/certificate-name: certificate-by-issuer - cert-manager.io/common-name: certificate-by-issuer.example.com - cert-manager.io/ip-sans: - cert-manager.io/issuer-group: issuers.cert-manager.io - cert-manager.io/issuer-kind: Issuer - cert-manager.io/issuer-name: issuer-infisical - cert-manager.io/uri-sans: - - Type: kubernetes.io/tls - - Data - ==== - ca.crt: 1306 bytes - tls.crt: 2380 bytes - tls.key: 227 bytes - ``` - - Here, `ca.crt` is the Root CA certificate, `tls.crt` is the requested certificate followed by the certificate chain, and `tls.key` is the private key for the certificate. - - We can decode the certificate and print it out using `openssl`: - - ```bash - kubectl get secret certificate-by-issuer -n default -o jsonpath='{.data.tls\.crt}' | base64 --decode | openssl x509 -text -noout - ``` - - In any case, the certificate is ready to be used as Kubernetes Secret by your Kubernetes resources. - + From 17c4a204f49d11f7b0cb774fbb40a6e837c9aa0b Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Mon, 24 Nov 2025 14:31:40 -0800 Subject: [PATCH 19/68] docs --- .../platform/pki/k8s-cert-manager.mdx | 41 ++++++++----------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/docs/documentation/platform/pki/k8s-cert-manager.mdx b/docs/documentation/platform/pki/k8s-cert-manager.mdx index 7bbf183cb..89bae475d 100644 --- a/docs/documentation/platform/pki/k8s-cert-manager.mdx +++ b/docs/documentation/platform/pki/k8s-cert-manager.mdx @@ -89,35 +89,35 @@ The following steps show how to install cert-manager (using `kubectl`) and obtai - Next, create the cert-manager Issuer or ClusterIssuer by filling out `acme_server_url`, `your_email`, `acme_eab_kid`, and applying the following configuration file for the `Issuer` resource. - This configuration file specifies the connection details to your Infisical PKI CA to be used for issuing certificates. + Next, create a cert-manager `Issuer` (or `ClusterIssuer`) by replacing the placeholders ``, ``, and `` in the configuration below and applying it. + This resource configures cert-manager to use your Infisical PKI collection's ACME server for certificate issuance. ```yaml infisical-issuer.yaml apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: issuer-infisical + namespace: spec: acme: - # the URL of your Infisical certificate profile with - # ACME enrollment method from step 1 + # ACME server URL from your Infisical certificate profile (Step 1) server: - # your email address, any email could work. - # currently we just ignore the value + # Email address for ACME account (any valid email works; currently ignored by Infisical) email: externalAccountBinding: - keyID: # the EAB secret value from step 1 - keySecretRef: # reference to the Secret created in step 3 - name: "issuer-infisical-client-secret" - key: "clientSecret" + # EAB Key ID from Step 1 + keyID: + # Reference to the Kubernetes Secret containing the EAB HMAC key (created in Step 3) + keySecretRef: + name: issuer-infisical-client-secret + key: clientSecret privateKeySecretRef: - name: issuer-infisical-account-key + name: issuer-infisical-account-key solvers: - http01: ingress: - # this doesn't need to be nginx, you can use any - # ingressClassName available in your Kubernetes cluster - ingressClassName: nginx + # Replace with your actual ingress class if different + className: nginx ``` ``` @@ -136,15 +136,10 @@ The following steps show how to install cert-manager (using `kubectl`) and obtai ``` - An `Issuer` is a namespaced resource, and it is not possible to issue certificates from an `Issuer` in a different namespace. - This means you will need to create an `Issuer` in each namespace you wish to obtain `Certificates` in. - - If you want to create a single `Issuer` that can be consumed in multiple namespaces, you should consider creating a `ClusterIssuer` resource. This is almost identical to the `Issuer` resource, however is non-namespaced so it can be used to issue `Certificates` across all namespaces. - - You can read more about the `Issuer` and `ClusterIssuer` resources [here](https://cert-manager.io/docs/configuration/). - - Also, currently Infisical ACME server only supports HTTP-01 and requires all the certificate orders passing the challenge before issuing certificates. - We will allow users to opt-out challenge in the near future and also provide support DNS-01 as well. + - Currently, the Infisical ACME server only supports the HTTP-01 challenge and requires successful challenge completion before issuing certificates. Support for optional challenges and DNS-01 is planned for a future release. + - An `Issuer` is namespace-scoped. Certificates can only be issued using an `Issuer` that exists in the same namespace as the `Certificate` resource. + - If you need to issue certificates across multiple namespaces with a single resource, create a `ClusterIssuer` instead. The configuration is identical except `kind: ClusterIssuer` and no `metadata.namespace`. + - More details: https://cert-manager.io/docs/configuration/acme/ From 6716c5cb278ecfd8175e975ebc5b26beae2be0f4 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Mon, 24 Nov 2025 14:33:39 -0800 Subject: [PATCH 20/68] proofread --- .../platform/pki/k8s-cert-manager.mdx | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/docs/documentation/platform/pki/k8s-cert-manager.mdx b/docs/documentation/platform/pki/k8s-cert-manager.mdx index 89bae475d..1218b0f2a 100644 --- a/docs/documentation/platform/pki/k8s-cert-manager.mdx +++ b/docs/documentation/platform/pki/k8s-cert-manager.mdx @@ -102,17 +102,19 @@ The following steps show how to install cert-manager (using `kubectl`) and obtai acme: # ACME server URL from your Infisical certificate profile (Step 1) server: - # Email address for ACME account (any valid email works; currently ignored by Infisical) + # Email address for ACME account + # (any valid email works; currently ignored by Infisical) email: externalAccountBinding: - # EAB Key ID from Step 1 - keyID: - # Reference to the Kubernetes Secret containing the EAB HMAC key (created in Step 3) - keySecretRef: - name: issuer-infisical-client-secret - key: clientSecret + # EAB Key ID from Step 1 + keyID: + # Reference to the Kubernetes Secret containing the EAB + # HMAC key (created in Step 3) + keySecretRef: + name: infisical-acme-eab-secret + key: eabSecret privateKeySecretRef: - name: issuer-infisical-account-key + name: issuer-infisical-account-key solvers: - http01: ingress: From a497b05d88c6aa6ac5d42c2f2715c77f0450d059 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Mon, 24 Nov 2025 14:38:07 -0800 Subject: [PATCH 21/68] doc --- .../platform/pki/k8s-cert-manager.mdx | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/docs/documentation/platform/pki/k8s-cert-manager.mdx b/docs/documentation/platform/pki/k8s-cert-manager.mdx index 1218b0f2a..f9049cb0b 100644 --- a/docs/documentation/platform/pki/k8s-cert-manager.mdx +++ b/docs/documentation/platform/pki/k8s-cert-manager.mdx @@ -145,9 +145,9 @@ The following steps show how to install cert-manager (using `kubectl`) and obtai - + - Finally, create a `Certificate` by applying the following configuration file. + Finally, request a certificate from Infisical ACME server by creating a cert-manager `Certificate` resource. This configuration file specifies the details of the (end-entity/leaf) certificate to be issued. ```yaml certificate-issuer.yaml @@ -157,24 +157,22 @@ The following steps show how to install cert-manager (using `kubectl`) and obtai name: certificate-by-issuer namespace: spec: - # the common name for the certificate commonName: certificate-by-issuer.example.com - # the name of the Kubernetes Secret to create and store - # the certificate and private key in - secretName: certificate-by-issuer - issuerRef: - name: issuer-infisical - group: issuers.cert-manager.io - kind: Issuer - # the algorithm and key size to use + # name of the resulting Kubernetes Secret + secretName: certificate-by-issuer-tls + # total validity period of the certificate + duration: 48h + # cert-manager will attempt renewal 12 hours before expiry + renewBefore: 12h privateKey: algorithm: ECDSA + # uses NIST P-256 curve size: 256 - # the ttl for the certificate - duration: 48h - # the time before the certificate expiry that the certificate should - # be automatically renewed - renewBefore: 12h + issuerRef: + name: issuer-infisical + # use ClusterIssuer if you created a ClusterIssuer instead + kind: Issuer + group: cert-manager.io ``` The above sample configuration file specifies a certificate to be issued with the common name `certificate-by-issuer.example.com` and ECDSA private key using the P-256 curve, valid for 48 hours; the certificate will be automatically renewed by `cert-manager` 12 hours before expiry. From edd8e618de5253e2631323854d6c69d745888a9e Mon Sep 17 00:00:00 2001 From: Daniel Hougaard Date: Mon, 24 Nov 2025 15:05:19 -0800 Subject: [PATCH 22/68] Update identity-kubernetes-auth-service.ts --- .../identity-kubernetes-auth-service.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/backend/src/services/identity-kubernetes-auth/identity-kubernetes-auth-service.ts b/backend/src/services/identity-kubernetes-auth/identity-kubernetes-auth-service.ts index 9322e48cb..212cb0894 100644 --- a/backend/src/services/identity-kubernetes-auth/identity-kubernetes-auth-service.ts +++ b/backend/src/services/identity-kubernetes-auth/identity-kubernetes-auth-service.ts @@ -270,7 +270,13 @@ export const identityKubernetesAuthServiceFactory = ({ } ) .catch((err) => { + const tokenReviewerJwtSnippet = `${tokenReviewerJwt?.substring?.(0, 10) || ""}...${tokenReviewerJwt?.substring?.(tokenReviewerJwt.length - 10) || ""}`; + const serviceAccountJwtSnippet = `${serviceAccountJwt?.substring?.(0, 10) || ""}...${serviceAccountJwt?.substring?.(serviceAccountJwt.length - 10) || ""}`; if (err instanceof AxiosError) { + logger.error( + { response: err.response, host, port, tokenReviewerJwtSnippet, serviceAccountJwtSnippet }, + "tokenReviewCallbackRaw: Kubernetes token review request error (request error)" + ); if (err.response) { const { message } = err?.response?.data as unknown as { message?: string }; @@ -281,6 +287,11 @@ export const identityKubernetesAuthServiceFactory = ({ }); } } + } else { + logger.error( + { error: err as Error, host, port, tokenReviewerJwtSnippet, serviceAccountJwtSnippet }, + "tokenReviewCallbackRaw: Kubernetes token review request error (non-request error)" + ); } throw err; }); From 9fdce60708ec11fc0805fcecfe7f85f264d3a944 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Mon, 24 Nov 2025 16:39:44 -0800 Subject: [PATCH 23/68] k8s doc --- .../platform/pki/k8s-cert-manager.mdx | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/docs/documentation/platform/pki/k8s-cert-manager.mdx b/docs/documentation/platform/pki/k8s-cert-manager.mdx index f9049cb0b..67fa25696 100644 --- a/docs/documentation/platform/pki/k8s-cert-manager.mdx +++ b/docs/documentation/platform/pki/k8s-cert-manager.mdx @@ -5,7 +5,7 @@ description: "Learn how to automatically provision and manage TLS certificates i ## Concept -The Infisical PKI provides ACME (Automated Certificate Management Environment) integration, enabling various ACME clients to issue and renew certificates automatically. +The Infisical PKI provides [ACME (Automated Certificate Management Environment)](https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment) integration, enabling various ACME clients to issue and renew certificates automatically. In Kubernetes environments, [cert-manager](https://cert-manager.io) is the most popular tool for issuing certificates via ACME. The issuer is perfect at obtaining X.509 certificates for Ingresses and other Kubernetes resources and can automatically renew them before expiration. @@ -54,13 +54,13 @@ The following steps show how to install cert-manager (using `kubectl`) and obtai Install cert-manager in your Kubernetes cluster by following the official guide [here](https://cert-manager.io/docs/installation/) or by applying the manifest directly: ```bash - kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.15.3/cert-manager.yaml + kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.19.1/cert-manager.yaml ``` Create a Kubernetes `Secret` that contains the **EAB Secret (HMAC key)** obtained in step 1. - cert-manager uses this secret to authenticate with the Infisical ACME server via External Account Binding (EAB). + The cert-manager uses this secret to authenticate with the Infisical ACME server. @@ -92,7 +92,7 @@ The following steps show how to install cert-manager (using `kubectl`) and obtai Next, create a cert-manager `Issuer` (or `ClusterIssuer`) by replacing the placeholders ``, ``, and `` in the configuration below and applying it. This resource configures cert-manager to use your Infisical PKI collection's ACME server for certificate issuance. - ```yaml infisical-issuer.yaml + ```yaml issuer-infisical.yaml apiVersion: cert-manager.io/v1 kind: Issuer metadata: @@ -123,7 +123,7 @@ The following steps show how to install cert-manager (using `kubectl`) and obtai ``` ``` - kubectl apply -f infisical-issuer.yaml + kubectl apply -f issuer-infisical.yaml ``` You can check that the issuer was created successfully by running the following command: @@ -157,7 +157,8 @@ The following steps show how to install cert-manager (using `kubectl`) and obtai name: certificate-by-issuer namespace: spec: - commonName: certificate-by-issuer.example.com + dnsNames: + - certificate-by-issuer.example.com # name of the resulting Kubernetes Secret secretName: certificate-by-issuer-tls # total validity period of the certificate @@ -170,9 +171,6 @@ The following steps show how to install cert-manager (using `kubectl`) and obtai size: 256 issuerRef: name: issuer-infisical - # use ClusterIssuer if you created a ClusterIssuer instead - kind: Issuer - group: cert-manager.io ``` The above sample configuration file specifies a certificate to be issued with the common name `certificate-by-issuer.example.com` and ECDSA private key using the P-256 curve, valid for 48 hours; the certificate will be automatically renewed by `cert-manager` 12 hours before expiry. From 740573daabacc57e64c0f3b495fadbc87e4bdcb8 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Mon, 24 Nov 2025 16:41:45 -0800 Subject: [PATCH 24/68] doc --- docs/documentation/platform/pki/k8s-cert-manager.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/documentation/platform/pki/k8s-cert-manager.mdx b/docs/documentation/platform/pki/k8s-cert-manager.mdx index 67fa25696..cf6edc3d5 100644 --- a/docs/documentation/platform/pki/k8s-cert-manager.mdx +++ b/docs/documentation/platform/pki/k8s-cert-manager.mdx @@ -173,7 +173,7 @@ The following steps show how to install cert-manager (using `kubectl`) and obtai name: issuer-infisical ``` - The above sample configuration file specifies a certificate to be issued with the common name `certificate-by-issuer.example.com` and ECDSA private key using the P-256 curve, valid for 48 hours; the certificate will be automatically renewed by `cert-manager` 12 hours before expiry. + The above sample configuration file specifies a certificate to be issued with the dns name `certificate-by-issuer.example.com` and ECDSA private key using the P-256 curve, valid for 48 hours; the certificate will be automatically renewed by `cert-manager` 12 hours before expiry. The certificate is issued by the issuer `issuer-infisical` created in the previous step and the resulting certificate and private key will be stored in a secret named `certificate-by-issuer`. Note that the full list of the fields supported on the `Certificate` resource can be found in the API reference documentation [here](https://cert-manager.io/docs/reference/api-docs/#cert-manager.io/v1.CertificateSpec). From a5516e4214a0d4c74c4eb15f0b4d251b52be1873 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Mon, 24 Nov 2025 16:45:44 -0800 Subject: [PATCH 25/68] doc --- docs/documentation/platform/pki/k8s-cert-manager.mdx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/documentation/platform/pki/k8s-cert-manager.mdx b/docs/documentation/platform/pki/k8s-cert-manager.mdx index cf6edc3d5..8423ca2ca 100644 --- a/docs/documentation/platform/pki/k8s-cert-manager.mdx +++ b/docs/documentation/platform/pki/k8s-cert-manager.mdx @@ -214,9 +214,10 @@ The following steps show how to install cert-manager (using `kubectl`) and obtai Labels: controller.cert-manager.io/fao=true Annotations: cert-manager.io/alt-names: cert-manager.io/certificate-name: certificate-by-issuer - cert-manager.io/common-name: certificate-by-issuer.example.com + cert-manager.io/common-name: + cert-manager.io/alt-names: certificate-by-issuer.example.com cert-manager.io/ip-sans: - cert-manager.io/issuer-group: issuers.cert-manager.io + cert-manager.io/issuer-group: cert-manager.io cert-manager.io/issuer-kind: Issuer cert-manager.io/issuer-name: issuer-infisical cert-manager.io/uri-sans: From 05f4d4bbfa620d2b598a5b97ffacf40a63b58771 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Mon, 24 Nov 2025 16:54:15 -0800 Subject: [PATCH 26/68] Update gloo mesh doc as well --- .../platform/pki/integration-guides/gloo-mesh.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/documentation/platform/pki/integration-guides/gloo-mesh.mdx b/docs/documentation/platform/pki/integration-guides/gloo-mesh.mdx index 0f312af01..96f4c96cd 100644 --- a/docs/documentation/platform/pki/integration-guides/gloo-mesh.mdx +++ b/docs/documentation/platform/pki/integration-guides/gloo-mesh.mdx @@ -21,11 +21,11 @@ With this approach, you get the following benefits: ## General Setup The certificate provisioning workflow begins with setting up your PKI hierarchy in Infisical, where you create root and subordinate certificate authorities. -When you deploy a `Certificate` CRD in your workload cluster, `cert-manager` uses the Infisical PKI Issuer controller to authenticate with Infisical using machine identity credentials and request an intermediate CA certificate. +When you deploy a `Certificate` CRD in your workload cluster, `cert-manager` uses the Infisical PKI ACME server to authenticate with Infisical using EAB credentials and request an intermediate CA certificate. Infisical verifies the request against your certificate templates and returns the signed certificate. From there, Istio's control plane will automatically use this intermediate CA to sign leaf certificates for workloads in the service mesh, enabling secure mTLS communication across your entire Gloo Mesh infrastructure. -Follow the [Kubernetes Cert Manager guide](/documentation/platform/pki/k8s-cert-manager) for detailed instructions on how to set up the Infisical PKI Issuer and cert-manager for your Istio intermediate CA certificates in Gloo Mesh clusters. +Follow the [Kubernetes cert-manager guide](/documentation/platform/pki/k8s-cert-manager) for detailed instructions on how to set up the Infisical PKI Issuer and cert-manager for your Istio intermediate CA certificates in Gloo Mesh clusters. For Gloo Mesh-specific configuration, ensure that: From c272c0552c7b3fd05959ef0915fc2e3aded19525 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Mon, 24 Nov 2025 16:55:51 -0800 Subject: [PATCH 27/68] ACME --- .../getting-started/concepts/client-integrations.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/documentation/getting-started/concepts/client-integrations.mdx b/docs/documentation/getting-started/concepts/client-integrations.mdx index 2a575039a..b74d68f74 100644 --- a/docs/documentation/getting-started/concepts/client-integrations.mdx +++ b/docs/documentation/getting-started/concepts/client-integrations.mdx @@ -24,7 +24,7 @@ Infisical offers a non-exhaustive set of clients and interfaces to support a wid - [External Secrets Operator (ESO)](https://external-secrets.io/latest/provider/infisical): Allows Infisical to act as a backend provider for syncing secrets into Kubernetes `Secret` objects using the widely adopted External Secrets Operator. -- [Kubernetes PKI Issuer](/documentation/platform/pki/k8s-cert-manager): A controller that issues X.509 certificates from Infisical PKI using the cert-manager Issuer and Certificate CRDs. +- [Kubernetes cert-manager](/documentation/platform/pki/k8s-cert-manager): A controller that issues X.509 certificates from Infisical PKI ACME server using the cert-manager Issuer and Certificate CRDs. - [Secret Syncs](/integrations/secret-syncs/overview): Native integrations to forward secrets to services like GitHub, GitLab, AWS Secrets Manager, Vercel, and more. From 44fc9d1f1828ee2fcd7c070a7239e3e0e9f017c6 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Mon, 24 Nov 2025 16:57:37 -0800 Subject: [PATCH 28/68] More docs --- .../documentation/platform/pki/integration-guides/gloo-mesh.mdx | 2 +- docs/documentation/platform/pki/k8s-cert-manager.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/documentation/platform/pki/integration-guides/gloo-mesh.mdx b/docs/documentation/platform/pki/integration-guides/gloo-mesh.mdx index 96f4c96cd..c23bac676 100644 --- a/docs/documentation/platform/pki/integration-guides/gloo-mesh.mdx +++ b/docs/documentation/platform/pki/integration-guides/gloo-mesh.mdx @@ -25,7 +25,7 @@ When you deploy a `Certificate` CRD in your workload cluster, `cert-manager` use Infisical verifies the request against your certificate templates and returns the signed certificate. From there, Istio's control plane will automatically use this intermediate CA to sign leaf certificates for workloads in the service mesh, enabling secure mTLS communication across your entire Gloo Mesh infrastructure. -Follow the [Kubernetes cert-manager guide](/documentation/platform/pki/k8s-cert-manager) for detailed instructions on how to set up the Infisical PKI Issuer and cert-manager for your Istio intermediate CA certificates in Gloo Mesh clusters. +Follow the [Kubernetes cert-manager guide](/documentation/platform/pki/k8s-cert-manager) for detailed instructions on how to set up the Infisical PKI ACME certificate profile and cert-manager for your Istio intermediate CA certificates in Gloo Mesh clusters. For Gloo Mesh-specific configuration, ensure that: diff --git a/docs/documentation/platform/pki/k8s-cert-manager.mdx b/docs/documentation/platform/pki/k8s-cert-manager.mdx index 8423ca2ca..e4f293cd7 100644 --- a/docs/documentation/platform/pki/k8s-cert-manager.mdx +++ b/docs/documentation/platform/pki/k8s-cert-manager.mdx @@ -252,7 +252,7 @@ The following steps show how to install cert-manager (using `kubectl`) and obtai The full list of the fields supported on the `Certificate` resource can be found in the API reference documentation [here](https://cert-manager.io/docs/reference/api-docs/#cert-manager.io/v1.CertificateSpec). - Currently, not all fields are supported by the Infisical PKI Issuer. + Currently, not all fields are supported by the Infisical PKI ACME server. From 5bb59625fc32470b605cc2ddf14bccb718f32c02 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Mon, 24 Nov 2025 19:13:30 -0800 Subject: [PATCH 29/68] inconsistency name --- docs/documentation/platform/pki/k8s-cert-manager.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/documentation/platform/pki/k8s-cert-manager.mdx b/docs/documentation/platform/pki/k8s-cert-manager.mdx index e4f293cd7..2776759ce 100644 --- a/docs/documentation/platform/pki/k8s-cert-manager.mdx +++ b/docs/documentation/platform/pki/k8s-cert-manager.mdx @@ -160,7 +160,7 @@ The following steps show how to install cert-manager (using `kubectl`) and obtai dnsNames: - certificate-by-issuer.example.com # name of the resulting Kubernetes Secret - secretName: certificate-by-issuer-tls + secretName: certificate-by-issuer # total validity period of the certificate duration: 48h # cert-manager will attempt renewal 12 hours before expiry From 12c9c4054eaecf5ec5735252e12468b95a167c14 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Tue, 25 Nov 2025 00:02:25 -0500 Subject: [PATCH 30/68] Revise pki k8s docs --- .../platform/pki/enrollment-methods/acme.mdx | 2 +- .../pki/integration-guides/apache-certbot.mdx | 7 ++++--- .../pki/integration-guides/gloo-mesh.mdx | 16 +++++++------- .../pki/integration-guides/jboss-certbot.mdx | 7 ++++--- .../pki/integration-guides/nginx-certbot.mdx | 4 ++-- .../pki/integration-guides/tomcat-certbot.mdx | 7 ++++--- .../windows-server-acme.mdx | 5 +++-- .../platform/pki/k8s-cert-manager.mdx | 21 ++++++++++--------- 8 files changed, 37 insertions(+), 32 deletions(-) diff --git a/docs/documentation/platform/pki/enrollment-methods/acme.mdx b/docs/documentation/platform/pki/enrollment-methods/acme.mdx index 12c4779b5..50a4a615c 100644 --- a/docs/documentation/platform/pki/enrollment-methods/acme.mdx +++ b/docs/documentation/platform/pki/enrollment-methods/acme.mdx @@ -5,7 +5,7 @@ sidebarTitle: "ACME" ## Concept -The ACME enrollment method allows you to issue and manage certificates against a specific [certificate profile](/documentation/platform/pki/certificates/profiles) using the [ACME protocol](https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment). +The ACME enrollment method allows Infisical to act as an ACME server. It lets you request and manage certificates against a specific [certificate profile](/documentation/platform/pki/certificates/profiles) using the [ACME protocol](https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment). This method is suitable for web servers, load balancers, and other general-purpose servers that can run an [ACME client](https://letsencrypt.org/docs/client-options/) for automated certificate management. Infisical's ACME enrollment method is based on [RFC 8555](https://datatracker.ietf.org/doc/html/rfc8555/). diff --git a/docs/documentation/platform/pki/integration-guides/apache-certbot.mdx b/docs/documentation/platform/pki/integration-guides/apache-certbot.mdx index 78f0301e1..f7e066d7b 100644 --- a/docs/documentation/platform/pki/integration-guides/apache-certbot.mdx +++ b/docs/documentation/platform/pki/integration-guides/apache-certbot.mdx @@ -1,9 +1,9 @@ --- title: "Apache Server" -description: "Learn how to issue SSL/TLS certificates from Infisical using ACME enrollment on Apache Server with Certbot" +description: "Learn how to issue TLS certificates from Infisical using ACME enrollment on Apache Server with Certbot" --- -This guide demonstrates how to use Infisical to issue SSL/TLS certificates for your [Apache HTTP Server](https://httpd.apache.org/). +This guide demonstrates how to use Infisical to issue TLS certificates for your [Apache HTTP Server](https://httpd.apache.org/). It uses [Certbot](https://certbot.eff.org/), an installable [ACME](https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment) client, to request and renew certificates from Infisical using the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme) configured on a [certificate profile](/documentation/platform/pki/certificates/profiles). Apache benefits from excellent Certbot integration, allowing both certificate-only mode and automatic SSL configuration. @@ -182,4 +182,5 @@ Before you begin, make sure you have: - \ No newline at end of file + + diff --git a/docs/documentation/platform/pki/integration-guides/gloo-mesh.mdx b/docs/documentation/platform/pki/integration-guides/gloo-mesh.mdx index c23bac676..d83e062fa 100644 --- a/docs/documentation/platform/pki/integration-guides/gloo-mesh.mdx +++ b/docs/documentation/platform/pki/integration-guides/gloo-mesh.mdx @@ -1,13 +1,13 @@ --- title: "Gloo Mesh" -description: "Learn how to automatically provision and manage Istio intermediate CA certificates for Gloo Mesh using Infisical PKI" +description: "Learn how to automatically provision and manage Istio intermediate CA certificates for Gloo Mesh using Infisical" --- -This guide will provide a high level overview on how you can use Infisical PKI and cert-manager to issue Istio intermediate CA certificates for your Gloo Mesh workload clusters. For more background about Istio certificates, see the [Istio CA overview](https://istio.io/latest/docs/concepts/security/#pki). +This guide will provide a high level overview on how you can use Infisical and [cert-manager](https://cert-manager.io/) to issue Istio intermediate CA certificates for your Gloo Mesh workload clusters. For more background about Istio certificates, see the [Istio CA overview](https://istio.io/latest/docs/concepts/security/#pki). ## Overview -In this setup, we will use Infisical PKI to generate and store your root CA and subordinate CAs that are used to generate Istio intermediate CAs for your Gloo Mesh workload clusters. +In this setup, we will use Infisical to generate and store your root CA and subordinate CAs that are used to generate Istio intermediate CAs for your Gloo Mesh workload clusters. To manage the lifecycle of Istio intermediate CA certificates, you'll also install [cert-manager](https://cert-manager.io/). Cert-manager is a Kubernetes controller that helps you automate the process of obtaining and renewing certificates from various PKI providers. @@ -21,19 +21,19 @@ With this approach, you get the following benefits: ## General Setup The certificate provisioning workflow begins with setting up your PKI hierarchy in Infisical, where you create root and subordinate certificate authorities. -When you deploy a `Certificate` CRD in your workload cluster, `cert-manager` uses the Infisical PKI ACME server to authenticate with Infisical using EAB credentials and request an intermediate CA certificate. +When you deploy a `Certificate` CRD in your workload cluster, `cert-manager` uses the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme) configured on a [certificate profile](/documentation/platform/pki/certificates/profiles) to authenticate using EAB credentials and request an intermediate CA certificate. Infisical verifies the request against your certificate templates and returns the signed certificate. From there, Istio's control plane will automatically use this intermediate CA to sign leaf certificates for workloads in the service mesh, enabling secure mTLS communication across your entire Gloo Mesh infrastructure. -Follow the [Kubernetes cert-manager guide](/documentation/platform/pki/k8s-cert-manager) for detailed instructions on how to set up the Infisical PKI ACME certificate profile and cert-manager for your Istio intermediate CA certificates in Gloo Mesh clusters. +Follow the [Kubernetes cert-manager guide](/documentation/platform/pki/k8s-cert-manager) for detailed instructions on how to set up the Infisical and cert-manager for your Istio intermediate CA certificates in Gloo Mesh clusters. For Gloo Mesh-specific configuration, ensure that: - The Certificate resource targets the `istio-system` namespace with `secretName: cacerts` -- Certificate templates in Infisical PKI are configured for intermediate CA usage with appropriate key usage and constraints -- Multiple workload clusters use the same Infisical PKI root to enable cross-cluster mTLS communication +- Certificate profiles in Infisical are configured for intermediate CA usage with appropriate key usage and constraints +- Multiple workload clusters use the same Infisical root to enable cross-cluster mTLS communication ## Using the certificates Once the `cacerts` Kubernetes secret is created in the `istio-system` namespace, Istio automatically uses the custom CA certificate instead of the default self-signed certificate. -When you deploy applications to your Gloo Mesh service mesh, the workloads will receive leaf certificates signed by your Infisical PKI intermediate CA, enabling secure mTLS communication across your entire mesh infrastructure. +When you deploy applications to your Gloo Mesh service mesh, the workloads will receive leaf certificates signed by your Infisical intermediate CA, enabling secure mTLS communication across your entire mesh infrastructure. diff --git a/docs/documentation/platform/pki/integration-guides/jboss-certbot.mdx b/docs/documentation/platform/pki/integration-guides/jboss-certbot.mdx index c0e1c896b..f666e8be6 100644 --- a/docs/documentation/platform/pki/integration-guides/jboss-certbot.mdx +++ b/docs/documentation/platform/pki/integration-guides/jboss-certbot.mdx @@ -1,9 +1,9 @@ --- title: "JBoss/WildFly" -description: "Learn how to issue SSL/TLS certificates from Infisical using ACME enrollment on JBoss/WildFly with Certbot" +description: "Learn how to issue TLS certificates from Infisical using ACME enrollment on JBoss/WildFly with Certbot" --- -This guide demonstrates how to use Infisical to issue SSL/TLS certificates for your [JBoss](https://www.jboss.org/)/[WildFly](https://wildfly.org/) application server. +This guide demonstrates how to use Infisical to issue TLS certificates for your [JBoss](https://www.jboss.org/)/[WildFly](https://wildfly.org/) application server. It uses [Certbot](https://certbot.eff.org/), an installable [ACME](https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment) client, to request and renew certificates from Infisical using the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme) configured on a [certificate profile](/documentation/platform/pki/certificates/profiles). JBoss/WildFly requires certificates in Java keystore format, which this guide addresses through the certificate conversion process. @@ -223,4 +223,5 @@ Before you begin, make sure you have: Certbot automatically renews certificates when they are within 30 days of expiration using its built-in systemd timer. The deploy hook above will run after each successful renewal, handling the keystore conversion and service restart automatically. Because JBoss/WildFly requires the standalone authenticator (which stops the service temporarily), plan for brief service interruptions during renewal. - \ No newline at end of file + + diff --git a/docs/documentation/platform/pki/integration-guides/nginx-certbot.mdx b/docs/documentation/platform/pki/integration-guides/nginx-certbot.mdx index f28e5ee09..4e0cdba1d 100644 --- a/docs/documentation/platform/pki/integration-guides/nginx-certbot.mdx +++ b/docs/documentation/platform/pki/integration-guides/nginx-certbot.mdx @@ -1,9 +1,9 @@ --- title: "Nginx" -description: "Learn how to issue SSL/TLS certificates from Infisical using ACME enrollment on Nginx with Certbot" +description: "Learn how to issue TLS certificates from Infisical using ACME enrollment on Nginx with Certbot" --- -This guide demonstrates how to use Infisical to issue SSL/TLS certificates for your [Nginx](https://nginx.org/) server. +This guide demonstrates how to use Infisical to issue TLS certificates for your [Nginx](https://nginx.org/) server. It uses [Certbot](https://certbot.eff.org/), an installable [ACME](https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment) client, to request and renew certificates from Infisical using the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme) configured on a [certificate profile](/documentation/platform/pki/certificates/profiles). diff --git a/docs/documentation/platform/pki/integration-guides/tomcat-certbot.mdx b/docs/documentation/platform/pki/integration-guides/tomcat-certbot.mdx index ffb07bf1b..3b8727748 100644 --- a/docs/documentation/platform/pki/integration-guides/tomcat-certbot.mdx +++ b/docs/documentation/platform/pki/integration-guides/tomcat-certbot.mdx @@ -1,9 +1,9 @@ --- title: "Tomcat" -description: "Learn how to issue SSL/TLS certificates from Infisical using ACME enrollment on Tomcat with Certbot" +description: "Learn how to issue TLS certificates from Infisical using ACME enrollment on Tomcat with Certbot" --- -This guide demonstrates how to use Infisical to issue SSL/TLS certificates for your [Apache Tomcat](https://tomcat.apache.org/) application server. +This guide demonstrates how to use Infisical to issue TLS certificates for your [Apache Tomcat](https://tomcat.apache.org/) application server. It uses [Certbot](https://certbot.eff.org/), an installable [ACME](https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment) client, to request and renew certificates from Infisical using the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme) configured on a [certificate profile](/documentation/platform/pki/certificates/profiles). Unlike web servers with native Certbot plugins, Tomcat requires certificates to be manually configured after issuance. @@ -248,4 +248,5 @@ Before you begin, make sure you have: Since Tomcat reads certificates from the file system on startup, you only need to restart the service after certificate renewal. The certificate file paths in `/etc/letsencrypt/live/` are symbolic links that automatically point to the latest certificates. - \ No newline at end of file + + diff --git a/docs/documentation/platform/pki/integration-guides/windows-server-acme.mdx b/docs/documentation/platform/pki/integration-guides/windows-server-acme.mdx index 2aab0870d..0a630a10a 100644 --- a/docs/documentation/platform/pki/integration-guides/windows-server-acme.mdx +++ b/docs/documentation/platform/pki/integration-guides/windows-server-acme.mdx @@ -1,9 +1,9 @@ --- title: "Windows Server" -description: "Learn how to issue SSL/TLS certificates from Infisical using ACME enrollment on Windows Server with win-acme" +description: "Learn how to issue TLS certificates from Infisical using ACME enrollment on Windows Server with win-acme" --- -This guide demonstrates how to use Infisical to issue SSL/TLS certificates for your [Windows Server](https://www.microsoft.com/en-us/windows-server) environments. +This guide demonstrates how to use Infisical to issue TLS certificates for your [Windows Server](https://www.microsoft.com/en-us/windows-server) environments. It uses [win-acme](https://www.win-acme.com/), a feature-rich [ACME](https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment) client designed specifically for Windows, to request and renew certificates from Infisical using the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme) configured on a [certificate profile](/documentation/platform/pki/certificates/profiles). Win-acme offers excellent integration with IIS, Windows Certificate Store, and various certificate storage options. @@ -191,4 +191,5 @@ Before you begin, make sure you have: + diff --git a/docs/documentation/platform/pki/k8s-cert-manager.mdx b/docs/documentation/platform/pki/k8s-cert-manager.mdx index 2776759ce..b0f696ba9 100644 --- a/docs/documentation/platform/pki/k8s-cert-manager.mdx +++ b/docs/documentation/platform/pki/k8s-cert-manager.mdx @@ -1,15 +1,16 @@ --- title: "Kubernetes cert-manager" -description: "Learn how to automatically provision and manage TLS certificates in Kubernetes using Infisical PKI" +description: "Learn how to automatically provision and manage TLS certificates in Kubernetes using Infisical" --- ## Concept -The Infisical PKI provides [ACME (Automated Certificate Management Environment)](https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment) integration, enabling various ACME clients to issue and renew certificates automatically. -In Kubernetes environments, [cert-manager](https://cert-manager.io) is the most popular tool for issuing certificates via ACME. -The issuer is perfect at obtaining X.509 certificates for Ingresses and other Kubernetes resources and can automatically renew them before expiration. +This guide demonstrates how to use Infisical to issue TLS certificates back to your Kubernetes environment using [cert-manager](https://cert-manager.io/). -The typical workflow involves installing `cert-manager` and configuring resources that represent the connection details to your Infisical PKI as well as the certificates you want to issue. +It uses the [ACME issuer type](https://cert-manager.io/docs/configuration/acme/) to request and renew certificates automatically from Infisical +using the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme) configured on a [certificate profile](/documentation/platform/pki/certificates/profiles). The issuer is perfect at obtaining X.509 certificates for Ingresses and other Kubernetes resources and can automatically renew them before expiration. + +The typical workflow involves installing `cert-manager` and configuring resources that represent the connection details to Infisical as well as the certificates you want to issue. Each issued certificate and its corresponding private key are stored in a Kubernetes `Secret`. We recommend reading the official [cert-manager documentation](https://cert-manager.io/docs/) for a complete overview. @@ -17,18 +18,18 @@ For the ACME-specific configuration, refer to the [ACME section](https://cert-ma ## Workflow -A typical workflow for using cert-manager with Infisical PKI via ACME consists of the following steps: +A typical workflow for using cert-manager with Infisical via ACME consists of the following steps: -1. Create a certificate profile in Infisical with ACME as the enrollment method. +1. Create a [certificate profile](/documentation/platform/pki/certificates/profiles) in Infisical with the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme) configured on it. 2. Install `cert-manager` in your Kubernetes cluster. 3. Create a Kubernetes `Secret` containing the EAB (External Account Binding) credentials for the ACME certificate profile. -4. Create an `Issuer` or `ClusterIssuer` resource that connects to the desired Infisical PKI certificate profile. +4. Create an `Issuer` or `ClusterIssuer` resource that connects to the desired Infisical [certificate profile](/documentation/platform/pki/certificates/profiles). 5. Create a `Certificate` resource defining the certificate you wish to issue and the target `Secret` where the certificate and private key will be stored. 6. Use the resulting Kubernetes `Secret` in your Ingresses or other resources. ## Guide -The following steps show how to install cert-manager (using `kubectl`) and obtain certificates from Infisical PKI. +The following steps show how to install cert-manager (using `kubectl`) and obtain certificates from Infisical. @@ -43,7 +44,7 @@ The following steps show how to install cert-manager (using `kubectl`) and obtai These will be needed in later steps. - Currently, the Infisical PKI ACME server only supports authentication via dedicated EAB credentials generated per certificate profile. + Currently, the Infisical ACME enrollment method only supports authentication via dedicated EAB credentials generated per certificate profile. Support for [Kubernetes Auth](/documentation/platform/identities/kubernetes-auth) is planned for the near future. From ae948fcde0cf8357c727a97c4db0467f9a56ecd3 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Tue, 25 Nov 2025 00:03:30 -0500 Subject: [PATCH 31/68] add link --- .../getting-started/concepts/client-integrations.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/documentation/getting-started/concepts/client-integrations.mdx b/docs/documentation/getting-started/concepts/client-integrations.mdx index b74d68f74..aa7b37d4a 100644 --- a/docs/documentation/getting-started/concepts/client-integrations.mdx +++ b/docs/documentation/getting-started/concepts/client-integrations.mdx @@ -24,7 +24,7 @@ Infisical offers a non-exhaustive set of clients and interfaces to support a wid - [External Secrets Operator (ESO)](https://external-secrets.io/latest/provider/infisical): Allows Infisical to act as a backend provider for syncing secrets into Kubernetes `Secret` objects using the widely adopted External Secrets Operator. -- [Kubernetes cert-manager](/documentation/platform/pki/k8s-cert-manager): A controller that issues X.509 certificates from Infisical PKI ACME server using the cert-manager Issuer and Certificate CRDs. +- [Kubernetes cert-manager](/documentation/platform/pki/k8s-cert-manager): A controller that issues X.509 certificates from Infisical using the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme) configured on a [certificate profile](/documentation/platform/pki/certificates/profiles) using the cert-manager Issuer and Certificate CRDs. - [Secret Syncs](/integrations/secret-syncs/overview): Native integrations to forward secrets to services like GitHub, GitLab, AWS Secrets Manager, Vercel, and more. From b6231b56ad61029075f211ecb16d9d3d9f154d91 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Tue, 25 Nov 2025 21:00:24 +0530 Subject: [PATCH 32/68] fix: invite form opening state --- .../components/OrgMembersSection/AddOrgMemberModal.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 da88603fc..35f8284db 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 @@ -159,7 +159,9 @@ export const AddOrgMemberModal = ({ ) ); - setCompleteInviteLinks(data?.completeInviteLinks ?? null); + if (data?.completeInviteLinks && data?.completeInviteLinks.length > 0) { + setCompleteInviteLinks(data.completeInviteLinks); + } // only show this notification when email is configured. // A [completeInviteLink] will not be sent if smtp is configured From 34cbe0d416b467c95a8a67ab8638a31449ac5da3 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Tue, 25 Nov 2025 21:35:52 +0530 Subject: [PATCH 33/68] fix: secerets mgmt project slug automatic generation --- .../EnvironmentSection/AddEnvironmentModal.tsx | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) 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 70c486616..95f1ebd47 100644 --- a/frontend/src/pages/secret-manager/SettingsPage/components/EnvironmentSection/AddEnvironmentModal.tsx +++ b/frontend/src/pages/secret-manager/SettingsPage/components/EnvironmentSection/AddEnvironmentModal.tsx @@ -1,5 +1,6 @@ import { Controller, useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; +import slugify from "@sindresorhus/slugify"; import { z } from "zod"; import { createNotification } from "@app/components/notifications"; @@ -31,7 +32,7 @@ type ContentProps = { const Content = ({ onComplete }: ContentProps) => { const { currentProject } = useProject(); const { mutateAsync, isPending } = useCreateWsEnvironment(); - const { control, handleSubmit } = useForm({ + const { control, handleSubmit, setValue } = useForm({ resolver: zodResolver(schema) }); @@ -52,15 +53,21 @@ const Content = ({ onComplete }: ContentProps) => { onComplete(env); }; + const handleEnvironmentNameChange = (e: React.ChangeEvent) => { + const { value } = e.target; + setValue("environmentName", value); + setValue("environmentSlug", slugify(value, { lowercase: true })); + }; + return (
( + render={({ field: { onChange, ...field }, fieldState: { error } }) => ( - + )} /> From 346a47abb57a8eb512b411a560ddde3a83ac013f Mon Sep 17 00:00:00 2001 From: Scott Wilson Date: Tue, 25 Nov 2025 08:28:42 -0800 Subject: [PATCH 34/68] fix: correct invite users notification display check --- .../components/OrgMembersSection/AddOrgMemberModal.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 35f8284db..92fdeeb41 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 @@ -166,9 +166,9 @@ export const AddOrgMemberModal = ({ // only show this notification when email is configured. // A [completeInviteLink] will not be sent if smtp is configured - if (!data.completeInviteLinks) { + if (!data.completeInviteLinks?.length) { createNotification({ - text: "Successfully invited user to the organization.", + text: "Successfully invited users to the organization.", type: "success" }); } From 03780bf538ff84656ecb891293122ebc90802233 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Tue, 25 Nov 2025 22:08:16 +0530 Subject: [PATCH 35/68] fix: enhance notification message for invited users --- .../components/OrgMembersSection/AddOrgMemberModal.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 92fdeeb41..5886d3453 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 @@ -168,7 +168,7 @@ export const AddOrgMemberModal = ({ if (!data.completeInviteLinks?.length) { createNotification({ - text: "Successfully invited users to the organization.", + text: `Successfully invited user${usernames.length > 1 ? "s" : ""} to the organization.`, type: "success" }); } From 126c3be60626e0b363b72c447ea4582799acadf5 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Wed, 19 Nov 2025 17:37:26 -0800 Subject: [PATCH 36/68] Add scaffolding for DNS made easy --- .../dns-made-easy-connection-router.ts | 52 +++++++++ .../routes/v1/app-connection-routers/index.ts | 2 + .../app-connection/app-connection-enums.ts | 1 + .../app-connection/app-connection-fns.ts | 8 ++ .../app-connection/app-connection-maps.ts | 2 + .../app-connection/app-connection-service.ts | 4 + .../dns-made-easy-connection-enum.ts | 3 + .../dns-made-easy-connection-fns.ts | 101 ++++++++++++++++++ .../dns-made-easy-connection-schema.ts | 64 +++++++++++ .../dns-made-easy-connection-service.ts | 32 ++++++ .../dns-made-easy-connection-types.ts | 24 +++++ 11 files changed, 293 insertions(+) create mode 100644 backend/src/server/routes/v1/app-connection-routers/dns-made-easy-connection-router.ts create mode 100644 backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-enum.ts create mode 100644 backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts create mode 100644 backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-schema.ts create mode 100644 backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-service.ts create mode 100644 backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-types.ts diff --git a/backend/src/server/routes/v1/app-connection-routers/dns-made-easy-connection-router.ts b/backend/src/server/routes/v1/app-connection-routers/dns-made-easy-connection-router.ts new file mode 100644 index 000000000..398bd860e --- /dev/null +++ b/backend/src/server/routes/v1/app-connection-routers/dns-made-easy-connection-router.ts @@ -0,0 +1,52 @@ +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 { + CreateDNSMadeEasyConnectionSchema, + SanitizedDNSMadeEasyConnectionSchema, + UpdateDNSMadeEasyConnectionSchema +} from "@app/services/app-connection/dns-made-easy/dns-made-easy-connection-schema"; +import { AuthMode } from "@app/services/auth/auth-type"; + +import { registerAppConnectionEndpoints } from "./app-connection-endpoints"; + +export const registerDNSMadeEasyConnectionRouter = async (server: FastifyZodProvider) => { + registerAppConnectionEndpoints({ + app: AppConnection.DNSMadeEasy, + server, + sanitizedResponseSchema: SanitizedDNSMadeEasyConnectionSchema, + createSchema: CreateDNSMadeEasyConnectionSchema, + updateSchema: UpdateDNSMadeEasyConnectionSchema + }); + + // The below endpoints are not exposed and for Infisical App use + server.route({ + method: "GET", + url: `/:connectionId/dns-made-easy-zones`, + 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 zones = await server.services.appConnection.dnsMadeEasy.listZones(connectionId, req.permission); + return zones; + } + }); +}; 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 aa1d671b6..d7a4065fd 100644 --- a/backend/src/server/routes/v1/app-connection-routers/index.ts +++ b/backend/src/server/routes/v1/app-connection-routers/index.ts @@ -16,6 +16,7 @@ import { registerCamundaConnectionRouter } from "./camunda-connection-router"; import { registerChecklyConnectionRouter } from "./checkly-connection-router"; import { registerCloudflareConnectionRouter } from "./cloudflare-connection-router"; import { registerDatabricksConnectionRouter } from "./databricks-connection-router"; +import { registerDNSMadeEasyConnectionRouter } from "./dns-made-easy-connection-router"; import { registerDigitalOceanConnectionRouter } from "./digital-ocean-connection-router"; import { registerFlyioConnectionRouter } from "./flyio-connection-router"; import { registerGcpConnectionRouter } from "./gcp-connection-router"; @@ -78,6 +79,7 @@ export const APP_CONNECTION_REGISTER_ROUTER_MAP: Record { getFlyioConnectionListItem(), getGitLabConnectionListItem(), getCloudflareConnectionListItem(), + getDNSMadeEasyConnectionListItem(), getZabbixConnectionListItem(), getRailwayConnectionListItem(), getBitbucketConnectionListItem(), @@ -339,6 +345,7 @@ export const validateAppConnectionCredentials = async ( [AppConnection.Flyio]: validateFlyioConnectionCredentials as TAppConnectionCredentialsValidator, [AppConnection.GitLab]: validateGitLabConnectionCredentials as TAppConnectionCredentialsValidator, [AppConnection.Cloudflare]: validateCloudflareConnectionCredentials as TAppConnectionCredentialsValidator, + [AppConnection.DNSMadeEasy]: validateDNSMadeEasyConnectionCredentials as TAppConnectionCredentialsValidator, [AppConnection.Zabbix]: validateZabbixConnectionCredentials as TAppConnectionCredentialsValidator, [AppConnection.Railway]: validateRailwayConnectionCredentials as TAppConnectionCredentialsValidator, [AppConnection.Bitbucket]: validateBitbucketConnectionCredentials as TAppConnectionCredentialsValidator, @@ -483,6 +490,7 @@ export const TRANSITION_CONNECTION_CREDENTIALS_TO_PLATFORM: Record< [AppConnection.Flyio]: platformManagedCredentialsNotSupported, [AppConnection.GitLab]: platformManagedCredentialsNotSupported, [AppConnection.Cloudflare]: platformManagedCredentialsNotSupported, + [AppConnection.DNSMadeEasy]: platformManagedCredentialsNotSupported, [AppConnection.Zabbix]: platformManagedCredentialsNotSupported, [AppConnection.Railway]: platformManagedCredentialsNotSupported, [AppConnection.Bitbucket]: platformManagedCredentialsNotSupported, diff --git a/backend/src/services/app-connection/app-connection-maps.ts b/backend/src/services/app-connection/app-connection-maps.ts index 5b8cc3fc1..27d6a27a8 100644 --- a/backend/src/services/app-connection/app-connection-maps.ts +++ b/backend/src/services/app-connection/app-connection-maps.ts @@ -32,6 +32,7 @@ export const APP_CONNECTION_NAME_MAP: Record = { [AppConnection.Flyio]: "Fly.io", [AppConnection.GitLab]: "GitLab", [AppConnection.Cloudflare]: "Cloudflare", + [AppConnection.DNSMadeEasy]: "DNS Made Easy", [AppConnection.Zabbix]: "Zabbix", [AppConnection.Railway]: "Railway", [AppConnection.Bitbucket]: "Bitbucket", @@ -77,6 +78,7 @@ export const APP_CONNECTION_PLAN_MAP: Record { + return { + name: "DNS Made Easy" as const, + app: AppConnection.DNSMadeEasy as const, + methods: Object.values(DNSMadeEasyConnectionMethod) as [DNSMadeEasyConnectionMethod.APIKey] + }; +}; + +export const listDNSMadeEasyZones = async (appConnection: TDNSMadeEasyConnection): Promise => { + // TODO: Implement DNS Made Easy zones listing + // This should call the DNS Made Easy API to list all zones/domains + // Example API endpoint: GET https://api.dnsmadeeasy.com/V2.0/dns/managed + // Authentication: Use API key and secret from appConnection.credentials + // Return format: Array of { id: string, name: string } + + if (appConnection.method !== DNSMadeEasyConnectionMethod.APIKey) { + throw new Error("Unsupported DNS Made Easy connection method"); + } + + const { + credentials: { apiKey, apiSecret } + } = appConnection; + + // TODO: Make API request to DNS Made Easy + // const { data } = await request.get<{ data: { id: number; name: string }[] }>( + // `${IntegrationUrls.DNS_MADE_EASY_API_URL}/V2.0/dns/managed`, + // { + // headers: { + // "x-dnsme-apiKey": apiKey, + // "x-dnsme-hmac": generateHMAC(apiSecret, ...), + // "x-dnsme-requestDate": requestDate, + // Accept: "application/json" + // } + // } + // ); + + // TODO: Transform response data to match TDNSMadeEasyZone format + // return data.data.map((zone) => ({ + // name: zone.name, + // id: zone.id.toString() + // })); + + throw new Error("Not implemented: listDNSMadeEasyZones"); +}; + +export const validateDNSMadeEasyConnectionCredentials = async (config: TDNSMadeEasyConnectionConfig) => { + // TODO: Implement DNS Made Easy credentials validation + // This should call the DNS Made Easy API to validate the API key and secret + // Example API endpoint: GET https://api.dnsmadeeasy.com/V2.0/account + // Authentication: Use API key and secret from config.credentials + + if (config.method !== DNSMadeEasyConnectionMethod.APIKey) { + throw new Error("Unsupported DNS Made Easy connection method"); + } + + const { apiKey, apiSecret } = config.credentials; + + try { + // TODO: Make API request to validate credentials + // const resp = await request.get(`${IntegrationUrls.DNS_MADE_EASY_API_URL}/V2.0/account`, { + // headers: { + // "x-dnsme-apiKey": apiKey, + // "x-dnsme-hmac": generateHMAC(apiSecret, ...), + // "x-dnsme-requestDate": requestDate, + // Accept: "application/json" + // } + // }); + // TODO: Validate response + // if (resp.data === null || !resp.data.id) { + // throw new BadRequestError({ + // message: "Unable to validate connection: Invalid API credentials provided." + // }); + // } + } catch (error: unknown) { + if (error instanceof AxiosError) { + throw new BadRequestError({ + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + message: `Failed to validate credentials: ${error.response?.data?.error?.[0] || error.message || "Unknown error"}` + }); + } + throw new BadRequestError({ + message: "Unable to validate connection: verify credentials" + }); + } + + return config.credentials; +}; diff --git a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-schema.ts b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-schema.ts new file mode 100644 index 000000000..eb39b6235 --- /dev/null +++ b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-schema.ts @@ -0,0 +1,64 @@ +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 { APP_CONNECTION_NAME_MAP } from "../app-connection-maps"; +import { DNSMadeEasyConnectionMethod } from "./dns-made-easy-connection-enum"; + +export const DNSMadeEasyConnectionApiKeyCredentialsSchema = z.object({ + apiKey: z.string().trim().min(1, "API key required").max(256, "API key cannot exceed 256 characters"), + apiSecret: z.string().trim().min(1, "API secret required").max(256, "API secret cannot exceed 256 characters") +}); + +const BaseDNSMadeEasyConnectionSchema = BaseAppConnectionSchema.extend({ + app: z.literal(AppConnection.DNSMadeEasy) +}); + +export const DNSMadeEasyConnectionSchema = BaseDNSMadeEasyConnectionSchema.extend({ + method: z.literal(DNSMadeEasyConnectionMethod.APIKey), + credentials: DNSMadeEasyConnectionApiKeyCredentialsSchema +}); + +export const SanitizedDNSMadeEasyConnectionSchema = z.discriminatedUnion("method", [ + BaseDNSMadeEasyConnectionSchema.extend({ + method: z.literal(DNSMadeEasyConnectionMethod.APIKey), + credentials: DNSMadeEasyConnectionApiKeyCredentialsSchema.pick({ apiKey: true }) + }).describe(JSON.stringify({ title: `${APP_CONNECTION_NAME_MAP[AppConnection.DNSMadeEasy]} (API Key)` })) +]); + +export const ValidateDNSMadeEasyConnectionCredentialsSchema = z.discriminatedUnion("method", [ + z.object({ + method: z + .literal(DNSMadeEasyConnectionMethod.APIKey) + .describe(AppConnections.CREATE(AppConnection.DNSMadeEasy).method), + credentials: DNSMadeEasyConnectionApiKeyCredentialsSchema.describe( + AppConnections.CREATE(AppConnection.DNSMadeEasy).credentials + ) + }) +]); + +export const CreateDNSMadeEasyConnectionSchema = ValidateDNSMadeEasyConnectionCredentialsSchema.and( + GenericCreateAppConnectionFieldsSchema(AppConnection.DNSMadeEasy) +); + +export const UpdateDNSMadeEasyConnectionSchema = z + .object({ + credentials: DNSMadeEasyConnectionApiKeyCredentialsSchema.optional().describe( + AppConnections.UPDATE(AppConnection.DNSMadeEasy).credentials + ) + }) + .and(GenericUpdateAppConnectionFieldsSchema(AppConnection.DNSMadeEasy)); + +export const DNSMadeEasyConnectionListItemSchema = z + .object({ + name: z.literal("DNS Made Easy"), + app: z.literal(AppConnection.DNSMadeEasy), + methods: z.nativeEnum(DNSMadeEasyConnectionMethod).array() + }) + .describe(JSON.stringify({ title: APP_CONNECTION_NAME_MAP[AppConnection.DNSMadeEasy] })); diff --git a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-service.ts b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-service.ts new file mode 100644 index 000000000..d5da33c93 --- /dev/null +++ b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-service.ts @@ -0,0 +1,32 @@ +import { logger } from "@app/lib/logger"; +import { OrgServiceActor } from "@app/lib/types"; + +import { AppConnection } from "../app-connection-enums"; +import { listDNSMadeEasyZones } from "./dns-made-easy-connection-fns"; +import { TDNSMadeEasyConnection } from "./dns-made-easy-connection-types"; + +type TGetAppConnectionFunc = ( + app: AppConnection, + connectionId: string, + actor: OrgServiceActor +) => Promise; + +export const dnsMadeEasyConnectionService = (getAppConnection: TGetAppConnectionFunc) => { + const listZones = async (connectionId: string, actor: OrgServiceActor) => { + const appConnection = await getAppConnection(AppConnection.DNSMadeEasy, connectionId, actor); + try { + const zones = await listDNSMadeEasyZones(appConnection); + return zones; + } catch (error) { + logger.error( + error, + `Failed to list DNS Made Easy zones for DNS Made Easy connection [connectionId=${connectionId}]` + ); + return []; + } + }; + + return { + listZones + }; +}; diff --git a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-types.ts b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-types.ts new file mode 100644 index 000000000..dabb72771 --- /dev/null +++ b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-types.ts @@ -0,0 +1,24 @@ +import z from "zod"; + +import { DiscriminativePick } from "@app/lib/types"; + +import { AppConnection } from "../app-connection-enums"; +import { DNSMadeEasyConnectionSchema, CreateDNSMadeEasyConnectionSchema } from "./dns-made-easy-connection-schema"; + +export type TDNSMadeEasyConnection = z.infer; + +export type TDNSMadeEasyConnectionInput = z.infer & { + app: AppConnection.DNSMadeEasy; +}; + +export type TDNSMadeEasyConnectionConfig = DiscriminativePick< + TDNSMadeEasyConnectionInput, + "method" | "app" | "credentials" +> & { + orgId: string; +}; + +export type TDNSMadeEasyZone = { + id: string; + name: string; +}; From 66ecddc58474dd189bcdb61fbe202aa03734f921 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Wed, 19 Nov 2025 18:14:32 -0800 Subject: [PATCH 37/68] Implement more stuff --- .../app-connection/app-connection-fns.ts | 14 ++- .../app-connection/app-connection-types.ts | 12 +- .../dns-made-easy-connection-enum.ts | 2 +- .../dns-made-easy-connection-fns.ts | 104 ++++++++++-------- .../dns-made-easy-connection-schema.ts | 6 +- .../dns-made-easy-connection-types.ts | 8 +- .../integration-auth/integration-list.ts | 4 +- 7 files changed, 94 insertions(+), 56 deletions(-) diff --git a/backend/src/services/app-connection/app-connection-fns.ts b/backend/src/services/app-connection/app-connection-fns.ts index 57a219c71..5b03dc903 100644 --- a/backend/src/services/app-connection/app-connection-fns.ts +++ b/backend/src/services/app-connection/app-connection-fns.ts @@ -11,8 +11,8 @@ import { validateOCIConnectionCredentials } from "@app/ee/services/app-connections/oci"; import { getOracleDBConnectionListItem, OracleDBConnectionMethod } from "@app/ee/services/app-connections/oracledb"; -import { TGatewayServiceFactory } from "@app/ee/services/gateway/gateway-service"; import { TGatewayV2ServiceFactory } from "@app/ee/services/gateway-v2/gateway-v2-service"; +import { TGatewayServiceFactory } from "@app/ee/services/gateway/gateway-service"; import { TLicenseServiceFactory } from "@app/ee/services/license/license-service"; import { SECRET_ROTATION_CONNECTION_MAP } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-maps"; import { SECRET_SCANNING_DATA_SOURCE_CONNECTION_MAP } from "@app/ee/services/secret-scanning-v2/secret-scanning-v2-maps"; @@ -78,11 +78,6 @@ import { getCloudflareConnectionListItem, validateCloudflareConnectionCredentials } from "./cloudflare/cloudflare-connection-fns"; -import { DNSMadeEasyConnectionMethod } from "./dns-made-easy/dns-made-easy-connection-enum"; -import { - getDNSMadeEasyConnectionListItem, - validateDNSMadeEasyConnectionCredentials -} from "./dns-made-easy/dns-made-easy-connection-fns"; import { DatabricksConnectionMethod, getDatabricksConnectionListItem, @@ -93,6 +88,11 @@ import { getDigitalOceanConnectionListItem, validateDigitalOceanConnectionCredentials } from "./digital-ocean"; +import { DNSMadeEasyConnectionMethod } from "./dns-made-easy/dns-made-easy-connection-enum"; +import { + getDNSMadeEasyConnectionListItem, + validateDNSMadeEasyConnectionCredentials +} from "./dns-made-easy/dns-made-easy-connection-fns"; import { FlyioConnectionMethod, getFlyioConnectionListItem, validateFlyioConnectionCredentials } from "./flyio"; import { GcpConnectionMethod, getGcpConnectionListItem, validateGcpConnectionCredentials } from "./gcp"; import { getGitHubConnectionListItem, GitHubConnectionMethod, validateGitHubConnectionCredentials } from "./github"; @@ -402,6 +402,8 @@ export const getAppConnectionMethodName = (method: TAppConnection["method"]) => case OktaConnectionMethod.ApiToken: case LaravelForgeConnectionMethod.ApiToken: return "API Token"; + case DNSMadeEasyConnectionMethod.APIKeySecret: + return "API Key & Secret"; case PostgresConnectionMethod.UsernameAndPassword: case MsSqlConnectionMethod.UsernameAndPassword: case MySqlConnectionMethod.UsernameAndPassword: diff --git a/backend/src/services/app-connection/app-connection-types.ts b/backend/src/services/app-connection/app-connection-types.ts index e1bdb8132..e26df87f5 100644 --- a/backend/src/services/app-connection/app-connection-types.ts +++ b/backend/src/services/app-connection/app-connection-types.ts @@ -15,8 +15,8 @@ import { TOracleDBConnectionInput, TValidateOracleDBConnectionCredentialsSchema } from "@app/ee/services/app-connections/oracledb"; -import { TGatewayServiceFactory } from "@app/ee/services/gateway/gateway-service"; import { TGatewayV2ServiceFactory } from "@app/ee/services/gateway-v2/gateway-v2-service"; +import { TGatewayServiceFactory } from "@app/ee/services/gateway/gateway-service"; import { TAppConnectionDALFactory } from "@app/services/app-connection/app-connection-dal"; import { TSqlConnectionConfig } from "@app/services/app-connection/shared/sql/sql-connection-types"; import { SecretSync } from "@app/services/secret-sync/secret-sync-enums"; @@ -106,6 +106,12 @@ import { TDigitalOceanConnectionInput, TValidateDigitalOceanCredentialsSchema } from "./digital-ocean"; +import { + TDNSMadeEasyConnection, + TDNSMadeEasyConnectionConfig, + TDNSMadeEasyConnectionInput, + TValidateDNSMadeEasyConnectionCredentialsSchema +} from "./dns-made-easy/dns-made-easy-connection-types"; import { TFlyioConnection, TFlyioConnectionConfig, @@ -279,6 +285,7 @@ export type TAppConnection = { id: string } & ( | TGitLabConnection | TCloudflareConnection | TBitbucketConnection + | TDNSMadeEasyConnection | TZabbixConnection | TRailwayConnection | TChecklyConnection @@ -328,6 +335,7 @@ export type TAppConnectionInput = { id: string } & ( | TGitLabConnectionInput | TCloudflareConnectionInput | TBitbucketConnectionInput + | TDNSMadeEasyConnectionInput | TZabbixConnectionInput | TRailwayConnectionInput | TChecklyConnectionInput @@ -395,6 +403,7 @@ export type TAppConnectionConfig = | TGitLabConnectionConfig | TCloudflareConnectionConfig | TBitbucketConnectionConfig + | TDNSMadeEasyConnectionConfig | TZabbixConnectionConfig | TRailwayConnectionConfig | TChecklyConnectionConfig @@ -439,6 +448,7 @@ export type TValidateAppConnectionCredentialsSchema = | TValidateGitLabConnectionCredentialsSchema | TValidateCloudflareConnectionCredentialsSchema | TValidateBitbucketConnectionCredentialsSchema + | TValidateDNSMadeEasyConnectionCredentialsSchema | TValidateZabbixConnectionCredentialsSchema | TValidateRailwayConnectionCredentialsSchema | TValidateChecklyConnectionCredentialsSchema diff --git a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-enum.ts b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-enum.ts index 8ee08985f..6d782b4bb 100644 --- a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-enum.ts +++ b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-enum.ts @@ -1,3 +1,3 @@ export enum DNSMadeEasyConnectionMethod { - APIKey = "api-key" + APIKeySecret = "api-key-secret" } diff --git a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts index 1d571224c..b50e47a03 100644 --- a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts +++ b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts @@ -1,6 +1,7 @@ import { AxiosError } from "axios"; import { request } from "@app/lib/config/request"; +import { crypto } from "@app/lib/crypto/cryptography"; import { BadRequestError } from "@app/lib/errors"; import { AppConnection } from "@app/services/app-connection/app-connection-enums"; import { IntegrationUrls } from "@app/services/integration-auth/integration-list"; @@ -12,11 +13,42 @@ import { TDNSMadeEasyZone } from "./dns-made-easy-connection-types"; +interface DNSMadeEasyApiResponse { + totalRecords: number; + totalPages: number; + data: Array<{ + id: number; + name: string; + [key: string]: unknown; + }>; + page: number; +} + +export const makeDNSMadeEasyAuthHeaders = ( + apiKey: string, + apiSecret: string, + currentDate: Date = new Date() +): Record => { + // Format date as "Day, DD Mon YYYY HH:MM:SS GMT" (e.g., "Mon, 01 Jan 2024 12:00:00 GMT") + const requestDate = currentDate.toUTCString(); + + // Generate HMAC-SHA1 signature + const hmac = crypto.nativeCrypto.createHmac("sha1", apiSecret); + hmac.update(requestDate); + const hmacSignature = hmac.digest("hex"); + + return { + "x-dnsme-apiKey": apiKey, + "x-dnsme-hmac": hmacSignature, + "x-dnsme-requestDate": requestDate + }; +}; + export const getDNSMadeEasyConnectionListItem = () => { return { name: "DNS Made Easy" as const, app: AppConnection.DNSMadeEasy as const, - methods: Object.values(DNSMadeEasyConnectionMethod) as [DNSMadeEasyConnectionMethod.APIKey] + methods: Object.values(DNSMadeEasyConnectionMethod) as [DNSMadeEasyConnectionMethod.APIKeySecret] }; }; @@ -27,7 +59,7 @@ export const listDNSMadeEasyZones = async (appConnection: TDNSMadeEasyConnection // Authentication: Use API key and secret from appConnection.credentials // Return format: Array of { id: string, name: string } - if (appConnection.method !== DNSMadeEasyConnectionMethod.APIKey) { + if (appConnection.method !== DNSMadeEasyConnectionMethod.APIKeySecret) { throw new Error("Unsupported DNS Made Easy connection method"); } @@ -35,56 +67,42 @@ export const listDNSMadeEasyZones = async (appConnection: TDNSMadeEasyConnection credentials: { apiKey, apiSecret } } = appConnection; - // TODO: Make API request to DNS Made Easy - // const { data } = await request.get<{ data: { id: number; name: string }[] }>( - // `${IntegrationUrls.DNS_MADE_EASY_API_URL}/V2.0/dns/managed`, - // { - // headers: { - // "x-dnsme-apiKey": apiKey, - // "x-dnsme-hmac": generateHMAC(apiSecret, ...), - // "x-dnsme-requestDate": requestDate, - // Accept: "application/json" - // } - // } - // ); - - // TODO: Transform response data to match TDNSMadeEasyZone format - // return data.data.map((zone) => ({ - // name: zone.name, - // id: zone.id.toString() - // })); - - throw new Error("Not implemented: listDNSMadeEasyZones"); + try { + // TODO: + const allZones: TDNSMadeEasyZone[] = []; + return allZones; + } catch (error: unknown) { + if (error instanceof AxiosError) { + throw new BadRequestError({ + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + message: `Failed to list DNS Made Easy zones: ${error.response?.data?.error?.[0] || error.message || "Unknown error"}` + }); + } + throw new BadRequestError({ + message: "Unable to list DNS Made Easy zones" + }); + } }; export const validateDNSMadeEasyConnectionCredentials = async (config: TDNSMadeEasyConnectionConfig) => { - // TODO: Implement DNS Made Easy credentials validation - // This should call the DNS Made Easy API to validate the API key and secret - // Example API endpoint: GET https://api.dnsmadeeasy.com/V2.0/account - // Authentication: Use API key and secret from config.credentials - - if (config.method !== DNSMadeEasyConnectionMethod.APIKey) { + if (config.method !== DNSMadeEasyConnectionMethod.APIKeySecret) { throw new Error("Unsupported DNS Made Easy connection method"); } const { apiKey, apiSecret } = config.credentials; try { - // TODO: Make API request to validate credentials - // const resp = await request.get(`${IntegrationUrls.DNS_MADE_EASY_API_URL}/V2.0/account`, { - // headers: { - // "x-dnsme-apiKey": apiKey, - // "x-dnsme-hmac": generateHMAC(apiSecret, ...), - // "x-dnsme-requestDate": requestDate, - // Accept: "application/json" - // } - // }); - // TODO: Validate response - // if (resp.data === null || !resp.data.id) { - // throw new BadRequestError({ - // message: "Unable to validate connection: Invalid API credentials provided." - // }); - // } + const resp = await request.get(`${IntegrationUrls.DNS_MADE_EASY_API_URL}/V2.0/dns/managed/`, { + headers: { + ...makeDNSMadeEasyAuthHeaders(apiKey, apiSecret), + Accept: "application/json" + } + }); + if (resp.status !== 200) { + throw new BadRequestError({ + message: "Unable to validate connection: Invalid API credentials provided." + }); + } } catch (error: unknown) { if (error instanceof AxiosError) { throw new BadRequestError({ diff --git a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-schema.ts b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-schema.ts index eb39b6235..d5ed6d3cb 100644 --- a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-schema.ts +++ b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-schema.ts @@ -21,13 +21,13 @@ const BaseDNSMadeEasyConnectionSchema = BaseAppConnectionSchema.extend({ }); export const DNSMadeEasyConnectionSchema = BaseDNSMadeEasyConnectionSchema.extend({ - method: z.literal(DNSMadeEasyConnectionMethod.APIKey), + method: z.literal(DNSMadeEasyConnectionMethod.APIKeySecret), credentials: DNSMadeEasyConnectionApiKeyCredentialsSchema }); export const SanitizedDNSMadeEasyConnectionSchema = z.discriminatedUnion("method", [ BaseDNSMadeEasyConnectionSchema.extend({ - method: z.literal(DNSMadeEasyConnectionMethod.APIKey), + method: z.literal(DNSMadeEasyConnectionMethod.APIKeySecret), credentials: DNSMadeEasyConnectionApiKeyCredentialsSchema.pick({ apiKey: true }) }).describe(JSON.stringify({ title: `${APP_CONNECTION_NAME_MAP[AppConnection.DNSMadeEasy]} (API Key)` })) ]); @@ -35,7 +35,7 @@ export const SanitizedDNSMadeEasyConnectionSchema = z.discriminatedUnion("method export const ValidateDNSMadeEasyConnectionCredentialsSchema = z.discriminatedUnion("method", [ z.object({ method: z - .literal(DNSMadeEasyConnectionMethod.APIKey) + .literal(DNSMadeEasyConnectionMethod.APIKeySecret) .describe(AppConnections.CREATE(AppConnection.DNSMadeEasy).method), credentials: DNSMadeEasyConnectionApiKeyCredentialsSchema.describe( AppConnections.CREATE(AppConnection.DNSMadeEasy).credentials diff --git a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-types.ts b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-types.ts index dabb72771..eff96f6f9 100644 --- a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-types.ts +++ b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-types.ts @@ -3,7 +3,11 @@ import z from "zod"; import { DiscriminativePick } from "@app/lib/types"; import { AppConnection } from "../app-connection-enums"; -import { DNSMadeEasyConnectionSchema, CreateDNSMadeEasyConnectionSchema } from "./dns-made-easy-connection-schema"; +import { + CreateDNSMadeEasyConnectionSchema, + DNSMadeEasyConnectionSchema, + ValidateDNSMadeEasyConnectionCredentialsSchema +} from "./dns-made-easy-connection-schema"; export type TDNSMadeEasyConnection = z.infer; @@ -11,6 +15,8 @@ export type TDNSMadeEasyConnectionInput = z.infer { From 101470c4b37aab787e0bf7253b5a8fca016a93c8 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Wed, 19 Nov 2025 19:04:08 -0800 Subject: [PATCH 38/68] Add option --- .../app-connection-router.ts | 10 ++- .../app-connection/app-connection-fns.ts | 3 +- .../images/integrations/DNSMadeEasy.svg | 80 +++++++++++++++++++ frontend/src/helpers/appConnections.ts | 4 + .../src/hooks/api/appConnections/enums.ts | 1 + .../types/dns-made-easy-connection.ts | 14 ++++ .../hooks/api/appConnections/types/index.ts | 4 +- 7 files changed, 112 insertions(+), 4 deletions(-) create mode 100644 frontend/public/images/integrations/DNSMadeEasy.svg create mode 100644 frontend/src/hooks/api/appConnections/types/dns-made-easy-connection.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 5a3496750..48fdc7c38 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 @@ -61,6 +61,10 @@ import { DigitalOceanConnectionListItemSchema, SanitizedDigitalOceanConnectionSchema } from "@app/services/app-connection/digital-ocean"; +import { + DNSMadeEasyConnectionListItemSchema, + SanitizedDNSMadeEasyConnectionSchema +} from "@app/services/app-connection/dns-made-easy/dns-made-easy-connection-schema"; import { FlyioConnectionListItemSchema, SanitizedFlyioConnectionSchema } from "@app/services/app-connection/flyio"; import { GcpConnectionListItemSchema, SanitizedGcpConnectionSchema } from "@app/services/app-connection/gcp"; import { GitHubConnectionListItemSchema, SanitizedGitHubConnectionSchema } from "@app/services/app-connection/github"; @@ -170,7 +174,8 @@ const SanitizedAppConnectionSchema = z.union([ ...SanitizedAzureADCSConnectionSchema.options, ...SanitizedRedisConnectionSchema.options, ...SanitizedLaravelForgeConnectionSchema.options, - ...SanitizedChefConnectionSchema.options + ...SanitizedChefConnectionSchema.options, + ...SanitizedDNSMadeEasyConnectionSchema.options ]); const AppConnectionOptionsSchema = z.discriminatedUnion("app", [ @@ -215,7 +220,8 @@ const AppConnectionOptionsSchema = z.discriminatedUnion("app", [ AzureADCSConnectionListItemSchema, RedisConnectionListItemSchema, LaravelForgeConnectionListItemSchema, - ChefConnectionListItemSchema + ChefConnectionListItemSchema, + DNSMadeEasyConnectionListItemSchema ]); export const registerAppConnectionRouter = async (server: FastifyZodProvider) => { diff --git a/backend/src/services/app-connection/app-connection-fns.ts b/backend/src/services/app-connection/app-connection-fns.ts index 5b03dc903..a5d9c1ed8 100644 --- a/backend/src/services/app-connection/app-connection-fns.ts +++ b/backend/src/services/app-connection/app-connection-fns.ts @@ -223,7 +223,8 @@ export const listAppConnectionOptions = (projectType?: ProjectType) => { getNorthflankConnectionListItem(), getOktaConnectionListItem(), getRedisConnectionListItem(), - getChefConnectionListItem() + getChefConnectionListItem(), + getDNSMadeEasyConnectionListItem() ] .filter((option) => { switch (projectType) { diff --git a/frontend/public/images/integrations/DNSMadeEasy.svg b/frontend/public/images/integrations/DNSMadeEasy.svg new file mode 100644 index 000000000..be77b9840 --- /dev/null +++ b/frontend/public/images/integrations/DNSMadeEasy.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/helpers/appConnections.ts b/frontend/src/helpers/appConnections.ts index 2266c05f9..d32f8cc7f 100644 --- a/frontend/src/helpers/appConnections.ts +++ b/frontend/src/helpers/appConnections.ts @@ -57,6 +57,7 @@ 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 { DNSMadeEasyConnectionMethod } from "@app/hooks/api/appConnections/types/dns-made-easy-connection"; export const APP_CONNECTION_MAP: Record< AppConnection, @@ -111,6 +112,7 @@ export const APP_CONNECTION_MAP: Record< [AppConnection.Flyio]: { name: "Fly.io", image: "Flyio.svg" }, [AppConnection.GitLab]: { name: "GitLab", image: "GitLab.png" }, [AppConnection.Cloudflare]: { name: "Cloudflare", image: "Cloudflare.png" }, + [AppConnection.DNSMadeEasy]: { name: "DNS Made Easy", image: "DNSMadeEasy.svg" }, [AppConnection.Zabbix]: { name: "Zabbix", image: "Zabbix.png" }, [AppConnection.Railway]: { name: "Railway", image: "Railway.png" }, [AppConnection.Bitbucket]: { name: "Bitbucket", image: "Bitbucket.png" }, @@ -214,6 +216,8 @@ export const getAppConnectionMethodDetails = (method: TAppConnection["method"]) return { name: "Client Secret", icon: faKey }; case AzureClientSecretsConnectionMethod.Certificate: return { name: "Certificate", icon: faCertificate }; + case DNSMadeEasyConnectionMethod.APIKeySecret: + return { name: "API Key & Secret", icon: faKey }; default: throw new Error(`Unhandled App Connection Method: ${method}`); } diff --git a/frontend/src/hooks/api/appConnections/enums.ts b/frontend/src/hooks/api/appConnections/enums.ts index fba0cbb4b..9535e8348 100644 --- a/frontend/src/hooks/api/appConnections/enums.ts +++ b/frontend/src/hooks/api/appConnections/enums.ts @@ -29,6 +29,7 @@ export enum AppConnection { Flyio = "flyio", GitLab = "gitlab", Cloudflare = "cloudflare", + DNSMadeEasy = "dns-made-easy", Bitbucket = "bitbucket", Zabbix = "zabbix", Railway = "railway", diff --git a/frontend/src/hooks/api/appConnections/types/dns-made-easy-connection.ts b/frontend/src/hooks/api/appConnections/types/dns-made-easy-connection.ts new file mode 100644 index 000000000..2d1b93c86 --- /dev/null +++ b/frontend/src/hooks/api/appConnections/types/dns-made-easy-connection.ts @@ -0,0 +1,14 @@ +import { AppConnection } from "@app/hooks/api/appConnections/enums"; +import { TRootAppConnection } from "@app/hooks/api/appConnections/types/root-connection"; + +export enum DNSMadeEasyConnectionMethod { + APIKeySecret = "api-key-secret" +} + +export type TDNSMadeEasyConnection = TRootAppConnection & { app: AppConnection.DNSMadeEasy } & { + method: DNSMadeEasyConnectionMethod.APIKeySecret; + credentials: { + apiToken: string; + accountId: string; + }; +}; diff --git a/frontend/src/hooks/api/appConnections/types/index.ts b/frontend/src/hooks/api/appConnections/types/index.ts index 3e62031b3..f52c902d2 100644 --- a/frontend/src/hooks/api/appConnections/types/index.ts +++ b/frontend/src/hooks/api/appConnections/types/index.ts @@ -15,6 +15,7 @@ import { TChefConnection } from "./chef-connection"; import { TCloudflareConnection } from "./cloudflare-connection"; import { TDatabricksConnection } from "./databricks-connection"; import { TDigitalOceanConnection } from "./digital-ocean"; +import { TDNSMadeEasyConnection } from "./dns-made-easy-connection"; import { TFlyioConnection } from "./flyio-connection"; import { TGcpConnection } from "./gcp-connection"; import { TGitHubConnection } from "./github-connection"; @@ -127,7 +128,8 @@ export type TAppConnection = | TNorthflankConnection | TOktaConnection | TRedisConnection - | TChefConnection; + | TChefConnection + | TDNSMadeEasyConnection; export type TAvailableAppConnection = Pick; From b187cb9494ce9502d61dd43f106ad07c88b0b9bb Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Wed, 19 Nov 2025 21:36:17 -0800 Subject: [PATCH 39/68] Add dns made easy UI --- .../dns-made-easy-connection-fns.ts | 10 +- .../dns-made-easy-connection-schema.ts | 2 +- frontend/src/helpers/appConnections.ts | 2 +- .../types/dns-made-easy-connection.ts | 4 +- .../hooks/api/appConnections/types/index.ts | 1 + .../AppConnectionForm/AppConnectionForm.tsx | 5 + .../DNSMadeEasyConnectionForm.tsx | 157 ++++++++++++++++++ 7 files changed, 172 insertions(+), 9 deletions(-) create mode 100644 frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/DNSMadeEasyConnectionForm.tsx diff --git a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts index b50e47a03..fc34940b8 100644 --- a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts +++ b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts @@ -26,14 +26,14 @@ interface DNSMadeEasyApiResponse { export const makeDNSMadeEasyAuthHeaders = ( apiKey: string, - apiSecret: string, + secretKey: string, currentDate: Date = new Date() ): Record => { // Format date as "Day, DD Mon YYYY HH:MM:SS GMT" (e.g., "Mon, 01 Jan 2024 12:00:00 GMT") const requestDate = currentDate.toUTCString(); // Generate HMAC-SHA1 signature - const hmac = crypto.nativeCrypto.createHmac("sha1", apiSecret); + const hmac = crypto.nativeCrypto.createHmac("sha1", secretKey); hmac.update(requestDate); const hmacSignature = hmac.digest("hex"); @@ -64,7 +64,7 @@ export const listDNSMadeEasyZones = async (appConnection: TDNSMadeEasyConnection } const { - credentials: { apiKey, apiSecret } + credentials: { apiKey, secretKey } } = appConnection; try { @@ -89,12 +89,12 @@ export const validateDNSMadeEasyConnectionCredentials = async (config: TDNSMadeE throw new Error("Unsupported DNS Made Easy connection method"); } - const { apiKey, apiSecret } = config.credentials; + const { apiKey, secretKey } = config.credentials; try { const resp = await request.get(`${IntegrationUrls.DNS_MADE_EASY_API_URL}/V2.0/dns/managed/`, { headers: { - ...makeDNSMadeEasyAuthHeaders(apiKey, apiSecret), + ...makeDNSMadeEasyAuthHeaders(apiKey, secretKey), Accept: "application/json" } }); diff --git a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-schema.ts b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-schema.ts index d5ed6d3cb..d968ba768 100644 --- a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-schema.ts +++ b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-schema.ts @@ -13,7 +13,7 @@ import { DNSMadeEasyConnectionMethod } from "./dns-made-easy-connection-enum"; export const DNSMadeEasyConnectionApiKeyCredentialsSchema = z.object({ apiKey: z.string().trim().min(1, "API key required").max(256, "API key cannot exceed 256 characters"), - apiSecret: z.string().trim().min(1, "API secret required").max(256, "API secret cannot exceed 256 characters") + secretKey: z.string().trim().min(1, "Secret key required").max(256, "Secret key cannot exceed 256 characters") }); const BaseDNSMadeEasyConnectionSchema = BaseAppConnectionSchema.extend({ diff --git a/frontend/src/helpers/appConnections.ts b/frontend/src/helpers/appConnections.ts index d32f8cc7f..20e959c42 100644 --- a/frontend/src/helpers/appConnections.ts +++ b/frontend/src/helpers/appConnections.ts @@ -112,7 +112,7 @@ export const APP_CONNECTION_MAP: Record< [AppConnection.Flyio]: { name: "Fly.io", image: "Flyio.svg" }, [AppConnection.GitLab]: { name: "GitLab", image: "GitLab.png" }, [AppConnection.Cloudflare]: { name: "Cloudflare", image: "Cloudflare.png" }, - [AppConnection.DNSMadeEasy]: { name: "DNS Made Easy", image: "DNSMadeEasy.svg" }, + [AppConnection.DNSMadeEasy]: { name: "DNS Made Easy", image: "DNSMadeEasy.svg", size: 120 }, [AppConnection.Zabbix]: { name: "Zabbix", image: "Zabbix.png" }, [AppConnection.Railway]: { name: "Railway", image: "Railway.png" }, [AppConnection.Bitbucket]: { name: "Bitbucket", image: "Bitbucket.png" }, diff --git a/frontend/src/hooks/api/appConnections/types/dns-made-easy-connection.ts b/frontend/src/hooks/api/appConnections/types/dns-made-easy-connection.ts index 2d1b93c86..fd4dc098b 100644 --- a/frontend/src/hooks/api/appConnections/types/dns-made-easy-connection.ts +++ b/frontend/src/hooks/api/appConnections/types/dns-made-easy-connection.ts @@ -8,7 +8,7 @@ export enum DNSMadeEasyConnectionMethod { export type TDNSMadeEasyConnection = TRootAppConnection & { app: AppConnection.DNSMadeEasy } & { method: DNSMadeEasyConnectionMethod.APIKeySecret; credentials: { - apiToken: string; - accountId: string; + apiKey: string; + secretKey: string; }; }; diff --git a/frontend/src/hooks/api/appConnections/types/index.ts b/frontend/src/hooks/api/appConnections/types/index.ts index f52c902d2..dcefd549c 100644 --- a/frontend/src/hooks/api/appConnections/types/index.ts +++ b/frontend/src/hooks/api/appConnections/types/index.ts @@ -57,6 +57,7 @@ export * from "./camunda-connection"; export * from "./checkly-connection"; export * from "./chef-connection"; export * from "./cloudflare-connection"; +export * from "./dns-made-easy-connection"; export * from "./databricks-connection"; export * from "./flyio-connection"; export * from "./gcp-connection"; 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 aca33ffa2..af26a940d 100644 --- a/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/AppConnectionForm.tsx +++ b/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/AppConnectionForm.tsx @@ -24,6 +24,7 @@ import { ChefConnectionForm } from "./ChefConnectionForm"; import { CloudflareConnectionForm } from "./CloudflareConnectionForm"; import { DatabricksConnectionForm } from "./DatabricksConnectionForm"; import { DigitalOceanConnectionForm } from "./DigitalOceanConnectionForm"; +import { DNSMadeEasyConnectionForm } from "./DNSMadeEasyConnectionForm"; import { FlyioConnectionForm } from "./FlyioConnectionForm"; import { GcpConnectionForm } from "./GcpConnectionForm"; import { GitHubConnectionForm } from "./GitHubConnectionForm"; @@ -148,6 +149,8 @@ const CreateForm = ({ app, onComplete, projectId }: CreateFormProps) => { return ; case AppConnection.Cloudflare: return ; + case AppConnection.DNSMadeEasy: + return ; case AppConnection.Bitbucket: return ; case AppConnection.Zabbix: @@ -306,6 +309,8 @@ const UpdateForm = ({ appConnection, onComplete }: UpdateFormProps) => { ); case AppConnection.Cloudflare: return ; + case AppConnection.DNSMadeEasy: + return ; case AppConnection.Bitbucket: return ; case AppConnection.Zabbix: diff --git a/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/DNSMadeEasyConnectionForm.tsx b/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/DNSMadeEasyConnectionForm.tsx new file mode 100644 index 000000000..0d7d7403a --- /dev/null +++ b/frontend/src/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/DNSMadeEasyConnectionForm.tsx @@ -0,0 +1,157 @@ +import { zodResolver } from "@hookform/resolvers/zod"; +import { Controller, FormProvider, useForm } from "react-hook-form"; +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 { TDNSMadeEasyConnection } from "@app/hooks/api/appConnections"; +import { AppConnection } from "@app/hooks/api/appConnections/enums"; + +import { DNSMadeEasyConnectionMethod } from "@app/hooks/api/appConnections/types/dns-made-easy-connection"; +import { + genericAppConnectionFieldsSchema, + GenericAppConnectionsFields +} from "./GenericAppConnectionFields"; + +type Props = { + appConnection?: TDNSMadeEasyConnection; + onSubmit: (formData: FormData) => Promise; +}; + +const rootSchema = genericAppConnectionFieldsSchema.extend({ + app: z.literal(AppConnection.DNSMadeEasy) +}); + +const formSchema = z.discriminatedUnion("method", [ + rootSchema.extend({ + method: z.literal(DNSMadeEasyConnectionMethod.APIKeySecret), + credentials: z.object({ + apiKey: z.string().trim().min(1, "API Key required"), + secretKey: z.string().trim().min(1, "Secret Key required") + }) + }) +]); + +type FormData = z.infer; + +export const DNSMadeEasyConnectionForm = ({ appConnection, onSubmit }: Props) => { + const isUpdate = Boolean(appConnection); + + const form = useForm({ + resolver: zodResolver(formSchema), + defaultValues: appConnection ?? { + app: AppConnection.DNSMadeEasy, + method: DNSMadeEasyConnectionMethod.APIKeySecret, + credentials: { + apiKey: "", + secretKey: "" + } + } + }); + + const { + handleSubmit, + control, + formState: { isSubmitting, isDirty } + } = form; + + return ( + + + {!isUpdate && } + ( + + + + )} + /> + ( + + onChange(e.target.value)} + placeholder="af1b628f-3272-46aa-9cde-837d0c59155d" + /> + + )} + /> + ( + + onChange(e.target.value)} + /> + + )} + /> +
+ + + + +
+ +
+ ); +}; From 0d721686e6d5f964995b76d5f6a58b221788917f Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Thu, 20 Nov 2025 18:49:46 -0800 Subject: [PATCH 40/68] Add sandbox switch for dns made easy --- backend/src/lib/config/env.ts | 1 + .../dns-made-easy/dns-made-easy-connection-fns.ts | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/backend/src/lib/config/env.ts b/backend/src/lib/config/env.ts index 11de57667..21e83c2b7 100644 --- a/backend/src/lib/config/env.ts +++ b/backend/src/lib/config/env.ts @@ -119,6 +119,7 @@ const envSchema = z }) .default("{}") ), + DNS_MADE_EASY_SANDBOX_ENABLED: zodStrBool.default("false").optional(), // smtp options SMTP_HOST: zpStr(z.string().optional()), SMTP_IGNORE_TLS: zodStrBool.default("false"), diff --git a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts index fc34940b8..40bbe945b 100644 --- a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts +++ b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts @@ -5,7 +5,9 @@ import { crypto } from "@app/lib/crypto/cryptography"; import { BadRequestError } from "@app/lib/errors"; import { AppConnection } from "@app/services/app-connection/app-connection-enums"; import { IntegrationUrls } from "@app/services/integration-auth/integration-list"; +import https from "https"; +import { getConfig } from "@app/lib/config/env"; import { DNSMadeEasyConnectionMethod } from "./dns-made-easy-connection-enum"; import { TDNSMadeEasyConnection, @@ -24,6 +26,11 @@ interface DNSMadeEasyApiResponse { page: number; } +const getDNSMadeEasyUrl = (path: string) => { + const appCfg = getConfig(); + return `${appCfg.DNS_MADE_EASY_SANDBOX_ENABLED ? IntegrationUrls.DNS_MADE_EASY_SANDBOX_API_URL : IntegrationUrls.DNS_MADE_EASY_API_URL}${path}`; +}; + export const makeDNSMadeEasyAuthHeaders = ( apiKey: string, secretKey: string, @@ -92,7 +99,11 @@ export const validateDNSMadeEasyConnectionCredentials = async (config: TDNSMadeE const { apiKey, secretKey } = config.credentials; try { - const resp = await request.get(`${IntegrationUrls.DNS_MADE_EASY_API_URL}/V2.0/dns/managed/`, { + const resp = await request.get(getDNSMadeEasyUrl("/V2.0/dns/managed/"), { + httpAgent: new https.Agent({ + minVersion: "TLSv1.2", + maxVersion: "TLSv1.2" + }), headers: { ...makeDNSMadeEasyAuthHeaders(apiKey, secretKey), Accept: "application/json" From dd0b0e4633c31c02b208b401044feaf74bc144fd Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Thu, 20 Nov 2025 20:05:49 -0800 Subject: [PATCH 41/68] No need to use https agent --- .../dns-made-easy/dns-made-easy-connection-fns.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts index 40bbe945b..80ee0bee4 100644 --- a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts +++ b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts @@ -1,13 +1,12 @@ import { AxiosError } from "axios"; +import { getConfig } from "@app/lib/config/env"; import { request } from "@app/lib/config/request"; import { crypto } from "@app/lib/crypto/cryptography"; import { BadRequestError } from "@app/lib/errors"; import { AppConnection } from "@app/services/app-connection/app-connection-enums"; import { IntegrationUrls } from "@app/services/integration-auth/integration-list"; -import https from "https"; -import { getConfig } from "@app/lib/config/env"; import { DNSMadeEasyConnectionMethod } from "./dns-made-easy-connection-enum"; import { TDNSMadeEasyConnection, @@ -100,10 +99,6 @@ export const validateDNSMadeEasyConnectionCredentials = async (config: TDNSMadeE try { const resp = await request.get(getDNSMadeEasyUrl("/V2.0/dns/managed/"), { - httpAgent: new https.Agent({ - minVersion: "TLSv1.2", - maxVersion: "TLSv1.2" - }), headers: { ...makeDNSMadeEasyAuthHeaders(apiKey, secretKey), Accept: "application/json" From 551e9b4476220f95a346d8b47b4a3decd95aee95 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Thu, 20 Nov 2025 20:32:55 -0800 Subject: [PATCH 42/68] Add DNS made easy stuff --- .../dns-made-easy-connection-fns.ts | 2 + .../acme/acme-certificate-authority-enums.ts | 3 +- .../acme/acme-certificate-authority-fns.ts | 33 +++++++++++++ .../integration-auth/integration-list.ts | 4 +- frontend/src/hooks/api/ca/constants.tsx | 6 ++- frontend/src/hooks/api/ca/enums.tsx | 3 +- .../components/ExternalCaModal.tsx | 46 ++++++++++++++++++- 7 files changed, 90 insertions(+), 7 deletions(-) diff --git a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts index 80ee0bee4..d42ee465e 100644 --- a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts +++ b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts @@ -4,6 +4,7 @@ import { getConfig } from "@app/lib/config/env"; import { request } from "@app/lib/config/request"; import { crypto } from "@app/lib/crypto/cryptography"; import { BadRequestError } from "@app/lib/errors"; +import { logger } from "@app/lib/logger"; import { AppConnection } from "@app/services/app-connection/app-connection-enums"; import { IntegrationUrls } from "@app/services/integration-auth/integration-list"; @@ -116,6 +117,7 @@ export const validateDNSMadeEasyConnectionCredentials = async (config: TDNSMadeE message: `Failed to validate credentials: ${error.response?.data?.error?.[0] || error.message || "Unknown error"}` }); } + logger.error(error, "Error validating DNS Made Easy connection credentials"); throw new BadRequestError({ message: "Unable to validate connection: verify credentials" }); diff --git a/backend/src/services/certificate-authority/acme/acme-certificate-authority-enums.ts b/backend/src/services/certificate-authority/acme/acme-certificate-authority-enums.ts index c4703d49f..09431f4f8 100644 --- a/backend/src/services/certificate-authority/acme/acme-certificate-authority-enums.ts +++ b/backend/src/services/certificate-authority/acme/acme-certificate-authority-enums.ts @@ -1,4 +1,5 @@ export enum AcmeDnsProvider { Route53 = "route53", - Cloudflare = "cloudflare" + Cloudflare = "cloudflare", + DNSMadeEasy = "dns-made-easy" } diff --git a/backend/src/services/certificate-authority/acme/acme-certificate-authority-fns.ts b/backend/src/services/certificate-authority/acme/acme-certificate-authority-fns.ts index ff95083c6..00902b791 100644 --- a/backend/src/services/certificate-authority/acme/acme-certificate-authority-fns.ts +++ b/backend/src/services/certificate-authority/acme/acme-certificate-authority-fns.ts @@ -44,6 +44,7 @@ import { } from "./acme-certificate-authority-types"; import { cloudflareDeleteTxtRecord, cloudflareInsertTxtRecord } from "./dns-providers/cloudflare"; import { route53DeleteTxtRecord, route53InsertTxtRecord } from "./dns-providers/route54"; +import { TDNSMadeEasyConnection } from "@app/services/app-connection/dns-made-easy/dns-made-easy-connection-types"; type TAcmeCertificateAuthorityFnsDeps = { appConnectionDAL: Pick; @@ -263,6 +264,15 @@ export const orderCertificate = async ( ); break; } + case AcmeDnsProvider.DNSMadeEasy: { + await dnsMadeEasyInsertTxtRecord( + connection as TDNSMadeEasyConnection, + acmeCa.configuration.dnsProviderConfig.hostedZoneId, + recordName, + recordValue + ); + break; + } default: { throw new Error(`Unsupported DNS provider: ${acmeCa.configuration.dnsProviderConfig.provider as string}`); } @@ -291,6 +301,14 @@ export const orderCertificate = async ( ); break; } + case AcmeDnsProvider.DNSMadeEasy: { + await dnsMadeEasyDeleteTxtRecord( + connection as TDNSMadeEasyConnection, + acmeCa.configuration.dnsProviderConfig.hostedZoneId, + recordName, + recordValue + ); + } default: { throw new Error(`Unsupported DNS provider: ${acmeCa.configuration.dnsProviderConfig.provider as string}`); } @@ -413,6 +431,12 @@ export const AcmeCertificateAuthorityFns = ({ }); } + if (dnsProviderConfig.provider === AcmeDnsProvider.DNSMadeEasy && appConnection.app !== AppConnection.DNSMadeEasy) { + throw new BadRequestError({ + message: `App connection with ID '${dnsAppConnectionId}' is not a DNS Made Easy connection` + }); + } + // validates permission to connect await appConnectionService.validateAppConnectionUsageById( appConnection.app as AppConnection, @@ -508,6 +532,15 @@ export const AcmeCertificateAuthorityFns = ({ }); } + if ( + dnsProviderConfig.provider === AcmeDnsProvider.DNSMadeEasy && + appConnection.app !== AppConnection.DNSMadeEasy + ) { + throw new BadRequestError({ + message: `App connection with ID '${dnsAppConnectionId}' is not a DNS Made Easy connection` + }); + } + const ca = await certificateAuthorityDAL.findById(id); if (!ca) { diff --git a/backend/src/services/integration-auth/integration-list.ts b/backend/src/services/integration-auth/integration-list.ts index 9f2ad0ee6..b76e90470 100644 --- a/backend/src/services/integration-auth/integration-list.ts +++ b/backend/src/services/integration-auth/integration-list.ts @@ -106,8 +106,8 @@ export enum IntegrationUrls { GITHUB_USER_INSTALLATIONS = "https://api.github.com/user/installations", CHEF_API_URL = "https://api.chef.io", - DNS_MADE_EASY_API_URL = "https://api.dnsmadeeasy.com/V2.0", - DNS_MADE_EASY_SANDBOX_API_URL = "https://api.sandbox.dnsmadeeasy.com/V2.0" + DNS_MADE_EASY_API_URL = "https://api.dnsmadeeasy.com", + DNS_MADE_EASY_SANDBOX_API_URL = "https://api.sandbox.dnsmadeeasy.com" } export const getIntegrationOptions = async () => { diff --git a/frontend/src/hooks/api/ca/constants.tsx b/frontend/src/hooks/api/ca/constants.tsx index 16a350dbd..740d52994 100644 --- a/frontend/src/hooks/api/ca/constants.tsx +++ b/frontend/src/hooks/api/ca/constants.tsx @@ -16,12 +16,14 @@ export const caStatusToNameMap: { [K in CaStatus]: string } = { export const ACME_DNS_PROVIDER_NAME_MAP: Record = { [AcmeDnsProvider.ROUTE53]: "Route53", - [AcmeDnsProvider.Cloudflare]: "Cloudflare" + [AcmeDnsProvider.Cloudflare]: "Cloudflare", + [AcmeDnsProvider.DNSMadeEasy]: "DNS Made Easy" }; export const ACME_DNS_PROVIDER_APP_CONNECTION_MAP: Record = { [AcmeDnsProvider.ROUTE53]: AppConnection.AWS, - [AcmeDnsProvider.Cloudflare]: AppConnection.Cloudflare + [AcmeDnsProvider.Cloudflare]: AppConnection.Cloudflare, + [AcmeDnsProvider.DNSMadeEasy]: AppConnection.DNSMadeEasy }; export const CA_TYPE_CAPABILITIES_MAP: Record = { diff --git a/frontend/src/hooks/api/ca/enums.tsx b/frontend/src/hooks/api/ca/enums.tsx index a68f3e862..acd8ce069 100644 --- a/frontend/src/hooks/api/ca/enums.tsx +++ b/frontend/src/hooks/api/ca/enums.tsx @@ -21,7 +21,8 @@ export enum CaRenewalType { export enum AcmeDnsProvider { ROUTE53 = "route53", - Cloudflare = "cloudflare" + Cloudflare = "cloudflare", + DNSMadeEasy = "dns-made-easy" } export enum CaCapability { diff --git a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaModal.tsx b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaModal.tsx index 1fb338a25..e24cc6881 100644 --- a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaModal.tsx +++ b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaModal.tsx @@ -27,6 +27,10 @@ import { TCloudflareZone, useCloudflareConnectionListZones } from "@app/hooks/api/appConnections/cloudflare"; +import { + TDNSMadeEasyZone, + useDNSMadeEasyConnectionListZones +} from "@app/hooks/api/appConnections/dns-made-easy"; import { AppConnection } from "@app/hooks/api/appConnections/enums"; import { AcmeDnsProvider, @@ -211,6 +215,11 @@ export const ExternalCaModal = ({ popUp, handlePopUpToggle }: Props) => { enabled: caType === CaType.ACME }); + const { data: availableDNSMadeEasyConnections, isPending: isDNSMadeEasyPending } = + useListAvailableAppConnections(AppConnection.DNSMadeEasy, currentProject.id, { + enabled: caType === CaType.ACME + }); + const { data: availableAzureConnections, isPending: isAzurePending } = useListAvailableAppConnections(AppConnection.AzureADCS, currentProject.id, { enabled: caType === CaType.AZURE_AD_CS @@ -225,11 +234,15 @@ export const ExternalCaModal = ({ popUp, handlePopUpToggle }: Props) => { caType, availableRoute53Connections, availableCloudflareConnections, + availableDNSMadeEasyConnections, availableAzureConnections ]); const isPending = - isRoute53Pending || isCloudflarePending || (isAzurePending && caType === CaType.AZURE_AD_CS); + isRoute53Pending || + isCloudflarePending || + isDNSMadeEasyPending || + (isAzurePending && caType === CaType.AZURE_AD_CS); const dnsAppConnection = caType === CaType.ACME && configuration && "dnsAppConnection" in configuration @@ -241,6 +254,11 @@ export const ExternalCaModal = ({ popUp, handlePopUpToggle }: Props) => { enabled: dnsProvider === AcmeDnsProvider.Cloudflare && !!dnsAppConnection.id }); + const { data: dnsMadeEasyZones = [], isPending: isDNSMadeEasyZonesPending } = + useDNSMadeEasyConnectionListZones(dnsAppConnection.id, { + enabled: dnsProvider === AcmeDnsProvider.DNSMadeEasy && !!dnsAppConnection.id + }); + // Populate form with CA data when editing useEffect(() => { if (ca && !isCaLoading) { @@ -500,6 +518,32 @@ export const ExternalCaModal = ({ popUp, handlePopUpToggle }: Props) => { )} /> )} + {dnsProvider === AcmeDnsProvider.DNSMadeEasy && ( + ( + + zone.id === value)} + onChange={(option) => { + onChange((option as SingleValue)?.id ?? null); + }} + options={dnsMadeEasyZones} + placeholder="Select a zone..." + getOptionLabel={(option) => option.name} + getOptionValue={(option) => option.id} + /> + + )} + /> + )} Date: Thu, 20 Nov 2025 20:45:19 -0800 Subject: [PATCH 43/68] Add more missing stuff --- .../acme/acme-certificate-authority-fns.ts | 4 +- .../acme/dns-providers/dns-made-easy.ts | 129 ++++++++++++++++++ .../api/appConnections/types/app-options.ts | 8 +- 3 files changed, 139 insertions(+), 2 deletions(-) create mode 100644 backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts diff --git a/backend/src/services/certificate-authority/acme/acme-certificate-authority-fns.ts b/backend/src/services/certificate-authority/acme/acme-certificate-authority-fns.ts index 00902b791..8dbb9512f 100644 --- a/backend/src/services/certificate-authority/acme/acme-certificate-authority-fns.ts +++ b/backend/src/services/certificate-authority/acme/acme-certificate-authority-fns.ts @@ -14,6 +14,7 @@ import { decryptAppConnection } from "@app/services/app-connection/app-connectio import { TAppConnectionServiceFactory } from "@app/services/app-connection/app-connection-service"; import { TAwsConnection } from "@app/services/app-connection/aws/aws-connection-types"; import { TCloudflareConnection } from "@app/services/app-connection/cloudflare/cloudflare-connection-types"; +import { TDNSMadeEasyConnection } from "@app/services/app-connection/dns-made-easy/dns-made-easy-connection-types"; import { TCertificateBodyDALFactory } from "@app/services/certificate/certificate-body-dal"; import { TCertificateDALFactory } from "@app/services/certificate/certificate-dal"; import { TCertificateSecretDALFactory } from "@app/services/certificate/certificate-secret-dal"; @@ -43,8 +44,8 @@ import { TUpdateAcmeCertificateAuthorityDTO } from "./acme-certificate-authority-types"; import { cloudflareDeleteTxtRecord, cloudflareInsertTxtRecord } from "./dns-providers/cloudflare"; +import { dnsMadeEasyDeleteTxtRecord, dnsMadeEasyInsertTxtRecord } from "./dns-providers/dns-made-easy"; import { route53DeleteTxtRecord, route53InsertTxtRecord } from "./dns-providers/route54"; -import { TDNSMadeEasyConnection } from "@app/services/app-connection/dns-made-easy/dns-made-easy-connection-types"; type TAcmeCertificateAuthorityFnsDeps = { appConnectionDAL: Pick; @@ -308,6 +309,7 @@ export const orderCertificate = async ( recordName, recordValue ); + break; } default: { throw new Error(`Unsupported DNS provider: ${acmeCa.configuration.dnsProviderConfig.provider as string}`); diff --git a/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts b/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts new file mode 100644 index 000000000..899f4aaf1 --- /dev/null +++ b/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts @@ -0,0 +1,129 @@ +import axios from "axios"; + +import { getConfig } from "@app/lib/config/env"; +import { request } from "@app/lib/config/request"; +import { crypto } from "@app/lib/crypto/cryptography"; +import { TDNSMadeEasyConnection } from "@app/services/app-connection/dns-made-easy/dns-made-easy-connection-types"; +import { IntegrationUrls } from "@app/services/integration-auth/integration-list"; + +const getDNSMadeEasyUrl = (path: string) => { + const appCfg = getConfig(); + return `${appCfg.DNS_MADE_EASY_SANDBOX_ENABLED ? IntegrationUrls.DNS_MADE_EASY_SANDBOX_API_URL : IntegrationUrls.DNS_MADE_EASY_API_URL}${path}`; +}; + +const makeDNSMadeEasyAuthHeaders = ( + apiKey: string, + secretKey: string, + currentDate: Date = new Date() +): Record => { + // Format date as "Day, DD Mon YYYY HH:MM:SS GMT" (e.g., "Mon, 01 Jan 2024 12:00:00 GMT") + const requestDate = currentDate.toUTCString(); + + // Generate HMAC-SHA1 signature + const hmac = crypto.nativeCrypto.createHmac("sha1", secretKey); + hmac.update(requestDate); + const hmacSignature = hmac.digest("hex"); + + return { + "x-dnsme-apiKey": apiKey, + "x-dnsme-hmac": hmacSignature, + "x-dnsme-requestDate": requestDate + }; +}; + +export const dnsMadeEasyInsertTxtRecord = async ( + connection: TDNSMadeEasyConnection, + hostedZoneId: string, + domain: string, + value: string +) => { + const { + credentials: { apiKey, secretKey } + } = connection; + + try { + await request.post( + getDNSMadeEasyUrl(`/V2.0/dns/managed/${encodeURIComponent(hostedZoneId)}/records`), + { + type: "TXT", + name: domain, + value, + ttl: 60 + }, + { + headers: { + ...makeDNSMadeEasyAuthHeaders(apiKey, secretKey), + "Content-Type": "application/json", + Accept: "application/json" + } + } + ); + } catch (error) { + if (axios.isAxiosError(error)) { + const errorMessage = + (error.response?.data as { error?: string[] | string })?.error?.[0] || + (error.response?.data as { error?: string[] | string })?.error || + error.message || + "Unknown error"; + throw new Error(typeof errorMessage === "string" ? errorMessage : String(errorMessage)); + } + throw error; + } +}; + +export const dnsMadeEasyDeleteTxtRecord = async ( + connection: TDNSMadeEasyConnection, + hostedZoneId: string, + domain: string, + value: string +) => { + const { + credentials: { apiKey, secretKey } + } = connection; + + try { + // First, list records to find the record ID + const listRecordsResponse = await request.get<{ + data: Array<{ id: number; type: string; name: string; value: string }>; + }>(getDNSMadeEasyUrl(`/V2.0/dns/managed/${encodeURIComponent(hostedZoneId)}/records`), { + headers: { + ...makeDNSMadeEasyAuthHeaders(apiKey, secretKey), + Accept: "application/json" + }, + params: { + type: "TXT", + recordName: domain + } + }); + + const dnsRecords = listRecordsResponse.data?.data; + + if (Array.isArray(dnsRecords) && dnsRecords.length > 0) { + const recordToDelete = dnsRecords.find( + (record) => record.type === "TXT" && record.name === domain && record.value === value + ); + + if (recordToDelete) { + await request.delete( + getDNSMadeEasyUrl(`/V2.0/dns/managed/${encodeURIComponent(hostedZoneId)}/records/${recordToDelete.id}`), + { + headers: { + ...makeDNSMadeEasyAuthHeaders(apiKey, secretKey), + Accept: "application/json" + } + } + ); + } + } + } catch (error) { + if (axios.isAxiosError(error)) { + const errorMessage = + (error.response?.data as { error?: string[] | string })?.error?.[0] || + (error.response?.data as { error?: string[] | string })?.error || + error.message || + "Unknown error"; + throw new Error(typeof errorMessage === "string" ? errorMessage : String(errorMessage)); + } + throw error; + } +}; diff --git a/frontend/src/hooks/api/appConnections/types/app-options.ts b/frontend/src/hooks/api/appConnections/types/app-options.ts index 1f553f605..d1c991f34 100644 --- a/frontend/src/hooks/api/appConnections/types/app-options.ts +++ b/frontend/src/hooks/api/appConnections/types/app-options.ts @@ -184,6 +184,10 @@ export type TRedisConnectionOption = TAppConnectionOptionBase & { app: AppConnection.Redis; }; +export type TDNSMadeEasyConnectionOption = TAppConnectionOptionBase & { + app: AppConnection.DNSMadeEasy; +}; + export type TAppConnectionOption = | TAwsConnectionOption | TGitHubConnectionOption @@ -225,7 +229,8 @@ export type TAppConnectionOption = | TOktaConnectionOption | TAzureAdCsConnectionOption | TLaravelForgeConnectionOption - | TChefConnectionOption; + | TChefConnectionOption + | TDNSMadeEasyConnectionOption; export type TAppConnectionOptionMap = { [AppConnection.AWS]: TAwsConnectionOption; @@ -257,6 +262,7 @@ export type TAppConnectionOptionMap = { [AppConnection.Flyio]: TFlyioConnectionOption; [AppConnection.GitLab]: TGitlabConnectionOption; [AppConnection.Cloudflare]: TCloudflareConnectionOption; + [AppConnection.DNSMadeEasy]: TDNSMadeEasyConnectionOption; [AppConnection.Bitbucket]: TBitbucketConnectionOption; [AppConnection.Zabbix]: TZabbixConnectionOption; [AppConnection.Railway]: TRailwayConnectionOption; From 924d0298896086ee2b8a7ed5378502165063d18f Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Fri, 21 Nov 2025 09:56:24 -0800 Subject: [PATCH 44/68] Implement listing zone --- .../dns-made-easy-connection-fns.ts | 40 +++++++++++++++---- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts index d42ee465e..40fda4fb2 100644 --- a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts +++ b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts @@ -60,12 +60,6 @@ export const getDNSMadeEasyConnectionListItem = () => { }; export const listDNSMadeEasyZones = async (appConnection: TDNSMadeEasyConnection): Promise => { - // TODO: Implement DNS Made Easy zones listing - // This should call the DNS Made Easy API to list all zones/domains - // Example API endpoint: GET https://api.dnsmadeeasy.com/V2.0/dns/managed - // Authentication: Use API key and secret from appConnection.credentials - // Return format: Array of { id: string, name: string } - if (appConnection.method !== DNSMadeEasyConnectionMethod.APIKeySecret) { throw new Error("Unsupported DNS Made Easy connection method"); } @@ -75,10 +69,42 @@ export const listDNSMadeEasyZones = async (appConnection: TDNSMadeEasyConnection } = appConnection; try { - // TODO: const allZones: TDNSMadeEasyZone[] = []; + let currentPage = 0; + let totalPages = 1; + + // Fetch all pages of zones + while (currentPage < totalPages) { + // eslint-disable-next-line no-await-in-loop + const resp = await request.get(getDNSMadeEasyUrl("/V2.0/dns/managed/"), { + headers: { + ...makeDNSMadeEasyAuthHeaders(apiKey, secretKey), + Accept: "application/json" + }, + params: { + page: currentPage + } + }); + + if (resp.data?.data) { + // Map the API response to TDNSMadeEasyZone format + const zones = resp.data.data.map((zone) => ({ + id: String(zone.id), + name: zone.name + })); + allZones.push(...zones); + + // Update pagination info + totalPages = resp.data.totalPages || 1; + currentPage += 1; + } else { + break; + } + } + return allZones; } catch (error: unknown) { + logger.error(error, "Error listing DNS Made Easy zones"); if (error instanceof AxiosError) { throw new BadRequestError({ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access From b4e16fa1f4dc5fb449b59d1c8b65a04a3cc67ac9 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Fri, 21 Nov 2025 10:19:26 -0800 Subject: [PATCH 45/68] Fix insert and del --- .../dns-made-easy-connection-router.ts | 1 - .../acme/dns-providers/dns-made-easy.ts | 5 ++++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/backend/src/server/routes/v1/app-connection-routers/dns-made-easy-connection-router.ts b/backend/src/server/routes/v1/app-connection-routers/dns-made-easy-connection-router.ts index 398bd860e..e1e0b2860 100644 --- a/backend/src/server/routes/v1/app-connection-routers/dns-made-easy-connection-router.ts +++ b/backend/src/server/routes/v1/app-connection-routers/dns-made-easy-connection-router.ts @@ -44,7 +44,6 @@ export const registerDNSMadeEasyConnectionRouter = async (server: FastifyZodProv onRequest: verifyAuth([AuthMode.JWT]), handler: async (req) => { const { connectionId } = req.params; - const zones = await server.services.appConnection.dnsMadeEasy.listZones(connectionId, req.permission); return zones; } diff --git a/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts b/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts index 899f4aaf1..b3278e5d3 100644 --- a/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts +++ b/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts @@ -5,6 +5,7 @@ import { request } from "@app/lib/config/request"; import { crypto } from "@app/lib/crypto/cryptography"; import { TDNSMadeEasyConnection } from "@app/services/app-connection/dns-made-easy/dns-made-easy-connection-types"; import { IntegrationUrls } from "@app/services/integration-auth/integration-list"; +import { logger } from "@app/lib/logger"; const getDNSMadeEasyUrl = (path: string) => { const appCfg = getConfig(); @@ -100,7 +101,7 @@ export const dnsMadeEasyDeleteTxtRecord = async ( if (Array.isArray(dnsRecords) && dnsRecords.length > 0) { const recordToDelete = dnsRecords.find( - (record) => record.type === "TXT" && record.name === domain && record.value === value + (record) => record.type === "TXT" && record.name === domain && JSON.parse(record.value) === value ); if (recordToDelete) { @@ -113,6 +114,8 @@ export const dnsMadeEasyDeleteTxtRecord = async ( } } ); + } else { + logger.warn({ domain, value }, `Record to delete not found for domain: ${domain} and value: ${value}`); } } } catch (error) { From 5aa52570736387a23dd7b4b21ae14b1c3ab5a9be Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Fri, 21 Nov 2025 10:29:01 -0800 Subject: [PATCH 46/68] Ignore duplicate error --- .../acme/dns-providers/dns-made-easy.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts b/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts index b3278e5d3..ebd9105ae 100644 --- a/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts +++ b/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts @@ -66,6 +66,12 @@ export const dnsMadeEasyInsertTxtRecord = async ( (error.response?.data as { error?: string[] | string })?.error || error.message || "Unknown error"; + + if (error.status === 400 && error.message.includes("already exists")) { + logger.info({ domain, value }, `Record already exists for domain: ${domain} and value: ${value}`); + return; + } + throw new Error(typeof errorMessage === "string" ? errorMessage : String(errorMessage)); } throw error; From 08d9c4748520ae4732e6d11a6c6b38e8256946b9 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Fri, 21 Nov 2025 10:36:51 -0800 Subject: [PATCH 47/68] Add options --- .../components/ExternalCaModal.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaModal.tsx b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaModal.tsx index e24cc6881..58aa2ba53 100644 --- a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaModal.tsx +++ b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/ExternalCaModal.tsx @@ -229,7 +229,11 @@ export const ExternalCaModal = ({ popUp, handlePopUpToggle }: Props) => { if (caType === CaType.AZURE_AD_CS) { return availableAzureConnections || []; } - return [...(availableRoute53Connections || []), ...(availableCloudflareConnections || [])]; + return [ + ...(availableRoute53Connections || []), + ...(availableCloudflareConnections || []), + ...(availableDNSMadeEasyConnections || []) + ]; }, [ caType, availableRoute53Connections, From acca6f23237ab36ee1ca9c931f47ab2012b4f561 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Fri, 21 Nov 2025 10:49:26 -0800 Subject: [PATCH 48/68] export --- .../dns-made-easy-connection-fns.ts | 2 +- .../acme/dns-providers/dns-made-easy.ts | 34 +++---------------- 2 files changed, 6 insertions(+), 30 deletions(-) diff --git a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts index 40fda4fb2..2707f1637 100644 --- a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts +++ b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts @@ -26,7 +26,7 @@ interface DNSMadeEasyApiResponse { page: number; } -const getDNSMadeEasyUrl = (path: string) => { +export const getDNSMadeEasyUrl = (path: string) => { const appCfg = getConfig(); return `${appCfg.DNS_MADE_EASY_SANDBOX_ENABLED ? IntegrationUrls.DNS_MADE_EASY_SANDBOX_API_URL : IntegrationUrls.DNS_MADE_EASY_API_URL}${path}`; }; diff --git a/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts b/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts index ebd9105ae..2824e0005 100644 --- a/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts +++ b/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts @@ -1,36 +1,12 @@ import axios from "axios"; -import { getConfig } from "@app/lib/config/env"; import { request } from "@app/lib/config/request"; -import { crypto } from "@app/lib/crypto/cryptography"; -import { TDNSMadeEasyConnection } from "@app/services/app-connection/dns-made-easy/dns-made-easy-connection-types"; -import { IntegrationUrls } from "@app/services/integration-auth/integration-list"; import { logger } from "@app/lib/logger"; - -const getDNSMadeEasyUrl = (path: string) => { - const appCfg = getConfig(); - return `${appCfg.DNS_MADE_EASY_SANDBOX_ENABLED ? IntegrationUrls.DNS_MADE_EASY_SANDBOX_API_URL : IntegrationUrls.DNS_MADE_EASY_API_URL}${path}`; -}; - -const makeDNSMadeEasyAuthHeaders = ( - apiKey: string, - secretKey: string, - currentDate: Date = new Date() -): Record => { - // Format date as "Day, DD Mon YYYY HH:MM:SS GMT" (e.g., "Mon, 01 Jan 2024 12:00:00 GMT") - const requestDate = currentDate.toUTCString(); - - // Generate HMAC-SHA1 signature - const hmac = crypto.nativeCrypto.createHmac("sha1", secretKey); - hmac.update(requestDate); - const hmacSignature = hmac.digest("hex"); - - return { - "x-dnsme-apiKey": apiKey, - "x-dnsme-hmac": hmacSignature, - "x-dnsme-requestDate": requestDate - }; -}; +import { + getDNSMadeEasyUrl, + makeDNSMadeEasyAuthHeaders +} from "@app/services/app-connection/dns-made-easy/dns-made-easy-connection-fns"; +import { TDNSMadeEasyConnection } from "@app/services/app-connection/dns-made-easy/dns-made-easy-connection-types"; export const dnsMadeEasyInsertTxtRecord = async ( connection: TDNSMadeEasyConnection, From 8c59579e1e57924be9690e81f41a0c557fef254b Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Fri, 21 Nov 2025 11:40:31 -0800 Subject: [PATCH 49/68] Fix wrong record name for dnsme --- .../acme/acme-certificate-authority-fns.ts | 6 +++++- .../acme/dns-providers/dns-made-easy.ts | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/backend/src/services/certificate-authority/acme/acme-certificate-authority-fns.ts b/backend/src/services/certificate-authority/acme/acme-certificate-authority-fns.ts index 8dbb9512f..445a2f032 100644 --- a/backend/src/services/certificate-authority/acme/acme-certificate-authority-fns.ts +++ b/backend/src/services/certificate-authority/acme/acme-certificate-authority-fns.ts @@ -243,7 +243,11 @@ export const orderCertificate = async ( throw new Error("Unsupported challenge type"); } - const recordName = `_acme-challenge.${authz.identifier.value}`; // e.g., "_acme-challenge.example.com" + let recordName = `_acme-challenge.${authz.identifier.value}`; // e.g., "_acme-challenge.example.com" + if (acmeCa.configuration.dnsProviderConfig.provider === AcmeDnsProvider.DNSMadeEasy) { + // For DNS Made Easy, we don't need to provide the domain name in the record name. + recordName = "_acme-challenge"; + } const recordValue = `"${keyAuthorization}"`; // must be double quoted switch (acmeCa.configuration.dnsProviderConfig.provider) { diff --git a/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts b/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts index 2824e0005..87c21e264 100644 --- a/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts +++ b/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts @@ -18,6 +18,7 @@ export const dnsMadeEasyInsertTxtRecord = async ( credentials: { apiKey, secretKey } } = connection; + logger.info({ hostedZoneId, domain, value }, "Inserting TXT record for DNS Made Easy"); try { await request.post( getDNSMadeEasyUrl(`/V2.0/dns/managed/${encodeURIComponent(hostedZoneId)}/records`), @@ -64,6 +65,7 @@ export const dnsMadeEasyDeleteTxtRecord = async ( credentials: { apiKey, secretKey } } = connection; + logger.info({ hostedZoneId, domain, value }, "Deleting TXT record for DNS Made Easy"); try { // First, list records to find the record ID const listRecordsResponse = await request.get<{ From 6b4d5c95f3bace48dc0ba5ace4df82f1d045a96c Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Fri, 21 Nov 2025 12:10:30 -0800 Subject: [PATCH 50/68] Add DNS made easy for PKI type --- backend/src/services/app-connection/app-connection-fns.ts | 6 +++--- .../acme/dns-providers/dns-made-easy.ts | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/src/services/app-connection/app-connection-fns.ts b/backend/src/services/app-connection/app-connection-fns.ts index a5d9c1ed8..145c6c3ed 100644 --- a/backend/src/services/app-connection/app-connection-fns.ts +++ b/backend/src/services/app-connection/app-connection-fns.ts @@ -176,7 +176,8 @@ const PKI_APP_CONNECTIONS = [ AppConnection.Cloudflare, AppConnection.AzureADCS, AppConnection.AzureKeyVault, - AppConnection.Chef + AppConnection.Chef, + AppConnection.DNSMadeEasy ]; export const listAppConnectionOptions = (projectType?: ProjectType) => { @@ -223,8 +224,7 @@ export const listAppConnectionOptions = (projectType?: ProjectType) => { getNorthflankConnectionListItem(), getOktaConnectionListItem(), getRedisConnectionListItem(), - getChefConnectionListItem(), - getDNSMadeEasyConnectionListItem() + getChefConnectionListItem() ] .filter((option) => { switch (projectType) { diff --git a/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts b/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts index 87c21e264..7dd405a5a 100644 --- a/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts +++ b/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts @@ -18,7 +18,7 @@ export const dnsMadeEasyInsertTxtRecord = async ( credentials: { apiKey, secretKey } } = connection; - logger.info({ hostedZoneId, domain, value }, "Inserting TXT record for DNS Made Easy"); + logger.info({ hostedZoneId, domain }, "Inserting TXT record for DNS Made Easy"); try { await request.post( getDNSMadeEasyUrl(`/V2.0/dns/managed/${encodeURIComponent(hostedZoneId)}/records`), @@ -65,7 +65,7 @@ export const dnsMadeEasyDeleteTxtRecord = async ( credentials: { apiKey, secretKey } } = connection; - logger.info({ hostedZoneId, domain, value }, "Deleting TXT record for DNS Made Easy"); + logger.info({ hostedZoneId, domain }, "Deleting TXT record for DNS Made Easy"); try { // First, list records to find the record ID const listRecordsResponse = await request.get<{ From 4722f1f1f357a51042c80881ab2bd2a83939178e Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Fri, 21 Nov 2025 15:41:54 -0800 Subject: [PATCH 51/68] Import order --- 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 145c6c3ed..d8af3773b 100644 --- a/backend/src/services/app-connection/app-connection-fns.ts +++ b/backend/src/services/app-connection/app-connection-fns.ts @@ -11,8 +11,8 @@ import { validateOCIConnectionCredentials } from "@app/ee/services/app-connections/oci"; import { getOracleDBConnectionListItem, OracleDBConnectionMethod } from "@app/ee/services/app-connections/oracledb"; -import { TGatewayV2ServiceFactory } from "@app/ee/services/gateway-v2/gateway-v2-service"; import { TGatewayServiceFactory } from "@app/ee/services/gateway/gateway-service"; +import { TGatewayV2ServiceFactory } from "@app/ee/services/gateway-v2/gateway-v2-service"; import { TLicenseServiceFactory } from "@app/ee/services/license/license-service"; import { SECRET_ROTATION_CONNECTION_MAP } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-maps"; import { SECRET_SCANNING_DATA_SOURCE_CONNECTION_MAP } from "@app/ee/services/secret-scanning-v2/secret-scanning-v2-maps"; From 9ba677ff2bf6b34438896297638f1712e366223d Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Fri, 21 Nov 2025 15:45:09 -0800 Subject: [PATCH 52/68] Add missing dns made easy stuff --- .../api/appConnections/dns-made-easy/index.ts | 2 + .../appConnections/dns-made-easy/queries.tsx | 37 +++++++++++++++++++ .../api/appConnections/dns-made-easy/types.ts | 4 ++ 3 files changed, 43 insertions(+) create mode 100644 frontend/src/hooks/api/appConnections/dns-made-easy/index.ts create mode 100644 frontend/src/hooks/api/appConnections/dns-made-easy/queries.tsx create mode 100644 frontend/src/hooks/api/appConnections/dns-made-easy/types.ts diff --git a/frontend/src/hooks/api/appConnections/dns-made-easy/index.ts b/frontend/src/hooks/api/appConnections/dns-made-easy/index.ts new file mode 100644 index 000000000..2c1906d36 --- /dev/null +++ b/frontend/src/hooks/api/appConnections/dns-made-easy/index.ts @@ -0,0 +1,2 @@ +export * from "./queries"; +export * from "./types"; diff --git a/frontend/src/hooks/api/appConnections/dns-made-easy/queries.tsx b/frontend/src/hooks/api/appConnections/dns-made-easy/queries.tsx new file mode 100644 index 000000000..6a5df54ac --- /dev/null +++ b/frontend/src/hooks/api/appConnections/dns-made-easy/queries.tsx @@ -0,0 +1,37 @@ +import { useQuery, UseQueryOptions } from "@tanstack/react-query"; + +import { apiRequest } from "@app/config/request"; + +import { appConnectionKeys } from "../queries"; +import { TDNSMadeEasyZone } from "./types"; + +const dnsMadeEasyConnectionKeys = { + all: [...appConnectionKeys.all, "dns-made-easy"] as const, + listZones: (connectionId: string) => + [...dnsMadeEasyConnectionKeys.all, "zones", connectionId] as const +}; + +export const useDNSMadeEasyConnectionListZones = ( + connectionId: string, + options?: Omit< + UseQueryOptions< + TDNSMadeEasyZone[], + unknown, + TDNSMadeEasyZone[], + ReturnType + >, + "queryKey" | "queryFn" + > +) => { + return useQuery({ + queryKey: dnsMadeEasyConnectionKeys.listZones(connectionId), + queryFn: async () => { + const { data } = await apiRequest.get( + `/api/v1/app-connections/dns-made-easy/${connectionId}/dns-made-easy-zones` + ); + + return data; + }, + ...options + }); +}; diff --git a/frontend/src/hooks/api/appConnections/dns-made-easy/types.ts b/frontend/src/hooks/api/appConnections/dns-made-easy/types.ts new file mode 100644 index 000000000..dcf66c1dd --- /dev/null +++ b/frontend/src/hooks/api/appConnections/dns-made-easy/types.ts @@ -0,0 +1,4 @@ +export type TDNSMadeEasyZone = { + id: string; + name: string; +}; From a5554c02d579a861fb17449704b06034d3915995 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Fri, 21 Nov 2025 16:48:57 -0800 Subject: [PATCH 53/68] Add dns made easy test --- .../bdd/features/pki/acme/external-ca.feature | 183 +++++++++++++++++- backend/bdd/features/steps/pki_acme.py | 34 ++++ 2 files changed, 216 insertions(+), 1 deletion(-) diff --git a/backend/bdd/features/pki/acme/external-ca.feature b/backend/bdd/features/pki/acme/external-ca.feature index 26bfd84ad..8007e8d4f 100644 --- a/backend/bdd/features/pki/acme/external-ca.feature +++ b/backend/bdd/features/pki/acme/external-ca.feature @@ -1,6 +1,7 @@ Feature: External CA - Scenario: Issue a certificate from an external CA + @cloudflare + Scenario: Issue a certificate from an external CA with Cloudflare Given I create a Cloudflare connection as cloudflare Then I memorize cloudflare with jq ".appConnection.id" as app_conn_id Given I create a external ACME CA with the following config as ext_ca @@ -172,6 +173,186 @@ Feature: External CA And the value finalized_order.body with jq ".status" should be equal to "valid" And I parse the full-chain certificate from order finalized_order as cert # Note: somehow Pebble is issuing a cert without common name but just SANs + And the value cert with jq "[.extensions.subjectAltName.general_names.[].value] | sort" should be equal to json + """ + [ + "localhost" + ] + """ + + @dnsme + Scenario: Issue a certificate from an external CA with DNS Made Easy + Given I create a DNS Made Easy connection as dnsme + Then I memorize dnsme with jq ".appConnection.id" as app_conn_id + Given I create a external ACME CA with the following config as ext_ca + """ + { + "dnsProviderConfig": { + "provider": "dns-made-easy", + "hostedZoneId": "MOCK_ZONE_ID" + }, + "directoryUrl": "{PEBBLE_URL}", + "accountEmail": "fangpen@infisical.com", + "dnsAppConnectionId": "{app_conn_id}", + "eabKid": "", + "eabHmacKey": "" + } + """ + Then I memorize ext_ca with jq ".id" as ext_ca_id + Given I create a certificate template with the following config as cert_template + """ + { + "subject": [ + { + "type": "common_name", + "allowed": [ + "*" + ] + } + ], + "sans": [ + { + "type": "dns_name", + "allowed": [ + "*" + ] + } + ], + "keyUsages": { + "required": [], + "allowed": [ + "digital_signature", + "key_encipherment", + "non_repudiation", + "data_encipherment", + "key_agreement", + "key_cert_sign", + "crl_sign", + "encipher_only", + "decipher_only" + ] + }, + "extendedKeyUsages": { + "required": [], + "allowed": [ + "client_auth", + "server_auth", + "code_signing", + "email_protection", + "ocsp_signing", + "time_stamping" + ] + }, + "algorithms": { + "signature": [ + "SHA256-RSA", + "SHA512-RSA", + "SHA384-ECDSA", + "SHA384-RSA", + "SHA256-ECDSA", + "SHA512-ECDSA" + ], + "keyAlgorithm": [ + "RSA-2048", + "RSA-4096", + "ECDSA-P384", + "RSA-3072", + "ECDSA-P256", + "ECDSA-P521" + ] + }, + "validity": { + "max": "365d" + } + } + """ + Then I memorize cert_template with jq ".certificateTemplate.id" as cert_template_id + Given I create an ACME profile with ca {ext_ca_id} and template {cert_template_id} as "acme_profile" + When I have an ACME client connecting to "{BASE_URL}/api/v1/pki/acme/profiles/{acme_profile.id}/directory" + Then I register a new ACME account with email fangpen@infisical.com and EAB key id "{acme_profile.eab_kid}" with secret "{acme_profile.eab_secret}" as acme_account + When I create certificate signing request as csr + Then I add names to certificate signing request csr + """ + { + "COMMON_NAME": "localhost" + } + """ + # Pebble has a strict rule to only takes SANs + Then I add subject alternative name to certificate signing request csr + """ + [ + "localhost" + ] + """ + And I create a RSA private key pair as cert_key + And I sign the certificate signing request csr with private key cert_key and output it as csr_pem in PEM format + And I submit the certificate signing request PEM csr_pem certificate order to the ACME server as order + And I select challenge with type http-01 for domain localhost from order in order as challenge + And I serve challenge response for challenge at localhost + And I tell ACME server that challenge is ready to be verified + Given I intercept outgoing requests + """ + [ + { + "scope": "https://api.dnsmadeeasy.com:443", + "method": "POST", + "path": "/V2.0/dns/managed/MOCK_ZONE_ID/records", + "status": 201, + "response": { + "gtdLocation": "DEFAULT", + "failed": false, + "monitor": false, + "failover": false, + "sourceId": 895364, + "dynamicDns": false, + "hardLink": false, + "ttl": 60, + "source": 1, + "name": "_acme-challenge", + "value": "\"MOCK_HTTP_01_VALUE\"", + "id": 12345678, + "type": "TXT" + }, + "responseIsBinary": false + }, + { + "scope": "https://api.dnsmadeeasy.com:443", + "method": "GET", + "path": "/V2.0/dns/managed/MOCK_ZONE_ID/records", + "status": 200, + "response": { + "totalRecords": 1, + "totalPages": 1, + "data": [ + { + "processMulti": false, + "activeThirdParties": [], + "folderId": 2702, + "pendingActionId": 0, + "gtdEnabled": false, + "updated": 1763767936141, + "created": 1763596800000, + "name": "localhost", + "id": 1111111 + } + ], + "page": 0 + }, + "responseIsBinary": false + }, + { + "scope": "https://api.dnsmadeeasy.com:443", + "method": "DELETE", + "path": "/V2.0/dns/managed/MOCK_ZONE_ID/records/1111111", + "status": 200, + "response": "", + "responseIsBinary": false + } + ] + """ + Then I poll and finalize the ACME order order as finalized_order + And the value finalized_order.body with jq ".status" should be equal to "valid" + And I parse the full-chain certificate from order finalized_order as cert And the value cert with jq "[.extensions.subjectAltName.general_names.[].value] | sort" should be equal to json """ [ diff --git a/backend/bdd/features/steps/pki_acme.py b/backend/bdd/features/steps/pki_acme.py index 353ec942d..8a2f433f9 100644 --- a/backend/bdd/features/steps/pki_acme.py +++ b/backend/bdd/features/steps/pki_acme.py @@ -147,6 +147,40 @@ def step_impl(context: Context, var_name: str): context.vars[var_name] = response +@given("I create a DNS Made Easy connection as {var_name}") +def step_impl(context: Context, var_name: str): + jwt_token = context.vars["AUTH_TOKEN"] + conn_slug = faker.slug() + with with_nocks( + context, + definitions=[ + { + "scope": "https://api.dnsmadeeasy.com:443", + "method": "GET", + "path": "/V2.0/dns/managed/", + "status": 200, + "response": {"totalRecords": 0, "totalPages": 1, "data": [], "page": 0}, + "responseIsBinary": False, + } + ], + ): + response = context.http_client.post( + "/api/v1/app-connections/dns-made-easy", + headers=dict(authorization="Bearer {}".format(jwt_token)), + json={ + "name": conn_slug, + "description": "", + "method": "api-token", + "credentials": { + "apiKey": "MOCK_API_KEY", + "secretKey": "MOCK_SECRET_KEY", + }, + }, + ) + response.raise_for_status() + context.vars[var_name] = response + + @given("I create a external ACME CA with the following config as {var_name}") def step_impl(context: Context, var_name: str): jwt_token = context.vars["AUTH_TOKEN"] From 5badff83500e99dfd1e1699e44b0af698ed2946b Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Fri, 21 Nov 2025 17:11:49 -0800 Subject: [PATCH 54/68] Create with api-key-secret instead --- backend/bdd/features/steps/pki_acme.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/bdd/features/steps/pki_acme.py b/backend/bdd/features/steps/pki_acme.py index 8a2f433f9..7e2d07476 100644 --- a/backend/bdd/features/steps/pki_acme.py +++ b/backend/bdd/features/steps/pki_acme.py @@ -170,7 +170,7 @@ def step_impl(context: Context, var_name: str): json={ "name": conn_slug, "description": "", - "method": "api-token", + "method": "api-key-secret", "credentials": { "apiKey": "MOCK_API_KEY", "secretKey": "MOCK_SECRET_KEY", From 81aa1b1a3870340ec43db60c5411b313a616c12d Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Fri, 21 Nov 2025 18:04:49 -0800 Subject: [PATCH 55/68] Add listDNSMadeEasyRecords --- .../dns-made-easy-connection-fns.ts | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts index 2707f1637..fb2be9a8a 100644 --- a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts +++ b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts @@ -117,6 +117,74 @@ export const listDNSMadeEasyZones = async (appConnection: TDNSMadeEasyConnection } }; +export const listDNSMadeEasyRecords = async ( + appConnection: TDNSMadeEasyConnection, + options: { zoneId: string; type?: string; name?: string } +): Promise => { + if (appConnection.method !== DNSMadeEasyConnectionMethod.APIKeySecret) { + throw new Error("Unsupported DNS Made Easy connection method"); + } + + const { + credentials: { apiKey, secretKey } + } = appConnection; + const { zoneId, type, name } = options; + + try { + const allRecords: DNSMadeEasyApiResponse["data"] = []; + let currentPage = 0; + let totalPages = 1; + + // Fetch all pages of records + while (currentPage < totalPages) { + // Build query parameters + const queryParams: Array<[string, string | number]> = []; + if (type) { + queryParams.push(["type", type]); + } + if (name) { + queryParams.push(["recordName", name]); + } + queryParams.push(["page", currentPage]); + + // eslint-disable-next-line no-await-in-loop + const resp = await request.get( + getDNSMadeEasyUrl(`/V2.0/dns/managed/${encodeURIComponent(zoneId)}/records`), + { + headers: { + ...makeDNSMadeEasyAuthHeaders(apiKey, secretKey), + Accept: "application/json" + }, + params: queryParams + } + ); + + if (resp.data?.data) { + allRecords.push(...resp.data.data); + + // Update pagination info + totalPages = resp.data.totalPages || 1; + currentPage += 1; + } else { + break; + } + } + + return allRecords; + } catch (error: unknown) { + logger.error(error, "Error listing DNS Made Easy records"); + if (error instanceof AxiosError) { + throw new BadRequestError({ + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + message: `Failed to list DNS Made Easy records: ${error.response?.data?.error?.[0] || error.message || "Unknown error"}` + }); + } + throw new BadRequestError({ + message: "Unable to list DNS Made Easy records" + }); + } +}; + export const validateDNSMadeEasyConnectionCredentials = async (config: TDNSMadeEasyConnectionConfig) => { if (config.method !== DNSMadeEasyConnectionMethod.APIKeySecret) { throw new Error("Unsupported DNS Made Easy connection method"); From b553edc80012925dcfcc6ffc19013b3f368ba9e9 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Fri, 21 Nov 2025 18:36:02 -0800 Subject: [PATCH 56/68] Fix records query --- .../dns-made-easy-connection-fns.ts | 12 ++++++------ .../acme/dns-providers/dns-made-easy.ts | 17 ++--------------- 2 files changed, 8 insertions(+), 21 deletions(-) diff --git a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts index fb2be9a8a..850d5ac36 100644 --- a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts +++ b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts @@ -21,7 +21,8 @@ interface DNSMadeEasyApiResponse { data: Array<{ id: number; name: string; - [key: string]: unknown; + type: string; + value: string; }>; page: number; } @@ -124,7 +125,6 @@ export const listDNSMadeEasyRecords = async ( if (appConnection.method !== DNSMadeEasyConnectionMethod.APIKeySecret) { throw new Error("Unsupported DNS Made Easy connection method"); } - const { credentials: { apiKey, secretKey } } = appConnection; @@ -138,14 +138,14 @@ export const listDNSMadeEasyRecords = async ( // Fetch all pages of records while (currentPage < totalPages) { // Build query parameters - const queryParams: Array<[string, string | number]> = []; + const queryParams: Record = {}; if (type) { - queryParams.push(["type", type]); + queryParams.type = type; } if (name) { - queryParams.push(["recordName", name]); + queryParams.recordName = name; } - queryParams.push(["page", currentPage]); + queryParams.page = currentPage; // eslint-disable-next-line no-await-in-loop const resp = await request.get( diff --git a/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts b/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts index 7dd405a5a..9356f8c42 100644 --- a/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts +++ b/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts @@ -4,6 +4,7 @@ import { request } from "@app/lib/config/request"; import { logger } from "@app/lib/logger"; import { getDNSMadeEasyUrl, + listDNSMadeEasyRecords, makeDNSMadeEasyAuthHeaders } from "@app/services/app-connection/dns-made-easy/dns-made-easy-connection-fns"; import { TDNSMadeEasyConnection } from "@app/services/app-connection/dns-made-easy/dns-made-easy-connection-types"; @@ -67,21 +68,7 @@ export const dnsMadeEasyDeleteTxtRecord = async ( logger.info({ hostedZoneId, domain }, "Deleting TXT record for DNS Made Easy"); try { - // First, list records to find the record ID - const listRecordsResponse = await request.get<{ - data: Array<{ id: number; type: string; name: string; value: string }>; - }>(getDNSMadeEasyUrl(`/V2.0/dns/managed/${encodeURIComponent(hostedZoneId)}/records`), { - headers: { - ...makeDNSMadeEasyAuthHeaders(apiKey, secretKey), - Accept: "application/json" - }, - params: { - type: "TXT", - recordName: domain - } - }); - - const dnsRecords = listRecordsResponse.data?.data; + const dnsRecords = await listDNSMadeEasyRecords(connection, { zoneId: hostedZoneId, type: "TXT", name: domain }); if (Array.isArray(dnsRecords) && dnsRecords.length > 0) { const recordToDelete = dnsRecords.find( From 435ef4c5dc4fcacfcfa89eee9b750836fc20034a Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Fri, 21 Nov 2025 18:55:57 -0800 Subject: [PATCH 57/68] Better logs --- .../acme/dns-providers/dns-made-easy.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts b/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts index 9356f8c42..6744662f1 100644 --- a/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts +++ b/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts @@ -66,11 +66,12 @@ export const dnsMadeEasyDeleteTxtRecord = async ( credentials: { apiKey, secretKey } } = connection; - logger.info({ hostedZoneId, domain }, "Deleting TXT record for DNS Made Easy"); + logger.info({ zoneId: hostedZoneId, domain }, "Deleting TXT record for DNS Made Easy"); try { const dnsRecords = await listDNSMadeEasyRecords(connection, { zoneId: hostedZoneId, type: "TXT", name: domain }); - if (Array.isArray(dnsRecords) && dnsRecords.length > 0) { + let foundRecord = false; + if (dnsRecords.length > 0) { const recordToDelete = dnsRecords.find( (record) => record.type === "TXT" && record.name === domain && JSON.parse(record.value) === value ); @@ -85,10 +86,12 @@ export const dnsMadeEasyDeleteTxtRecord = async ( } } ); - } else { - logger.warn({ domain, value }, `Record to delete not found for domain: ${domain} and value: ${value}`); + foundRecord = true; } } + if (!foundRecord) { + logger.warn({ zoneId: hostedZoneId, domain, value }, "Record to delete not found"); + } } catch (error) { if (axios.isAxiosError(error)) { const errorMessage = From f2cc6588c371b2b5485c95789ddbf78113c29650 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Fri, 21 Nov 2025 19:05:39 -0800 Subject: [PATCH 58/68] Log, add query for nock --- backend/bdd/features/pki/acme/external-ca.feature | 1 + .../acme/dns-providers/dns-made-easy.ts | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/backend/bdd/features/pki/acme/external-ca.feature b/backend/bdd/features/pki/acme/external-ca.feature index 8007e8d4f..8fcdb9a72 100644 --- a/backend/bdd/features/pki/acme/external-ca.feature +++ b/backend/bdd/features/pki/acme/external-ca.feature @@ -319,6 +319,7 @@ Feature: External CA "scope": "https://api.dnsmadeeasy.com:443", "method": "GET", "path": "/V2.0/dns/managed/MOCK_ZONE_ID/records", + "query": {"type": "TXT", "recordName": "_acme-challenge"}, "status": 200, "response": { "totalRecords": 1, diff --git a/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts b/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts index 6744662f1..7fda6561d 100644 --- a/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts +++ b/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts @@ -19,7 +19,7 @@ export const dnsMadeEasyInsertTxtRecord = async ( credentials: { apiKey, secretKey } } = connection; - logger.info({ hostedZoneId, domain }, "Inserting TXT record for DNS Made Easy"); + logger.info({ hostedZoneId, domain, value }, "Inserting TXT record for DNS Made Easy"); try { await request.post( getDNSMadeEasyUrl(`/V2.0/dns/managed/${encodeURIComponent(hostedZoneId)}/records`), @@ -66,7 +66,7 @@ export const dnsMadeEasyDeleteTxtRecord = async ( credentials: { apiKey, secretKey } } = connection; - logger.info({ zoneId: hostedZoneId, domain }, "Deleting TXT record for DNS Made Easy"); + logger.info({ hostedZoneId, domain, value }, "Deleting TXT record for DNS Made Easy"); try { const dnsRecords = await listDNSMadeEasyRecords(connection, { zoneId: hostedZoneId, type: "TXT", name: domain }); @@ -90,7 +90,7 @@ export const dnsMadeEasyDeleteTxtRecord = async ( } } if (!foundRecord) { - logger.warn({ zoneId: hostedZoneId, domain, value }, "Record to delete not found"); + logger.warn({ hostedZoneId, domain, value }, "Record to delete not found"); } } catch (error) { if (axios.isAxiosError(error)) { From 46ca9f0ff46f886d352aeed40c4b08cd39c4ed76 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Fri, 21 Nov 2025 19:22:57 -0800 Subject: [PATCH 59/68] Try to fix query --- backend/bdd/features/pki/acme/external-ca.feature | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/bdd/features/pki/acme/external-ca.feature b/backend/bdd/features/pki/acme/external-ca.feature index 8fcdb9a72..db68c6134 100644 --- a/backend/bdd/features/pki/acme/external-ca.feature +++ b/backend/bdd/features/pki/acme/external-ca.feature @@ -319,7 +319,7 @@ Feature: External CA "scope": "https://api.dnsmadeeasy.com:443", "method": "GET", "path": "/V2.0/dns/managed/MOCK_ZONE_ID/records", - "query": {"type": "TXT", "recordName": "_acme-challenge"}, + "query": {"type": "TXT", "recordName": "_acme-challenge", "page": "0"}, "status": 200, "response": { "totalRecords": 1, From f7f8fd2595af81e2a8d78342a1017bdce7472adc Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Fri, 21 Nov 2025 19:31:24 -0800 Subject: [PATCH 60/68] Fix path mock --- .../bdd/features/pki/acme/external-ca.feature | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/backend/bdd/features/pki/acme/external-ca.feature b/backend/bdd/features/pki/acme/external-ca.feature index db68c6134..e46acca3a 100644 --- a/backend/bdd/features/pki/acme/external-ca.feature +++ b/backend/bdd/features/pki/acme/external-ca.feature @@ -318,23 +318,26 @@ Feature: External CA { "scope": "https://api.dnsmadeeasy.com:443", "method": "GET", - "path": "/V2.0/dns/managed/MOCK_ZONE_ID/records", - "query": {"type": "TXT", "recordName": "_acme-challenge", "page": "0"}, + "path": "/V2.0/dns/managed/MOCK_ZONE_ID/records?type=TXT&recordName=_acme-challenge&page=0", "status": 200, "response": { "totalRecords": 1, "totalPages": 1, "data": [ { - "processMulti": false, - "activeThirdParties": [], - "folderId": 2702, - "pendingActionId": 0, - "gtdEnabled": false, - "updated": 1763767936141, - "created": 1763596800000, - "name": "localhost", - "id": 1111111 + "gtdLocation": "DEFAULT", + "failed": false, + "monitor": false, + "failover": false, + "sourceId": 895364, + "dynamicDns": false, + "hardLink": false, + "ttl": 60, + "source": 1, + "name": "_acme-challenge", + "value": "\"MOCK_CHALLENGE_VALUE\"", + "id": 1111111, + "type": "TXT" } ], "page": 0 From 13022adc5ec07f1974e336d50201d3ae3cd60660 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Fri, 21 Nov 2025 21:18:35 -0800 Subject: [PATCH 61/68] Try to see if we can avoid timestamp issue --- .../dns-made-easy/dns-made-easy-connection-fns.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts index 850d5ac36..b66d6eb9c 100644 --- a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts +++ b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts @@ -35,10 +35,10 @@ export const getDNSMadeEasyUrl = (path: string) => { export const makeDNSMadeEasyAuthHeaders = ( apiKey: string, secretKey: string, - currentDate: Date = new Date() + currentDate?: Date ): Record => { // Format date as "Day, DD Mon YYYY HH:MM:SS GMT" (e.g., "Mon, 01 Jan 2024 12:00:00 GMT") - const requestDate = currentDate.toUTCString(); + const requestDate = (currentDate ?? new Date()).toUTCString(); // Generate HMAC-SHA1 signature const hmac = crypto.nativeCrypto.createHmac("sha1", secretKey); From 606a5848f26eca17839755f4eb8ab1b94dd212ec Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Fri, 21 Nov 2025 21:42:01 -0800 Subject: [PATCH 62/68] Add external ca cases for absent CN --- .../bdd/features/pki/acme/external-ca.feature | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/backend/bdd/features/pki/acme/external-ca.feature b/backend/bdd/features/pki/acme/external-ca.feature index e46acca3a..f809b3686 100644 --- a/backend/bdd/features/pki/acme/external-ca.feature +++ b/backend/bdd/features/pki/acme/external-ca.feature @@ -1,7 +1,7 @@ Feature: External CA @cloudflare - Scenario: Issue a certificate from an external CA with Cloudflare + Scenario Outline: Issue a certificate from an external CA with Cloudflare Given I create a Cloudflare connection as cloudflare Then I memorize cloudflare with jq ".appConnection.id" as app_conn_id Given I create a external ACME CA with the following config as ext_ca @@ -93,9 +93,7 @@ Feature: External CA When I create certificate signing request as csr Then I add names to certificate signing request csr """ - { - "COMMON_NAME": "localhost" - } + """ # Pebble has a strict rule to only takes SANs Then I add subject alternative name to certificate signing request csr @@ -180,8 +178,13 @@ Feature: External CA ] """ + Examples: + | subject | + | {"COMMON_NAME": "localhost"} | + | {} | + @dnsme - Scenario: Issue a certificate from an external CA with DNS Made Easy + Scenario Outline: Issue a certificate from an external CA with DNS Made Easy Given I create a DNS Made Easy connection as dnsme Then I memorize dnsme with jq ".appConnection.id" as app_conn_id Given I create a external ACME CA with the following config as ext_ca @@ -273,9 +276,7 @@ Feature: External CA When I create certificate signing request as csr Then I add names to certificate signing request csr """ - { - "COMMON_NAME": "localhost" - } + """ # Pebble has a strict rule to only takes SANs Then I add subject alternative name to certificate signing request csr @@ -362,4 +363,9 @@ Feature: External CA [ "localhost" ] - """ \ No newline at end of file + """ + + Examples: + | subject | + | {"COMMON_NAME": "localhost"} | + | {} | From 4776de1ba7916cd448cfd6aa45e4674fe3ef37b9 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Fri, 21 Nov 2025 21:42:24 -0800 Subject: [PATCH 63/68] Fix CN missing issue for external CA --- backend/src/ee/services/pki-acme/pki-acme-service.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/src/ee/services/pki-acme/pki-acme-service.ts b/backend/src/ee/services/pki-acme/pki-acme-service.ts index 591cac688..89ba17dd5 100644 --- a/backend/src/ee/services/pki-acme/pki-acme-service.ts +++ b/backend/src/ee/services/pki-acme/pki-acme-service.ts @@ -776,7 +776,9 @@ export const pkiAcmeServiceFactory = ({ const cert = await orderCertificate( { caId: certificateAuthority!.id, - commonName: certificateRequest.commonName!, + // It is possible that the CSR does not have a common name, in which case we use an empty string + // (more likely than not for a CSR from a modern ACME client like certbot, cert-manager, etc.) + commonName: certificateRequest.commonName ?? "", altNames: certificateRequest.subjectAlternativeNames?.map((san) => san.value), csr: Buffer.from(csrPem), // TODO: not 100% sure what are these columns for, but let's put the values for common website SSL certs for now From 9266dd10606e10f34e3555e5e2dab304fc2aea2e Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Mon, 24 Nov 2025 10:14:26 -0800 Subject: [PATCH 64/68] Extract getAcmeChallengeRecord --- .../acme/acme-certificate-authority-fns.ts | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/backend/src/services/certificate-authority/acme/acme-certificate-authority-fns.ts b/backend/src/services/certificate-authority/acme/acme-certificate-authority-fns.ts index 445a2f032..db4340f4e 100644 --- a/backend/src/services/certificate-authority/acme/acme-certificate-authority-fns.ts +++ b/backend/src/services/certificate-authority/acme/acme-certificate-authority-fns.ts @@ -122,6 +122,22 @@ export const castDbEntryToAcmeCertificateAuthority = ( }; }; +const getAcmeChallengeRecord = ( + provider: AcmeDnsProvider, + identifierValue: string, + keyAuthorization: string +): { recordName: string; recordValue: string } => { + let recordName: string; + if (provider === AcmeDnsProvider.DNSMadeEasy) { + // For DNS Made Easy, we don't need to provide the domain name in the record name. + recordName = "_acme-challenge"; + } else { + recordName = `_acme-challenge.${identifierValue}`; // e.g., "_acme-challenge.example.com" + } + const recordValue = `"${keyAuthorization}"`; // must be double quoted + return { recordName, recordValue }; +}; + export const orderCertificate = async ( { caId, @@ -243,12 +259,11 @@ export const orderCertificate = async ( throw new Error("Unsupported challenge type"); } - let recordName = `_acme-challenge.${authz.identifier.value}`; // e.g., "_acme-challenge.example.com" - if (acmeCa.configuration.dnsProviderConfig.provider === AcmeDnsProvider.DNSMadeEasy) { - // For DNS Made Easy, we don't need to provide the domain name in the record name. - recordName = "_acme-challenge"; - } - const recordValue = `"${keyAuthorization}"`; // must be double quoted + const { recordName, recordValue } = getAcmeChallengeRecord( + acmeCa.configuration.dnsProviderConfig.provider, + authz.identifier.value, + keyAuthorization + ); switch (acmeCa.configuration.dnsProviderConfig.provider) { case AcmeDnsProvider.Route53: { @@ -284,8 +299,11 @@ export const orderCertificate = async ( } }, challengeRemoveFn: async (authz, challenge, keyAuthorization) => { - const recordName = `_acme-challenge.${authz.identifier.value}`; // e.g., "_acme-challenge.example.com" - const recordValue = `"${keyAuthorization}"`; // must be double quoted + const { recordName, recordValue } = getAcmeChallengeRecord( + acmeCa.configuration.dnsProviderConfig.provider, + authz.identifier.value, + keyAuthorization + ); switch (acmeCa.configuration.dnsProviderConfig.provider) { case AcmeDnsProvider.Route53: { From 928aa07efa16c79a89d0452cb35070b893c7f0e2 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Tue, 25 Nov 2025 08:57:29 -0800 Subject: [PATCH 65/68] Throw bad req error instead --- .../dns-made-easy/dns-made-easy-connection-fns.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts index b66d6eb9c..9d1941ff3 100644 --- a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts +++ b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-fns.ts @@ -62,7 +62,7 @@ export const getDNSMadeEasyConnectionListItem = () => { export const listDNSMadeEasyZones = async (appConnection: TDNSMadeEasyConnection): Promise => { if (appConnection.method !== DNSMadeEasyConnectionMethod.APIKeySecret) { - throw new Error("Unsupported DNS Made Easy connection method"); + throw new BadRequestError({ message: "Unsupported DNS Made Easy connection method" }); } const { @@ -123,7 +123,7 @@ export const listDNSMadeEasyRecords = async ( options: { zoneId: string; type?: string; name?: string } ): Promise => { if (appConnection.method !== DNSMadeEasyConnectionMethod.APIKeySecret) { - throw new Error("Unsupported DNS Made Easy connection method"); + throw new BadRequestError({ message: "Unsupported DNS Made Easy connection method" }); } const { credentials: { apiKey, secretKey } @@ -187,7 +187,7 @@ export const listDNSMadeEasyRecords = async ( export const validateDNSMadeEasyConnectionCredentials = async (config: TDNSMadeEasyConnectionConfig) => { if (config.method !== DNSMadeEasyConnectionMethod.APIKeySecret) { - throw new Error("Unsupported DNS Made Easy connection method"); + throw new BadRequestError({ message: "Unsupported DNS Made Easy connection method" }); } const { apiKey, secretKey } = config.credentials; From c25573d364d2d5d0c15de577c4fe3ccf459b0d72 Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Tue, 25 Nov 2025 09:06:59 -0800 Subject: [PATCH 66/68] Throw error for listing --- .../dns-made-easy/dns-made-easy-connection-service.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-service.ts b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-service.ts index d5da33c93..b50c9b73c 100644 --- a/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-service.ts +++ b/backend/src/services/app-connection/dns-made-easy/dns-made-easy-connection-service.ts @@ -1,3 +1,4 @@ +import { BadRequestError } from "@app/lib/errors"; import { logger } from "@app/lib/logger"; import { OrgServiceActor } from "@app/lib/types"; @@ -22,7 +23,9 @@ export const dnsMadeEasyConnectionService = (getAppConnection: TGetAppConnection error, `Failed to list DNS Made Easy zones for DNS Made Easy connection [connectionId=${connectionId}]` ); - return []; + throw new BadRequestError({ + message: `Failed to list DNS Made Easy zones: ${error instanceof Error ? error.message : "Unknown error"}` + }); } }; From e0f5900c0a9aaaf28ca50f27ceeb123344e60c66 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Tue, 25 Nov 2025 22:40:26 +0530 Subject: [PATCH 67/68] fix: populate slug conditionally --- .../AddEnvironmentModal.tsx | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) 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 95f1ebd47..5ff1a1535 100644 --- a/frontend/src/pages/secret-manager/SettingsPage/components/EnvironmentSection/AddEnvironmentModal.tsx +++ b/frontend/src/pages/secret-manager/SettingsPage/components/EnvironmentSection/AddEnvironmentModal.tsx @@ -32,7 +32,13 @@ type ContentProps = { const Content = ({ onComplete }: ContentProps) => { const { currentProject } = useProject(); const { mutateAsync, isPending } = useCreateWsEnvironment(); - const { control, handleSubmit, setValue } = useForm({ + const { + control, + handleSubmit, + setValue, + getValues, + formState: { dirtyFields } + } = useForm({ resolver: zodResolver(schema) }); @@ -53,9 +59,10 @@ const Content = ({ onComplete }: ContentProps) => { onComplete(env); }; - const handleEnvironmentNameChange = (e: React.ChangeEvent) => { - const { value } = e.target; - setValue("environmentName", value); + const handleEnvironmentNameChange = () => { + if (dirtyFields.environmentSlug) return; + + const value = getValues("environmentName"); setValue("environmentSlug", slugify(value, { lowercase: true })); }; @@ -67,7 +74,13 @@ const Content = ({ onComplete }: ContentProps) => { name="environmentName" render={({ field: { onChange, ...field }, fieldState: { error } }) => ( - + { + onChange(e); + handleEnvironmentNameChange(); + }} + /> )} /> From aca7facaebd7de84205ff31daf7cc4a1dba86a2b Mon Sep 17 00:00:00 2001 From: Fang-Pen Lin Date: Tue, 25 Nov 2025 09:37:26 -0800 Subject: [PATCH 68/68] Fix DNS record not deleted bug --- .../certificate-authority/acme/dns-providers/dns-made-easy.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts b/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts index 7fda6561d..cbfb26a2e 100644 --- a/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts +++ b/backend/src/services/certificate-authority/acme/dns-providers/dns-made-easy.ts @@ -73,7 +73,7 @@ export const dnsMadeEasyDeleteTxtRecord = async ( let foundRecord = false; if (dnsRecords.length > 0) { const recordToDelete = dnsRecords.find( - (record) => record.type === "TXT" && record.name === domain && JSON.parse(record.value) === value + (record) => record.type === "TXT" && record.name === domain && record.value === value ); if (recordToDelete) {