mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-10 13:28:34 +00:00
improvement: address feedback
This commit is contained in:
@@ -5,29 +5,48 @@ import { ReactNode } from "@tanstack/react-router";
|
|||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
|
|
||||||
import { Badge } from "@app/components/v2";
|
import { Badge } from "@app/components/v2";
|
||||||
|
import { BadgeProps } from "@app/components/v2/Badge/Badge";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
title: ReactNode;
|
title: ReactNode;
|
||||||
description?: ReactNode;
|
description?: ReactNode;
|
||||||
children?: ReactNode;
|
children?: ReactNode;
|
||||||
className?: string;
|
className?: string;
|
||||||
scope: "org" | "project" | "namespace" | "instance";
|
scope: "org" | "namespace" | "instance" | ProjectType;
|
||||||
};
|
};
|
||||||
|
|
||||||
const SCOPE_NAME: Record<NonNullable<Props["scope"]>, { label: string; icon: IconDefinition }> = {
|
const SCOPE_NAME: Record<NonNullable<Props["scope"]>, { label: string; icon: IconDefinition }> = {
|
||||||
org: { label: "Organization", icon: faGlobe },
|
org: { label: "Organization", icon: faGlobe },
|
||||||
project: { label: "Project", icon: faCube },
|
[ProjectType.SecretManager]: { label: "Secrets Management", icon: faCube },
|
||||||
|
[ProjectType.CertificateManager]: { label: "PKI", icon: faCube },
|
||||||
|
[ProjectType.SSH]: { label: "SSH", icon: faCube },
|
||||||
|
[ProjectType.KMS]: { label: "KMS", icon: faCube },
|
||||||
|
[ProjectType.PAM]: { label: "PAM", icon: faCube },
|
||||||
|
[ProjectType.SecretScanning]: { label: "Secret Scanning", icon: faCube },
|
||||||
namespace: { label: "Namespace", icon: faCubes },
|
namespace: { label: "Namespace", icon: faCubes },
|
||||||
instance: { label: "Server", icon: faServer }
|
instance: { label: "Server", icon: faServer }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const SCOPE_VARIANT: Record<NonNullable<Props["scope"]>, BadgeProps["variant"]> = {
|
||||||
|
org: "org",
|
||||||
|
[ProjectType.SecretManager]: "project",
|
||||||
|
[ProjectType.CertificateManager]: "project",
|
||||||
|
[ProjectType.SSH]: "project",
|
||||||
|
[ProjectType.KMS]: "project",
|
||||||
|
[ProjectType.PAM]: "project",
|
||||||
|
[ProjectType.SecretScanning]: "project",
|
||||||
|
namespace: "namespace",
|
||||||
|
instance: "instance"
|
||||||
|
};
|
||||||
|
|
||||||
export const PageHeader = ({ title, description, children, className, scope }: Props) => (
|
export const PageHeader = ({ title, description, children, className, scope }: Props) => (
|
||||||
<div className={twMerge("mb-10 w-full border-b border-mineshaft-500 pb-10", className)}>
|
<div className={twMerge("mb-10 w-full", className)}>
|
||||||
<div className="flex w-full justify-between">
|
<div className="flex w-full justify-between">
|
||||||
<div className="mr-4 flex w-full items-center">
|
<div className="mr-4 flex w-full items-center">
|
||||||
<h1 className="text-3xl font-medium text-white capitalize">{title}</h1>
|
<h1 className="text-3xl font-medium text-white capitalize">{title}</h1>
|
||||||
{scope && (
|
{scope && (
|
||||||
<Badge variant={scope} className="mt-1 ml-2.5">
|
<Badge variant={SCOPE_VARIANT[scope]} className="mt-1 ml-2.5">
|
||||||
<FontAwesomeIcon icon={SCOPE_NAME[scope].icon} />
|
<FontAwesomeIcon icon={SCOPE_NAME[scope].icon} />
|
||||||
{SCOPE_NAME[scope].label}
|
{SCOPE_NAME[scope].label}
|
||||||
</Badge>
|
</Badge>
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import {
|
|||||||
faBuilding,
|
faBuilding,
|
||||||
faCog,
|
faCog,
|
||||||
faDatabase,
|
faDatabase,
|
||||||
faGlobe,
|
|
||||||
faKey,
|
faKey,
|
||||||
faLock,
|
faLock,
|
||||||
faPlug,
|
faPlug,
|
||||||
@@ -14,7 +13,7 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|||||||
import { Link, useMatchRoute } from "@tanstack/react-router";
|
import { Link, useMatchRoute } from "@tanstack/react-router";
|
||||||
import { motion } from "framer-motion";
|
import { motion } from "framer-motion";
|
||||||
|
|
||||||
import { Tab, TabList, Tabs } from "@app/components/v2";
|
import { Tab, TabList, Tabs, Tooltip } from "@app/components/v2";
|
||||||
|
|
||||||
const generalTabs = [
|
const generalTabs = [
|
||||||
{
|
{
|
||||||
@@ -74,12 +73,13 @@ export const AdminNavBar = () => {
|
|||||||
<nav className="w-full">
|
<nav className="w-full">
|
||||||
<Tabs value="selected">
|
<Tabs value="selected">
|
||||||
<TabList className="border-b-0">
|
<TabList className="border-b-0">
|
||||||
<Link to="/organization/projects">
|
<Tooltip position="bottom" content="Back to organization">
|
||||||
<Tab value="back" className="flex gap-x-2">
|
<Link to="/organization/projects">
|
||||||
<FontAwesomeIcon icon={faGlobe} />
|
<Tab value="back">
|
||||||
<FontAwesomeIcon icon={faArrowLeft} />
|
<FontAwesomeIcon icon={faArrowLeft} />
|
||||||
</Tab>
|
</Tab>
|
||||||
</Link>
|
</Link>
|
||||||
|
</Tooltip>
|
||||||
{generalTabs.map((tab) => {
|
{generalTabs.map((tab) => {
|
||||||
const isActive = matchRoute({ to: tab.link, fuzzy: false });
|
const isActive = matchRoute({ to: tab.link, fuzzy: false });
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
import { faArrowLeft, faGlobe } from "@fortawesome/free-solid-svg-icons";
|
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
||||||
import { Link, Outlet, useLocation } from "@tanstack/react-router";
|
import { Link, Outlet, useLocation } from "@tanstack/react-router";
|
||||||
import { motion } from "framer-motion";
|
import { motion } from "framer-motion";
|
||||||
|
|
||||||
@@ -28,12 +26,6 @@ export const KmsLayout = () => {
|
|||||||
<nav className="w-full">
|
<nav className="w-full">
|
||||||
<Tabs value="selected">
|
<Tabs value="selected">
|
||||||
<TabList className="border-b-0">
|
<TabList className="border-b-0">
|
||||||
<Link to="/organization/projects">
|
|
||||||
<Tab value="back" className="flex gap-x-2">
|
|
||||||
<FontAwesomeIcon icon={faGlobe} />
|
|
||||||
<FontAwesomeIcon icon={faArrowLeft} />
|
|
||||||
</Tab>
|
|
||||||
</Link>
|
|
||||||
<Link
|
<Link
|
||||||
to="/projects/kms/$projectId/overview"
|
to="/projects/kms/$projectId/overview"
|
||||||
params={{
|
params={{
|
||||||
|
|||||||
@@ -241,7 +241,7 @@ export const Navbar = () => {
|
|||||||
<Badge
|
<Badge
|
||||||
variant="org"
|
variant="org"
|
||||||
className={twMerge(
|
className={twMerge(
|
||||||
"max-w-full min-w-0 text-sm",
|
"max-w-full min-w-0 cursor-pointer text-sm",
|
||||||
!isOrgScope && "bg-transparent opacity-75"
|
!isOrgScope && "bg-transparent opacity-75"
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -19,10 +19,10 @@ export const OrgNavBar = ({ isHidden }: Props) => {
|
|||||||
{!isHidden && (
|
{!isHidden && (
|
||||||
<div className="dark hidden w-full flex-col overflow-x-hidden border-b border-mineshaft-600 bg-mineshaft-900 px-4 md:flex">
|
<div className="dark hidden w-full flex-col overflow-x-hidden border-b border-mineshaft-600 bg-mineshaft-900 px-4 md:flex">
|
||||||
<motion.div
|
<motion.div
|
||||||
key="menu-project-items"
|
key="menu-org-items"
|
||||||
initial={{ x: 150 }}
|
initial={{ x: -150 }}
|
||||||
animate={{ x: 0 }}
|
animate={{ x: 0 }}
|
||||||
exit={{ x: 150 }}
|
exit={{ x: -150 }}
|
||||||
transition={{ duration: 0.2 }}
|
transition={{ duration: 0.2 }}
|
||||||
className=""
|
className=""
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
import { useEffect } from "react";
|
import { useEffect } from "react";
|
||||||
import { faArrowLeft, faGlobe } from "@fortawesome/free-solid-svg-icons";
|
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
||||||
import { Link, Outlet, useLocation } from "@tanstack/react-router";
|
import { Link, Outlet, useLocation } from "@tanstack/react-router";
|
||||||
import { motion } from "framer-motion";
|
import { motion } from "framer-motion";
|
||||||
|
|
||||||
@@ -39,12 +37,6 @@ export const PamLayout = () => {
|
|||||||
<nav className="w-full">
|
<nav className="w-full">
|
||||||
<Tabs value="selected">
|
<Tabs value="selected">
|
||||||
<TabList className="border-b-0">
|
<TabList className="border-b-0">
|
||||||
<Link to="/organization/projects">
|
|
||||||
<Tab value="back" className="flex gap-x-2">
|
|
||||||
<FontAwesomeIcon icon={faGlobe} />
|
|
||||||
<FontAwesomeIcon icon={faArrowLeft} />
|
|
||||||
</Tab>
|
|
||||||
</Link>
|
|
||||||
<Link
|
<Link
|
||||||
to="/projects/pam/$projectId/accounts"
|
to="/projects/pam/$projectId/accounts"
|
||||||
params={{
|
params={{
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { faArrowLeft, faGlobe, faMobile } from "@fortawesome/free-solid-svg-icons";
|
import { faMobile } from "@fortawesome/free-solid-svg-icons";
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
import { Link, Outlet, useLocation } from "@tanstack/react-router";
|
import { Link, Outlet, useLocation } from "@tanstack/react-router";
|
||||||
import { motion } from "framer-motion";
|
import { motion } from "framer-motion";
|
||||||
@@ -30,12 +30,6 @@ export const PkiManagerLayout = () => {
|
|||||||
<nav className="w-full">
|
<nav className="w-full">
|
||||||
<Tabs value="selected">
|
<Tabs value="selected">
|
||||||
<TabList className="border-b-0">
|
<TabList className="border-b-0">
|
||||||
<Link to="/organization/projects">
|
|
||||||
<Tab value="back" className="flex gap-x-2">
|
|
||||||
<FontAwesomeIcon icon={faGlobe} />
|
|
||||||
<FontAwesomeIcon icon={faArrowLeft} />
|
|
||||||
</Tab>
|
|
||||||
</Link>
|
|
||||||
<Link
|
<Link
|
||||||
to="/projects/cert-management/$projectId/subscribers"
|
to="/projects/cert-management/$projectId/subscribers"
|
||||||
params={{
|
params={{
|
||||||
|
|||||||
@@ -108,12 +108,10 @@ export const ProjectSelect = () => {
|
|||||||
}}
|
}}
|
||||||
className="overflow-hidden"
|
className="overflow-hidden"
|
||||||
>
|
>
|
||||||
<Tooltip content={currentWorkspace.name} className="max-w-96 break-words">
|
<Badge variant="project" className="max-w-full min-w-0 cursor-pointer text-sm">
|
||||||
<Badge variant="project" className="max-w-full min-w-0 text-sm">
|
<FontAwesomeIcon icon={faCube} />
|
||||||
<FontAwesomeIcon icon={faCube} />
|
<p className="truncate">{currentWorkspace?.name}</p>
|
||||||
<p className="truncate">{currentWorkspace?.name}</p>
|
</Badge>
|
||||||
</Badge>
|
|
||||||
</Tooltip>
|
|
||||||
</Link>
|
</Link>
|
||||||
<DropdownMenuTrigger asChild>
|
<DropdownMenuTrigger asChild>
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { faArrowLeft, faGlobe, faMobile } from "@fortawesome/free-solid-svg-icons";
|
import { faMobile } from "@fortawesome/free-solid-svg-icons";
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
import { Link, Outlet, useLocation } from "@tanstack/react-router";
|
import { Link, Outlet, useLocation } from "@tanstack/react-router";
|
||||||
import { motion } from "framer-motion";
|
import { motion } from "framer-motion";
|
||||||
@@ -55,12 +55,6 @@ export const SecretManagerLayout = () => {
|
|||||||
<nav className="w-full">
|
<nav className="w-full">
|
||||||
<Tabs value="selected">
|
<Tabs value="selected">
|
||||||
<TabList className="border-b-0">
|
<TabList className="border-b-0">
|
||||||
<Link to="/organization/projects">
|
|
||||||
<Tab value="back" className="flex gap-x-2">
|
|
||||||
<FontAwesomeIcon icon={faGlobe} />
|
|
||||||
<FontAwesomeIcon icon={faArrowLeft} />
|
|
||||||
</Tab>
|
|
||||||
</Link>
|
|
||||||
<Link
|
<Link
|
||||||
to="/projects/secret-management/$projectId/overview"
|
to="/projects/secret-management/$projectId/overview"
|
||||||
params={{
|
params={{
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
import { faArrowLeft, faGlobe } from "@fortawesome/free-solid-svg-icons";
|
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
||||||
import { Link, Outlet, useLocation } from "@tanstack/react-router";
|
import { Link, Outlet, useLocation } from "@tanstack/react-router";
|
||||||
import { motion } from "framer-motion";
|
import { motion } from "framer-motion";
|
||||||
|
|
||||||
@@ -50,12 +48,6 @@ export const SecretScanningLayout = () => {
|
|||||||
<nav className="w-full">
|
<nav className="w-full">
|
||||||
<Tabs value="selected">
|
<Tabs value="selected">
|
||||||
<TabList className="border-b-0">
|
<TabList className="border-b-0">
|
||||||
<Link to="/organization/projects">
|
|
||||||
<Tab value="back" className="flex gap-x-2">
|
|
||||||
<FontAwesomeIcon icon={faGlobe} />
|
|
||||||
<FontAwesomeIcon icon={faArrowLeft} />
|
|
||||||
</Tab>
|
|
||||||
</Link>
|
|
||||||
<Link
|
<Link
|
||||||
to="/projects/secret-scanning/$projectId/data-sources"
|
to="/projects/secret-scanning/$projectId/data-sources"
|
||||||
params={{
|
params={{
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
import { faArrowLeft, faGlobe } from "@fortawesome/free-solid-svg-icons";
|
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
||||||
import { Link, Outlet, useLocation } from "@tanstack/react-router";
|
import { Link, Outlet, useLocation } from "@tanstack/react-router";
|
||||||
import { motion } from "framer-motion";
|
import { motion } from "framer-motion";
|
||||||
|
|
||||||
@@ -33,12 +31,6 @@ export const SshLayout = () => {
|
|||||||
<nav className="w-full">
|
<nav className="w-full">
|
||||||
<Tabs value="selected">
|
<Tabs value="selected">
|
||||||
<TabList className="border-b-0">
|
<TabList className="border-b-0">
|
||||||
<Link to="/organization/projects">
|
|
||||||
<Tab value="back" className="flex gap-x-2">
|
|
||||||
<FontAwesomeIcon icon={faGlobe} />
|
|
||||||
<FontAwesomeIcon icon={faArrowLeft} />
|
|
||||||
</Tab>
|
|
||||||
</Link>
|
|
||||||
<Link
|
<Link
|
||||||
to="/projects/ssh/$projectId/overview"
|
to="/projects/ssh/$projectId/overview"
|
||||||
params={{
|
params={{
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import { useTranslation } from "react-i18next";
|
|||||||
import { ProjectPermissionCan } from "@app/components/permissions";
|
import { ProjectPermissionCan } from "@app/components/permissions";
|
||||||
import { PageHeader } from "@app/components/v2";
|
import { PageHeader } from "@app/components/v2";
|
||||||
import { ProjectPermissionActions, ProjectPermissionSub } from "@app/context";
|
import { ProjectPermissionActions, ProjectPermissionSub } from "@app/context";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
|
|
||||||
import { PkiAlertsSection } from "./components";
|
import { PkiAlertsSection } from "./components";
|
||||||
|
|
||||||
@@ -16,7 +17,7 @@ export const AlertingPage = () => {
|
|||||||
</Helmet>
|
</Helmet>
|
||||||
<div className="mx-auto mb-6 w-full max-w-8xl">
|
<div className="mx-auto mb-6 w-full max-w-8xl">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.CertificateManager}
|
||||||
title="Alerting"
|
title="Alerting"
|
||||||
description="Configure alerts for expiring certificates and CAs to maintain security and compliance."
|
description="Configure alerts for expiring certificates and CAs to maintain security and compliance."
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import { ROUTE_PATHS } from "@app/const/routes";
|
|||||||
import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context";
|
import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context";
|
||||||
import { CaType, useDeleteCa, useGetCa } from "@app/hooks/api";
|
import { CaType, useDeleteCa, useGetCa } from "@app/hooks/api";
|
||||||
import { TInternalCertificateAuthority } from "@app/hooks/api/ca/types";
|
import { TInternalCertificateAuthority } from "@app/hooks/api/ca/types";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
import { usePopUp } from "@app/hooks/usePopUp";
|
import { usePopUp } from "@app/hooks/usePopUp";
|
||||||
|
|
||||||
import { CaInstallCertModal } from "../CertificateAuthoritiesPage/components/CaInstallCertModal";
|
import { CaInstallCertModal } from "../CertificateAuthoritiesPage/components/CaInstallCertModal";
|
||||||
@@ -99,7 +100,11 @@ const Page = () => {
|
|||||||
<FontAwesomeIcon icon={faChevronLeft} />
|
<FontAwesomeIcon icon={faChevronLeft} />
|
||||||
Certificate Authorities
|
Certificate Authorities
|
||||||
</Link>
|
</Link>
|
||||||
<PageHeader scope="project" description="Manage certificate authority" title={data.name}>
|
<PageHeader
|
||||||
|
scope={ProjectType.CertificateManager}
|
||||||
|
description="Manage certificate authority"
|
||||||
|
title={data.name}
|
||||||
|
>
|
||||||
<DropdownMenu>
|
<DropdownMenu>
|
||||||
<DropdownMenuTrigger asChild className="rounded-lg">
|
<DropdownMenuTrigger asChild className="rounded-lg">
|
||||||
<div className="hover:text-primary-400 data-[state=open]:text-primary-400">
|
<div className="hover:text-primary-400 data-[state=open]:text-primary-400">
|
||||||
|
|||||||
+2
-1
@@ -4,6 +4,7 @@ import { useTranslation } from "react-i18next";
|
|||||||
import { ProjectPermissionCan } from "@app/components/permissions";
|
import { ProjectPermissionCan } from "@app/components/permissions";
|
||||||
import { PageHeader } from "@app/components/v2";
|
import { PageHeader } from "@app/components/v2";
|
||||||
import { ProjectPermissionActions, ProjectPermissionSub } from "@app/context";
|
import { ProjectPermissionActions, ProjectPermissionSub } from "@app/context";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
|
|
||||||
import { ExternalCaSection } from "./components/ExternalCaSection";
|
import { ExternalCaSection } from "./components/ExternalCaSection";
|
||||||
import { CaSection } from "./components";
|
import { CaSection } from "./components";
|
||||||
@@ -17,7 +18,7 @@ export const CertificateAuthoritiesPage = () => {
|
|||||||
</Helmet>
|
</Helmet>
|
||||||
<div className="mx-auto mb-6 w-full max-w-8xl">
|
<div className="mx-auto mb-6 w-full max-w-8xl">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.CertificateManager}
|
||||||
title="Certificate Authorities"
|
title="Certificate Authorities"
|
||||||
description="Manage certificate authorities for issuing and signing certificates"
|
description="Manage certificate authorities for issuing and signing certificates"
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import {
|
|||||||
ProjectPermissionSub,
|
ProjectPermissionSub,
|
||||||
useProjectPermission
|
useProjectPermission
|
||||||
} from "@app/context";
|
} from "@app/context";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
|
|
||||||
import { PkiCollectionSection } from "../AlertingPage/components";
|
import { PkiCollectionSection } from "../AlertingPage/components";
|
||||||
import { CertificatesSection } from "./components";
|
import { CertificatesSection } from "./components";
|
||||||
@@ -33,7 +34,7 @@ export const CertificatesPage = () => {
|
|||||||
</Helmet>
|
</Helmet>
|
||||||
<div className="mx-auto mb-6 w-full max-w-8xl">
|
<div className="mx-auto mb-6 w-full max-w-8xl">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.CertificateManager}
|
||||||
title="Certificates"
|
title="Certificates"
|
||||||
description="View and track issued certificates, monitor expiration dates, and manage certificate lifecycles."
|
description="View and track issued certificates, monitor expiration dates, and manage certificate lifecycles."
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2";
|
|||||||
import { ROUTE_PATHS } from "@app/const/routes";
|
import { ROUTE_PATHS } from "@app/const/routes";
|
||||||
import { ProjectPermissionSub, useProject } from "@app/context";
|
import { ProjectPermissionSub, useProject } from "@app/context";
|
||||||
import { ProjectPermissionPkiSyncActions } from "@app/context/ProjectPermissionContext/types";
|
import { ProjectPermissionPkiSyncActions } from "@app/context/ProjectPermissionContext/types";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
import { IntegrationsListPageTabs } from "@app/types/integrations";
|
import { IntegrationsListPageTabs } from "@app/types/integrations";
|
||||||
|
|
||||||
import { PkiSyncsTab } from "./components";
|
import { PkiSyncsTab } from "./components";
|
||||||
@@ -45,7 +46,7 @@ export const IntegrationsListPage = () => {
|
|||||||
<div className="relative mx-auto max-w-8xl pb-12 text-white">
|
<div className="relative mx-auto max-w-8xl pb-12 text-white">
|
||||||
<div className="mb-8">
|
<div className="mb-8">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.CertificateManager}
|
||||||
title="Integrations"
|
title="Integrations"
|
||||||
description="Manage integrations with third-party certificate services."
|
description="Manage integrations with third-party certificate services."
|
||||||
/>
|
/>
|
||||||
|
|||||||
+6
-1
@@ -21,6 +21,7 @@ import { ROUTE_PATHS } from "@app/const/routes";
|
|||||||
import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context";
|
import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context";
|
||||||
import { useDeletePkiCollection, useGetPkiCollectionById } from "@app/hooks/api";
|
import { useDeletePkiCollection, useGetPkiCollectionById } from "@app/hooks/api";
|
||||||
import { PkiItemType } from "@app/hooks/api/pkiCollections/constants";
|
import { PkiItemType } from "@app/hooks/api/pkiCollections/constants";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
import { usePopUp } from "@app/hooks/usePopUp";
|
import { usePopUp } from "@app/hooks/usePopUp";
|
||||||
|
|
||||||
import { PkiCollectionModal } from "../AlertingPage/components/PkiCollectionModal";
|
import { PkiCollectionModal } from "../AlertingPage/components/PkiCollectionModal";
|
||||||
@@ -85,7 +86,11 @@ export const PkiCollectionPage = () => {
|
|||||||
<FontAwesomeIcon icon={faChevronLeft} />
|
<FontAwesomeIcon icon={faChevronLeft} />
|
||||||
Certificates
|
Certificates
|
||||||
</Link>
|
</Link>
|
||||||
<PageHeader scope="project" title={data.name} description="Manage certificate collection">
|
<PageHeader
|
||||||
|
scope={ProjectType.CertificateManager}
|
||||||
|
title={data.name}
|
||||||
|
description="Manage certificate collection"
|
||||||
|
>
|
||||||
<DropdownMenu>
|
<DropdownMenu>
|
||||||
<DropdownMenuTrigger asChild className="rounded-lg">
|
<DropdownMenuTrigger asChild className="rounded-lg">
|
||||||
<div className="hover:text-primary-400 data-[state=open]:text-primary-400">
|
<div className="hover:text-primary-400 data-[state=open]:text-primary-400">
|
||||||
|
|||||||
+6
-1
@@ -24,6 +24,7 @@ import {
|
|||||||
useProject
|
useProject
|
||||||
} from "@app/context";
|
} from "@app/context";
|
||||||
import { useDeletePkiSubscriber, useGetPkiSubscriber } from "@app/hooks/api";
|
import { useDeletePkiSubscriber, useGetPkiSubscriber } from "@app/hooks/api";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
import { usePopUp } from "@app/hooks/usePopUp";
|
import { usePopUp } from "@app/hooks/usePopUp";
|
||||||
|
|
||||||
import { PkiSubscriberModal } from "../PkiSubscribersPage/components/PkiSubscriberModal";
|
import { PkiSubscriberModal } from "../PkiSubscribersPage/components/PkiSubscriberModal";
|
||||||
@@ -90,7 +91,11 @@ const Page = () => {
|
|||||||
<FontAwesomeIcon icon={faChevronLeft} />
|
<FontAwesomeIcon icon={faChevronLeft} />
|
||||||
Subscribers
|
Subscribers
|
||||||
</Link>
|
</Link>
|
||||||
<PageHeader scope="project" title={data.name} description="Manage PKI subscriber">
|
<PageHeader
|
||||||
|
scope={ProjectType.CertificateManager}
|
||||||
|
title={data.name}
|
||||||
|
description="Manage PKI subscriber"
|
||||||
|
>
|
||||||
<DropdownMenu>
|
<DropdownMenu>
|
||||||
<DropdownMenuTrigger asChild className="rounded-lg">
|
<DropdownMenuTrigger asChild className="rounded-lg">
|
||||||
<div className="hover:text-primary-400 data-[state=open]:text-primary-400">
|
<div className="hover:text-primary-400 data-[state=open]:text-primary-400">
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { Helmet } from "react-helmet";
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
import { PageHeader } from "@app/components/v2";
|
import { PageHeader } from "@app/components/v2";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
|
|
||||||
import { PkiSubscriberSection } from "./components";
|
import { PkiSubscriberSection } from "./components";
|
||||||
|
|
||||||
@@ -16,7 +17,7 @@ export const PkiSubscribersPage = () => {
|
|||||||
<div className="mx-auto flex flex-col justify-between text-white">
|
<div className="mx-auto flex flex-col justify-between text-white">
|
||||||
<div className="mx-auto mb-6 w-full max-w-8xl">
|
<div className="mx-auto mb-6 w-full max-w-8xl">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.CertificateManager}
|
||||||
title="Subscribers"
|
title="Subscribers"
|
||||||
description="Manage subscribers that request and receive certificates, including user devices, servers, and services."
|
description="Manage subscribers that request and receive certificates, including user devices, servers, and services."
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ import {
|
|||||||
import { usePopUp } from "@app/hooks";
|
import { usePopUp } from "@app/hooks";
|
||||||
import { useDeleteCertTemplateV2 } from "@app/hooks/api";
|
import { useDeleteCertTemplateV2 } from "@app/hooks/api";
|
||||||
import { useListCertificateTemplates } from "@app/hooks/api/certificateTemplates/queries";
|
import { useListCertificateTemplates } from "@app/hooks/api/certificateTemplates/queries";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
|
|
||||||
import { CertificateTemplateEnrollmentModal } from "../CertificatesPage/components/CertificateTemplateEnrollmentModal";
|
import { CertificateTemplateEnrollmentModal } from "../CertificatesPage/components/CertificateTemplateEnrollmentModal";
|
||||||
import { PkiTemplateForm } from "./components/PkiTemplateForm";
|
import { PkiTemplateForm } from "./components/PkiTemplateForm";
|
||||||
@@ -106,7 +107,7 @@ export const PkiTemplateListPage = () => {
|
|||||||
<div className="mx-auto flex flex-col justify-between text-white">
|
<div className="mx-auto flex flex-col justify-between text-white">
|
||||||
<div className="mx-auto mb-6 w-full max-w-8xl">
|
<div className="mx-auto mb-6 w-full max-w-8xl">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.CertificateManager}
|
||||||
title="Certificate Templates"
|
title="Certificate Templates"
|
||||||
description="Manage certificate template to request and issue dynamic certificates following a strict format."
|
description="Manage certificate template to request and issue dynamic certificates following a strict format."
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { Helmet } from "react-helmet";
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2";
|
import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
import { ProjectGeneralTab } from "@app/pages/project/SettingsPage/components/ProjectGeneralTab";
|
import { ProjectGeneralTab } from "@app/pages/project/SettingsPage/components/ProjectGeneralTab";
|
||||||
|
|
||||||
const tabs = [
|
const tabs = [
|
||||||
@@ -21,7 +22,7 @@ export const SettingsPage = () => {
|
|||||||
<title>{t("common.head-title", { title: t("settings.project.title") })}</title>
|
<title>{t("common.head-title", { title: t("settings.project.title") })}</title>
|
||||||
</Helmet>
|
</Helmet>
|
||||||
<div className="w-full max-w-8xl">
|
<div className="w-full max-w-8xl">
|
||||||
<PageHeader scope="project" title={t("settings.project.title")} />
|
<PageHeader scope={ProjectType.CertificateManager} title={t("settings.project.title")} />
|
||||||
<Tabs orientation="vertical" defaultValue={tabs[0].key}>
|
<Tabs orientation="vertical" defaultValue={tabs[0].key}>
|
||||||
<TabList>
|
<TabList>
|
||||||
{tabs.map((tab) => (
|
{tabs.map((tab) => (
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import { useTranslation } from "react-i18next";
|
|||||||
import { ProjectPermissionCan } from "@app/components/permissions";
|
import { ProjectPermissionCan } from "@app/components/permissions";
|
||||||
import { PageHeader } from "@app/components/v2";
|
import { PageHeader } from "@app/components/v2";
|
||||||
import { ProjectPermissionKmipActions, ProjectPermissionSub } from "@app/context";
|
import { ProjectPermissionKmipActions, ProjectPermissionSub } from "@app/context";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
|
|
||||||
import { KmipClientTable } from "./components/KmipClientTable";
|
import { KmipClientTable } from "./components/KmipClientTable";
|
||||||
|
|
||||||
@@ -18,7 +19,7 @@ export const KmipPage = () => {
|
|||||||
<div className="mx-auto flex flex-col justify-between bg-bunker-800 text-white">
|
<div className="mx-auto flex flex-col justify-between bg-bunker-800 text-white">
|
||||||
<div className="mx-auto mb-6 w-full max-w-8xl">
|
<div className="mx-auto mb-6 w-full max-w-8xl">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.KMS}
|
||||||
title="KMIP"
|
title="KMIP"
|
||||||
description="Integrate with Infisical KMS via Key Management Interoperability Protocol."
|
description="Integrate with Infisical KMS via Key Management Interoperability Protocol."
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import { useTranslation } from "react-i18next";
|
|||||||
import { ProjectPermissionCan } from "@app/components/permissions";
|
import { ProjectPermissionCan } from "@app/components/permissions";
|
||||||
import { PageHeader } from "@app/components/v2";
|
import { PageHeader } from "@app/components/v2";
|
||||||
import { ProjectPermissionActions, ProjectPermissionSub } from "@app/context";
|
import { ProjectPermissionActions, ProjectPermissionSub } from "@app/context";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
|
|
||||||
import { CmekTable } from "./components";
|
import { CmekTable } from "./components";
|
||||||
|
|
||||||
@@ -18,7 +19,7 @@ export const OverviewPage = () => {
|
|||||||
<div className="mx-auto flex flex-col justify-between bg-bunker-800 text-white">
|
<div className="mx-auto flex flex-col justify-between bg-bunker-800 text-white">
|
||||||
<div className="mx-auto mb-6 w-full max-w-8xl">
|
<div className="mx-auto mb-6 w-full max-w-8xl">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.KMS}
|
||||||
title="Overview"
|
title="Overview"
|
||||||
description="Manage keys and perform cryptographic operations."
|
description="Manage keys and perform cryptographic operations."
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { Helmet } from "react-helmet";
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2";
|
import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
import { ProjectGeneralTab } from "@app/pages/project/SettingsPage/components/ProjectGeneralTab";
|
import { ProjectGeneralTab } from "@app/pages/project/SettingsPage/components/ProjectGeneralTab";
|
||||||
|
|
||||||
const tabs = [
|
const tabs = [
|
||||||
@@ -22,7 +23,7 @@ export const SettingsPage = () => {
|
|||||||
</Helmet>
|
</Helmet>
|
||||||
<div className="w-full max-w-8xl">
|
<div className="w-full max-w-8xl">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.KMS}
|
||||||
title="Settings"
|
title="Settings"
|
||||||
description="Configure general project settings"
|
description="Configure general project settings"
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { ProjectPermissionCan } from "@app/components/permissions";
|
|||||||
import { PageHeader } from "@app/components/v2";
|
import { PageHeader } from "@app/components/v2";
|
||||||
import { ProjectPermissionSub } from "@app/context";
|
import { ProjectPermissionSub } from "@app/context";
|
||||||
import { ProjectPermissionPamAccountActions } from "@app/context/ProjectPermissionContext/types";
|
import { ProjectPermissionPamAccountActions } from "@app/context/ProjectPermissionContext/types";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
|
|
||||||
import { PamAccountsSection } from "./components/PamAccountsSection";
|
import { PamAccountsSection } from "./components/PamAccountsSection";
|
||||||
|
|
||||||
@@ -24,7 +25,7 @@ export const PamAccountsPage = () => {
|
|||||||
<div className="mx-auto flex flex-col justify-between bg-bunker-800 text-white">
|
<div className="mx-auto flex flex-col justify-between bg-bunker-800 text-white">
|
||||||
<div className="mx-auto mb-6 w-full max-w-8xl">
|
<div className="mx-auto mb-6 w-full max-w-8xl">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.PAM}
|
||||||
title="Accounts"
|
title="Accounts"
|
||||||
description="View, access, and manage accounts."
|
description="View, access, and manage accounts."
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { ProjectPermissionCan } from "@app/components/permissions";
|
|||||||
import { PageHeader } from "@app/components/v2";
|
import { PageHeader } from "@app/components/v2";
|
||||||
import { ProjectPermissionSub } from "@app/context";
|
import { ProjectPermissionSub } from "@app/context";
|
||||||
import { ProjectPermissionPamAccountActions } from "@app/context/ProjectPermissionContext/types";
|
import { ProjectPermissionPamAccountActions } from "@app/context/ProjectPermissionContext/types";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
|
|
||||||
import { PamResourcesSection } from "./components/PamResourcesSection";
|
import { PamResourcesSection } from "./components/PamResourcesSection";
|
||||||
|
|
||||||
@@ -24,7 +25,7 @@ export const PamResourcesPage = () => {
|
|||||||
<div className="mx-auto flex flex-col justify-between bg-bunker-800 text-white">
|
<div className="mx-auto flex flex-col justify-between bg-bunker-800 text-white">
|
||||||
<div className="mx-auto mb-6 w-full max-w-8xl">
|
<div className="mx-auto mb-6 w-full max-w-8xl">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.PAM}
|
||||||
title="Resources"
|
title="Resources"
|
||||||
description="Manage resources such as servers, databases, and more."
|
description="Manage resources such as servers, databases, and more."
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import { ROUTE_PATHS } from "@app/const/routes";
|
|||||||
import { ProjectPermissionSub, useProject } from "@app/context";
|
import { ProjectPermissionSub, useProject } from "@app/context";
|
||||||
import { ProjectPermissionPamSessionActions } from "@app/context/ProjectPermissionContext/types";
|
import { ProjectPermissionPamSessionActions } from "@app/context/ProjectPermissionContext/types";
|
||||||
import { useGetPamSessionById } from "@app/hooks/api/pam";
|
import { useGetPamSessionById } from "@app/hooks/api/pam";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
|
|
||||||
import { PamSessionDetailsSection } from "./components/PamSessionDetailsSection";
|
import { PamSessionDetailsSection } from "./components/PamSessionDetailsSection";
|
||||||
import { PamSessionLogsSection } from "./components/PamSessionLogsSection";
|
import { PamSessionLogsSection } from "./components/PamSessionLogsSection";
|
||||||
@@ -35,7 +36,7 @@ const Page = () => {
|
|||||||
Sessions
|
Sessions
|
||||||
</Link>
|
</Link>
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.PAM}
|
||||||
title={`${session.accountName} Session`}
|
title={`${session.accountName} Session`}
|
||||||
description={`View details for this ${session.accountName} session.`}
|
description={`View details for this ${session.accountName} session.`}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { ProjectPermissionCan } from "@app/components/permissions";
|
|||||||
import { PageHeader } from "@app/components/v2";
|
import { PageHeader } from "@app/components/v2";
|
||||||
import { ProjectPermissionSub } from "@app/context";
|
import { ProjectPermissionSub } from "@app/context";
|
||||||
import { ProjectPermissionPamSessionActions } from "@app/context/ProjectPermissionContext/types";
|
import { ProjectPermissionPamSessionActions } from "@app/context/ProjectPermissionContext/types";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
|
|
||||||
import { PamSessionSection } from "./components/PamSessionSection";
|
import { PamSessionSection } from "./components/PamSessionSection";
|
||||||
|
|
||||||
@@ -24,7 +25,7 @@ export const PamSessionPage = () => {
|
|||||||
<div className="mx-auto flex flex-col justify-between bg-bunker-800 text-white">
|
<div className="mx-auto flex flex-col justify-between bg-bunker-800 text-white">
|
||||||
<div className="mx-auto mb-6 w-full max-w-8xl">
|
<div className="mx-auto mb-6 w-full max-w-8xl">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.PAM}
|
||||||
title="Sessions"
|
title="Sessions"
|
||||||
description="Filter and search through account sessions."
|
description="Filter and search through account sessions."
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { Helmet } from "react-helmet";
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2";
|
import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
import { ProjectGeneralTab } from "@app/pages/project/SettingsPage/components/ProjectGeneralTab";
|
import { ProjectGeneralTab } from "@app/pages/project/SettingsPage/components/ProjectGeneralTab";
|
||||||
|
|
||||||
export const SettingsPage = () => {
|
export const SettingsPage = () => {
|
||||||
@@ -13,7 +14,11 @@ export const SettingsPage = () => {
|
|||||||
<title>{t("common.head-title", { title: t("settings.project.title") })}</title>
|
<title>{t("common.head-title", { title: t("settings.project.title") })}</title>
|
||||||
</Helmet>
|
</Helmet>
|
||||||
<div className="w-full max-w-8xl">
|
<div className="w-full max-w-8xl">
|
||||||
<PageHeader scope="project" title="Settings" description="Configure your PAM project." />
|
<PageHeader
|
||||||
|
scope={ProjectType.PAM}
|
||||||
|
title="Settings"
|
||||||
|
description="Configure your PAM project."
|
||||||
|
/>
|
||||||
<Tabs orientation="vertical" defaultValue="tab-project-general">
|
<Tabs orientation="vertical" defaultValue="tab-project-general">
|
||||||
<TabList>
|
<TabList>
|
||||||
<Tab variant="project" value="tab-project-general">
|
<Tab variant="project" value="tab-project-general">
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ const Page = () => {
|
|||||||
<div className="mx-auto flex flex-col justify-between bg-bunker-800 text-white">
|
<div className="mx-auto flex flex-col justify-between bg-bunker-800 text-white">
|
||||||
<div className="mx-auto mb-6 w-full max-w-8xl">
|
<div className="mx-auto mb-6 w-full max-w-8xl">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={currentProject.type}
|
||||||
title="Access Control"
|
title="Access Control"
|
||||||
description="Manage fine-grained access for users, groups, roles, and identities within your project resources."
|
description="Manage fine-grained access for users, groups, roles, and identities within your project resources."
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ export const AppConnectionsPage = withProjectPermission(
|
|||||||
<div className="flex w-full justify-center bg-bunker-800 text-white">
|
<div className="flex w-full justify-center bg-bunker-800 text-white">
|
||||||
<div className="w-full max-w-8xl">
|
<div className="w-full max-w-8xl">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={currentProject.type}
|
||||||
className="w-full"
|
className="w-full"
|
||||||
title="App Connections"
|
title="App Connections"
|
||||||
description="Manage project App Connections"
|
description="Manage project App Connections"
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ export const AuditLogsPage = () => {
|
|||||||
<div className="flex h-full w-full justify-center bg-bunker-800 text-white">
|
<div className="flex h-full w-full justify-center bg-bunker-800 text-white">
|
||||||
<div className="w-full max-w-8xl">
|
<div className="w-full max-w-8xl">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={currentProject.type}
|
||||||
title="Audit logs"
|
title="Audit logs"
|
||||||
description="Audit logs for security and compliance teams to monitor information access."
|
description="Audit logs for security and compliance teams to monitor information access."
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ const Page = () => {
|
|||||||
Groups
|
Groups
|
||||||
</Link>
|
</Link>
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={currentProject.type}
|
||||||
title={groupMembership.group.name}
|
title={groupMembership.group.name}
|
||||||
description={`Group joined on ${groupMembership?.createdAt && formatRelative(new Date(groupMembership?.createdAt || ""), new Date())}`}
|
description={`Group joined on ${groupMembership?.createdAt && formatRelative(new Date(groupMembership?.createdAt || ""), new Date())}`}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ const Page = () => {
|
|||||||
Identities
|
Identities
|
||||||
</Link>
|
</Link>
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={currentProject.type}
|
||||||
title={identityMembershipDetails?.identity?.name}
|
title={identityMembershipDetails?.identity?.name}
|
||||||
description={`Identity joined on ${identityMembershipDetails?.createdAt && formatRelative(new Date(identityMembershipDetails?.createdAt || ""), new Date())}`}
|
description={`Identity joined on ${identityMembershipDetails?.createdAt && formatRelative(new Date(identityMembershipDetails?.createdAt || ""), new Date())}`}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ export const Page = () => {
|
|||||||
Users
|
Users
|
||||||
</Link>
|
</Link>
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={currentProject.type}
|
||||||
title={
|
title={
|
||||||
membershipDetails.user.firstName || membershipDetails.user.lastName
|
membershipDetails.user.firstName || membershipDetails.user.lastName
|
||||||
? `${membershipDetails.user.firstName} ${membershipDetails.user.lastName}`
|
? `${membershipDetails.user.firstName} ${membershipDetails.user.lastName}`
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ const Page = () => {
|
|||||||
Roles
|
Roles
|
||||||
</Link>
|
</Link>
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={currentProject.type}
|
||||||
title={data.name}
|
title={data.name}
|
||||||
description={
|
description={
|
||||||
<>
|
<>
|
||||||
|
|||||||
+2
-1
@@ -29,6 +29,7 @@ import {
|
|||||||
import { usePopUp } from "@app/hooks";
|
import { usePopUp } from "@app/hooks";
|
||||||
import { CommitWithChanges } from "@app/hooks/api/folderCommits";
|
import { CommitWithChanges } from "@app/hooks/api/folderCommits";
|
||||||
import { useCommitRevert, useGetCommitDetails } from "@app/hooks/api/folderCommits/queries";
|
import { useCommitRevert, useGetCommitDetails } from "@app/hooks/api/folderCommits/queries";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
import { CommitType } from "@app/hooks/api/types";
|
import { CommitType } from "@app/hooks/api/types";
|
||||||
|
|
||||||
import { SecretVersionDiffView } from "../SecretVersionDiffView";
|
import { SecretVersionDiffView } from "../SecretVersionDiffView";
|
||||||
@@ -260,7 +261,7 @@ export const CommitDetailsTab = ({
|
|||||||
Commit History
|
Commit History
|
||||||
</Button>
|
</Button>
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.SecretManager}
|
||||||
title={`${parsedCommitDetails.changes?.message}` || "No message"}
|
title={`${parsedCommitDetails.changes?.message}` || "No message"}
|
||||||
description={
|
description={
|
||||||
<>
|
<>
|
||||||
|
|||||||
+2
-1
@@ -24,6 +24,7 @@ import {
|
|||||||
} from "@app/context/ProjectPermissionContext/types";
|
} from "@app/context/ProjectPermissionContext/types";
|
||||||
import { usePopUp } from "@app/hooks";
|
import { usePopUp } from "@app/hooks";
|
||||||
import { useCommitRollback, useGetRollbackPreview } from "@app/hooks/api/folderCommits/queries";
|
import { useCommitRollback, useGetRollbackPreview } from "@app/hooks/api/folderCommits/queries";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
|
|
||||||
import { SecretVersionDiffView } from "../SecretVersionDiffView";
|
import { SecretVersionDiffView } from "../SecretVersionDiffView";
|
||||||
|
|
||||||
@@ -307,7 +308,7 @@ export const RollbackPreviewTab = (): JSX.Element => {
|
|||||||
<div className="h-full w-full">
|
<div className="h-full w-full">
|
||||||
<div>
|
<div>
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.SecretManager}
|
||||||
title={`Restore folder at commit ${selectedCommitId.substring(0, 8)}`}
|
title={`Restore folder at commit ${selectedCommitId.substring(0, 8)}`}
|
||||||
description={`Will return all changes in this folder to how they appeared at the point of commit ${selectedCommitId.substring(0, 8)}. Any modifications made after this commit will be undone.`}
|
description={`Will return all changes in this folder to how they appeared at the point of commit ${selectedCommitId.substring(0, 8)}. Any modifications made after this commit will be undone.`}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import {
|
|||||||
ProjectPermissionCommitsActions,
|
ProjectPermissionCommitsActions,
|
||||||
ProjectPermissionSub
|
ProjectPermissionSub
|
||||||
} from "@app/context/ProjectPermissionContext/types";
|
} from "@app/context/ProjectPermissionContext/types";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
|
|
||||||
import { CommitHistoryTab } from "./components/CommitHistoryTab";
|
import { CommitHistoryTab } from "./components/CommitHistoryTab";
|
||||||
|
|
||||||
@@ -62,7 +63,7 @@ export const CommitsPage = () => {
|
|||||||
Secrets
|
Secrets
|
||||||
</Link>
|
</Link>
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.SecretManager}
|
||||||
title="Commits"
|
title="Commits"
|
||||||
description="Track, inspect, and restore your secrets and folders with confidence. View the complete history of changes made to your environment, examine specific modifications at each commit point, and preview the exact impact before rolling back to previous states."
|
description="Track, inspect, and restore your secrets and folders with confidence. View the complete history of changes made to your environment, examine specific modifications at each commit point, and preview the exact impact before rolling back to previous states."
|
||||||
/>
|
/>
|
||||||
|
|||||||
+1
-1
@@ -94,7 +94,7 @@ export const IntegrationDetailsByIDPage = () => {
|
|||||||
{integration ? (
|
{integration ? (
|
||||||
<div className="mx-auto mb-6 w-full max-w-8xl">
|
<div className="mx-auto mb-6 w-full max-w-8xl">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.SecretManager}
|
||||||
title={`${integrationSlugNameMapping[integration.integration]} Integration`}
|
title={`${integrationSlugNameMapping[integration.integration]} Integration`}
|
||||||
>
|
>
|
||||||
<DropdownMenu>
|
<DropdownMenu>
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2";
|
|||||||
import { ROUTE_PATHS } from "@app/const/routes";
|
import { ROUTE_PATHS } from "@app/const/routes";
|
||||||
import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context";
|
import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context";
|
||||||
import { ProjectPermissionSecretSyncActions } from "@app/context/ProjectPermissionContext/types";
|
import { ProjectPermissionSecretSyncActions } from "@app/context/ProjectPermissionContext/types";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
import { IntegrationsListPageTabs } from "@app/types/integrations";
|
import { IntegrationsListPageTabs } from "@app/types/integrations";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@@ -48,7 +49,7 @@ export const IntegrationsListPage = () => {
|
|||||||
<div className="relative mx-auto max-w-8xl pb-12 text-white">
|
<div className="relative mx-auto max-w-8xl pb-12 text-white">
|
||||||
<div className="mb-8">
|
<div className="mb-8">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.SecretManager}
|
||||||
title="Integrations"
|
title="Integrations"
|
||||||
description="Manage integrations with third-party services."
|
description="Manage integrations with third-party services."
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ import {
|
|||||||
import { useGetProjectSecretsOverview } from "@app/hooks/api/dashboard/queries";
|
import { useGetProjectSecretsOverview } from "@app/hooks/api/dashboard/queries";
|
||||||
import { DashboardSecretsOrderBy, ProjectSecretsImportedBy } from "@app/hooks/api/dashboard/types";
|
import { DashboardSecretsOrderBy, ProjectSecretsImportedBy } from "@app/hooks/api/dashboard/types";
|
||||||
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
||||||
import { ProjectVersion } from "@app/hooks/api/projects/types";
|
import { ProjectType, ProjectVersion } from "@app/hooks/api/projects/types";
|
||||||
import { useUpdateFolderBatch } from "@app/hooks/api/secretFolders/queries";
|
import { useUpdateFolderBatch } from "@app/hooks/api/secretFolders/queries";
|
||||||
import { TUpdateFolderBatchDTO } from "@app/hooks/api/secretFolders/types";
|
import { TUpdateFolderBatchDTO } from "@app/hooks/api/secretFolders/types";
|
||||||
import { TSecretRotationV2 } from "@app/hooks/api/secretRotationsV2";
|
import { TSecretRotationV2 } from "@app/hooks/api/secretRotationsV2";
|
||||||
@@ -914,8 +914,8 @@ export const OverviewPage = () => {
|
|||||||
<div className="relative mx-auto max-w-8xl text-mineshaft-50 dark:scheme-dark">
|
<div className="relative mx-auto max-w-8xl text-mineshaft-50 dark:scheme-dark">
|
||||||
<div className="flex w-full items-baseline justify-between">
|
<div className="flex w-full items-baseline justify-between">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.SecretManager}
|
||||||
title="Secrets Overview"
|
title="Overview"
|
||||||
description={
|
description={
|
||||||
<p className="text-md text-bunker-300">
|
<p className="text-md text-bunker-300">
|
||||||
Inject your secrets using
|
Inject your secrets using
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2";
|
|||||||
import { Badge } from "@app/components/v2/Badge";
|
import { Badge } from "@app/components/v2/Badge";
|
||||||
import { useProject } from "@app/context";
|
import { useProject } from "@app/context";
|
||||||
import { useGetAccessRequestsCount, useGetSecretApprovalRequestCount } from "@app/hooks/api";
|
import { useGetAccessRequestsCount, useGetSecretApprovalRequestCount } from "@app/hooks/api";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
|
|
||||||
import { AccessApprovalRequest } from "./components/AccessApprovalRequest";
|
import { AccessApprovalRequest } from "./components/AccessApprovalRequest";
|
||||||
import { ApprovalPolicyList } from "./components/ApprovalPolicyList";
|
import { ApprovalPolicyList } from "./components/ApprovalPolicyList";
|
||||||
@@ -40,7 +41,7 @@ export const SecretApprovalsPage = () => {
|
|||||||
</Helmet>
|
</Helmet>
|
||||||
<div className="mx-auto h-full w-full max-w-8xl bg-bunker-800 text-white">
|
<div className="mx-auto h-full w-full max-w-8xl bg-bunker-800 text-white">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.SecretManager}
|
||||||
title="Approval Workflows"
|
title="Approval Workflows"
|
||||||
description="Create approval policies for any modifications to secrets in sensitive environments and folders."
|
description="Create approval policies for any modifications to secrets in sensitive environments and folders."
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ import { dashboardKeys } from "@app/hooks/api/dashboard/queries";
|
|||||||
import { DashboardSecretsOrderBy } from "@app/hooks/api/dashboard/types";
|
import { DashboardSecretsOrderBy } from "@app/hooks/api/dashboard/types";
|
||||||
import { useGetFolderCommitsCount } from "@app/hooks/api/folderCommits";
|
import { useGetFolderCommitsCount } from "@app/hooks/api/folderCommits";
|
||||||
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
||||||
import { ProjectVersion } from "@app/hooks/api/projects/types";
|
import { ProjectType, ProjectVersion } from "@app/hooks/api/projects/types";
|
||||||
import { queryClient } from "@app/hooks/api/reactQuery";
|
import { queryClient } from "@app/hooks/api/reactQuery";
|
||||||
import { PendingAction } from "@app/hooks/api/secretFolders/types";
|
import { PendingAction } from "@app/hooks/api/secretFolders/types";
|
||||||
import { useCreateCommit } from "@app/hooks/api/secrets/mutations";
|
import { useCreateCommit } from "@app/hooks/api/secrets/mutations";
|
||||||
@@ -777,7 +777,7 @@ const Page = () => {
|
|||||||
Secrets Overview
|
Secrets Overview
|
||||||
</Link>
|
</Link>
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.SecretManager}
|
||||||
title="Secrets Management"
|
title="Secrets Management"
|
||||||
description={
|
description={
|
||||||
<p className="text-md text-bunker-300">
|
<p className="text-md text-bunker-300">
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ import {
|
|||||||
useGetSecretRotations,
|
useGetSecretRotations,
|
||||||
useRestartSecretRotation
|
useRestartSecretRotation
|
||||||
} from "@app/hooks/api";
|
} from "@app/hooks/api";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
import { TSecretRotationProviderTemplate } from "@app/hooks/api/secretRotation/types";
|
import { TSecretRotationProviderTemplate } from "@app/hooks/api/secretRotation/types";
|
||||||
import { CreateRotationForm } from "@app/pages/secret-manager/SecretRotationPage/components/CreateRotationForm";
|
import { CreateRotationForm } from "@app/pages/secret-manager/SecretRotationPage/components/CreateRotationForm";
|
||||||
|
|
||||||
@@ -147,7 +148,7 @@ const Page = () => {
|
|||||||
return (
|
return (
|
||||||
<div className="container mx-auto w-full max-w-8xl bg-bunker-800 text-white">
|
<div className="container mx-auto w-full max-w-8xl bg-bunker-800 text-white">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.SecretManager}
|
||||||
title="Secret Rotation"
|
title="Secret Rotation"
|
||||||
description="Stop manually rotating secrets and automate credential rotation."
|
description="Stop manually rotating secrets and automate credential rotation."
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { useTranslation } from "react-i18next";
|
|||||||
|
|
||||||
import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2";
|
import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2";
|
||||||
import { useProject } from "@app/context";
|
import { useProject } from "@app/context";
|
||||||
import { ProjectVersion } from "@app/hooks/api/projects/types";
|
import { ProjectType, ProjectVersion } from "@app/hooks/api/projects/types";
|
||||||
import { ProjectGeneralTab } from "@app/pages/project/SettingsPage/components/ProjectGeneralTab";
|
import { ProjectGeneralTab } from "@app/pages/project/SettingsPage/components/ProjectGeneralTab";
|
||||||
|
|
||||||
import { EncryptionTab } from "./components/EncryptionTab";
|
import { EncryptionTab } from "./components/EncryptionTab";
|
||||||
@@ -42,7 +42,7 @@ export const SettingsPage = () => {
|
|||||||
</Helmet>
|
</Helmet>
|
||||||
<div className="w-full max-w-8xl">
|
<div className="w-full max-w-8xl">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.SecretManager}
|
||||||
title="Settings"
|
title="Settings"
|
||||||
description="Configure your secret manager's encryption, environments, webhooks and other configurations."
|
description="Configure your secret manager's encryption, environments, webhooks and other configurations."
|
||||||
/>
|
/>
|
||||||
|
|||||||
+2
-1
@@ -7,6 +7,7 @@ import {
|
|||||||
ProjectPermissionSecretScanningDataSourceActions,
|
ProjectPermissionSecretScanningDataSourceActions,
|
||||||
ProjectPermissionSub
|
ProjectPermissionSub
|
||||||
} from "@app/context/ProjectPermissionContext/types";
|
} from "@app/context/ProjectPermissionContext/types";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
|
|
||||||
import { SecretScanningDataSourcesSection } from "./components";
|
import { SecretScanningDataSourcesSection } from "./components";
|
||||||
|
|
||||||
@@ -26,7 +27,7 @@ export const SecretScanningDataSourcesPage = () => {
|
|||||||
<div className="mx-auto flex flex-col justify-between bg-bunker-800 text-white">
|
<div className="mx-auto flex flex-col justify-between bg-bunker-800 text-white">
|
||||||
<div className="mx-auto mb-6 w-full max-w-8xl">
|
<div className="mx-auto mb-6 w-full max-w-8xl">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.SecretScanning}
|
||||||
title="Data Sources"
|
title="Data Sources"
|
||||||
description="Manage your Secret Scanning data sources."
|
description="Manage your Secret Scanning data sources."
|
||||||
/>
|
/>
|
||||||
|
|||||||
+2
-1
@@ -5,6 +5,7 @@ import { ProjectPermissionCan } from "@app/components/permissions";
|
|||||||
import { PageHeader } from "@app/components/v2";
|
import { PageHeader } from "@app/components/v2";
|
||||||
import { ProjectPermissionSub } from "@app/context";
|
import { ProjectPermissionSub } from "@app/context";
|
||||||
import { ProjectPermissionSecretScanningFindingActions } from "@app/context/ProjectPermissionContext/types";
|
import { ProjectPermissionSecretScanningFindingActions } from "@app/context/ProjectPermissionContext/types";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
|
|
||||||
import { SecretScanningFindingsSection } from "./components";
|
import { SecretScanningFindingsSection } from "./components";
|
||||||
|
|
||||||
@@ -24,7 +25,7 @@ export const SecretScanningFindingsPage = () => {
|
|||||||
<div className="mx-auto flex flex-col justify-between bg-bunker-800 text-white">
|
<div className="mx-auto flex flex-col justify-between bg-bunker-800 text-white">
|
||||||
<div className="mx-auto mb-6 w-full max-w-8xl">
|
<div className="mx-auto mb-6 w-full max-w-8xl">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.SecretScanning}
|
||||||
title="Findings"
|
title="Findings"
|
||||||
description="View Secret Leaks across your project."
|
description="View Secret Leaks across your project."
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { ProjectPermissionCan } from "@app/components/permissions";
|
|||||||
import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2";
|
import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2";
|
||||||
import { ProjectPermissionSub } from "@app/context";
|
import { ProjectPermissionSub } from "@app/context";
|
||||||
import { ProjectPermissionSecretScanningConfigActions } from "@app/context/ProjectPermissionContext/types";
|
import { ProjectPermissionSecretScanningConfigActions } from "@app/context/ProjectPermissionContext/types";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
import { ProjectGeneralTab } from "@app/pages/project/SettingsPage/components/ProjectGeneralTab";
|
import { ProjectGeneralTab } from "@app/pages/project/SettingsPage/components/ProjectGeneralTab";
|
||||||
|
|
||||||
import { ProjectScanningConfigTab } from "./components/ProjectScanningConfigTab";
|
import { ProjectScanningConfigTab } from "./components/ProjectScanningConfigTab";
|
||||||
@@ -19,7 +20,7 @@ export const SettingsPage = () => {
|
|||||||
</Helmet>
|
</Helmet>
|
||||||
<div className="w-full max-w-8xl">
|
<div className="w-full max-w-8xl">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.SecretScanning}
|
||||||
title="Settings"
|
title="Settings"
|
||||||
description="Configure your Secret Scanning product's configurations."
|
description="Configure your Secret Scanning product's configurations."
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import { useTranslation } from "react-i18next";
|
|||||||
import { ProjectPermissionCan } from "@app/components/permissions";
|
import { ProjectPermissionCan } from "@app/components/permissions";
|
||||||
import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2";
|
import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2";
|
||||||
import { ProjectPermissionActions, ProjectPermissionSub } from "@app/context";
|
import { ProjectPermissionActions, ProjectPermissionSub } from "@app/context";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
import { ProjectGeneralTab } from "@app/pages/project/SettingsPage/components/ProjectGeneralTab";
|
import { ProjectGeneralTab } from "@app/pages/project/SettingsPage/components/ProjectGeneralTab";
|
||||||
|
|
||||||
import { ProjectSshTab } from "./components/ProjectSshTab";
|
import { ProjectSshTab } from "./components/ProjectSshTab";
|
||||||
@@ -18,7 +19,7 @@ export const SettingsPage = () => {
|
|||||||
</Helmet>
|
</Helmet>
|
||||||
<div className="w-full max-w-8xl">
|
<div className="w-full max-w-8xl">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.SSH}
|
||||||
title="Settings"
|
title="Settings"
|
||||||
description="Configure your SSH product's configurations."
|
description="Configure your SSH product's configurations."
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import {
|
|||||||
import { ROUTE_PATHS } from "@app/const/routes";
|
import { ROUTE_PATHS } from "@app/const/routes";
|
||||||
import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context";
|
import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context";
|
||||||
import { useDeleteSshCa, useGetSshCaById } from "@app/hooks/api";
|
import { useDeleteSshCa, useGetSshCaById } from "@app/hooks/api";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
import { usePopUp } from "@app/hooks/usePopUp";
|
import { usePopUp } from "@app/hooks/usePopUp";
|
||||||
|
|
||||||
import { SshCaModal } from "../SshCasPage/components/SshCaModal";
|
import { SshCaModal } from "../SshCasPage/components/SshCaModal";
|
||||||
@@ -83,7 +84,7 @@ const Page = () => {
|
|||||||
Certificate Authorities
|
Certificate Authorities
|
||||||
</Link>
|
</Link>
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.SSH}
|
||||||
description="Configure Certificate Authority"
|
description="Configure Certificate Authority"
|
||||||
title={data.friendlyName}
|
title={data.friendlyName}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { Helmet } from "react-helmet";
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
import { PageHeader } from "@app/components/v2";
|
import { PageHeader } from "@app/components/v2";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
|
|
||||||
import { SshCaSection } from "./components";
|
import { SshCaSection } from "./components";
|
||||||
|
|
||||||
@@ -16,7 +17,7 @@ export const SshCasPage = () => {
|
|||||||
<div className="mx-auto flex flex-col justify-between bg-bunker-800 text-white">
|
<div className="mx-auto flex flex-col justify-between bg-bunker-800 text-white">
|
||||||
<div className="mx-auto mb-6 w-full max-w-8xl">
|
<div className="mx-auto mb-6 w-full max-w-8xl">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.SSH}
|
||||||
title="SSH Certificate Authorities"
|
title="SSH Certificate Authorities"
|
||||||
description="Manage the SSH certificate authorities used to sign user and host certificates, including custom and default CAs."
|
description="Manage the SSH certificate authorities used to sign user and host certificates, including custom and default CAs."
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { Helmet } from "react-helmet";
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
import { PageHeader } from "@app/components/v2";
|
import { PageHeader } from "@app/components/v2";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
|
|
||||||
import { SshCertificatesSection } from "./components";
|
import { SshCertificatesSection } from "./components";
|
||||||
|
|
||||||
@@ -16,7 +17,7 @@ export const SshCertsPage = () => {
|
|||||||
<div className="mx-auto flex flex-col justify-between bg-bunker-800 text-white">
|
<div className="mx-auto flex flex-col justify-between bg-bunker-800 text-white">
|
||||||
<div className="mx-auto mb-6 w-full max-w-8xl">
|
<div className="mx-auto mb-6 w-full max-w-8xl">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.SSH}
|
||||||
title="SSH Certificates"
|
title="SSH Certificates"
|
||||||
description="View and audit all issued SSH certificates, including validity and associated access metadata."
|
description="View and audit all issued SSH certificates, including validity and associated access metadata."
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import {
|
|||||||
import { ROUTE_PATHS } from "@app/const/routes";
|
import { ROUTE_PATHS } from "@app/const/routes";
|
||||||
import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context";
|
import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context";
|
||||||
import { useDeleteSshHostGroup, useGetSshHostGroupById } from "@app/hooks/api";
|
import { useDeleteSshHostGroup, useGetSshHostGroupById } from "@app/hooks/api";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
import { usePopUp } from "@app/hooks/usePopUp";
|
import { usePopUp } from "@app/hooks/usePopUp";
|
||||||
|
|
||||||
import { SshHostGroupModal } from "../SshHostsPage/components/SshHostGroupModal";
|
import { SshHostGroupModal } from "../SshHostsPage/components/SshHostGroupModal";
|
||||||
@@ -83,7 +84,7 @@ const Page = () => {
|
|||||||
<FontAwesomeIcon icon={faChevronLeft} />
|
<FontAwesomeIcon icon={faChevronLeft} />
|
||||||
Hosts
|
Hosts
|
||||||
</Link>
|
</Link>
|
||||||
<PageHeader scope="project" title={data.name} description="Configure SSH Group">
|
<PageHeader scope={ProjectType.SSH} title={data.name} description="Configure SSH Group">
|
||||||
<DropdownMenu>
|
<DropdownMenu>
|
||||||
<DropdownMenuTrigger asChild className="rounded-lg">
|
<DropdownMenuTrigger asChild className="rounded-lg">
|
||||||
<div className="hover:text-primary-400 data-[state=open]:text-primary-400">
|
<div className="hover:text-primary-400 data-[state=open]:text-primary-400">
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { Helmet } from "react-helmet";
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
import { PageHeader } from "@app/components/v2";
|
import { PageHeader } from "@app/components/v2";
|
||||||
|
import { ProjectType } from "@app/hooks/api/projects/types";
|
||||||
|
|
||||||
import { SshHostGroupsSection, SshHostsSection } from "./components";
|
import { SshHostGroupsSection, SshHostsSection } from "./components";
|
||||||
|
|
||||||
@@ -16,7 +17,7 @@ export const SshHostsPage = () => {
|
|||||||
<div className="mx-auto flex flex-col justify-between bg-bunker-800 text-white">
|
<div className="mx-auto flex flex-col justify-between bg-bunker-800 text-white">
|
||||||
<div className="mx-auto mb-6 w-full max-w-8xl">
|
<div className="mx-auto mb-6 w-full max-w-8xl">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope="project"
|
scope={ProjectType.SSH}
|
||||||
title="Hosts"
|
title="Hosts"
|
||||||
description="Manage your SSH hosts, configure access policies, and define login behavior for secure connections."
|
description="Manage your SSH hosts, configure access policies, and define login behavior for secure connections."
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in New Issue
Block a user