mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-07 15:27:46 +00:00
Revise PR based on review
This commit is contained in:
@@ -10,8 +10,8 @@ export async function up(knex: Knex): Promise<void> {
|
|||||||
t.timestamps(true, true, true);
|
t.timestamps(true, true, true);
|
||||||
t.string("projectId").notNullable();
|
t.string("projectId").notNullable();
|
||||||
t.foreign("projectId").references("id").inTable(TableName.Project).onDelete("CASCADE");
|
t.foreign("projectId").references("id").inTable(TableName.Project).onDelete("CASCADE");
|
||||||
t.uuid("caId").notNullable();
|
t.uuid("caId").nullable();
|
||||||
t.foreign("caId").references("id").inTable(TableName.CertificateAuthority).onDelete("CASCADE");
|
t.foreign("caId").references("id").inTable(TableName.CertificateAuthority).onDelete("SET NULL");
|
||||||
t.string("name").notNullable();
|
t.string("name").notNullable();
|
||||||
t.string("commonName").notNullable();
|
t.string("commonName").notNullable();
|
||||||
t.specificType("subjectAlternativeNames", "text[]").notNullable();
|
t.specificType("subjectAlternativeNames", "text[]").notNullable();
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ export const PkiSubscribersSchema = z.object({
|
|||||||
createdAt: z.date(),
|
createdAt: z.date(),
|
||||||
updatedAt: z.date(),
|
updatedAt: z.date(),
|
||||||
projectId: z.string(),
|
projectId: z.string(),
|
||||||
caId: z.string().uuid(),
|
caId: z.string().uuid().nullable().optional(),
|
||||||
name: z.string(),
|
name: z.string(),
|
||||||
commonName: z.string(),
|
commonName: z.string(),
|
||||||
subjectAlternativeNames: z.string().array(),
|
subjectAlternativeNames: z.string().array(),
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
import { ForbiddenError, subject } from "@casl/ability";
|
import { ForbiddenError, subject } from "@casl/ability";
|
||||||
import * as x509 from "@peculiar/x509";
|
import * as x509 from "@peculiar/x509";
|
||||||
import crypto, { KeyObject } from "crypto";
|
import crypto, { KeyObject } from "crypto";
|
||||||
|
import { z } from "zod";
|
||||||
|
|
||||||
import { ActionProjectType } from "@app/db/schemas";
|
import { ActionProjectType } from "@app/db/schemas";
|
||||||
import { TCertificateAuthorityCrlDALFactory } from "@app/ee/services/certificate-authority-crl/certificate-authority-crl-dal";
|
import { TCertificateAuthorityCrlDALFactory } from "@app/ee/services/certificate-authority-crl/certificate-authority-crl-dal";
|
||||||
@@ -13,6 +14,7 @@ import {
|
|||||||
import { getConfig } from "@app/lib/config/env";
|
import { getConfig } from "@app/lib/config/env";
|
||||||
import { BadRequestError, NotFoundError } from "@app/lib/errors";
|
import { BadRequestError, NotFoundError } from "@app/lib/errors";
|
||||||
import { ms } from "@app/lib/ms";
|
import { ms } from "@app/lib/ms";
|
||||||
|
import { isFQDN } from "@app/lib/validator/validate-url";
|
||||||
import { TCertificateBodyDALFactory } from "@app/services/certificate/certificate-body-dal";
|
import { TCertificateBodyDALFactory } from "@app/services/certificate/certificate-body-dal";
|
||||||
import { TCertificateDALFactory } from "@app/services/certificate/certificate-dal";
|
import { TCertificateDALFactory } from "@app/services/certificate/certificate-dal";
|
||||||
import { TCertificateSecretDALFactory } from "@app/services/certificate/certificate-secret-dal";
|
import { TCertificateSecretDALFactory } from "@app/services/certificate/certificate-secret-dal";
|
||||||
@@ -262,6 +264,7 @@ export const pkiSubscriberServiceFactory = ({
|
|||||||
projectId
|
projectId
|
||||||
});
|
});
|
||||||
if (!subscriber) throw new NotFoundError({ message: `PKI subscriber named '${subscriberName}' not found` });
|
if (!subscriber) throw new NotFoundError({ message: `PKI subscriber named '${subscriberName}' not found` });
|
||||||
|
if (!subscriber.caId) throw new BadRequestError({ message: "Subscriber does not have an assigned issuing CA" });
|
||||||
|
|
||||||
const ca = await certificateAuthorityDAL.findById(subscriber.caId);
|
const ca = await certificateAuthorityDAL.findById(subscriber.caId);
|
||||||
if (!ca) throw new NotFoundError({ message: `CA with ID '${subscriber.caId}' not found` });
|
if (!ca) throw new NotFoundError({ message: `CA with ID '${subscriber.caId}' not found` });
|
||||||
@@ -365,7 +368,32 @@ export const pkiSubscriberServiceFactory = ({
|
|||||||
extensions.push(new x509.KeyUsagesExtension(keyUsagesBitValue, true));
|
extensions.push(new x509.KeyUsagesExtension(keyUsagesBitValue, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
const selectedExtendedKeyUsages = subscriber.extendedKeyUsages as CertExtendedKeyUsage[];
|
if (subscriber.extendedKeyUsages.length) {
|
||||||
|
const extendedKeyUsagesExtension = new x509.ExtendedKeyUsageExtension(
|
||||||
|
subscriber.extendedKeyUsages.map((eku) => x509.ExtendedKeyUsage[eku as CertExtendedKeyUsage]),
|
||||||
|
true
|
||||||
|
);
|
||||||
|
extensions.push(extendedKeyUsagesExtension);
|
||||||
|
}
|
||||||
|
|
||||||
|
let altNamesArray: { type: "email" | "dns"; value: string }[] = [];
|
||||||
|
|
||||||
|
if (subscriber.subjectAlternativeNames?.length) {
|
||||||
|
altNamesArray = subscriber.subjectAlternativeNames.map((altName) => {
|
||||||
|
if (z.string().email().safeParse(altName).success) {
|
||||||
|
return { type: "email", value: altName };
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isFQDN(altName, { allow_wildcard: true })) {
|
||||||
|
return { type: "dns", value: altName };
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new BadRequestError({ message: `Invalid SAN entry: ${altName}` });
|
||||||
|
});
|
||||||
|
|
||||||
|
const altNamesExtension = new x509.SubjectAlternativeNameExtension(altNamesArray, false);
|
||||||
|
extensions.push(altNamesExtension);
|
||||||
|
}
|
||||||
|
|
||||||
const serialNumber = createSerialNumber();
|
const serialNumber = createSerialNumber();
|
||||||
const leafCert = await x509.X509CertificateGenerator.create({
|
const leafCert = await x509.X509CertificateGenerator.create({
|
||||||
@@ -421,7 +449,7 @@ export const pkiSubscriberServiceFactory = ({
|
|||||||
notBefore: notBeforeDate,
|
notBefore: notBeforeDate,
|
||||||
notAfter: notAfterDate,
|
notAfter: notAfterDate,
|
||||||
keyUsages: selectedKeyUsages,
|
keyUsages: selectedKeyUsages,
|
||||||
extendedKeyUsages: selectedExtendedKeyUsages
|
extendedKeyUsages: subscriber.extendedKeyUsages as CertExtendedKeyUsage[]
|
||||||
},
|
},
|
||||||
tx
|
tx
|
||||||
);
|
);
|
||||||
@@ -470,6 +498,8 @@ export const pkiSubscriberServiceFactory = ({
|
|||||||
projectId
|
projectId
|
||||||
});
|
});
|
||||||
if (!subscriber) throw new NotFoundError({ message: `PKI subscriber named '${subscriberName}' not found` });
|
if (!subscriber) throw new NotFoundError({ message: `PKI subscriber named '${subscriberName}' not found` });
|
||||||
|
if (!subscriber.caId) throw new BadRequestError({ message: "Subscriber does not have an assigned issuing CA" });
|
||||||
|
|
||||||
const ca = await certificateAuthorityDAL.findById(subscriber.caId);
|
const ca = await certificateAuthorityDAL.findById(subscriber.caId);
|
||||||
if (!ca) throw new NotFoundError({ message: `CA with ID '${subscriber.caId}' not found` });
|
if (!ca) throw new NotFoundError({ message: `CA with ID '${subscriber.caId}' not found` });
|
||||||
|
|
||||||
@@ -731,13 +761,11 @@ export const pkiSubscriberServiceFactory = ({
|
|||||||
projectId
|
projectId
|
||||||
});
|
});
|
||||||
if (!subscriber) throw new NotFoundError({ message: `PKI subscriber named '${subscriberName}' not found` });
|
if (!subscriber) throw new NotFoundError({ message: `PKI subscriber named '${subscriberName}' not found` });
|
||||||
const ca = await certificateAuthorityDAL.findById(subscriber.caId);
|
|
||||||
if (!ca) throw new NotFoundError({ message: `CA with ID '${subscriber.caId}' not found` });
|
|
||||||
|
|
||||||
const { permission } = await permissionService.getProjectPermission({
|
const { permission } = await permissionService.getProjectPermission({
|
||||||
actor,
|
actor,
|
||||||
actorId,
|
actorId,
|
||||||
projectId: ca.projectId,
|
projectId: subscriber.projectId,
|
||||||
actorAuthMethod,
|
actorAuthMethod,
|
||||||
actorOrgId,
|
actorOrgId,
|
||||||
actionProjectType: ActionProjectType.CertificateManager
|
actionProjectType: ActionProjectType.CertificateManager
|
||||||
|
|||||||
@@ -1087,17 +1087,14 @@ export const projectServiceFactory = ({
|
|||||||
const subscribers = await pkiSubscriberDAL.find({ projectId });
|
const subscribers = await pkiSubscriberDAL.find({ projectId });
|
||||||
|
|
||||||
for (const subscriber of subscribers) {
|
for (const subscriber of subscribers) {
|
||||||
try {
|
const canRead = permission.can(
|
||||||
ForbiddenError.from(permission).throwUnlessCan(
|
ProjectPermissionPkiSubscriberActions.Read,
|
||||||
ProjectPermissionPkiSubscriberActions.Read,
|
subject(ProjectPermissionSub.PkiSubscribers, {
|
||||||
subject(ProjectPermissionSub.PkiSubscribers, {
|
name: subscriber.name
|
||||||
name: subscriber.name
|
})
|
||||||
})
|
);
|
||||||
);
|
if (canRead) {
|
||||||
|
|
||||||
allowedSubscribers.push(subscriber);
|
allowedSubscribers.push(subscriber);
|
||||||
} catch {
|
|
||||||
// intentionally ignore subscribers where user lacks access
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1203,17 +1200,15 @@ export const projectServiceFactory = ({
|
|||||||
const hosts = await sshHostDAL.findSshHostsWithLoginMappings(projectId);
|
const hosts = await sshHostDAL.findSshHostsWithLoginMappings(projectId);
|
||||||
|
|
||||||
for (const host of hosts) {
|
for (const host of hosts) {
|
||||||
try {
|
const canRead = permission.can(
|
||||||
ForbiddenError.from(permission).throwUnlessCan(
|
ProjectPermissionSshHostActions.Read,
|
||||||
ProjectPermissionSshHostActions.Read,
|
subject(ProjectPermissionSub.SshHosts, {
|
||||||
subject(ProjectPermissionSub.SshHosts, {
|
hostname: host.hostname
|
||||||
hostname: host.hostname
|
})
|
||||||
})
|
);
|
||||||
);
|
|
||||||
|
|
||||||
|
if (canRead) {
|
||||||
allowedHosts.push(host);
|
allowedHosts.push(host);
|
||||||
} catch {
|
|
||||||
// intentionally ignore projects where user lacks access
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,10 +12,9 @@ In Infisical PKI, subscribers are logical representations of entities such as de
|
|||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
graph TD
|
graph TD
|
||||||
A[Root CA] --> B[Intermediate CA]
|
A[Issuing CA] --> C1[Certificate]
|
||||||
B --> C1[Certificate]
|
|
||||||
C1 --> S1[Subscriber]
|
C1 --> S1[Subscriber]
|
||||||
B --> C2[Certificate]
|
A --> C2[Certificate]
|
||||||
C2 --> S2[Subscriber]
|
C2 --> S2[Subscriber]
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -25,7 +24,7 @@ graph TD
|
|||||||
|
|
||||||
The typical workflow for managing subscribers consists of the following steps:
|
The typical workflow for managing subscribers consists of the following steps:
|
||||||
|
|
||||||
1. Creating a subscriber and defining attributes to be included on the X.509 certificates issued for it including common name, subject alternative names, TLL, etc.
|
1. Creating a subscriber and defining which (issuing) CA will issue X.509 certificates for it as well as attributes to be included on the certificates including common name, subject alternative names, TLL, etc.
|
||||||
2. Requesting for a certificate against the subscriber with or without a certificate signing request (CSR).
|
2. Requesting for a certificate against the subscriber with or without a certificate signing request (CSR).
|
||||||
3. Managing certificate lifecycle events such as certificate renewal and revocation. As part of the certificate revocation flow,
|
3. Managing certificate lifecycle events such as certificate renewal and revocation. As part of the certificate revocation flow,
|
||||||
you can also query for a Certificate Revocation List [CRL](https://en.wikipedia.org/wiki/Certificate_revocation_list), a time-stamped, signed
|
you can also query for a Certificate Revocation List [CRL](https://en.wikipedia.org/wiki/Certificate_revocation_list), a time-stamped, signed
|
||||||
|
|||||||
@@ -61,6 +61,9 @@ export const initProjectHelper = async ({ projectName }: { projectName: string }
|
|||||||
return project;
|
return project;
|
||||||
};
|
};
|
||||||
export const getProjectHomePage = (workspace: Workspace) => {
|
export const getProjectHomePage = (workspace: Workspace) => {
|
||||||
|
if (workspace.type === ProjectType.CertificateManager) {
|
||||||
|
return `/${workspace.type}/$projectId/subscribers` as const;
|
||||||
|
}
|
||||||
return `/${workspace.type}/$projectId/overview` as const;
|
return `/${workspace.type}/$projectId/overview` as const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { useMutation, useQueryClient } from "@tanstack/react-query";
|
|||||||
|
|
||||||
import { apiRequest } from "@app/config/request";
|
import { apiRequest } from "@app/config/request";
|
||||||
|
|
||||||
|
import { pkiSubscriberKeys } from "../pkiSubscriber/queries";
|
||||||
import { workspaceKeys } from "../workspace";
|
import { workspaceKeys } from "../workspace";
|
||||||
import { TCertificate, TDeleteCertDTO, TRevokeCertDTO } from "./types";
|
import { TCertificate, TDeleteCertDTO, TRevokeCertDTO } from "./types";
|
||||||
|
|
||||||
@@ -42,6 +43,9 @@ export const useRevokeCert = () => {
|
|||||||
queryClient.invalidateQueries({
|
queryClient.invalidateQueries({
|
||||||
queryKey: workspaceKeys.forWorkspaceCertificates(projectSlug)
|
queryKey: workspaceKeys.forWorkspaceCertificates(projectSlug)
|
||||||
});
|
});
|
||||||
|
queryClient.invalidateQueries({
|
||||||
|
queryKey: pkiSubscriberKeys.allPkiSubscriberCertificates()
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -77,8 +77,8 @@ export const useGetPkiSubscriberCertificates = ({
|
|||||||
queryKey: pkiSubscriberKeys.specificPkiSubscriberCertificates({
|
queryKey: pkiSubscriberKeys.specificPkiSubscriberCertificates({
|
||||||
subscriberName,
|
subscriberName,
|
||||||
projectId,
|
projectId,
|
||||||
offset: 0,
|
offset,
|
||||||
limit: 25
|
limit
|
||||||
}),
|
}),
|
||||||
queryFn: async () => {
|
queryFn: async () => {
|
||||||
const params = new URLSearchParams({
|
const params = new URLSearchParams({
|
||||||
|
|||||||
@@ -118,7 +118,9 @@ export const ProjectLayout = () => {
|
|||||||
)}
|
)}
|
||||||
</Link>
|
</Link>
|
||||||
<Link
|
<Link
|
||||||
to={`/${ProjectType.CertificateManager}/$projectId/overview` as const}
|
to={
|
||||||
|
`/${ProjectType.CertificateManager}/$projectId/certificates` as const
|
||||||
|
}
|
||||||
params={{
|
params={{
|
||||||
projectId: currentWorkspace.id
|
projectId: currentWorkspace.id
|
||||||
}}
|
}}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute } from "@tanstack/react-router";
|
|||||||
import { CertificatesPage } from "./CertificatesPage";
|
import { CertificatesPage } from "./CertificatesPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/overview"
|
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/certificates"
|
||||||
)({
|
)({
|
||||||
component: CertificatesPage
|
component: CertificatesPage
|
||||||
});
|
});
|
||||||
|
|||||||
+11
-1
@@ -1,4 +1,5 @@
|
|||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
|
import { subject } from "@casl/ability";
|
||||||
import { faCertificate, faEllipsis, faTrash } from "@fortawesome/free-solid-svg-icons";
|
import { faCertificate, faEllipsis, faTrash } from "@fortawesome/free-solid-svg-icons";
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
import { format } from "date-fns";
|
import { format } from "date-fns";
|
||||||
@@ -26,6 +27,7 @@ import {
|
|||||||
import {
|
import {
|
||||||
ProjectPermissionPkiSubscriberActions,
|
ProjectPermissionPkiSubscriberActions,
|
||||||
ProjectPermissionSub,
|
ProjectPermissionSub,
|
||||||
|
useProjectPermission,
|
||||||
useWorkspace
|
useWorkspace
|
||||||
} from "@app/context";
|
} from "@app/context";
|
||||||
import { useGetPkiSubscriberCertificates } from "@app/hooks/api";
|
import { useGetPkiSubscriberCertificates } from "@app/hooks/api";
|
||||||
@@ -42,6 +44,7 @@ const PER_PAGE_INIT = 25;
|
|||||||
export const PkiSubscriberCertificatesTable = ({ subscriberName, handlePopUpOpen }: Props) => {
|
export const PkiSubscriberCertificatesTable = ({ subscriberName, handlePopUpOpen }: Props) => {
|
||||||
const { currentWorkspace } = useWorkspace();
|
const { currentWorkspace } = useWorkspace();
|
||||||
const projectId = currentWorkspace.id;
|
const projectId = currentWorkspace.id;
|
||||||
|
const { permission } = useProjectPermission();
|
||||||
const [page, setPage] = useState(1);
|
const [page, setPage] = useState(1);
|
||||||
const [perPage, setPerPage] = useState(PER_PAGE_INIT);
|
const [perPage, setPerPage] = useState(PER_PAGE_INIT);
|
||||||
|
|
||||||
@@ -74,6 +77,13 @@ export const PkiSubscriberCertificatesTable = ({ subscriberName, handlePopUpOpen
|
|||||||
return <Badge variant="success">Valid</Badge>;
|
return <Badge variant="success">Valid</Badge>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const canListPkiSubscriberCerts = permission.can(
|
||||||
|
ProjectPermissionPkiSubscriberActions.ListCerts,
|
||||||
|
subject(ProjectPermissionSub.PkiSubscribers, {
|
||||||
|
name: subscriberName
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<TableContainer>
|
<TableContainer>
|
||||||
@@ -156,7 +166,7 @@ export const PkiSubscriberCertificatesTable = ({ subscriberName, handlePopUpOpen
|
|||||||
)}
|
)}
|
||||||
{!isPending && !data?.certificates?.length && (
|
{!isPending && !data?.certificates?.length && (
|
||||||
<EmptyState
|
<EmptyState
|
||||||
title="No certificates have been issued for this subscriber"
|
title={`${canListPkiSubscriberCerts ? "No certificates have been issued for this subscriber" : "You do not have permission to view this subscriber's certificates"}`}
|
||||||
icon={faCertificate}
|
icon={faCertificate}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|||||||
+8
@@ -14,6 +14,7 @@ import {
|
|||||||
} from "@app/context";
|
} from "@app/context";
|
||||||
import { useTimedReset } from "@app/hooks";
|
import { useTimedReset } from "@app/hooks";
|
||||||
import { useGetPkiSubscriber, useIssuePkiSubscriberCert } from "@app/hooks/api";
|
import { useGetPkiSubscriber, useIssuePkiSubscriberCert } from "@app/hooks/api";
|
||||||
|
import { pkiSubscriberStatusToNameMap } from "@app/hooks/api/pkiSubscriber/constants";
|
||||||
import { UsePopUpState } from "@app/hooks/usePopUp";
|
import { UsePopUpState } from "@app/hooks/usePopUp";
|
||||||
|
|
||||||
import { CertificateContent } from "../../CertificatesPage/components/CertificateContent";
|
import { CertificateContent } from "../../CertificatesPage/components/CertificateContent";
|
||||||
@@ -44,6 +45,7 @@ export const PkiSubscriberDetailsSection = ({ subscriberName, handlePopUpOpen }:
|
|||||||
subscriberName,
|
subscriberName,
|
||||||
projectId
|
projectId
|
||||||
});
|
});
|
||||||
|
|
||||||
const { mutateAsync: issuePkiSubscriberCert, isPending: isIssuingCert } =
|
const { mutateAsync: issuePkiSubscriberCert, isPending: isIssuingCert } =
|
||||||
useIssuePkiSubscriberCert();
|
useIssuePkiSubscriberCert();
|
||||||
|
|
||||||
@@ -136,6 +138,12 @@ export const PkiSubscriberDetailsSection = ({ subscriberName, handlePopUpOpen }:
|
|||||||
<p className="text-sm font-semibold text-mineshaft-300">Name</p>
|
<p className="text-sm font-semibold text-mineshaft-300">Name</p>
|
||||||
<p className="text-sm text-mineshaft-300">{pkiSubscriber.name}</p>
|
<p className="text-sm text-mineshaft-300">{pkiSubscriber.name}</p>
|
||||||
</div>
|
</div>
|
||||||
|
<div className="mb-4">
|
||||||
|
<p className="text-sm font-semibold text-mineshaft-300">Status</p>
|
||||||
|
<p className="text-sm text-mineshaft-300">
|
||||||
|
{pkiSubscriberStatusToNameMap[pkiSubscriber.status]}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
<div className="mb-4">
|
<div className="mb-4">
|
||||||
<p className="text-sm font-semibold text-mineshaft-300">Common Name</p>
|
<p className="text-sm font-semibold text-mineshaft-300">Common Name</p>
|
||||||
<p className="text-sm text-mineshaft-300">{pkiSubscriber.commonName}</p>
|
<p className="text-sm text-mineshaft-300">{pkiSubscriber.commonName}</p>
|
||||||
|
|||||||
@@ -964,8 +964,8 @@ const certManagerSettingsPageRouteRoute =
|
|||||||
|
|
||||||
const certManagerCertificatesPageRouteRoute =
|
const certManagerCertificatesPageRouteRoute =
|
||||||
certManagerCertificatesPageRouteImport.update({
|
certManagerCertificatesPageRouteImport.update({
|
||||||
id: '/overview',
|
id: '/certificates',
|
||||||
path: '/overview',
|
path: '/certificates',
|
||||||
getParentRoute: () => certManagerLayoutRoute,
|
getParentRoute: () => certManagerLayoutRoute,
|
||||||
} as any)
|
} as any)
|
||||||
|
|
||||||
@@ -2265,10 +2265,10 @@ declare module '@tanstack/react-router' {
|
|||||||
preLoaderRoute: typeof certManagerCertificateAuthoritiesPageRouteImport
|
preLoaderRoute: typeof certManagerCertificateAuthoritiesPageRouteImport
|
||||||
parentRoute: typeof certManagerLayoutImport
|
parentRoute: typeof certManagerLayoutImport
|
||||||
}
|
}
|
||||||
'/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/overview': {
|
'/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/certificates': {
|
||||||
id: '/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/overview'
|
id: '/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/certificates'
|
||||||
path: '/overview'
|
path: '/certificates'
|
||||||
fullPath: '/cert-manager/$projectId/overview'
|
fullPath: '/cert-manager/$projectId/certificates'
|
||||||
preLoaderRoute: typeof certManagerCertificatesPageRouteImport
|
preLoaderRoute: typeof certManagerCertificatesPageRouteImport
|
||||||
parentRoute: typeof certManagerLayoutImport
|
parentRoute: typeof certManagerLayoutImport
|
||||||
}
|
}
|
||||||
@@ -4056,7 +4056,7 @@ export interface FileRoutesByFullPath {
|
|||||||
'/organization/ssh/settings': typeof organizationSshSettingsPageRouteRoute
|
'/organization/ssh/settings': typeof organizationSshSettingsPageRouteRoute
|
||||||
'/cert-manager/$projectId/alerting': typeof certManagerAlertingPageRouteRoute
|
'/cert-manager/$projectId/alerting': typeof certManagerAlertingPageRouteRoute
|
||||||
'/cert-manager/$projectId/certificate-authorities': typeof certManagerCertificateAuthoritiesPageRouteRoute
|
'/cert-manager/$projectId/certificate-authorities': typeof certManagerCertificateAuthoritiesPageRouteRoute
|
||||||
'/cert-manager/$projectId/overview': typeof certManagerCertificatesPageRouteRoute
|
'/cert-manager/$projectId/certificates': typeof certManagerCertificatesPageRouteRoute
|
||||||
'/cert-manager/$projectId/settings': typeof certManagerSettingsPageRouteRoute
|
'/cert-manager/$projectId/settings': typeof certManagerSettingsPageRouteRoute
|
||||||
'/kms/$projectId/kmip': typeof kmsKmipPageRouteRoute
|
'/kms/$projectId/kmip': typeof kmsKmipPageRouteRoute
|
||||||
'/kms/$projectId/overview': typeof kmsOverviewPageRouteRoute
|
'/kms/$projectId/overview': typeof kmsOverviewPageRouteRoute
|
||||||
@@ -4242,7 +4242,7 @@ export interface FileRoutesByTo {
|
|||||||
'/organization/ssh/settings': typeof organizationSshSettingsPageRouteRoute
|
'/organization/ssh/settings': typeof organizationSshSettingsPageRouteRoute
|
||||||
'/cert-manager/$projectId/alerting': typeof certManagerAlertingPageRouteRoute
|
'/cert-manager/$projectId/alerting': typeof certManagerAlertingPageRouteRoute
|
||||||
'/cert-manager/$projectId/certificate-authorities': typeof certManagerCertificateAuthoritiesPageRouteRoute
|
'/cert-manager/$projectId/certificate-authorities': typeof certManagerCertificateAuthoritiesPageRouteRoute
|
||||||
'/cert-manager/$projectId/overview': typeof certManagerCertificatesPageRouteRoute
|
'/cert-manager/$projectId/certificates': typeof certManagerCertificatesPageRouteRoute
|
||||||
'/cert-manager/$projectId/settings': typeof certManagerSettingsPageRouteRoute
|
'/cert-manager/$projectId/settings': typeof certManagerSettingsPageRouteRoute
|
||||||
'/kms/$projectId/kmip': typeof kmsKmipPageRouteRoute
|
'/kms/$projectId/kmip': typeof kmsKmipPageRouteRoute
|
||||||
'/kms/$projectId/overview': typeof kmsOverviewPageRouteRoute
|
'/kms/$projectId/overview': typeof kmsOverviewPageRouteRoute
|
||||||
@@ -4444,7 +4444,7 @@ export interface FileRoutesById {
|
|||||||
'/_authenticate/_inject-org-details/_org-layout/ssh/$projectId/_ssh-layout': typeof sshLayoutRouteWithChildren
|
'/_authenticate/_inject-org-details/_org-layout/ssh/$projectId/_ssh-layout': typeof sshLayoutRouteWithChildren
|
||||||
'/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/alerting': typeof certManagerAlertingPageRouteRoute
|
'/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/alerting': typeof certManagerAlertingPageRouteRoute
|
||||||
'/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/certificate-authorities': typeof certManagerCertificateAuthoritiesPageRouteRoute
|
'/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/certificate-authorities': typeof certManagerCertificateAuthoritiesPageRouteRoute
|
||||||
'/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/overview': typeof certManagerCertificatesPageRouteRoute
|
'/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/certificates': typeof certManagerCertificatesPageRouteRoute
|
||||||
'/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/settings': typeof certManagerSettingsPageRouteRoute
|
'/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/settings': typeof certManagerSettingsPageRouteRoute
|
||||||
'/_authenticate/_inject-org-details/_org-layout/kms/$projectId/_kms-layout/kmip': typeof kmsKmipPageRouteRoute
|
'/_authenticate/_inject-org-details/_org-layout/kms/$projectId/_kms-layout/kmip': typeof kmsKmipPageRouteRoute
|
||||||
'/_authenticate/_inject-org-details/_org-layout/kms/$projectId/_kms-layout/overview': typeof kmsOverviewPageRouteRoute
|
'/_authenticate/_inject-org-details/_org-layout/kms/$projectId/_kms-layout/overview': typeof kmsOverviewPageRouteRoute
|
||||||
@@ -4640,7 +4640,7 @@ export interface FileRouteTypes {
|
|||||||
| '/organization/ssh/settings'
|
| '/organization/ssh/settings'
|
||||||
| '/cert-manager/$projectId/alerting'
|
| '/cert-manager/$projectId/alerting'
|
||||||
| '/cert-manager/$projectId/certificate-authorities'
|
| '/cert-manager/$projectId/certificate-authorities'
|
||||||
| '/cert-manager/$projectId/overview'
|
| '/cert-manager/$projectId/certificates'
|
||||||
| '/cert-manager/$projectId/settings'
|
| '/cert-manager/$projectId/settings'
|
||||||
| '/kms/$projectId/kmip'
|
| '/kms/$projectId/kmip'
|
||||||
| '/kms/$projectId/overview'
|
| '/kms/$projectId/overview'
|
||||||
@@ -4825,7 +4825,7 @@ export interface FileRouteTypes {
|
|||||||
| '/organization/ssh/settings'
|
| '/organization/ssh/settings'
|
||||||
| '/cert-manager/$projectId/alerting'
|
| '/cert-manager/$projectId/alerting'
|
||||||
| '/cert-manager/$projectId/certificate-authorities'
|
| '/cert-manager/$projectId/certificate-authorities'
|
||||||
| '/cert-manager/$projectId/overview'
|
| '/cert-manager/$projectId/certificates'
|
||||||
| '/cert-manager/$projectId/settings'
|
| '/cert-manager/$projectId/settings'
|
||||||
| '/kms/$projectId/kmip'
|
| '/kms/$projectId/kmip'
|
||||||
| '/kms/$projectId/overview'
|
| '/kms/$projectId/overview'
|
||||||
@@ -5025,7 +5025,7 @@ export interface FileRouteTypes {
|
|||||||
| '/_authenticate/_inject-org-details/_org-layout/ssh/$projectId/_ssh-layout'
|
| '/_authenticate/_inject-org-details/_org-layout/ssh/$projectId/_ssh-layout'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/alerting'
|
| '/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/alerting'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/certificate-authorities'
|
| '/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/certificate-authorities'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/overview'
|
| '/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/certificates'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/settings'
|
| '/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/settings'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/kms/$projectId/_kms-layout/kmip'
|
| '/_authenticate/_inject-org-details/_org-layout/kms/$projectId/_kms-layout/kmip'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/kms/$projectId/_kms-layout/overview'
|
| '/_authenticate/_inject-org-details/_org-layout/kms/$projectId/_kms-layout/overview'
|
||||||
@@ -5575,7 +5575,7 @@ export const routeTree = rootRoute
|
|||||||
"children": [
|
"children": [
|
||||||
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/alerting",
|
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/alerting",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/certificate-authorities",
|
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/certificate-authorities",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/overview",
|
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/certificates",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/settings",
|
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/settings",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/access-management",
|
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/access-management",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/subscribers",
|
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/subscribers",
|
||||||
@@ -5640,7 +5640,7 @@ export const routeTree = rootRoute
|
|||||||
"filePath": "cert-manager/CertificateAuthoritiesPage/route.tsx",
|
"filePath": "cert-manager/CertificateAuthoritiesPage/route.tsx",
|
||||||
"parent": "/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout"
|
"parent": "/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout"
|
||||||
},
|
},
|
||||||
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/overview": {
|
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/certificates": {
|
||||||
"filePath": "cert-manager/CertificatesPage/route.tsx",
|
"filePath": "cert-manager/CertificatesPage/route.tsx",
|
||||||
"parent": "/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout"
|
"parent": "/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -292,7 +292,7 @@ const certManagerRoutes = route("/cert-manager/$projectId", [
|
|||||||
index("cert-manager/PkiSubscribersPage/route.tsx"),
|
index("cert-manager/PkiSubscribersPage/route.tsx"),
|
||||||
route("/$subscriberName", "cert-manager/PkiSubscriberDetailsByIDPage/route.tsx")
|
route("/$subscriberName", "cert-manager/PkiSubscriberDetailsByIDPage/route.tsx")
|
||||||
]),
|
]),
|
||||||
route("/overview", "cert-manager/CertificatesPage/route.tsx"),
|
route("/certificates", "cert-manager/CertificatesPage/route.tsx"),
|
||||||
route("/certificate-authorities", "cert-manager/CertificateAuthoritiesPage/route.tsx"),
|
route("/certificate-authorities", "cert-manager/CertificateAuthoritiesPage/route.tsx"),
|
||||||
route("/alerting", "cert-manager/AlertingPage/route.tsx"),
|
route("/alerting", "cert-manager/AlertingPage/route.tsx"),
|
||||||
route("/ca/$caId", "cert-manager/CertAuthDetailsByIDPage/route.tsx"),
|
route("/ca/$caId", "cert-manager/CertAuthDetailsByIDPage/route.tsx"),
|
||||||
|
|||||||
Reference in New Issue
Block a user