mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-08 09:27:50 +00:00
feat: resolved frontend url changes and resolved ts error
This commit is contained in:
@@ -6,7 +6,6 @@ import { twMerge } from "tailwind-merge";
|
|||||||
|
|
||||||
import { useOrganization, useWorkspace } from "@app/context";
|
import { useOrganization, useWorkspace } from "@app/context";
|
||||||
import { useToggle } from "@app/hooks";
|
import { useToggle } from "@app/hooks";
|
||||||
import { ProjectType } from "@app/hooks/api/workspace/types";
|
|
||||||
|
|
||||||
import { createNotification } from "../notifications";
|
import { createNotification } from "../notifications";
|
||||||
import { IconButton, Select, SelectItem, Tooltip } from "../v2";
|
import { IconButton, Select, SelectItem, Tooltip } from "../v2";
|
||||||
@@ -93,7 +92,7 @@ export default function NavHeader({
|
|||||||
<FontAwesomeIcon icon={faAngleRight} className="ml-3 mr-3 text-sm text-gray-400" />
|
<FontAwesomeIcon icon={faAngleRight} className="ml-3 mr-3 text-sm text-gray-400" />
|
||||||
{pageName === "Secrets" ? (
|
{pageName === "Secrets" ? (
|
||||||
<Link
|
<Link
|
||||||
to="/projects/$projectId/secret-manager/overview"
|
to="/projects/secret-management/$projectId/overview"
|
||||||
params={{ projectId: currentWorkspace.id }}
|
params={{ projectId: currentWorkspace.id }}
|
||||||
className="text-sm font-semibold text-primary/80 hover:text-primary"
|
className="text-sm font-semibold text-primary/80 hover:text-primary"
|
||||||
>
|
>
|
||||||
@@ -129,7 +128,7 @@ export default function NavHeader({
|
|||||||
<div className="flex items-center space-x-3">
|
<div className="flex items-center space-x-3">
|
||||||
<FontAwesomeIcon icon={faAngleRight} className="ml-3 mr-1.5 text-xs text-gray-400" />
|
<FontAwesomeIcon icon={faAngleRight} className="ml-3 mr-1.5 text-xs text-gray-400" />
|
||||||
<Link
|
<Link
|
||||||
to={`/projects/$projectId/${ProjectType.SecretManager}/secrets/$envSlug` as const}
|
to="/projects/secret-management/$projectId/secrets/$envSlug"
|
||||||
params={{ projectId: currentWorkspace.id, envSlug: routerEnvSlug }}
|
params={{ projectId: currentWorkspace.id, envSlug: routerEnvSlug }}
|
||||||
className="text-sm font-semibold text-primary/80 hover:text-primary"
|
className="text-sm font-semibold text-primary/80 hover:text-primary"
|
||||||
>
|
>
|
||||||
@@ -191,7 +190,7 @@ export default function NavHeader({
|
|||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
<Link
|
<Link
|
||||||
to={`/projects/$projectId/${ProjectType.SecretManager}/secrets/$envSlug` as const}
|
to="/projects/secret-management/$projectId/secrets/$envSlug"
|
||||||
params={{
|
params={{
|
||||||
projectId: currentWorkspace.id,
|
projectId: currentWorkspace.id,
|
||||||
envSlug: routerEnvSlug || ""
|
envSlug: routerEnvSlug || ""
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import { Link } from "@tanstack/react-router";
|
|||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
|
|
||||||
import { useTimedReset } from "@app/hooks";
|
import { useTimedReset } from "@app/hooks";
|
||||||
import { ProjectType } from "@app/hooks/api/workspace/types";
|
|
||||||
|
|
||||||
import { createNotification } from "../notifications";
|
import { createNotification } from "../notifications";
|
||||||
import { IconButton, Tooltip } from "../v2";
|
import { IconButton, Tooltip } from "../v2";
|
||||||
@@ -70,7 +69,7 @@ export const SecretDashboardPathBreadcrumb = ({
|
|||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
<Link
|
<Link
|
||||||
to={`/projects/$projectId/${ProjectType.SecretManager}/secrets/$envSlug` as const}
|
to="/projects/secret-management/$projectId/secrets/$envSlug"
|
||||||
params={{
|
params={{
|
||||||
projectId,
|
projectId,
|
||||||
envSlug: environmentSlug
|
envSlug: environmentSlug
|
||||||
|
|||||||
@@ -5,14 +5,12 @@ import { z } from "zod";
|
|||||||
|
|
||||||
import { createNotification } from "@app/components/notifications";
|
import { createNotification } from "@app/components/notifications";
|
||||||
import { ProjectPermissionCan } from "@app/components/permissions";
|
import { ProjectPermissionCan } from "@app/components/permissions";
|
||||||
import { Button, FormControl, Input, Select, SelectItem, TextArea } from "@app/components/v2";
|
import { Button, FormControl, Input, TextArea } from "@app/components/v2";
|
||||||
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context";
|
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context";
|
||||||
import { useUpdateProject } from "@app/hooks/api";
|
import { useUpdateProject } from "@app/hooks/api";
|
||||||
import { ProjectType } from "@app/hooks/api/workspace/types";
|
|
||||||
|
|
||||||
const baseFormSchema = z.object({
|
const baseFormSchema = z.object({
|
||||||
name: z.string().min(1, "Required").max(64, "Too long, maximum length is 64 characters"),
|
name: z.string().min(1, "Required").max(64, "Too long, maximum length is 64 characters"),
|
||||||
defaultProduct: z.nativeEnum(ProjectType).default(ProjectType.SecretManager),
|
|
||||||
description: z
|
description: z
|
||||||
.string()
|
.string()
|
||||||
.trim()
|
.trim()
|
||||||
@@ -52,7 +50,6 @@ export const ProjectOverviewChangeSection = ({ showSlugField = false }: Props) =
|
|||||||
reset({
|
reset({
|
||||||
name: currentWorkspace.name,
|
name: currentWorkspace.name,
|
||||||
description: currentWorkspace.description ?? "",
|
description: currentWorkspace.description ?? "",
|
||||||
defaultProduct: currentWorkspace.defaultProduct,
|
|
||||||
...(showSlugField && { slug: currentWorkspace.slug })
|
...(showSlugField && { slug: currentWorkspace.slug })
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -66,7 +63,6 @@ export const ProjectOverviewChangeSection = ({ showSlugField = false }: Props) =
|
|||||||
projectID: currentWorkspace.id,
|
projectID: currentWorkspace.id,
|
||||||
newProjectName: data.name,
|
newProjectName: data.name,
|
||||||
newProjectDescription: data.description,
|
newProjectDescription: data.description,
|
||||||
defaultProduct: data.defaultProduct,
|
|
||||||
...(showSlugField &&
|
...(showSlugField &&
|
||||||
"slug" in data && {
|
"slug" in data && {
|
||||||
newSlug: data.slug !== currentWorkspace.slug ? data.slug : undefined
|
newSlug: data.slug !== currentWorkspace.slug ? data.slug : undefined
|
||||||
@@ -216,31 +212,6 @@ export const ProjectOverviewChangeSection = ({ showSlugField = false }: Props) =
|
|||||||
</ProjectPermissionCan>
|
</ProjectPermissionCan>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<Controller
|
|
||||||
control={control}
|
|
||||||
name="defaultProduct"
|
|
||||||
defaultValue={ProjectType.SecretManager}
|
|
||||||
render={({ field: { onChange, ...field }, fieldState: { error } }) => (
|
|
||||||
<FormControl
|
|
||||||
label="Default Product"
|
|
||||||
errorText={error?.message}
|
|
||||||
isError={Boolean(error)}
|
|
||||||
>
|
|
||||||
<Select
|
|
||||||
defaultValue={field.value}
|
|
||||||
{...field}
|
|
||||||
onValueChange={(e) => onChange(e)}
|
|
||||||
className="w-full max-w-md bg-mineshaft-800"
|
|
||||||
>
|
|
||||||
<SelectItem value={ProjectType.SecretManager}>Secrets Manager</SelectItem>
|
|
||||||
<SelectItem value={ProjectType.CertificateManager}>PKI Manager</SelectItem>
|
|
||||||
<SelectItem value={ProjectType.KMS}>KMS</SelectItem>
|
|
||||||
<SelectItem value={ProjectType.SSH}>SSH</SelectItem>
|
|
||||||
<SelectItem value={ProjectType.SecretScanning}>Secret Scanning</SelectItem>
|
|
||||||
</Select>
|
|
||||||
</FormControl>
|
|
||||||
)}
|
|
||||||
/>
|
|
||||||
<div>
|
<div>
|
||||||
<ProjectPermissionCan
|
<ProjectPermissionCan
|
||||||
I={ProjectPermissionActions.Edit}
|
I={ProjectPermissionActions.Edit}
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ const NewProjectForm = ({ onOpenChange }: NewProjectFormProps) => {
|
|||||||
reset();
|
reset();
|
||||||
onOpenChange(false);
|
onOpenChange(false);
|
||||||
navigate({
|
navigate({
|
||||||
to: getProjectHomePage(project.defaultProduct),
|
to: getProjectHomePage(project.type),
|
||||||
params: { projectId: project.id }
|
params: { projectId: project.id }
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|||||||
+132
-132
@@ -70,276 +70,276 @@ export const ROUTE_PATHS = Object.freeze({
|
|||||||
},
|
},
|
||||||
SecretManager: {
|
SecretManager: {
|
||||||
ApprovalPage: setRoute(
|
ApprovalPage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/approval",
|
"/projects/secret-management/$projectId/approval",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/approval"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/approval"
|
||||||
),
|
),
|
||||||
SecretDashboardPage: setRoute(
|
SecretDashboardPage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/secrets/$envSlug",
|
"/projects/secret-management/$projectId/secrets/$envSlug",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/secrets/$envSlug"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/secrets/$envSlug"
|
||||||
),
|
),
|
||||||
RollbackPreviewPage: setRoute(
|
RollbackPreviewPage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/commits/$environment/$folderId/$commitId/restore",
|
"/projects/secret-management/$projectId/commits/$environment/$folderId/$commitId/restore",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/commits/$environment/$folderId/$commitId/restore"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/commits/$environment/$folderId/$commitId/restore"
|
||||||
),
|
),
|
||||||
CommitDetailsPage: setRoute(
|
CommitDetailsPage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/commits/$environment/$folderId/$commitId",
|
"/projects/secret-management/$projectId/commits/$environment/$folderId/$commitId",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/commits/$environment/$folderId/$commitId"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/commits/$environment/$folderId/$commitId"
|
||||||
),
|
),
|
||||||
CommitsPage: setRoute(
|
CommitsPage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/commits/$environment/$folderId",
|
"/projects/secret-management/$projectId/commits/$environment/$folderId",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/commits/$environment/$folderId"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/commits/$environment/$folderId"
|
||||||
),
|
),
|
||||||
OverviewPage: setRoute(
|
OverviewPage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/overview",
|
"/projects/secret-management/$projectId/overview",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/overview"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/overview"
|
||||||
),
|
),
|
||||||
IntegrationsListPage: setRoute(
|
IntegrationsListPage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations",
|
"/projects/secret-management/$projectId/integrations",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/"
|
||||||
),
|
),
|
||||||
IntegrationDetailsByIDPage: setRoute(
|
IntegrationDetailsByIDPage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/$integrationId",
|
"/projects/secret-management/$projectId/integrations/$integrationId",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/$integrationId"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/$integrationId"
|
||||||
),
|
),
|
||||||
SecretSyncDetailsByIDPage: setRoute(
|
SecretSyncDetailsByIDPage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/secret-syncs/$destination/$syncId",
|
"/projects/secret-management/$projectId/integrations/secret-syncs/$destination/$syncId",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/secret-syncs/$destination/$syncId"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/secret-syncs/$destination/$syncId"
|
||||||
),
|
),
|
||||||
Integratons: {
|
Integratons: {
|
||||||
SelectIntegrationAuth: setRoute(
|
SelectIntegrationAuth: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/select-integration-auth",
|
"/projects/secret-management/$projectId/integrations/select-integration-auth",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/select-integration-auth"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/select-integration-auth"
|
||||||
),
|
),
|
||||||
HerokuOauthCallbackPage: setRoute(
|
HerokuOauthCallbackPage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/heroku/oauth2/callback",
|
"/projects/secret-management/$projectId/integrations/heroku/oauth2/callback",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/heroku/oauth2/callback"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/heroku/oauth2/callback"
|
||||||
),
|
),
|
||||||
HerokuConfigurePage: setRoute(
|
HerokuConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/heroku/create",
|
"/projects/secret-management/$projectId/integrations/heroku/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/heroku/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/heroku/create"
|
||||||
),
|
),
|
||||||
AwsParameterStoreConfigurePage: setRoute(
|
AwsParameterStoreConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/aws-parameter-store/create",
|
"/projects/secret-management/$projectId/integrations/aws-parameter-store/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/aws-parameter-store/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/aws-parameter-store/create"
|
||||||
),
|
),
|
||||||
AwsSecretManagerConfigurePage: setRoute(
|
AwsSecretManagerConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/aws-secret-manager/create",
|
"/projects/secret-management/$projectId/integrations/aws-secret-manager/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/aws-secret-manager/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/aws-secret-manager/create"
|
||||||
),
|
),
|
||||||
AzureAppConfigurationsOauthCallbackPage: setRoute(
|
AzureAppConfigurationsOauthCallbackPage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/azure-app-configuration/oauth2/callback",
|
"/projects/secret-management/$projectId/integrations/azure-app-configuration/oauth2/callback",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/azure-app-configuration/oauth2/callback"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/azure-app-configuration/oauth2/callback"
|
||||||
),
|
),
|
||||||
AzureAppConfigurationsConfigurePage: setRoute(
|
AzureAppConfigurationsConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/azure-app-configuration/create",
|
"/projects/secret-management/$projectId/integrations/azure-app-configuration/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/azure-app-configuration/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/azure-app-configuration/create"
|
||||||
),
|
),
|
||||||
AzureDevopsConfigurePage: setRoute(
|
AzureDevopsConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/azure-devops/create",
|
"/projects/secret-management/$projectId/integrations/azure-devops/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/azure-devops/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/azure-devops/create"
|
||||||
),
|
),
|
||||||
AzureKeyVaultAuthorizePage: setRoute(
|
AzureKeyVaultAuthorizePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/azure-key-vault/authorize",
|
"/projects/secret-management/$projectId/integrations/azure-key-vault/authorize",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/azure-key-vault/authorize"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/azure-key-vault/authorize"
|
||||||
),
|
),
|
||||||
AzureKeyVaultOauthCallbackPage: setRoute(
|
AzureKeyVaultOauthCallbackPage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/azure-key-vault/oauth2/callback",
|
"/projects/secret-management/$projectId/integrations/azure-key-vault/oauth2/callback",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/azure-key-vault/oauth2/callback"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/azure-key-vault/oauth2/callback"
|
||||||
),
|
),
|
||||||
AzureKeyVaultConfigurePage: setRoute(
|
AzureKeyVaultConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/azure-key-vault/create",
|
"/projects/secret-management/$projectId/integrations/azure-key-vault/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/azure-key-vault/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/azure-key-vault/create"
|
||||||
),
|
),
|
||||||
BitbucketOauthCallbackPage: setRoute(
|
BitbucketOauthCallbackPage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/bitbucket/oauth2/callback",
|
"/projects/secret-management/$projectId/integrations/bitbucket/oauth2/callback",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/bitbucket/oauth2/callback"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/bitbucket/oauth2/callback"
|
||||||
),
|
),
|
||||||
BitbucketConfigurePage: setRoute(
|
BitbucketConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/bitbucket/create",
|
"/projects/secret-management/$projectId/integrations/bitbucket/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/bitbucket/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/bitbucket/create"
|
||||||
),
|
),
|
||||||
ChecklyConfigurePage: setRoute(
|
ChecklyConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/checkly/create",
|
"/projects/secret-management/$projectId/integrations/checkly/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/checkly/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/checkly/create"
|
||||||
),
|
),
|
||||||
CircleConfigurePage: setRoute(
|
CircleConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/circleci/create",
|
"/projects/secret-management/$projectId/integrations/circleci/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/circleci/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/circleci/create"
|
||||||
),
|
),
|
||||||
CloudflarePagesConfigurePage: setRoute(
|
CloudflarePagesConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/cloudflare-pages/create",
|
"/projects/secret-management/$projectId/integrations/cloudflare-pages/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/cloudflare-pages/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/cloudflare-pages/create"
|
||||||
),
|
),
|
||||||
DigitalOceanAppPlatformConfigurePage: setRoute(
|
DigitalOceanAppPlatformConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/digital-ocean-app-platform/create",
|
"/projects/secret-management/$projectId/integrations/digital-ocean-app-platform/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/digital-ocean-app-platform/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/digital-ocean-app-platform/create"
|
||||||
),
|
),
|
||||||
CloudflareWorkersConfigurePage: setRoute(
|
CloudflareWorkersConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/cloudflare-workers/create",
|
"/projects/secret-management/$projectId/integrations/cloudflare-workers/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/cloudflare-workers/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/cloudflare-workers/create"
|
||||||
),
|
),
|
||||||
CodefreshConfigurePage: setRoute(
|
CodefreshConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/codefresh/create",
|
"/projects/secret-management/$projectId/integrations/codefresh/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/codefresh/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/codefresh/create"
|
||||||
),
|
),
|
||||||
GcpSecretManagerConfigurePage: setRoute(
|
GcpSecretManagerConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/gcp-secret-manager/create",
|
"/projects/secret-management/$projectId/integrations/gcp-secret-manager/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/gcp-secret-manager/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/gcp-secret-manager/create"
|
||||||
),
|
),
|
||||||
GcpSecretManagerOauthCallbackPage: setRoute(
|
GcpSecretManagerOauthCallbackPage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/gcp-secret-manager/oauth2/callback",
|
"/projects/secret-management/$projectId/integrations/gcp-secret-manager/oauth2/callback",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/gcp-secret-manager/oauth2/callback"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/gcp-secret-manager/oauth2/callback"
|
||||||
),
|
),
|
||||||
GithubConfigurePage: setRoute(
|
GithubConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/github/create",
|
"/projects/secret-management/$projectId/integrations/github/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/github/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/github/create"
|
||||||
),
|
),
|
||||||
GithubOauthCallbackPage: setRoute(
|
GithubOauthCallbackPage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/github/oauth2/callback",
|
"/projects/secret-management/$projectId/integrations/github/oauth2/callback",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/github/oauth2/callback"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/github/oauth2/callback"
|
||||||
),
|
),
|
||||||
GitlabConfigurePage: setRoute(
|
GitlabConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/gitlab/create",
|
"/projects/secret-management/$projectId/integrations/gitlab/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/gitlab/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/gitlab/create"
|
||||||
),
|
),
|
||||||
GitlabOauthCallbackPage: setRoute(
|
GitlabOauthCallbackPage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/gitlab/oauth2/callback",
|
"/projects/secret-management/$projectId/integrations/gitlab/oauth2/callback",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/gitlab/oauth2/callback"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/gitlab/oauth2/callback"
|
||||||
),
|
),
|
||||||
VercelOauthCallbackPage: setRoute(
|
VercelOauthCallbackPage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/vercel/oauth2/callback",
|
"/projects/secret-management/$projectId/integrations/vercel/oauth2/callback",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/vercel/oauth2/callback"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/vercel/oauth2/callback"
|
||||||
),
|
),
|
||||||
VercelConfigurePage: setRoute(
|
VercelConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/vercel/create",
|
"/projects/secret-management/$projectId/integrations/vercel/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/vercel/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/vercel/create"
|
||||||
),
|
),
|
||||||
FlyioConfigurePage: setRoute(
|
FlyioConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/flyio/create",
|
"/projects/secret-management/$projectId/integrations/flyio/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/flyio/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/flyio/create"
|
||||||
),
|
),
|
||||||
HashicorpVaultConfigurePage: setRoute(
|
HashicorpVaultConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/hashicorp-vault/create",
|
"/projects/secret-management/$projectId/integrations/hashicorp-vault/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/hashicorp-vault/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/hashicorp-vault/create"
|
||||||
),
|
),
|
||||||
HasuraCloudConfigurePage: setRoute(
|
HasuraCloudConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/hasura-cloud/create",
|
"/projects/secret-management/$projectId/integrations/hasura-cloud/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/hasura-cloud/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/hasura-cloud/create"
|
||||||
),
|
),
|
||||||
LaravelForgeConfigurePage: setRoute(
|
LaravelForgeConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/laravel-forge/create",
|
"/projects/secret-management/$projectId/integrations/laravel-forge/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/laravel-forge/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/laravel-forge/create"
|
||||||
),
|
),
|
||||||
NorthflankConfigurePage: setRoute(
|
NorthflankConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/northflank/create",
|
"/projects/secret-management/$projectId/integrations/northflank/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/northflank/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/northflank/create"
|
||||||
),
|
),
|
||||||
RailwayConfigurePage: setRoute(
|
RailwayConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/railway/create",
|
"/projects/secret-management/$projectId/integrations/railway/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/railway/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/railway/create"
|
||||||
),
|
),
|
||||||
RenderConfigurePage: setRoute(
|
RenderConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/render/create",
|
"/projects/secret-management/$projectId/integrations/render/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/render/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/render/create"
|
||||||
),
|
),
|
||||||
RundeckConfigurePage: setRoute(
|
RundeckConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/rundeck/create",
|
"/projects/secret-management/$projectId/integrations/rundeck/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/rundeck/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/rundeck/create"
|
||||||
),
|
),
|
||||||
WindmillConfigurePage: setRoute(
|
WindmillConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/windmill/create",
|
"/projects/secret-management/$projectId/integrations/windmill/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/windmill/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/windmill/create"
|
||||||
),
|
),
|
||||||
TravisCIConfigurePage: setRoute(
|
TravisCIConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/travisci/create",
|
"/projects/secret-management/$projectId/integrations/travisci/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/travisci/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/travisci/create"
|
||||||
),
|
),
|
||||||
TerraformCloudConfigurePage: setRoute(
|
TerraformCloudConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/terraform-cloud/create",
|
"/projects/secret-management/$projectId/integrations/terraform-cloud/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/terraform-cloud/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/terraform-cloud/create"
|
||||||
),
|
),
|
||||||
TeamcityConfigurePage: setRoute(
|
TeamcityConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/teamcity/create",
|
"/projects/secret-management/$projectId/integrations/teamcity/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/teamcity/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/teamcity/create"
|
||||||
),
|
),
|
||||||
SupabaseConfigurePage: setRoute(
|
SupabaseConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/supabase/create",
|
"/projects/secret-management/$projectId/integrations/supabase/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/supabase/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/supabase/create"
|
||||||
),
|
),
|
||||||
OctopusDeployCloudConfigurePage: setRoute(
|
OctopusDeployCloudConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/octopus-deploy/create",
|
"/projects/secret-management/$projectId/integrations/octopus-deploy/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/octopus-deploy/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/octopus-deploy/create"
|
||||||
),
|
),
|
||||||
DatabricksConfigurePage: setRoute(
|
DatabricksConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/databricks/create",
|
"/projects/secret-management/$projectId/integrations/databricks/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/databricks/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/databricks/create"
|
||||||
),
|
),
|
||||||
QoveryConfigurePage: setRoute(
|
QoveryConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/qovery/create",
|
"/projects/secret-management/$projectId/integrations/qovery/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/qovery/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/qovery/create"
|
||||||
),
|
),
|
||||||
Cloud66ConfigurePage: setRoute(
|
Cloud66ConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/cloud-66/create",
|
"/projects/secret-management/$projectId/integrations/cloud-66/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/cloud-66/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/cloud-66/create"
|
||||||
),
|
),
|
||||||
NetlifyConfigurePage: setRoute(
|
NetlifyConfigurePage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/netlify/create",
|
"/projects/secret-management/$projectId/integrations/netlify/create",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/netlify/create"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/netlify/create"
|
||||||
),
|
),
|
||||||
NetlifyOuathCallbackPage: setRoute(
|
NetlifyOuathCallbackPage: setRoute(
|
||||||
"/projects/$projectId/secret-manager/integrations/netlify/oauth2/callback",
|
"/projects/secret-management/$projectId/integrations/netlify/oauth2/callback",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/netlify/oauth2/callback"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/netlify/oauth2/callback"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
CertManager: {
|
CertManager: {
|
||||||
CertAuthDetailsByIDPage: setRoute(
|
CertAuthDetailsByIDPage: setRoute(
|
||||||
"/projects/$projectId/cert-manager/ca/$caName",
|
"/projects/cert-management/$projectId/ca/$caName",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/ca/$caName"
|
"/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/ca/$caName"
|
||||||
),
|
),
|
||||||
SubscribersPage: setRoute(
|
SubscribersPage: setRoute(
|
||||||
"/projects/$projectId/cert-manager/subscribers",
|
"/projects/cert-management/$projectId/subscribers",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/subscribers"
|
"/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/subscribers"
|
||||||
),
|
),
|
||||||
CertificatesPage: setRoute(
|
CertificatesPage: setRoute(
|
||||||
"/projects/$projectId/cert-manager/certificates",
|
"/projects/cert-management/$projectId/certificates",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/certificates"
|
"/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/certificates"
|
||||||
),
|
),
|
||||||
CertificateAuthoritiesPage: setRoute(
|
CertificateAuthoritiesPage: setRoute(
|
||||||
"/projects/$projectId/cert-manager/certificate-authorities",
|
"/projects/cert-management/$projectId/certificate-authorities",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/certificate-authorities"
|
"/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/certificate-authorities"
|
||||||
),
|
),
|
||||||
AlertingPage: setRoute(
|
AlertingPage: setRoute(
|
||||||
"/projects/$projectId/cert-manager/alerting",
|
"/projects/cert-management/$projectId/alerting",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/alerting"
|
"/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/alerting"
|
||||||
),
|
),
|
||||||
PkiCollectionDetailsByIDPage: setRoute(
|
PkiCollectionDetailsByIDPage: setRoute(
|
||||||
"/projects/$projectId/cert-manager/pki-collections/$collectionId",
|
"/projects/cert-management/$projectId/pki-collections/$collectionId",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/pki-collections/$collectionId"
|
"/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/pki-collections/$collectionId"
|
||||||
),
|
),
|
||||||
PkiSubscriberDetailsByIDPage: setRoute(
|
PkiSubscriberDetailsByIDPage: setRoute(
|
||||||
"/projects/$projectId/cert-manager/subscribers/$subscriberName",
|
"/projects/cert-management/$projectId/subscribers/$subscriberName",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/subscribers/$subscriberName"
|
"/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/subscribers/$subscriberName"
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
Ssh: {
|
Ssh: {
|
||||||
SshCaByIDPage: setRoute(
|
SshCaByIDPage: setRoute(
|
||||||
"/projects/$projectId/ssh/ca/$caId",
|
"/projects/ssh/$projectId/ca/$caId",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/ssh/_ssh-layout/ca/$caId"
|
"/_authenticate/_inject-org-details/_org-layout/projects/ssh/$projectId/_ssh-layout/ca/$caId"
|
||||||
),
|
),
|
||||||
SshHostGroupDetailsByIDPage: setRoute(
|
SshHostGroupDetailsByIDPage: setRoute(
|
||||||
"/projects/$projectId/ssh/ssh-host-groups/$sshHostGroupId",
|
"/projects/ssh/$projectId/ssh-host-groups/$sshHostGroupId",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/ssh/_ssh-layout/ssh-host-groups/$sshHostGroupId"
|
"/_authenticate/_inject-org-details/_org-layout/projects/ssh/$projectId/_ssh-layout/ssh-host-groups/$sshHostGroupId"
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
SecretScanning: {
|
SecretScanning: {
|
||||||
DataSourceByIdPage: setRoute(
|
DataSourceByIdPage: setRoute(
|
||||||
"/projects/$projectId/secret-scanning/data-sources/$type/$dataSourceId",
|
"/projects/secret-scanning/$projectId/data-sources/$type/$dataSourceId",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-scanning/_secret-scanning-layout/data-sources/$type/$dataSourceId"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-scanning/$projectId/_secret-scanning-layout/data-sources/$type/$dataSourceId"
|
||||||
),
|
),
|
||||||
FindingsPage: setRoute(
|
FindingsPage: setRoute(
|
||||||
"/projects/$projectId/secret-scanning/findings",
|
"/projects/secret-scanning/$projectId/findings",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-scanning/_secret-scanning-layout/findings"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-scanning/$projectId/_secret-scanning-layout/findings"
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
Public: {
|
Public: {
|
||||||
|
|||||||
@@ -59,14 +59,28 @@ export const initProjectHelper = async ({ projectName }: { projectName: string }
|
|||||||
|
|
||||||
return project;
|
return project;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const getProjectBaseURL = (type: ProjectType) => {
|
||||||
|
switch (type) {
|
||||||
|
case ProjectType.SecretManager:
|
||||||
|
return "/projects/secret-management/$projectId";
|
||||||
|
case ProjectType.CertificateManager:
|
||||||
|
return "/projects/cert-management/$projectId";
|
||||||
|
default:
|
||||||
|
return `/projects/${type}/$projectId` as const;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
export const getProjectHomePage = (type: ProjectType) => {
|
export const getProjectHomePage = (type: ProjectType) => {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
case ProjectType.SecretManager:
|
||||||
|
return "/projects/secret-management/$projectId/overview";
|
||||||
case ProjectType.CertificateManager:
|
case ProjectType.CertificateManager:
|
||||||
return `/projects/$projectId/${type}/subscribers` as const;
|
return "/projects/cert-management/$projectId/subscribers";
|
||||||
case ProjectType.SecretScanning:
|
case ProjectType.SecretScanning:
|
||||||
return `/projects/$projectId/${type}/data-sources` as const;
|
return `/projects/${type}/$projectId/data-sources` as const;
|
||||||
default:
|
default:
|
||||||
return `/projects/$projectId/${type}/overview` as const;
|
return `/projects/${type}/$projectId/overview` as const;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -80,8 +94,3 @@ export const getProjectTitle = (type: ProjectType) => {
|
|||||||
};
|
};
|
||||||
return titleConvert[type];
|
return titleConvert[type];
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getCurrentProductFromUrl = (location: string) => {
|
|
||||||
const type = Object.values(ProjectType).find((el) => location.includes(`/${el}`));
|
|
||||||
return type;
|
|
||||||
};
|
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ export type IdentityMembershipOrg = {
|
|||||||
export type IdentityMembership = {
|
export type IdentityMembership = {
|
||||||
id: string;
|
id: string;
|
||||||
identity: Identity;
|
identity: Identity;
|
||||||
project: Pick<Workspace, "id" | "name" | "defaultProduct">;
|
project: Pick<Workspace, "id" | "name">;
|
||||||
roles: Array<
|
roles: Array<
|
||||||
{
|
{
|
||||||
id: string;
|
id: string;
|
||||||
|
|||||||
@@ -255,12 +255,13 @@ export const useCreateWorkspace = () => {
|
|||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
|
|
||||||
return useMutation<{ data: { project: Workspace } }, object, CreateWorkspaceDTO>({
|
return useMutation<{ data: { project: Workspace } }, object, CreateWorkspaceDTO>({
|
||||||
mutationFn: async ({ projectName, projectDescription, kmsKeyId, template }) =>
|
mutationFn: async ({ projectName, projectDescription, kmsKeyId, template, type }) =>
|
||||||
createWorkspace({
|
createWorkspace({
|
||||||
projectName,
|
projectName,
|
||||||
projectDescription,
|
projectDescription,
|
||||||
kmsKeyId,
|
kmsKeyId,
|
||||||
template
|
template,
|
||||||
|
type
|
||||||
}),
|
}),
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
queryClient.invalidateQueries({
|
queryClient.invalidateQueries({
|
||||||
@@ -280,8 +281,7 @@ export const useUpdateProject = () => {
|
|||||||
newProjectDescription,
|
newProjectDescription,
|
||||||
newSlug,
|
newSlug,
|
||||||
secretSharing,
|
secretSharing,
|
||||||
showSnapshotsLegacy,
|
showSnapshotsLegacy
|
||||||
defaultProduct
|
|
||||||
}) => {
|
}) => {
|
||||||
const { data } = await apiRequest.patch<{ workspace: Workspace }>(
|
const { data } = await apiRequest.patch<{ workspace: Workspace }>(
|
||||||
`/api/v1/workspace/${projectID}`,
|
`/api/v1/workspace/${projectID}`,
|
||||||
@@ -289,7 +289,6 @@ export const useUpdateProject = () => {
|
|||||||
name: newProjectName,
|
name: newProjectName,
|
||||||
description: newProjectDescription,
|
description: newProjectDescription,
|
||||||
slug: newSlug,
|
slug: newSlug,
|
||||||
defaultProduct,
|
|
||||||
secretSharing,
|
secretSharing,
|
||||||
showSnapshotsLegacy
|
showSnapshotsLegacy
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ export type Workspace = {
|
|||||||
__v: number;
|
__v: number;
|
||||||
id: string;
|
id: string;
|
||||||
name: string;
|
name: string;
|
||||||
defaultProduct: ProjectType;
|
type: ProjectType;
|
||||||
description?: string;
|
description?: string;
|
||||||
orgId: string;
|
orgId: string;
|
||||||
version: ProjectVersion;
|
version: ProjectVersion;
|
||||||
@@ -68,6 +68,7 @@ export type TGetUpgradeProjectStatusDTO = {
|
|||||||
// mutation dto
|
// mutation dto
|
||||||
export type CreateWorkspaceDTO = {
|
export type CreateWorkspaceDTO = {
|
||||||
projectName: string;
|
projectName: string;
|
||||||
|
type: ProjectType;
|
||||||
projectDescription?: string;
|
projectDescription?: string;
|
||||||
kmsKeyId?: string;
|
kmsKeyId?: string;
|
||||||
template?: string;
|
template?: string;
|
||||||
@@ -80,7 +81,6 @@ export type UpdateProjectDTO = {
|
|||||||
newSlug?: string;
|
newSlug?: string;
|
||||||
secretSharing?: boolean;
|
secretSharing?: boolean;
|
||||||
showSnapshotsLegacy?: boolean;
|
showSnapshotsLegacy?: boolean;
|
||||||
defaultProduct?: ProjectType;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export type UpdatePitVersionLimitDTO = { projectSlug: string; pitVersionLimit: number };
|
export type UpdatePitVersionLimitDTO = { projectSlug: string; pitVersionLimit: number };
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
import { Link, Outlet } from "@tanstack/react-router";
|
import { Link, Outlet } from "@tanstack/react-router";
|
||||||
import { motion } from "framer-motion";
|
import { motion } from "framer-motion";
|
||||||
|
|
||||||
import { Menu, MenuItem } from "@app/components/v2";
|
import { Lottie, Menu, MenuGroup, MenuItem } from "@app/components/v2";
|
||||||
import { useWorkspace } from "@app/context";
|
import { useWorkspace } from "@app/context";
|
||||||
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
|
import { faCog, faUsers } from "@fortawesome/free-solid-svg-icons";
|
||||||
|
|
||||||
export const KmsLayout = () => {
|
export const KmsLayout = () => {
|
||||||
const { currentWorkspace } = useWorkspace();
|
const { currentWorkspace } = useWorkspace();
|
||||||
@@ -19,35 +21,66 @@ export const KmsLayout = () => {
|
|||||||
className="dark w-full border-r border-mineshaft-600 bg-gradient-to-tr from-mineshaft-700 via-mineshaft-800 to-mineshaft-900 md:w-60"
|
className="dark w-full border-r border-mineshaft-600 bg-gradient-to-tr from-mineshaft-700 via-mineshaft-800 to-mineshaft-900 md:w-60"
|
||||||
>
|
>
|
||||||
<nav className="items-between flex h-full flex-col overflow-y-auto dark:[color-scheme:dark]">
|
<nav className="items-between flex h-full flex-col overflow-y-auto dark:[color-scheme:dark]">
|
||||||
<div className="border-b border-mineshaft-600 px-4 py-3.5 text-lg text-white">KMS</div>
|
<div className="flex items-center gap-3 border-b border-mineshaft-600 px-4 py-3.5 text-lg text-white">
|
||||||
|
<Lottie className="inline-block h-5 w-5 shrink-0" icon="unlock" />
|
||||||
|
KMS
|
||||||
|
</div>
|
||||||
<div className="flex-1">
|
<div className="flex-1">
|
||||||
<Menu>
|
<Menu>
|
||||||
<Link
|
<MenuGroup title="Resources">
|
||||||
to="/projects/$projectId/kms/overview"
|
<Link
|
||||||
params={{
|
to="/projects/kms/$projectId/overview"
|
||||||
projectId: currentWorkspace.id
|
params={{
|
||||||
}}
|
projectId: currentWorkspace.id
|
||||||
>
|
}}
|
||||||
{({ isActive }) => <MenuItem isSelected={isActive}>Overview</MenuItem>}
|
>
|
||||||
</Link>
|
{({ isActive }) => <MenuItem isSelected={isActive}>Overview</MenuItem>}
|
||||||
<Link
|
</Link>
|
||||||
to="/projects/$projectId/kms/kmip"
|
<Link
|
||||||
params={{
|
to="/projects/kms/$projectId/kmip"
|
||||||
projectId: currentWorkspace.id
|
params={{
|
||||||
}}
|
projectId: currentWorkspace.id
|
||||||
>
|
}}
|
||||||
{({ isActive }) => <MenuItem isSelected={isActive}>KMIP</MenuItem>}
|
>
|
||||||
</Link>
|
{({ isActive }) => <MenuItem isSelected={isActive}>KMIP</MenuItem>}
|
||||||
{
|
</Link>
|
||||||
// <Link
|
</MenuGroup>
|
||||||
// to="/projects/$projectId/kms/settings"
|
<MenuGroup title="Others">
|
||||||
// params={{
|
<Link
|
||||||
// projectId: currentWorkspace.id
|
to="/projects/kms/$projectId/access-management"
|
||||||
// }}
|
params={{
|
||||||
// >
|
projectId: currentWorkspace.id
|
||||||
// {({ isActive }) => <MenuItem isSelected={isActive}>Settings</MenuItem>}
|
}}
|
||||||
// </Link>
|
>
|
||||||
}
|
{({ isActive }) => (
|
||||||
|
<MenuItem isSelected={isActive}>
|
||||||
|
<div className="mx-1 flex gap-2">
|
||||||
|
<div className="w-6">
|
||||||
|
<FontAwesomeIcon icon={faUsers} />
|
||||||
|
</div>
|
||||||
|
Access Management
|
||||||
|
</div>
|
||||||
|
</MenuItem>
|
||||||
|
)}
|
||||||
|
</Link>
|
||||||
|
<Link
|
||||||
|
to="/projects/kms/$projectId/settings"
|
||||||
|
params={{
|
||||||
|
projectId: currentWorkspace.id
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{({ isActive }) => (
|
||||||
|
<MenuItem isSelected={isActive}>
|
||||||
|
<div className="mx-1 flex gap-2">
|
||||||
|
<div className="w-6">
|
||||||
|
<FontAwesomeIcon icon={faCog} />
|
||||||
|
</div>
|
||||||
|
Settings
|
||||||
|
</div>
|
||||||
|
</MenuItem>
|
||||||
|
)}
|
||||||
|
</Link>
|
||||||
|
</MenuGroup>
|
||||||
</Menu>
|
</Menu>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { faMobile } from "@fortawesome/free-solid-svg-icons";
|
import { faCog, faMobile, faUsers } from "@fortawesome/free-solid-svg-icons";
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
import { Link, Outlet } from "@tanstack/react-router";
|
import { Link, Outlet } from "@tanstack/react-router";
|
||||||
import { motion } from "framer-motion";
|
import { motion } from "framer-motion";
|
||||||
|
|
||||||
import { Menu, MenuItem } from "@app/components/v2";
|
import { Lottie, Menu, MenuGroup, MenuItem } from "@app/components/v2";
|
||||||
import { useWorkspace } from "@app/context";
|
import { useWorkspace } from "@app/context";
|
||||||
|
|
||||||
export const PkiManagerLayout = () => {
|
export const PkiManagerLayout = () => {
|
||||||
@@ -24,65 +24,94 @@ export const PkiManagerLayout = () => {
|
|||||||
className="dark w-full border-r border-mineshaft-600 bg-gradient-to-tr from-mineshaft-700 via-mineshaft-800 to-mineshaft-900 md:w-60"
|
className="dark w-full border-r border-mineshaft-600 bg-gradient-to-tr from-mineshaft-700 via-mineshaft-800 to-mineshaft-900 md:w-60"
|
||||||
>
|
>
|
||||||
<nav className="items-between flex h-full flex-col overflow-y-auto dark:[color-scheme:dark]">
|
<nav className="items-between flex h-full flex-col overflow-y-auto dark:[color-scheme:dark]">
|
||||||
<div className="border-b border-mineshaft-600 px-4 py-3.5 text-lg text-white">
|
<div className="flex items-center gap-3 border-b border-mineshaft-600 px-4 py-3.5 text-lg text-white">
|
||||||
|
<Lottie className="inline-block h-5 w-5 shrink-0" icon="note" />
|
||||||
PKI Manager
|
PKI Manager
|
||||||
</div>
|
</div>
|
||||||
<div className="flex-1">
|
<div className="flex-1">
|
||||||
<Menu>
|
<Menu>
|
||||||
<Link
|
<MenuGroup title="Resources">
|
||||||
to="/projects/$projectId/cert-manager/subscribers"
|
<Link
|
||||||
params={{
|
to="/projects/cert-management/$projectId/subscribers"
|
||||||
projectId: currentWorkspace.id
|
params={{
|
||||||
}}
|
projectId: currentWorkspace.id
|
||||||
>
|
}}
|
||||||
{({ isActive }) => <MenuItem isSelected={isActive}>Subscribers</MenuItem>}
|
>
|
||||||
</Link>
|
{({ isActive }) => <MenuItem isSelected={isActive}>Subscribers</MenuItem>}
|
||||||
<Link
|
</Link>
|
||||||
to="/projects/$projectId/cert-manager/certificate-templates"
|
<Link
|
||||||
params={{
|
to="/projects/cert-management/$projectId/certificate-templates"
|
||||||
projectId: currentWorkspace.id
|
params={{
|
||||||
}}
|
projectId: currentWorkspace.id
|
||||||
>
|
}}
|
||||||
{({ isActive }) => (
|
>
|
||||||
<MenuItem isSelected={isActive}> Certificate Templates</MenuItem>
|
{({ isActive }) => (
|
||||||
)}
|
<MenuItem isSelected={isActive}> Certificate Templates</MenuItem>
|
||||||
</Link>
|
)}
|
||||||
<Link
|
</Link>
|
||||||
to="/projects/$projectId/cert-manager/certificates"
|
<Link
|
||||||
params={{
|
to="/projects/cert-management/$projectId/certificates"
|
||||||
projectId: currentWorkspace.id
|
params={{
|
||||||
}}
|
projectId: currentWorkspace.id
|
||||||
>
|
}}
|
||||||
{({ isActive }) => <MenuItem isSelected={isActive}> Certificates</MenuItem>}
|
>
|
||||||
</Link>
|
{({ isActive }) => <MenuItem isSelected={isActive}> Certificates</MenuItem>}
|
||||||
<Link
|
</Link>
|
||||||
to="/projects/$projectId/cert-manager/certificate-authorities"
|
<Link
|
||||||
params={{
|
to="/projects/cert-management/$projectId/certificate-authorities"
|
||||||
projectId: currentWorkspace.id
|
params={{
|
||||||
}}
|
projectId: currentWorkspace.id
|
||||||
>
|
}}
|
||||||
{({ isActive }) => (
|
>
|
||||||
<MenuItem isSelected={isActive}> Certificates Authorities</MenuItem>
|
{({ isActive }) => (
|
||||||
)}
|
<MenuItem isSelected={isActive}> Certificates Authorities</MenuItem>
|
||||||
</Link>
|
)}
|
||||||
<Link
|
</Link>
|
||||||
to="/projects/$projectId/cert-manager/alerting"
|
<Link
|
||||||
params={{
|
to="/projects/cert-management/$projectId/alerting"
|
||||||
projectId: currentWorkspace.id
|
params={{
|
||||||
}}
|
projectId: currentWorkspace.id
|
||||||
>
|
}}
|
||||||
{({ isActive }) => <MenuItem isSelected={isActive}>Alerting</MenuItem>}
|
>
|
||||||
</Link>
|
{({ isActive }) => <MenuItem isSelected={isActive}>Alerting</MenuItem>}
|
||||||
{
|
</Link>
|
||||||
// <Link
|
</MenuGroup>
|
||||||
// to="/projects/$projectId/cert-manager/settings"
|
<MenuGroup title="Others">
|
||||||
// params={{
|
<Link
|
||||||
// projectId: currentWorkspace.id
|
to="/projects/cert-management/$projectId/access-management"
|
||||||
// }}
|
params={{
|
||||||
// >
|
projectId: currentWorkspace.id
|
||||||
// {({ isActive }) => <MenuItem isSelected={isActive}>Settings</MenuItem>}
|
}}
|
||||||
// </Link>
|
>
|
||||||
}
|
{({ isActive }) => (
|
||||||
|
<MenuItem isSelected={isActive}>
|
||||||
|
<div className="mx-1 flex gap-2">
|
||||||
|
<div className="w-6">
|
||||||
|
<FontAwesomeIcon icon={faUsers} />
|
||||||
|
</div>
|
||||||
|
Access Management
|
||||||
|
</div>
|
||||||
|
</MenuItem>
|
||||||
|
)}
|
||||||
|
</Link>
|
||||||
|
<Link
|
||||||
|
to="/projects/cert-management/$projectId/settings"
|
||||||
|
params={{
|
||||||
|
projectId: currentWorkspace.id
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{({ isActive }) => (
|
||||||
|
<MenuItem isSelected={isActive}>
|
||||||
|
<div className="mx-1 flex gap-2">
|
||||||
|
<div className="w-6">
|
||||||
|
<FontAwesomeIcon icon={faCog} />
|
||||||
|
</div>
|
||||||
|
Settings
|
||||||
|
</div>
|
||||||
|
</MenuItem>
|
||||||
|
)}
|
||||||
|
</Link>
|
||||||
|
</MenuGroup>
|
||||||
</Menu>
|
</Menu>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|||||||
@@ -35,26 +35,11 @@ const MAX_SIDEBAR_SIZE = "220px";
|
|||||||
// If the product layout differs significantly, create a new layout as needed.
|
// If the product layout differs significantly, create a new layout as needed.
|
||||||
export const ProjectLayout = () => {
|
export const ProjectLayout = () => {
|
||||||
const location = useLocation();
|
const location = useLocation();
|
||||||
const { currentWorkspace } = useWorkspace();
|
|
||||||
const [sidebarStyle, setSidebarStyle] = useLocalStorageState(
|
|
||||||
"project-sidebar-style",
|
|
||||||
SidebarStyle.ExpandOnHover
|
|
||||||
);
|
|
||||||
|
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { assumedPrivilegeDetails } = useProjectPermission();
|
const { assumedPrivilegeDetails } = useProjectPermission();
|
||||||
|
|
||||||
const minSidebarWidth =
|
|
||||||
sidebarStyle === SidebarStyle.Expanded ? MAX_SIDEBAR_SIZE : MIN_SIDEBAR_SIZE;
|
|
||||||
const maxSidebarWidth =
|
|
||||||
sidebarStyle === SidebarStyle.Collapsed ? MIN_SIDEBAR_SIZE : MAX_SIDEBAR_SIZE;
|
|
||||||
|
|
||||||
const currentProductType = getCurrentProductFromUrl(location.pathname);
|
const currentProductType = getCurrentProductFromUrl(location.pathname);
|
||||||
const isSecretManager = currentProductType === ProjectType.SecretManager;
|
|
||||||
const isPki = currentProductType === ProjectType.CertificateManager;
|
|
||||||
const isKms = currentProductType === ProjectType.KMS;
|
|
||||||
const isSsh = currentProductType === ProjectType.SSH;
|
|
||||||
const isSecretScanning = currentProductType === ProjectType.SecretScanning;
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
@@ -66,250 +51,6 @@ export const ProjectLayout = () => {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div className="flex flex-grow flex-col overflow-y-auto overflow-x-hidden md:flex-row">
|
<div className="flex flex-grow flex-col overflow-y-auto overflow-x-hidden md:flex-row">
|
||||||
<motion.div
|
|
||||||
key="menu-project-items"
|
|
||||||
initial={{ x: -150 }}
|
|
||||||
animate={{ x: 0 }}
|
|
||||||
exit={{ x: -150 }}
|
|
||||||
transition={{ duration: 0.2 }}
|
|
||||||
style={{ width: minSidebarWidth, height: "calc(100vh - 3rem)" }}
|
|
||||||
whileHover={{
|
|
||||||
width: maxSidebarWidth
|
|
||||||
}}
|
|
||||||
className={twMerge(
|
|
||||||
"dark group z-10 w-full overflow-hidden border-r border-mineshaft-600 bg-gradient-to-tr from-mineshaft-700 via-mineshaft-800 to-mineshaft-900 md:w-60",
|
|
||||||
!(sidebarStyle === SidebarStyle.Expanded) && "absolute bottom-0 left-0"
|
|
||||||
)}
|
|
||||||
>
|
|
||||||
<nav className="items-between flex h-full flex-col justify-between">
|
|
||||||
<Menu>
|
|
||||||
<ShouldWrap
|
|
||||||
wrapper={Tooltip}
|
|
||||||
isWrapped={sidebarStyle === SidebarStyle.Collapsed}
|
|
||||||
content="Secret Manager"
|
|
||||||
position="right"
|
|
||||||
>
|
|
||||||
<Link
|
|
||||||
to="/projects/$projectId/secret-manager/overview"
|
|
||||||
params={{ projectId: currentWorkspace.id }}
|
|
||||||
>
|
|
||||||
<MenuItem
|
|
||||||
className="relative flex items-center gap-2 overflow-hidden rounded-none"
|
|
||||||
isSelected={isSecretManager}
|
|
||||||
leftIcon={<Lottie className="inline-block h-6 w-6 shrink-0" icon="vault" />}
|
|
||||||
>
|
|
||||||
{isSecretManager && (
|
|
||||||
<div className="absolute left-0 top-0 h-full w-0.5 bg-primary" />
|
|
||||||
)}
|
|
||||||
Secret Manager
|
|
||||||
</MenuItem>
|
|
||||||
</Link>
|
|
||||||
</ShouldWrap>
|
|
||||||
<ShouldWrap
|
|
||||||
wrapper={Tooltip}
|
|
||||||
isWrapped={sidebarStyle === SidebarStyle.Collapsed}
|
|
||||||
content="PKI Manager"
|
|
||||||
position="right"
|
|
||||||
>
|
|
||||||
<Link
|
|
||||||
to="/projects/$projectId/cert-manager/subscribers"
|
|
||||||
params={{ projectId: currentWorkspace.id }}
|
|
||||||
>
|
|
||||||
<MenuItem
|
|
||||||
className="relative flex items-center gap-2 overflow-hidden rounded-none"
|
|
||||||
isSelected={isPki}
|
|
||||||
leftIcon={<Lottie className="inline-block h-6 w-6 shrink-0" icon="note" />}
|
|
||||||
>
|
|
||||||
{isPki && <div className="absolute left-0 top-0 h-full w-0.5 bg-primary" />}
|
|
||||||
PKI Manager
|
|
||||||
</MenuItem>
|
|
||||||
</Link>
|
|
||||||
</ShouldWrap>
|
|
||||||
<ShouldWrap
|
|
||||||
wrapper={Tooltip}
|
|
||||||
isWrapped={sidebarStyle === SidebarStyle.Collapsed}
|
|
||||||
content="KMS"
|
|
||||||
position="right"
|
|
||||||
>
|
|
||||||
<Link
|
|
||||||
to="/projects/$projectId/kms/overview"
|
|
||||||
params={{ projectId: currentWorkspace.id }}
|
|
||||||
>
|
|
||||||
<MenuItem
|
|
||||||
className="relative flex items-center gap-2 overflow-hidden rounded-none"
|
|
||||||
isSelected={isKms}
|
|
||||||
leftIcon={<Lottie className="inline-block h-6 w-6 shrink-0" icon="unlock" />}
|
|
||||||
>
|
|
||||||
{isKms && <div className="absolute left-0 top-0 h-full w-0.5 bg-primary" />}
|
|
||||||
KMS
|
|
||||||
</MenuItem>
|
|
||||||
</Link>
|
|
||||||
</ShouldWrap>
|
|
||||||
<ShouldWrap
|
|
||||||
wrapper={Tooltip}
|
|
||||||
isWrapped={sidebarStyle === SidebarStyle.Collapsed}
|
|
||||||
content="SSH"
|
|
||||||
position="right"
|
|
||||||
>
|
|
||||||
<Link
|
|
||||||
to="/projects/$projectId/ssh/overview"
|
|
||||||
params={{ projectId: currentWorkspace.id }}
|
|
||||||
>
|
|
||||||
<MenuItem
|
|
||||||
className="relative flex items-center gap-2 overflow-hidden rounded-none"
|
|
||||||
isSelected={isSsh}
|
|
||||||
leftIcon={
|
|
||||||
<Lottie className="inline-block h-6 w-6 shrink-0" icon="terminal" />
|
|
||||||
}
|
|
||||||
>
|
|
||||||
{isSsh && <div className="absolute left-0 top-0 h-full w-0.5 bg-primary" />}
|
|
||||||
SSH
|
|
||||||
</MenuItem>
|
|
||||||
</Link>
|
|
||||||
</ShouldWrap>
|
|
||||||
<ShouldWrap
|
|
||||||
wrapper={Tooltip}
|
|
||||||
isWrapped={sidebarStyle === SidebarStyle.Collapsed}
|
|
||||||
content="Secret Scanning"
|
|
||||||
position="right"
|
|
||||||
>
|
|
||||||
<Link
|
|
||||||
to="/projects/$projectId/secret-scanning/data-sources"
|
|
||||||
params={{ projectId: currentWorkspace.id }}
|
|
||||||
>
|
|
||||||
<MenuItem
|
|
||||||
className="relative flex items-center gap-2 overflow-hidden rounded-none"
|
|
||||||
isSelected={isSecretScanning}
|
|
||||||
leftIcon={
|
|
||||||
<Lottie className="inline-block h-6 w-6 shrink-0" icon="secret-scan" />
|
|
||||||
}
|
|
||||||
>
|
|
||||||
{isSecretScanning && (
|
|
||||||
<div className="absolute left-0 top-0 h-full w-0.5 bg-primary" />
|
|
||||||
)}
|
|
||||||
Secret Scanning
|
|
||||||
</MenuItem>
|
|
||||||
</Link>
|
|
||||||
</ShouldWrap>
|
|
||||||
</Menu>
|
|
||||||
<Divider />
|
|
||||||
<Menu>
|
|
||||||
<ShouldWrap
|
|
||||||
wrapper={Tooltip}
|
|
||||||
isWrapped={sidebarStyle === SidebarStyle.Collapsed}
|
|
||||||
content="Access Control"
|
|
||||||
position="right"
|
|
||||||
>
|
|
||||||
<Link
|
|
||||||
to="/projects/$projectId/access-management"
|
|
||||||
params={{ projectId: currentWorkspace.id }}
|
|
||||||
>
|
|
||||||
{({ isActive }) => (
|
|
||||||
<MenuItem
|
|
||||||
className="relative flex items-center gap-2 overflow-hidden rounded-none"
|
|
||||||
isSelected={isActive}
|
|
||||||
leftIcon={
|
|
||||||
<Lottie className="inline-block h-6 w-6 shrink-0" icon="groups" />
|
|
||||||
}
|
|
||||||
>
|
|
||||||
{isActive && (
|
|
||||||
<div className="absolute left-0 top-0 h-full w-0.5 bg-primary" />
|
|
||||||
)}
|
|
||||||
Access Control
|
|
||||||
</MenuItem>
|
|
||||||
)}
|
|
||||||
</Link>
|
|
||||||
</ShouldWrap>
|
|
||||||
<ShouldWrap
|
|
||||||
wrapper={Tooltip}
|
|
||||||
isWrapped={sidebarStyle === SidebarStyle.Collapsed}
|
|
||||||
content="Project Settings"
|
|
||||||
position="right"
|
|
||||||
>
|
|
||||||
<Link
|
|
||||||
to="/projects/$projectId/settings"
|
|
||||||
params={{ projectId: currentWorkspace.id }}
|
|
||||||
>
|
|
||||||
{({ isActive }) => (
|
|
||||||
<MenuItem
|
|
||||||
className="relative flex items-center gap-2 overflow-hidden rounded-none"
|
|
||||||
isSelected={isActive}
|
|
||||||
leftIcon={
|
|
||||||
<Lottie className="inline-block h-6 w-6 shrink-0" icon="settings-cog" />
|
|
||||||
}
|
|
||||||
>
|
|
||||||
{isActive && (
|
|
||||||
<div className="absolute left-0 top-0 h-full w-0.5 bg-primary" />
|
|
||||||
)}
|
|
||||||
Project Settings
|
|
||||||
</MenuItem>
|
|
||||||
)}
|
|
||||||
</Link>
|
|
||||||
</ShouldWrap>
|
|
||||||
</Menu>
|
|
||||||
<div className="flex-grow" />
|
|
||||||
<Menu>
|
|
||||||
<DropdownMenu>
|
|
||||||
<ShouldWrap
|
|
||||||
wrapper={Tooltip}
|
|
||||||
isWrapped={sidebarStyle === SidebarStyle.Collapsed}
|
|
||||||
content="Sidebar Control"
|
|
||||||
position="right"
|
|
||||||
>
|
|
||||||
<DropdownMenuTrigger className="w-full">
|
|
||||||
<MenuItem
|
|
||||||
className="relative flex items-center gap-2 overflow-hidden text-sm text-mineshaft-400 hover:text-mineshaft-300"
|
|
||||||
leftIcon={
|
|
||||||
<FontAwesomeIcon
|
|
||||||
className="mx-1 inline-block shrink-0"
|
|
||||||
icon={faWindowMaximize}
|
|
||||||
flip="vertical"
|
|
||||||
/>
|
|
||||||
}
|
|
||||||
>
|
|
||||||
Sidebar Control
|
|
||||||
</MenuItem>
|
|
||||||
</DropdownMenuTrigger>
|
|
||||||
</ShouldWrap>
|
|
||||||
<DropdownMenuContent>
|
|
||||||
<DropdownMenuItem
|
|
||||||
iconPos="right"
|
|
||||||
icon={
|
|
||||||
sidebarStyle === SidebarStyle.Expanded && (
|
|
||||||
<FontAwesomeIcon icon={faDotCircle} size="sm" />
|
|
||||||
)
|
|
||||||
}
|
|
||||||
onClick={() => setSidebarStyle(SidebarStyle.Expanded)}
|
|
||||||
>
|
|
||||||
Expanded
|
|
||||||
</DropdownMenuItem>
|
|
||||||
<DropdownMenuItem
|
|
||||||
iconPos="right"
|
|
||||||
icon={
|
|
||||||
sidebarStyle === SidebarStyle.Collapsed && (
|
|
||||||
<FontAwesomeIcon icon={faDotCircle} size="sm" />
|
|
||||||
)
|
|
||||||
}
|
|
||||||
onClick={() => setSidebarStyle(SidebarStyle.Collapsed)}
|
|
||||||
>
|
|
||||||
Collapsed
|
|
||||||
</DropdownMenuItem>
|
|
||||||
<DropdownMenuItem
|
|
||||||
iconPos="right"
|
|
||||||
icon={
|
|
||||||
sidebarStyle === SidebarStyle.ExpandOnHover && (
|
|
||||||
<FontAwesomeIcon icon={faDotCircle} size="sm" />
|
|
||||||
)
|
|
||||||
}
|
|
||||||
onClick={() => setSidebarStyle(SidebarStyle.ExpandOnHover)}
|
|
||||||
>
|
|
||||||
Expand on hover
|
|
||||||
</DropdownMenuItem>
|
|
||||||
</DropdownMenuContent>
|
|
||||||
</DropdownMenu>
|
|
||||||
</Menu>
|
|
||||||
</nav>
|
|
||||||
</motion.div>
|
|
||||||
<div className="flex-1 overflow-y-auto overflow-x-hidden bg-bunker-800">
|
<div className="flex-1 overflow-y-auto overflow-x-hidden bg-bunker-800">
|
||||||
{assumedPrivilegeDetails && <AssumePrivilegeModeBanner />}
|
{assumedPrivilegeDetails && <AssumePrivilegeModeBanner />}
|
||||||
<Outlet />
|
<Outlet />
|
||||||
|
|||||||
@@ -31,14 +31,13 @@ import {
|
|||||||
useSubscription,
|
useSubscription,
|
||||||
useWorkspace
|
useWorkspace
|
||||||
} from "@app/context";
|
} from "@app/context";
|
||||||
import { getCurrentProductFromUrl, getProjectHomePage } from "@app/helpers/project";
|
import { getProjectHomePage } from "@app/helpers/project";
|
||||||
import { usePopUp } from "@app/hooks";
|
import { usePopUp } from "@app/hooks";
|
||||||
import { useGetUserWorkspaces } from "@app/hooks/api";
|
import { useGetUserWorkspaces } from "@app/hooks/api";
|
||||||
import { useUpdateUserProjectFavorites } from "@app/hooks/api/users/mutation";
|
import { useUpdateUserProjectFavorites } from "@app/hooks/api/users/mutation";
|
||||||
import { useGetUserProjectFavorites } from "@app/hooks/api/users/queries";
|
import { useGetUserProjectFavorites } from "@app/hooks/api/users/queries";
|
||||||
import { Workspace } from "@app/hooks/api/workspace/types";
|
import { Workspace } from "@app/hooks/api/workspace/types";
|
||||||
|
|
||||||
// TODO(pta): add search to project select
|
|
||||||
export const ProjectSelect = () => {
|
export const ProjectSelect = () => {
|
||||||
const [searchProject, setSearchProject] = useState("");
|
const [searchProject, setSearchProject] = useState("");
|
||||||
const { currentWorkspace } = useWorkspace();
|
const { currentWorkspace } = useWorkspace();
|
||||||
@@ -102,9 +101,7 @@ export const ProjectSelect = () => {
|
|||||||
<div className="-mr-2 flex w-full items-center gap-1">
|
<div className="-mr-2 flex w-full items-center gap-1">
|
||||||
<DropdownMenu modal={false}>
|
<DropdownMenu modal={false}>
|
||||||
<Link
|
<Link
|
||||||
to={getProjectHomePage(
|
to={getProjectHomePage(currentWorkspace.type)}
|
||||||
getCurrentProductFromUrl(window.location.href) || currentWorkspace.defaultProduct
|
|
||||||
)}
|
|
||||||
params={{
|
params={{
|
||||||
projectId: currentWorkspace.id
|
projectId: currentWorkspace.id
|
||||||
}}
|
}}
|
||||||
@@ -161,7 +158,7 @@ export const ProjectSelect = () => {
|
|||||||
// to reproduce change this back to router.push and switch between two projects with different env count
|
// to reproduce change this back to router.push and switch between two projects with different env count
|
||||||
// look into this on dashboard revamp
|
// look into this on dashboard revamp
|
||||||
const url = linkOptions({
|
const url = linkOptions({
|
||||||
to: getProjectHomePage(workspace.defaultProduct),
|
to: getProjectHomePage(workspace.type),
|
||||||
params: {
|
params: {
|
||||||
projectId: workspace.id
|
projectId: workspace.id
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,18 @@
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { faMobile } from "@fortawesome/free-solid-svg-icons";
|
import {
|
||||||
|
faArrowsSpin,
|
||||||
|
faCheckToSlot,
|
||||||
|
faCog,
|
||||||
|
faMobile,
|
||||||
|
faPuzzlePiece,
|
||||||
|
faUsers,
|
||||||
|
faVault
|
||||||
|
} from "@fortawesome/free-solid-svg-icons";
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
import { Link, Outlet } from "@tanstack/react-router";
|
import { Link, Outlet } from "@tanstack/react-router";
|
||||||
import { motion } from "framer-motion";
|
import { motion } from "framer-motion";
|
||||||
|
|
||||||
import { Badge, Menu, MenuItem } from "@app/components/v2";
|
import { Badge, Lottie, Menu, MenuGroup, MenuItem } from "@app/components/v2";
|
||||||
import { useWorkspace } from "@app/context";
|
import { useWorkspace } from "@app/context";
|
||||||
import {
|
import {
|
||||||
useGetAccessRequestsCount,
|
useGetAccessRequestsCount,
|
||||||
@@ -50,68 +58,128 @@ export const SecretManagerLayout = () => {
|
|||||||
className="dark w-full border-r border-mineshaft-600 bg-gradient-to-tr from-mineshaft-700 via-mineshaft-800 to-mineshaft-900 md:w-60"
|
className="dark w-full border-r border-mineshaft-600 bg-gradient-to-tr from-mineshaft-700 via-mineshaft-800 to-mineshaft-900 md:w-60"
|
||||||
>
|
>
|
||||||
<nav className="items-between flex h-full flex-col overflow-y-auto dark:[color-scheme:dark]">
|
<nav className="items-between flex h-full flex-col overflow-y-auto dark:[color-scheme:dark]">
|
||||||
<div className="border-b border-mineshaft-600 px-4 py-3.5 text-lg text-white">
|
<div className="flex items-center gap-3 border-b border-mineshaft-600 px-4 py-3.5 text-lg text-white">
|
||||||
|
<Lottie className="inline-block h-5 w-5 shrink-0" icon="vault" />
|
||||||
Secrets Manager
|
Secrets Manager
|
||||||
</div>
|
</div>
|
||||||
<div className="flex-1">
|
<div className="flex-1">
|
||||||
<Menu>
|
<Menu>
|
||||||
<Link
|
<MenuGroup title="Resources">
|
||||||
to="/projects/$projectId/secret-manager/overview"
|
|
||||||
params={{
|
|
||||||
projectId: currentWorkspace.id
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{({ isActive }) => (
|
|
||||||
<MenuItem isSelected={isActive}>{t("nav.menu.secrets")}</MenuItem>
|
|
||||||
)}
|
|
||||||
</Link>
|
|
||||||
<Link
|
|
||||||
to="/projects/$projectId/secret-manager/integrations"
|
|
||||||
params={{
|
|
||||||
projectId: currentWorkspace.id
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{({ isActive }) => (
|
|
||||||
<MenuItem isSelected={isActive}>{t("nav.menu.integrations")}</MenuItem>
|
|
||||||
)}
|
|
||||||
</Link>
|
|
||||||
{Boolean(secretRotations?.length) && (
|
|
||||||
<Link
|
<Link
|
||||||
to="/projects/$projectId/secret-manager/secret-rotation"
|
to="/projects/secret-management/$projectId/overview"
|
||||||
params={{
|
params={{
|
||||||
projectId: currentWorkspace.id
|
projectId: currentWorkspace.id
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{({ isActive }) => <MenuItem isSelected={isActive}>Secret Rotation</MenuItem>}
|
{({ isActive }) => (
|
||||||
|
<MenuItem isSelected={isActive}>
|
||||||
|
<div className="mx-1 flex gap-2">
|
||||||
|
<div className="w-6">
|
||||||
|
<FontAwesomeIcon icon={faVault} />
|
||||||
|
</div>
|
||||||
|
Secrets
|
||||||
|
</div>
|
||||||
|
</MenuItem>
|
||||||
|
)}
|
||||||
</Link>
|
</Link>
|
||||||
)}
|
<Link
|
||||||
<Link
|
to="/projects/secret-management/$projectId/integrations"
|
||||||
to="/projects/$projectId/secret-manager/approval"
|
params={{
|
||||||
params={{
|
projectId: currentWorkspace.id
|
||||||
projectId: currentWorkspace.id
|
}}
|
||||||
}}
|
>
|
||||||
>
|
{({ isActive }) => (
|
||||||
{({ isActive }) => (
|
<MenuItem isSelected={isActive}>
|
||||||
<MenuItem isSelected={isActive}>
|
<div className="mx-1 flex gap-2">
|
||||||
Approvals
|
<div className="w-6">
|
||||||
{Boolean(
|
<FontAwesomeIcon icon={faPuzzlePiece} />
|
||||||
secretApprovalReqCount?.open || accessApprovalRequestCount?.pendingCount
|
</div>
|
||||||
) && (
|
Integrations
|
||||||
<Badge variant="primary" className="ml-1.5">
|
</div>
|
||||||
{pendingRequestsCount}
|
</MenuItem>
|
||||||
</Badge>
|
)}
|
||||||
|
</Link>
|
||||||
|
{Boolean(secretRotations?.length) && (
|
||||||
|
<Link
|
||||||
|
to="/projects/secret-management/$projectId/secret-rotation"
|
||||||
|
params={{
|
||||||
|
projectId: currentWorkspace.id
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{({ isActive }) => (
|
||||||
|
<MenuItem isSelected={isActive}>
|
||||||
|
<div className="mx-1 flex gap-2">
|
||||||
|
<div className="w-6">
|
||||||
|
<FontAwesomeIcon icon={faArrowsSpin} />
|
||||||
|
</div>
|
||||||
|
Secret Rotations
|
||||||
|
</div>
|
||||||
|
</MenuItem>
|
||||||
)}
|
)}
|
||||||
</MenuItem>
|
</Link>
|
||||||
)}
|
)}
|
||||||
</Link>
|
<Link
|
||||||
<Link
|
to="/projects/secret-management/$projectId/approval"
|
||||||
to="/projects/$projectId/secret-manager/settings"
|
params={{
|
||||||
params={{
|
projectId: currentWorkspace.id
|
||||||
projectId: currentWorkspace.id
|
}}
|
||||||
}}
|
>
|
||||||
>
|
{({ isActive }) => (
|
||||||
{({ isActive }) => <MenuItem isSelected={isActive}>Settings</MenuItem>}
|
<MenuItem isSelected={isActive}>
|
||||||
</Link>
|
<div className="mx-1 flex gap-2">
|
||||||
|
<div className="w-6">
|
||||||
|
<FontAwesomeIcon icon={faCheckToSlot} />
|
||||||
|
</div>
|
||||||
|
Approvals
|
||||||
|
{Boolean(
|
||||||
|
secretApprovalReqCount?.open ||
|
||||||
|
accessApprovalRequestCount?.pendingCount
|
||||||
|
) && (
|
||||||
|
<Badge variant="primary" className="ml-1.5">
|
||||||
|
{pendingRequestsCount}
|
||||||
|
</Badge>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</MenuItem>
|
||||||
|
)}
|
||||||
|
</Link>
|
||||||
|
</MenuGroup>
|
||||||
|
<MenuGroup title="Others">
|
||||||
|
<Link
|
||||||
|
to="/projects/secret-management/$projectId/access-management"
|
||||||
|
params={{
|
||||||
|
projectId: currentWorkspace.id
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{({ isActive }) => (
|
||||||
|
<MenuItem isSelected={isActive}>
|
||||||
|
<div className="mx-1 flex gap-2">
|
||||||
|
<div className="w-6">
|
||||||
|
<FontAwesomeIcon icon={faUsers} />
|
||||||
|
</div>
|
||||||
|
Access Management
|
||||||
|
</div>
|
||||||
|
</MenuItem>
|
||||||
|
)}
|
||||||
|
</Link>
|
||||||
|
<Link
|
||||||
|
to="/projects/secret-management/$projectId/settings"
|
||||||
|
params={{
|
||||||
|
projectId: currentWorkspace.id
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{({ isActive }) => (
|
||||||
|
<MenuItem isSelected={isActive}>
|
||||||
|
<div className="mx-1 flex gap-2">
|
||||||
|
<div className="w-6">
|
||||||
|
<FontAwesomeIcon icon={faCog} />
|
||||||
|
</div>
|
||||||
|
Settings
|
||||||
|
</div>
|
||||||
|
</MenuItem>
|
||||||
|
)}
|
||||||
|
</Link>
|
||||||
|
</MenuGroup>
|
||||||
</Menu>
|
</Menu>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
|
import { faCog, faUsers } from "@fortawesome/free-solid-svg-icons";
|
||||||
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
import { Link, Outlet } from "@tanstack/react-router";
|
import { Link, Outlet } from "@tanstack/react-router";
|
||||||
import { motion } from "framer-motion";
|
import { motion } from "framer-motion";
|
||||||
|
|
||||||
import { Menu, MenuItem } from "@app/components/v2";
|
import { Menu, MenuGroup, MenuItem } from "@app/components/v2";
|
||||||
import { useWorkspace } from "@app/context";
|
import { useWorkspace } from "@app/context";
|
||||||
|
|
||||||
export const SecretScanningLayout = () => {
|
export const SecretScanningLayout = () => {
|
||||||
@@ -24,30 +26,60 @@ export const SecretScanningLayout = () => {
|
|||||||
</div>
|
</div>
|
||||||
<div className="flex-1">
|
<div className="flex-1">
|
||||||
<Menu>
|
<Menu>
|
||||||
<Link
|
<MenuGroup title="Resources">
|
||||||
to="/projects/$projectId/secret-scanning/data-sources"
|
<Link
|
||||||
params={{
|
to="/projects/secret-scanning/$projectId/data-sources"
|
||||||
projectId: currentWorkspace.id
|
params={{
|
||||||
}}
|
projectId: currentWorkspace.id
|
||||||
>
|
}}
|
||||||
{({ isActive }) => <MenuItem isSelected={isActive}> Data Sources</MenuItem>}
|
>
|
||||||
</Link>
|
{({ isActive }) => <MenuItem isSelected={isActive}> Data Sources</MenuItem>}
|
||||||
<Link
|
</Link>
|
||||||
to="/projects/$projectId/secret-scanning/findings"
|
<Link
|
||||||
params={{
|
to="/projects/secret-scanning/$projectId/findings"
|
||||||
projectId: currentWorkspace.id
|
params={{
|
||||||
}}
|
projectId: currentWorkspace.id
|
||||||
>
|
}}
|
||||||
{({ isActive }) => <MenuItem isSelected={isActive}>Findings</MenuItem>}
|
>
|
||||||
</Link>
|
{({ isActive }) => <MenuItem isSelected={isActive}>Findings</MenuItem>}
|
||||||
<Link
|
</Link>
|
||||||
to="/projects/$projectId/secret-scanning/settings"
|
</MenuGroup>
|
||||||
params={{
|
<MenuGroup title="Others">
|
||||||
projectId: currentWorkspace.id
|
<Link
|
||||||
}}
|
to="/projects/secret-scanning/$projectId/access-management"
|
||||||
>
|
params={{
|
||||||
{({ isActive }) => <MenuItem isSelected={isActive}>Settings</MenuItem>}
|
projectId: currentWorkspace.id
|
||||||
</Link>
|
}}
|
||||||
|
>
|
||||||
|
{({ isActive }) => (
|
||||||
|
<MenuItem isSelected={isActive}>
|
||||||
|
<div className="mx-1 flex gap-2">
|
||||||
|
<div className="w-6">
|
||||||
|
<FontAwesomeIcon icon={faUsers} />
|
||||||
|
</div>
|
||||||
|
Access Management
|
||||||
|
</div>
|
||||||
|
</MenuItem>
|
||||||
|
)}
|
||||||
|
</Link>
|
||||||
|
<Link
|
||||||
|
to="/projects/secret-management/$projectId/settings"
|
||||||
|
params={{
|
||||||
|
projectId: currentWorkspace.id
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{({ isActive }) => (
|
||||||
|
<MenuItem isSelected={isActive}>
|
||||||
|
<div className="mx-1 flex gap-2">
|
||||||
|
<div className="w-6">
|
||||||
|
<FontAwesomeIcon icon={faCog} />
|
||||||
|
</div>
|
||||||
|
Settings
|
||||||
|
</div>
|
||||||
|
</MenuItem>
|
||||||
|
)}
|
||||||
|
</Link>
|
||||||
|
</MenuGroup>
|
||||||
</Menu>
|
</Menu>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|||||||
@@ -2,8 +2,10 @@ import { Link, Outlet } from "@tanstack/react-router";
|
|||||||
import { motion } from "framer-motion";
|
import { motion } from "framer-motion";
|
||||||
|
|
||||||
import { ProjectPermissionCan } from "@app/components/permissions";
|
import { ProjectPermissionCan } from "@app/components/permissions";
|
||||||
import { Menu, MenuItem } from "@app/components/v2";
|
import { Menu, MenuGroup, MenuItem } from "@app/components/v2";
|
||||||
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context";
|
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context";
|
||||||
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
|
import { faCog, faUsers } from "@fortawesome/free-solid-svg-icons";
|
||||||
|
|
||||||
export const SshLayout = () => {
|
export const SshLayout = () => {
|
||||||
const { currentWorkspace } = useWorkspace();
|
const { currentWorkspace } = useWorkspace();
|
||||||
@@ -23,41 +25,72 @@ export const SshLayout = () => {
|
|||||||
<div className="border-b border-mineshaft-600 px-4 py-3.5 text-lg text-white">SSH</div>
|
<div className="border-b border-mineshaft-600 px-4 py-3.5 text-lg text-white">SSH</div>
|
||||||
<div className="flex-1">
|
<div className="flex-1">
|
||||||
<Menu>
|
<Menu>
|
||||||
<Link
|
<MenuGroup title="Resources">
|
||||||
to="/projects/$projectId/ssh/overview"
|
<Link
|
||||||
params={{
|
to="/projects/ssh/$projectId/overview"
|
||||||
projectId: currentWorkspace.id
|
params={{
|
||||||
}}
|
projectId: currentWorkspace.id
|
||||||
>
|
}}
|
||||||
{({ isActive }) => <MenuItem isSelected={isActive}>Hosts</MenuItem>}
|
>
|
||||||
</Link>
|
{({ isActive }) => <MenuItem isSelected={isActive}>Hosts</MenuItem>}
|
||||||
<ProjectPermissionCan
|
</Link>
|
||||||
I={ProjectPermissionActions.Read}
|
<ProjectPermissionCan
|
||||||
a={ProjectPermissionSub.SshCertificateAuthorities}
|
I={ProjectPermissionActions.Read}
|
||||||
>
|
a={ProjectPermissionSub.SshCertificateAuthorities}
|
||||||
{(isAllowed) =>
|
>
|
||||||
isAllowed && (
|
{(isAllowed) =>
|
||||||
<Link
|
isAllowed && (
|
||||||
to="/projects/$projectId/ssh/cas"
|
<Link
|
||||||
params={{
|
to="/projects/ssh/$projectId/cas"
|
||||||
projectId: currentWorkspace.id
|
params={{
|
||||||
}}
|
projectId: currentWorkspace.id
|
||||||
>
|
}}
|
||||||
{({ isActive }) => (
|
>
|
||||||
<MenuItem isSelected={isActive}>Certificate Authorities</MenuItem>
|
{({ isActive }) => (
|
||||||
)}
|
<MenuItem isSelected={isActive}>Certificate Authorities</MenuItem>
|
||||||
</Link>
|
)}
|
||||||
)
|
</Link>
|
||||||
}
|
)
|
||||||
</ProjectPermissionCan>
|
}
|
||||||
<Link
|
</ProjectPermissionCan>
|
||||||
to="/projects/$projectId/ssh/settings"
|
</MenuGroup>
|
||||||
params={{
|
|
||||||
projectId: currentWorkspace.id
|
<MenuGroup title="Others">
|
||||||
}}
|
<Link
|
||||||
>
|
to="/projects/ssh/$projectId/access-management"
|
||||||
{({ isActive }) => <MenuItem isSelected={isActive}>Settings</MenuItem>}
|
params={{
|
||||||
</Link>
|
projectId: currentWorkspace.id
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{({ isActive }) => (
|
||||||
|
<MenuItem isSelected={isActive}>
|
||||||
|
<div className="mx-1 flex gap-2">
|
||||||
|
<div className="w-6">
|
||||||
|
<FontAwesomeIcon icon={faUsers} />
|
||||||
|
</div>
|
||||||
|
Access Management
|
||||||
|
</div>
|
||||||
|
</MenuItem>
|
||||||
|
)}
|
||||||
|
</Link>
|
||||||
|
<Link
|
||||||
|
to="/projects/ssh/$projectId/settings"
|
||||||
|
params={{
|
||||||
|
projectId: currentWorkspace.id
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{({ isActive }) => (
|
||||||
|
<MenuItem isSelected={isActive}>
|
||||||
|
<div className="mx-1 flex gap-2">
|
||||||
|
<div className="w-6">
|
||||||
|
<FontAwesomeIcon icon={faCog} />
|
||||||
|
</div>
|
||||||
|
Settings
|
||||||
|
</div>
|
||||||
|
</MenuItem>
|
||||||
|
)}
|
||||||
|
</Link>
|
||||||
|
</MenuGroup>
|
||||||
</Menu>
|
</Menu>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ export const PkiCollectionModal = ({ popUp, handlePopUpToggle }: Props) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/cert-manager/pki-collections/$collectionId",
|
to: "/projects/cert-management/$projectId/pki-collections/$collectionId",
|
||||||
params: {
|
params: {
|
||||||
projectId,
|
projectId,
|
||||||
collectionId
|
collectionId
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import {
|
|||||||
} from "@app/components/v2";
|
} from "@app/components/v2";
|
||||||
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context";
|
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context";
|
||||||
import { useListWorkspacePkiCollections } from "@app/hooks/api";
|
import { useListWorkspacePkiCollections } from "@app/hooks/api";
|
||||||
import { ProjectType } from "@app/hooks/api/workspace/types";
|
|
||||||
import { UsePopUpState } from "@app/hooks/usePopUp";
|
import { UsePopUpState } from "@app/hooks/usePopUp";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
@@ -61,7 +60,7 @@ export const PkiCollectionTable = ({ handlePopUpOpen }: Props) => {
|
|||||||
key={`pki-collection-${pkiCollection.id}`}
|
key={`pki-collection-${pkiCollection.id}`}
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
navigate({
|
navigate({
|
||||||
to: `/projects/$projectId/${ProjectType.CertificateManager}/pki-collections/$collectionId` as const,
|
to: "/projects/cert-management/$projectId/pki-collections/$collectionId",
|
||||||
params: {
|
params: {
|
||||||
projectId,
|
projectId,
|
||||||
collectionId: pkiCollection.id
|
collectionId: pkiCollection.id
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute } from "@tanstack/react-router";
|
|||||||
import { AlertingPage } from "./AlertingPage";
|
import { AlertingPage } from "./AlertingPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/alerting"
|
"/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/alerting"
|
||||||
)({
|
)({
|
||||||
component: AlertingPage,
|
component: AlertingPage,
|
||||||
beforeLoad: ({ context }) => {
|
beforeLoad: ({ context }) => {
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ import { ROUTE_PATHS } from "@app/const/routes";
|
|||||||
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context";
|
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } 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/workspace/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";
|
||||||
@@ -71,7 +70,7 @@ const Page = () => {
|
|||||||
|
|
||||||
handlePopUpClose("deleteCa");
|
handlePopUpClose("deleteCa");
|
||||||
navigate({
|
navigate({
|
||||||
to: `/projects/$projectId/${ProjectType.CertificateManager}/certificate-authorities` as const,
|
to: "/projects/cert-management/$projectId/certificate-authorities",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { CertAuthDetailsByIDPage } from "./CertAuthDetailsByIDPage";
|
import { CertAuthDetailsByIDPage } from "./CertAuthDetailsByIDPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/ca/$caName"
|
"/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/ca/$caName"
|
||||||
)({
|
)({
|
||||||
component: CertAuthDetailsByIDPage,
|
component: CertAuthDetailsByIDPage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
@@ -13,7 +13,7 @@ export const Route = createFileRoute(
|
|||||||
{
|
{
|
||||||
label: "Certificate Authorities",
|
label: "Certificate Authorities",
|
||||||
link: linkOptions({
|
link: linkOptions({
|
||||||
to: "/projects/$projectId/cert-manager/certificate-authorities",
|
to: "/projects/cert-management/$projectId/certificate-authorities",
|
||||||
params: {
|
params: {
|
||||||
projectId: params.projectId
|
projectId: params.projectId
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ import {
|
|||||||
getCaStatusBadgeVariant
|
getCaStatusBadgeVariant
|
||||||
} from "@app/hooks/api/ca/constants";
|
} from "@app/hooks/api/ca/constants";
|
||||||
import { TInternalCertificateAuthority } from "@app/hooks/api/ca/types";
|
import { TInternalCertificateAuthority } from "@app/hooks/api/ca/types";
|
||||||
import { ProjectType } from "@app/hooks/api/workspace/types";
|
|
||||||
import { UsePopUpState } from "@app/hooks/usePopUp";
|
import { UsePopUpState } from "@app/hooks/usePopUp";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
@@ -79,7 +78,7 @@ export const CaTable = ({ handlePopUpOpen }: Props) => {
|
|||||||
key={`ca-${ca.id}`}
|
key={`ca-${ca.id}`}
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
navigate({
|
navigate({
|
||||||
to: `/projects/$projectId/${ProjectType.CertificateManager}/ca/$caName` as const,
|
to: "/projects/cert-management/$projectId/ca/$caName",
|
||||||
params: {
|
params: {
|
||||||
projectId: currentWorkspace.id,
|
projectId: currentWorkspace.id,
|
||||||
caName: ca.name
|
caName: ca.name
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { createFileRoute } from "@tanstack/react-router";
|
import { createFileRoute } from '@tanstack/react-router'
|
||||||
|
|
||||||
import { CertificateAuthoritiesPage } from "./CertificateAuthoritiesPage";
|
import { CertificateAuthoritiesPage } from './CertificateAuthoritiesPage'
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/certificate-authorities"
|
'/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/certificate-authorities',
|
||||||
)({
|
)({
|
||||||
component: CertificateAuthoritiesPage,
|
component: CertificateAuthoritiesPage,
|
||||||
beforeLoad: ({ context }) => {
|
beforeLoad: ({ context }) => {
|
||||||
@@ -11,9 +11,9 @@ export const Route = createFileRoute(
|
|||||||
breadcrumbs: [
|
breadcrumbs: [
|
||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Certificate Authorities"
|
label: 'Certificate Authorities',
|
||||||
}
|
},
|
||||||
]
|
],
|
||||||
};
|
}
|
||||||
}
|
},
|
||||||
});
|
})
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { createFileRoute } from "@tanstack/react-router";
|
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/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/certificates"
|
'/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/certificates',
|
||||||
)({
|
)({
|
||||||
component: CertificatesPage,
|
component: CertificatesPage,
|
||||||
beforeLoad: ({ context }) => {
|
beforeLoad: ({ context }) => {
|
||||||
@@ -11,9 +11,9 @@ export const Route = createFileRoute(
|
|||||||
breadcrumbs: [
|
breadcrumbs: [
|
||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Certificates"
|
label: 'Certificates',
|
||||||
}
|
},
|
||||||
]
|
],
|
||||||
};
|
}
|
||||||
}
|
},
|
||||||
});
|
})
|
||||||
|
|||||||
+1
-2
@@ -19,7 +19,6 @@ import { ROUTE_PATHS } from "@app/const/routes";
|
|||||||
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context";
|
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } 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/workspace/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";
|
||||||
@@ -57,7 +56,7 @@ export const PkiCollectionPage = () => {
|
|||||||
});
|
});
|
||||||
handlePopUpClose("deletePkiCollection");
|
handlePopUpClose("deletePkiCollection");
|
||||||
navigate({
|
navigate({
|
||||||
to: `/projects/$projectId/${ProjectType.CertificateManager}/certificates` as const,
|
to: "/projects/cert-management/$projectId/certificates",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { PkiCollectionDetailsByIDPage } from "./PkiCollectionDetailsByIDPage";
|
import { PkiCollectionDetailsByIDPage } from "./PkiCollectionDetailsByIDPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/pki-collections/$collectionId"
|
"/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/pki-collections/$collectionId"
|
||||||
)({
|
)({
|
||||||
component: PkiCollectionDetailsByIDPage,
|
component: PkiCollectionDetailsByIDPage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
@@ -13,7 +13,7 @@ export const Route = createFileRoute(
|
|||||||
{
|
{
|
||||||
label: "Certificate Collections",
|
label: "Certificate Collections",
|
||||||
link: linkOptions({
|
link: linkOptions({
|
||||||
to: "/projects/$projectId/cert-manager/certificates",
|
to: "/projects/cert-management/$projectId/certificates",
|
||||||
params: {
|
params: {
|
||||||
projectId: params.projectId
|
projectId: params.projectId
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -22,7 +22,6 @@ import {
|
|||||||
useWorkspace
|
useWorkspace
|
||||||
} 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/workspace/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";
|
||||||
@@ -61,7 +60,7 @@ const Page = () => {
|
|||||||
|
|
||||||
handlePopUpClose("deletePkiSubscriber");
|
handlePopUpClose("deletePkiSubscriber");
|
||||||
navigate({
|
navigate({
|
||||||
to: `/projects/$projectId/${ProjectType.CertificateManager}/subscribers` as const,
|
to: "/projects/cert-management/$projectId/subscribers",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { PkiSubscriberDetailsByIDPage } from "./PkiSubscriberDetailsByIDPage";
|
import { PkiSubscriberDetailsByIDPage } from "./PkiSubscriberDetailsByIDPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/subscribers/$subscriberName"
|
"/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/subscribers/$subscriberName"
|
||||||
)({
|
)({
|
||||||
component: PkiSubscriberDetailsByIDPage,
|
component: PkiSubscriberDetailsByIDPage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
@@ -13,7 +13,7 @@ export const Route = createFileRoute(
|
|||||||
{
|
{
|
||||||
label: "Subscribers",
|
label: "Subscribers",
|
||||||
link: linkOptions({
|
link: linkOptions({
|
||||||
to: "/projects/$projectId/cert-manager/subscribers",
|
to: "/projects/cert-management/$projectId/subscribers",
|
||||||
params: {
|
params: {
|
||||||
projectId: params.projectId
|
projectId: params.projectId
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -38,7 +38,6 @@ import {
|
|||||||
PkiSubscriberStatus,
|
PkiSubscriberStatus,
|
||||||
pkiSubscriberStatusToNameMap
|
pkiSubscriberStatusToNameMap
|
||||||
} from "@app/hooks/api/pkiSubscriber/constants";
|
} from "@app/hooks/api/pkiSubscriber/constants";
|
||||||
import { ProjectType } from "@app/hooks/api/workspace/types";
|
|
||||||
import { UsePopUpState } from "@app/hooks/usePopUp";
|
import { UsePopUpState } from "@app/hooks/usePopUp";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
@@ -76,7 +75,7 @@ export const PkiSubscribersTable = ({ handlePopUpOpen }: Props) => {
|
|||||||
key={`pki-subscriber-${subscriber.id}`}
|
key={`pki-subscriber-${subscriber.id}`}
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
navigate({
|
navigate({
|
||||||
to: `/projects/$projectId/${ProjectType.CertificateManager}/subscribers/$subscriberName` as const,
|
to: "/projects/cert-management/$projectId/subscribers/$subscriberName",
|
||||||
params: {
|
params: {
|
||||||
projectId: currentWorkspace.id,
|
projectId: currentWorkspace.id,
|
||||||
subscriberName: subscriber.name
|
subscriberName: subscriber.name
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { createFileRoute } from "@tanstack/react-router";
|
import { createFileRoute } from '@tanstack/react-router'
|
||||||
|
|
||||||
import { PkiSubscribersPage } from "./PkiSubscribersPage";
|
import { PkiSubscribersPage } from './PkiSubscribersPage'
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/subscribers/"
|
'/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/subscribers/',
|
||||||
)({
|
)({
|
||||||
component: PkiSubscribersPage,
|
component: PkiSubscribersPage,
|
||||||
beforeLoad: ({ context }) => {
|
beforeLoad: ({ context }) => {
|
||||||
@@ -11,9 +11,9 @@ export const Route = createFileRoute(
|
|||||||
breadcrumbs: [
|
breadcrumbs: [
|
||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Subscribers"
|
label: 'Subscribers',
|
||||||
}
|
},
|
||||||
]
|
],
|
||||||
};
|
}
|
||||||
}
|
},
|
||||||
});
|
})
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { createFileRoute } from "@tanstack/react-router";
|
import { createFileRoute } from '@tanstack/react-router'
|
||||||
|
|
||||||
import { PkiTemplateListPage } from "./PkiTemplateListPage";
|
import { PkiTemplateListPage } from './PkiTemplateListPage'
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/certificate-templates/"
|
'/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/certificate-templates/',
|
||||||
)({
|
)({
|
||||||
component: PkiTemplateListPage,
|
component: PkiTemplateListPage,
|
||||||
beforeLoad: ({ context }) => {
|
beforeLoad: ({ context }) => {
|
||||||
@@ -11,9 +11,9 @@ export const Route = createFileRoute(
|
|||||||
breadcrumbs: [
|
breadcrumbs: [
|
||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Certificate Templates"
|
label: 'Certificate Templates',
|
||||||
}
|
},
|
||||||
]
|
],
|
||||||
};
|
}
|
||||||
}
|
},
|
||||||
});
|
})
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { createFileRoute } from "@tanstack/react-router";
|
import { createFileRoute } from '@tanstack/react-router'
|
||||||
|
|
||||||
import { SettingsPage } from "./SettingsPage";
|
import { SettingsPage } from './SettingsPage'
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/settings"
|
'/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/settings',
|
||||||
)({
|
)({
|
||||||
component: SettingsPage,
|
component: SettingsPage,
|
||||||
beforeLoad: ({ context }) => {
|
beforeLoad: ({ context }) => {
|
||||||
@@ -11,9 +11,9 @@ export const Route = createFileRoute(
|
|||||||
breadcrumbs: [
|
breadcrumbs: [
|
||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Settings"
|
label: 'Settings',
|
||||||
}
|
},
|
||||||
]
|
],
|
||||||
};
|
}
|
||||||
}
|
},
|
||||||
});
|
})
|
||||||
|
|||||||
@@ -1,9 +1,37 @@
|
|||||||
import { createFileRoute } from "@tanstack/react-router";
|
import { createFileRoute } from "@tanstack/react-router";
|
||||||
|
|
||||||
import { PkiManagerLayout } from "@app/layouts/PkiManagerLayout";
|
import { PkiManagerLayout } from "@app/layouts/PkiManagerLayout";
|
||||||
|
import { workspaceKeys } from "@app/hooks/api";
|
||||||
|
import { fetchWorkspaceById } from "@app/hooks/api/workspace/queries";
|
||||||
|
import { fetchUserProjectPermissions, roleQueryKeys } from "@app/hooks/api/roles/queries";
|
||||||
|
import { BreadcrumbTypes } from "@app/components/v2";
|
||||||
|
import { ProjectSelect } from "@app/layouts/ProjectLayout/components/ProjectSelect";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout"
|
"/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout"
|
||||||
)({
|
)({
|
||||||
component: PkiManagerLayout
|
component: PkiManagerLayout,
|
||||||
|
beforeLoad: async ({ params, context }) => {
|
||||||
|
const project = await context.queryClient.ensureQueryData({
|
||||||
|
queryKey: workspaceKeys.getWorkspaceById(params.projectId),
|
||||||
|
queryFn: () => fetchWorkspaceById(params.projectId)
|
||||||
|
});
|
||||||
|
|
||||||
|
await context.queryClient.ensureQueryData({
|
||||||
|
queryKey: roleQueryKeys.getUserProjectPermissions({
|
||||||
|
workspaceId: params.projectId
|
||||||
|
}),
|
||||||
|
queryFn: () => fetchUserProjectPermissions({ workspaceId: params.projectId })
|
||||||
|
});
|
||||||
|
|
||||||
|
return {
|
||||||
|
project,
|
||||||
|
breadcrumbs: [
|
||||||
|
{
|
||||||
|
type: BreadcrumbTypes.Component,
|
||||||
|
component: ProjectSelect
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { createFileRoute } from "@tanstack/react-router";
|
import { createFileRoute } from '@tanstack/react-router'
|
||||||
|
|
||||||
import { KmipPage } from "./KmipPage";
|
import { KmipPage } from './KmipPage'
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/kms/_kms-layout/kmip"
|
'/_authenticate/_inject-org-details/_org-layout/projects/kms/$projectId/_kms-layout/kmip',
|
||||||
)({
|
)({
|
||||||
component: KmipPage,
|
component: KmipPage,
|
||||||
beforeLoad: ({ context }) => {
|
beforeLoad: ({ context }) => {
|
||||||
@@ -11,9 +11,9 @@ export const Route = createFileRoute(
|
|||||||
breadcrumbs: [
|
breadcrumbs: [
|
||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "KMIP"
|
label: 'KMIP',
|
||||||
}
|
},
|
||||||
]
|
],
|
||||||
};
|
}
|
||||||
}
|
},
|
||||||
});
|
})
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { createFileRoute } from "@tanstack/react-router";
|
import { createFileRoute } from '@tanstack/react-router'
|
||||||
|
|
||||||
import { OverviewPage } from "./OverviewPage";
|
import { OverviewPage } from './OverviewPage'
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/kms/_kms-layout/overview"
|
'/_authenticate/_inject-org-details/_org-layout/projects/kms/$projectId/_kms-layout/overview',
|
||||||
)({
|
)({
|
||||||
component: OverviewPage,
|
component: OverviewPage,
|
||||||
beforeLoad: ({ context }) => {
|
beforeLoad: ({ context }) => {
|
||||||
@@ -11,9 +11,9 @@ export const Route = createFileRoute(
|
|||||||
breadcrumbs: [
|
breadcrumbs: [
|
||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Overview"
|
label: 'Overview',
|
||||||
}
|
},
|
||||||
]
|
],
|
||||||
};
|
}
|
||||||
}
|
},
|
||||||
});
|
})
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { createFileRoute } from "@tanstack/react-router";
|
import { createFileRoute } from '@tanstack/react-router'
|
||||||
|
|
||||||
import { SettingsPage } from "./SettingsPage";
|
import { SettingsPage } from './SettingsPage'
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/kms/_kms-layout/settings"
|
'/_authenticate/_inject-org-details/_org-layout/projects/kms/$projectId/_kms-layout/settings',
|
||||||
)({
|
)({
|
||||||
component: SettingsPage,
|
component: SettingsPage,
|
||||||
beforeLoad: ({ context }) => {
|
beforeLoad: ({ context }) => {
|
||||||
@@ -11,9 +11,9 @@ export const Route = createFileRoute(
|
|||||||
breadcrumbs: [
|
breadcrumbs: [
|
||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Settings"
|
label: 'Settings',
|
||||||
}
|
},
|
||||||
]
|
],
|
||||||
};
|
}
|
||||||
}
|
},
|
||||||
});
|
})
|
||||||
|
|||||||
@@ -1,9 +1,37 @@
|
|||||||
import { createFileRoute } from "@tanstack/react-router";
|
import { createFileRoute } from "@tanstack/react-router";
|
||||||
|
|
||||||
|
import { BreadcrumbTypes } from "@app/components/v2";
|
||||||
|
import { workspaceKeys } from "@app/hooks/api";
|
||||||
|
import { fetchUserProjectPermissions, roleQueryKeys } from "@app/hooks/api/roles/queries";
|
||||||
|
import { fetchWorkspaceById } from "@app/hooks/api/workspace/queries";
|
||||||
import { KmsLayout } from "@app/layouts/KmsLayout";
|
import { KmsLayout } from "@app/layouts/KmsLayout";
|
||||||
|
import { ProjectSelect } from "@app/layouts/ProjectLayout/components/ProjectSelect";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/kms/_kms-layout"
|
"/_authenticate/_inject-org-details/_org-layout/projects/kms/$projectId/_kms-layout"
|
||||||
)({
|
)({
|
||||||
component: KmsLayout
|
component: KmsLayout,
|
||||||
|
beforeLoad: async ({ params, context }) => {
|
||||||
|
const project = await context.queryClient.ensureQueryData({
|
||||||
|
queryKey: workspaceKeys.getWorkspaceById(params.projectId),
|
||||||
|
queryFn: () => fetchWorkspaceById(params.projectId)
|
||||||
|
});
|
||||||
|
|
||||||
|
await context.queryClient.ensureQueryData({
|
||||||
|
queryKey: roleQueryKeys.getUserProjectPermissions({
|
||||||
|
workspaceId: params.projectId
|
||||||
|
}),
|
||||||
|
queryFn: () => fetchUserProjectPermissions({ workspaceId: params.projectId })
|
||||||
|
});
|
||||||
|
|
||||||
|
return {
|
||||||
|
project,
|
||||||
|
breadcrumbs: [
|
||||||
|
{
|
||||||
|
type: BreadcrumbTypes.Component,
|
||||||
|
component: ProjectSelect
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
+2
-2
@@ -105,7 +105,7 @@ export const OrgAdminProjects = withPermission(
|
|||||||
<TBody>
|
<TBody>
|
||||||
{isProjectsLoading && <TableSkeleton columns={4} innerKey="projects" />}
|
{isProjectsLoading && <TableSkeleton columns={4} innerKey="projects" />}
|
||||||
{!isProjectsLoading &&
|
{!isProjectsLoading &&
|
||||||
projects?.map(({ name, slug, createdAt, id, defaultProduct }) => (
|
projects?.map(({ name, slug, createdAt, id, type }) => (
|
||||||
<Tr key={`project-${id}`} className="group w-full">
|
<Tr key={`project-${id}`} className="group w-full">
|
||||||
<Td>{name}</Td>
|
<Td>{name}</Td>
|
||||||
<Td>{slug}</Td>
|
<Td>{slug}</Td>
|
||||||
@@ -126,7 +126,7 @@ export const OrgAdminProjects = withPermission(
|
|||||||
onClick={(e) => {
|
onClick={(e) => {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
handleAccessProject(defaultProduct, id);
|
handleAccessProject(type, id);
|
||||||
}}
|
}}
|
||||||
icon={<FontAwesomeIcon icon={faSignIn} />}
|
icon={<FontAwesomeIcon icon={faSignIn} />}
|
||||||
disabled={
|
disabled={
|
||||||
|
|||||||
@@ -300,10 +300,10 @@ export const LogsFilter = ({ presets, setFilter, filter }: Props) => {
|
|||||||
onChange(e);
|
onChange(e);
|
||||||
}}
|
}}
|
||||||
placeholder="All projects"
|
placeholder="All projects"
|
||||||
options={workspacesInOrg.map(({ name, id, defaultProduct }) => ({
|
options={workspacesInOrg.map(({ name, id, type }) => ({
|
||||||
name,
|
name,
|
||||||
id,
|
id,
|
||||||
type: defaultProduct
|
type
|
||||||
}))}
|
}))}
|
||||||
getOptionValue={(option) => option.id}
|
getOptionValue={(option) => option.id}
|
||||||
getOptionLabel={(option) => option.name}
|
getOptionLabel={(option) => option.name}
|
||||||
|
|||||||
+4
-1
@@ -6,6 +6,8 @@ import { format } from "date-fns";
|
|||||||
|
|
||||||
import { createNotification } from "@app/components/notifications";
|
import { createNotification } from "@app/components/notifications";
|
||||||
import { IconButton, Td, Tooltip, Tr } from "@app/components/v2";
|
import { IconButton, Td, Tooltip, Tr } from "@app/components/v2";
|
||||||
|
import { useWorkspace } from "@app/context";
|
||||||
|
import { getProjectBaseURL } from "@app/helpers/project";
|
||||||
import { formatProjectRoleName } from "@app/helpers/roles";
|
import { formatProjectRoleName } from "@app/helpers/roles";
|
||||||
import { useGetUserWorkspaces } from "@app/hooks/api";
|
import { useGetUserWorkspaces } from "@app/hooks/api";
|
||||||
import { IdentityMembership } from "@app/hooks/api/identities/types";
|
import { IdentityMembership } from "@app/hooks/api/identities/types";
|
||||||
@@ -32,6 +34,7 @@ export const IdentityProjectRow = ({
|
|||||||
}: Props) => {
|
}: Props) => {
|
||||||
const { data: workspaces } = useGetUserWorkspaces();
|
const { data: workspaces } = useGetUserWorkspaces();
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
const { currentWorkspace } = useWorkspace();
|
||||||
|
|
||||||
const isAccessible = useMemo(() => {
|
const isAccessible = useMemo(() => {
|
||||||
const workspaceIds = new Map();
|
const workspaceIds = new Map();
|
||||||
@@ -50,7 +53,7 @@ export const IdentityProjectRow = ({
|
|||||||
onClick={() => {
|
onClick={() => {
|
||||||
if (isAccessible) {
|
if (isAccessible) {
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/access-management",
|
to: `${getProjectBaseURL(currentWorkspace.type)}/access-management` as const,
|
||||||
params: {
|
params: {
|
||||||
projectId: project.id
|
projectId: project.id
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -222,7 +222,7 @@ export const AllProjectView = ({
|
|||||||
onKeyDown={(evt) => {
|
onKeyDown={(evt) => {
|
||||||
if (evt.key === "Enter" && workspace.isMember) {
|
if (evt.key === "Enter" && workspace.isMember) {
|
||||||
navigate({
|
navigate({
|
||||||
to: getProjectHomePage(workspace.defaultProduct),
|
to: getProjectHomePage(workspace.type),
|
||||||
params: {
|
params: {
|
||||||
projectId: workspace.id
|
projectId: workspace.id
|
||||||
}
|
}
|
||||||
@@ -232,7 +232,7 @@ export const AllProjectView = ({
|
|||||||
onClick={() => {
|
onClick={() => {
|
||||||
if (workspace.isMember) {
|
if (workspace.isMember) {
|
||||||
navigate({
|
navigate({
|
||||||
to: getProjectHomePage(workspace.defaultProduct),
|
to: getProjectHomePage(workspace.type),
|
||||||
params: {
|
params: {
|
||||||
projectId: workspace.id
|
projectId: workspace.id
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -153,7 +153,7 @@ export const MyProjectView = ({
|
|||||||
<div
|
<div
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
navigate({
|
navigate({
|
||||||
to: getProjectHomePage(workspace.defaultProduct),
|
to: getProjectHomePage(workspace.type),
|
||||||
params: {
|
params: {
|
||||||
projectId: workspace.id
|
projectId: workspace.id
|
||||||
}
|
}
|
||||||
@@ -215,7 +215,7 @@ export const MyProjectView = ({
|
|||||||
<div
|
<div
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
navigate({
|
navigate({
|
||||||
to: getProjectHomePage(workspace.defaultProduct),
|
to: getProjectHomePage(workspace.type),
|
||||||
params: {
|
params: {
|
||||||
projectId: workspace.id
|
projectId: workspace.id
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-1
@@ -10,6 +10,8 @@ import { useGetUserWorkspaces } from "@app/hooks/api";
|
|||||||
import { TWorkspaceUser } from "@app/hooks/api/types";
|
import { TWorkspaceUser } from "@app/hooks/api/types";
|
||||||
import { UsePopUpState } from "@app/hooks/usePopUp";
|
import { UsePopUpState } from "@app/hooks/usePopUp";
|
||||||
import { OrgAccessControlTabSections } from "@app/types/org";
|
import { OrgAccessControlTabSections } from "@app/types/org";
|
||||||
|
import { getProjectBaseURL } from "@app/helpers/project";
|
||||||
|
import { useWorkspace } from "@app/context";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
membership: TWorkspaceUser;
|
membership: TWorkspaceUser;
|
||||||
@@ -25,6 +27,7 @@ export const UserProjectRow = ({
|
|||||||
}: Props) => {
|
}: Props) => {
|
||||||
const { data: workspaces = [] } = useGetUserWorkspaces();
|
const { data: workspaces = [] } = useGetUserWorkspaces();
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
const { currentWorkspace } = useWorkspace();
|
||||||
|
|
||||||
const isAccessible = useMemo(() => {
|
const isAccessible = useMemo(() => {
|
||||||
const workspaceIds = new Map();
|
const workspaceIds = new Map();
|
||||||
@@ -43,7 +46,7 @@ export const UserProjectRow = ({
|
|||||||
onClick={() => {
|
onClick={() => {
|
||||||
if (isAccessible) {
|
if (isAccessible) {
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/access-management",
|
to: `${getProjectBaseURL(currentWorkspace.type)}/access-management` as const,
|
||||||
params: {
|
params: {
|
||||||
projectId: project.id
|
projectId: project.id
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import { useNavigate, useSearch } from "@tanstack/react-router";
|
|||||||
|
|
||||||
import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2";
|
import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2";
|
||||||
import { useWorkspace } from "@app/context";
|
import { useWorkspace } from "@app/context";
|
||||||
|
import { getProjectBaseURL } from "@app/helpers/project";
|
||||||
import { ProjectAccessControlTabs } from "@app/types/project";
|
import { ProjectAccessControlTabs } from "@app/types/project";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@@ -24,7 +25,7 @@ const Page = () => {
|
|||||||
|
|
||||||
const updateSelectedTab = (tab: string) => {
|
const updateSelectedTab = (tab: string) => {
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/access-management",
|
to: `${getProjectBaseURL(currentWorkspace.type)}/access-management` as const,
|
||||||
search: (prev) => ({ ...prev, selectedTab: tab }),
|
search: (prev) => ({ ...prev, selectedTab: tab }),
|
||||||
params: {
|
params: {
|
||||||
projectId: currentWorkspace.id
|
projectId: currentWorkspace.id
|
||||||
|
|||||||
+3
-2
@@ -44,6 +44,7 @@ import { OrderByDirection } from "@app/hooks/api/generic/types";
|
|||||||
import { UsePopUpState } from "@app/hooks/usePopUp";
|
import { UsePopUpState } from "@app/hooks/usePopUp";
|
||||||
|
|
||||||
import { GroupRoles } from "./GroupRoles";
|
import { GroupRoles } from "./GroupRoles";
|
||||||
|
import { getProjectBaseURL } from "@app/helpers/project";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
handlePopUpOpen: (
|
handlePopUpOpen: (
|
||||||
@@ -158,7 +159,7 @@ export const GroupTable = ({ handlePopUpOpen }: Props) => {
|
|||||||
onKeyDown={(evt) => {
|
onKeyDown={(evt) => {
|
||||||
if (evt.key === "Enter") {
|
if (evt.key === "Enter") {
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/groups/$groupId",
|
to: `${getProjectBaseURL(currentWorkspace.type)}/groups/$groupId` as const,
|
||||||
params: {
|
params: {
|
||||||
projectId: currentWorkspace.id,
|
projectId: currentWorkspace.id,
|
||||||
groupId: id
|
groupId: id
|
||||||
@@ -168,7 +169,7 @@ export const GroupTable = ({ handlePopUpOpen }: Props) => {
|
|||||||
}}
|
}}
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/groups/$groupId",
|
to: `${getProjectBaseURL(currentWorkspace.type)}/groups/$groupId` as const,
|
||||||
params: {
|
params: {
|
||||||
projectId: currentWorkspace.id,
|
projectId: currentWorkspace.id,
|
||||||
groupId: id
|
groupId: id
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ import { ProjectIdentityOrderBy } from "@app/hooks/api/workspace/types";
|
|||||||
import { usePopUp } from "@app/hooks/usePopUp";
|
import { usePopUp } from "@app/hooks/usePopUp";
|
||||||
|
|
||||||
import { IdentityModal } from "./components/IdentityModal";
|
import { IdentityModal } from "./components/IdentityModal";
|
||||||
|
import { getProjectBaseURL } from "@app/helpers/project";
|
||||||
|
|
||||||
const MAX_ROLES_TO_BE_SHOWN_IN_TABLE = 2;
|
const MAX_ROLES_TO_BE_SHOWN_IN_TABLE = 2;
|
||||||
|
|
||||||
@@ -260,7 +261,7 @@ export const IdentityTab = withProjectPermission(
|
|||||||
onKeyDown={(evt) => {
|
onKeyDown={(evt) => {
|
||||||
if (evt.key === "Enter") {
|
if (evt.key === "Enter") {
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/identities/$identityId",
|
to: `${getProjectBaseURL(currentWorkspace.type)}/identities/$identityId` as const,
|
||||||
params: {
|
params: {
|
||||||
projectId: currentWorkspace.id,
|
projectId: currentWorkspace.id,
|
||||||
identityId: id
|
identityId: id
|
||||||
@@ -270,7 +271,7 @@ export const IdentityTab = withProjectPermission(
|
|||||||
}}
|
}}
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/identities/$identityId",
|
to: `${getProjectBaseURL(currentWorkspace.type)}/identities/$identityId` as const,
|
||||||
params: {
|
params: {
|
||||||
projectId: currentWorkspace.id,
|
projectId: currentWorkspace.id,
|
||||||
identityId: id
|
identityId: id
|
||||||
|
|||||||
+2
-1
@@ -5,6 +5,7 @@ import { useWorkspace } from "@app/context";
|
|||||||
import { TWorkspaceUser } from "@app/hooks/api/types";
|
import { TWorkspaceUser } from "@app/hooks/api/types";
|
||||||
|
|
||||||
import { MemberRbacSection } from "./MemberRbacSection";
|
import { MemberRbacSection } from "./MemberRbacSection";
|
||||||
|
import { getProjectBaseURL } from "@app/helpers/project";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
projectMember: TWorkspaceUser;
|
projectMember: TWorkspaceUser;
|
||||||
@@ -21,7 +22,7 @@ export const MemberRoleForm = ({ projectMember, onOpenUpgradeModal }: Props) =>
|
|||||||
>
|
>
|
||||||
<AlertDescription>
|
<AlertDescription>
|
||||||
<Link
|
<Link
|
||||||
to="/projects/$projectId/members/$membershipId"
|
to={`${getProjectBaseURL(currentWorkspace.type)}/members/$membershipId` as const}
|
||||||
params={{
|
params={{
|
||||||
projectId: currentWorkspace.id,
|
projectId: currentWorkspace.id,
|
||||||
membershipId: projectMember.id
|
membershipId: projectMember.id
|
||||||
|
|||||||
+3
-2
@@ -60,6 +60,7 @@ import { usePagination, useResetPageHelper } from "@app/hooks";
|
|||||||
import { useGetProjectRoles, useGetWorkspaceUsers } from "@app/hooks/api";
|
import { useGetProjectRoles, useGetWorkspaceUsers } from "@app/hooks/api";
|
||||||
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
import { OrderByDirection } from "@app/hooks/api/generic/types";
|
||||||
import { UsePopUpState } from "@app/hooks/usePopUp";
|
import { UsePopUpState } from "@app/hooks/usePopUp";
|
||||||
|
import { getProjectBaseURL } from "@app/helpers/project";
|
||||||
|
|
||||||
const MAX_ROLES_TO_BE_SHOWN_IN_TABLE = 2;
|
const MAX_ROLES_TO_BE_SHOWN_IN_TABLE = 2;
|
||||||
|
|
||||||
@@ -311,7 +312,7 @@ export const MembersTable = ({ handlePopUpOpen }: Props) => {
|
|||||||
onKeyDown={(evt) => {
|
onKeyDown={(evt) => {
|
||||||
if (evt.key === "Enter") {
|
if (evt.key === "Enter") {
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/members/$membershipId",
|
to: `${getProjectBaseURL(currentWorkspace.type)}/members/$membershipId`,
|
||||||
params: {
|
params: {
|
||||||
projectId: workspaceId,
|
projectId: workspaceId,
|
||||||
membershipId
|
membershipId
|
||||||
@@ -321,7 +322,7 @@ export const MembersTable = ({ handlePopUpOpen }: Props) => {
|
|||||||
}}
|
}}
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/members/$membershipId",
|
to: `${getProjectBaseURL(currentWorkspace.type)}/members/$membershipId`,
|
||||||
params: {
|
params: {
|
||||||
projectId: workspaceId,
|
projectId: workspaceId,
|
||||||
membershipId
|
membershipId
|
||||||
|
|||||||
+3
-2
@@ -52,6 +52,7 @@ import { OrderByDirection } from "@app/hooks/api/generic/types";
|
|||||||
import { ProjectMembershipRole, TProjectRole } from "@app/hooks/api/roles/types";
|
import { ProjectMembershipRole, TProjectRole } from "@app/hooks/api/roles/types";
|
||||||
import { DuplicateProjectRoleModal } from "@app/pages/project/RoleDetailsBySlugPage/components/DuplicateProjectRoleModal";
|
import { DuplicateProjectRoleModal } from "@app/pages/project/RoleDetailsBySlugPage/components/DuplicateProjectRoleModal";
|
||||||
import { RoleModal } from "@app/pages/project/RoleDetailsBySlugPage/components/RoleModal";
|
import { RoleModal } from "@app/pages/project/RoleDetailsBySlugPage/components/RoleModal";
|
||||||
|
import { getProjectBaseURL } from "@app/helpers/project";
|
||||||
|
|
||||||
enum RolesOrderBy {
|
enum RolesOrderBy {
|
||||||
Name = "name",
|
Name = "name",
|
||||||
@@ -249,7 +250,7 @@ export const ProjectRoleList = () => {
|
|||||||
className="h-10 cursor-pointer transition-colors duration-100 hover:bg-mineshaft-700"
|
className="h-10 cursor-pointer transition-colors duration-100 hover:bg-mineshaft-700"
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/roles/$roleSlug",
|
to: `${getProjectBaseURL(currentWorkspace.type)}/roles/$roleSlug`,
|
||||||
params: {
|
params: {
|
||||||
projectId: currentWorkspace.id,
|
projectId: currentWorkspace.id,
|
||||||
roleSlug: slug
|
roleSlug: slug
|
||||||
@@ -291,7 +292,7 @@ export const ProjectRoleList = () => {
|
|||||||
onClick={(e) => {
|
onClick={(e) => {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/roles/$roleSlug",
|
to: `${getProjectBaseURL(currentWorkspace.type)}/roles/$roleSlug`,
|
||||||
params: {
|
params: {
|
||||||
projectId: currentWorkspace.id,
|
projectId: currentWorkspace.id,
|
||||||
roleSlug: slug
|
roleSlug: slug
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
import { createFileRoute, stripSearchParams } from '@tanstack/react-router'
|
||||||
|
import { zodValidator } from '@tanstack/zod-adapter'
|
||||||
|
import { z } from 'zod'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { AccessControlPage } from './AccessControlPage'
|
||||||
|
|
||||||
|
const AccessControlPageQuerySchema = z.object({
|
||||||
|
selectedTab: z
|
||||||
|
.nativeEnum(ProjectAccessControlTabs)
|
||||||
|
.catch(ProjectAccessControlTabs.Member),
|
||||||
|
requesterEmail: z.string().catch(''),
|
||||||
|
})
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/access-management',
|
||||||
|
)({
|
||||||
|
component: AccessControlPage,
|
||||||
|
validateSearch: zodValidator(AccessControlPageQuerySchema),
|
||||||
|
search: {
|
||||||
|
middlewares: [stripSearchParams({ requesterEmail: '' })],
|
||||||
|
},
|
||||||
|
beforeLoad: ({ context }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
import { createFileRoute, stripSearchParams } from '@tanstack/react-router'
|
||||||
|
import { zodValidator } from '@tanstack/zod-adapter'
|
||||||
|
import { z } from 'zod'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { AccessControlPage } from './AccessControlPage'
|
||||||
|
|
||||||
|
const AccessControlPageQuerySchema = z.object({
|
||||||
|
selectedTab: z
|
||||||
|
.nativeEnum(ProjectAccessControlTabs)
|
||||||
|
.catch(ProjectAccessControlTabs.Member),
|
||||||
|
requesterEmail: z.string().catch(''),
|
||||||
|
})
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/kms/$projectId/_kms-layout/access-management',
|
||||||
|
)({
|
||||||
|
component: AccessControlPage,
|
||||||
|
validateSearch: zodValidator(AccessControlPageQuerySchema),
|
||||||
|
search: {
|
||||||
|
middlewares: [stripSearchParams({ requesterEmail: '' })],
|
||||||
|
},
|
||||||
|
beforeLoad: ({ context }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
import { createFileRoute, stripSearchParams } from '@tanstack/react-router'
|
||||||
|
import { zodValidator } from '@tanstack/zod-adapter'
|
||||||
|
import { z } from 'zod'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { AccessControlPage } from './AccessControlPage'
|
||||||
|
|
||||||
|
const AccessControlPageQuerySchema = z.object({
|
||||||
|
selectedTab: z
|
||||||
|
.nativeEnum(ProjectAccessControlTabs)
|
||||||
|
.catch(ProjectAccessControlTabs.Member),
|
||||||
|
requesterEmail: z.string().catch(''),
|
||||||
|
})
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/access-management',
|
||||||
|
)({
|
||||||
|
component: AccessControlPage,
|
||||||
|
validateSearch: zodValidator(AccessControlPageQuerySchema),
|
||||||
|
search: {
|
||||||
|
middlewares: [stripSearchParams({ requesterEmail: '' })],
|
||||||
|
},
|
||||||
|
beforeLoad: ({ context }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
import { createFileRoute, stripSearchParams } from '@tanstack/react-router'
|
||||||
|
import { zodValidator } from '@tanstack/zod-adapter'
|
||||||
|
import { z } from 'zod'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { AccessControlPage } from './AccessControlPage'
|
||||||
|
|
||||||
|
const AccessControlPageQuerySchema = z.object({
|
||||||
|
selectedTab: z
|
||||||
|
.nativeEnum(ProjectAccessControlTabs)
|
||||||
|
.catch(ProjectAccessControlTabs.Member),
|
||||||
|
requesterEmail: z.string().catch(''),
|
||||||
|
})
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/secret-scanning/$projectId/_secret-scanning-layout/access-management',
|
||||||
|
)({
|
||||||
|
component: AccessControlPage,
|
||||||
|
validateSearch: zodValidator(AccessControlPageQuerySchema),
|
||||||
|
search: {
|
||||||
|
middlewares: [stripSearchParams({ requesterEmail: '' })],
|
||||||
|
},
|
||||||
|
beforeLoad: ({ context }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
import { createFileRoute, stripSearchParams } from '@tanstack/react-router'
|
||||||
|
import { zodValidator } from '@tanstack/zod-adapter'
|
||||||
|
import { z } from 'zod'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { AccessControlPage } from './AccessControlPage'
|
||||||
|
|
||||||
|
const AccessControlPageQuerySchema = z.object({
|
||||||
|
selectedTab: z
|
||||||
|
.nativeEnum(ProjectAccessControlTabs)
|
||||||
|
.catch(ProjectAccessControlTabs.Member),
|
||||||
|
requesterEmail: z.string().catch(''),
|
||||||
|
})
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/ssh/$projectId/_ssh-layout/access-management',
|
||||||
|
)({
|
||||||
|
component: AccessControlPage,
|
||||||
|
validateSearch: zodValidator(AccessControlPageQuerySchema),
|
||||||
|
search: {
|
||||||
|
middlewares: [stripSearchParams({ requesterEmail: '' })],
|
||||||
|
},
|
||||||
|
beforeLoad: ({ context }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -19,6 +19,7 @@ import { usePopUp } from "@app/hooks";
|
|||||||
import { useDeleteGroupFromWorkspace } from "@app/hooks/api";
|
import { useDeleteGroupFromWorkspace } from "@app/hooks/api";
|
||||||
import { TGroupMembership } from "@app/hooks/api/groups/types";
|
import { TGroupMembership } from "@app/hooks/api/groups/types";
|
||||||
import { GroupRoles } from "@app/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupRoles";
|
import { GroupRoles } from "@app/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupRoles";
|
||||||
|
import { getProjectBaseURL } from "@app/helpers/project";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
groupMembership: TGroupMembership;
|
groupMembership: TGroupMembership;
|
||||||
@@ -46,7 +47,7 @@ export const GroupDetailsSection = ({ groupMembership }: Props) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/access-management",
|
to: `${getProjectBaseURL(currentWorkspace.type)}/access-management`,
|
||||||
params: {
|
params: {
|
||||||
projectId: currentWorkspace.id
|
projectId: currentWorkspace.id
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import { createFileRoute, linkOptions } from '@tanstack/react-router'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { GroupDetailsByIDPage } from './GroupDetailsByIDPage'
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/groups/$groupId',
|
||||||
|
)({
|
||||||
|
component: GroupDetailsByIDPage,
|
||||||
|
beforeLoad: ({ context, params }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
link: linkOptions({
|
||||||
|
to: '/projects/$projectId/access-management',
|
||||||
|
params: {
|
||||||
|
projectId: params.projectId,
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
selectedTab: ProjectAccessControlTabs.Groups,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Group',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import { createFileRoute, linkOptions } from '@tanstack/react-router'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { GroupDetailsByIDPage } from './GroupDetailsByIDPage'
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/kms/$projectId/_kms-layout/groups/$groupId',
|
||||||
|
)({
|
||||||
|
component: GroupDetailsByIDPage,
|
||||||
|
beforeLoad: ({ context, params }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
link: linkOptions({
|
||||||
|
to: '/projects/$projectId/access-management',
|
||||||
|
params: {
|
||||||
|
projectId: params.projectId,
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
selectedTab: ProjectAccessControlTabs.Groups,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Group',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import { createFileRoute, linkOptions } from '@tanstack/react-router'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { GroupDetailsByIDPage } from './GroupDetailsByIDPage'
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/groups/$groupId',
|
||||||
|
)({
|
||||||
|
component: GroupDetailsByIDPage,
|
||||||
|
beforeLoad: ({ context, params }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
link: linkOptions({
|
||||||
|
to: '/projects/$projectId/access-management',
|
||||||
|
params: {
|
||||||
|
projectId: params.projectId,
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
selectedTab: ProjectAccessControlTabs.Groups,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Group',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import { createFileRoute, linkOptions } from '@tanstack/react-router'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { GroupDetailsByIDPage } from './GroupDetailsByIDPage'
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/secret-scanning/$projectId/_secret-scanning-layout/groups/$groupId',
|
||||||
|
)({
|
||||||
|
component: GroupDetailsByIDPage,
|
||||||
|
beforeLoad: ({ context, params }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
link: linkOptions({
|
||||||
|
to: '/projects/$projectId/access-management',
|
||||||
|
params: {
|
||||||
|
projectId: params.projectId,
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
selectedTab: ProjectAccessControlTabs.Groups,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Group',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import { createFileRoute, linkOptions } from '@tanstack/react-router'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { GroupDetailsByIDPage } from './GroupDetailsByIDPage'
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/ssh/$projectId/_ssh-layout/groups/$groupId',
|
||||||
|
)({
|
||||||
|
component: GroupDetailsByIDPage,
|
||||||
|
beforeLoad: ({ context, params }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
link: linkOptions({
|
||||||
|
to: '/projects/$projectId/access-management',
|
||||||
|
params: {
|
||||||
|
projectId: params.projectId,
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
selectedTab: ProjectAccessControlTabs.Groups,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Group',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -20,7 +20,7 @@ import {
|
|||||||
ProjectPermissionSub,
|
ProjectPermissionSub,
|
||||||
useWorkspace
|
useWorkspace
|
||||||
} from "@app/context";
|
} from "@app/context";
|
||||||
import { getCurrentProductFromUrl, getProjectHomePage } from "@app/helpers/project";
|
import { getProjectBaseURL, getProjectHomePage } from "@app/helpers/project";
|
||||||
import { usePopUp } from "@app/hooks";
|
import { usePopUp } from "@app/hooks";
|
||||||
import {
|
import {
|
||||||
useAssumeProjectPrivileges,
|
useAssumeProjectPrivileges,
|
||||||
@@ -28,7 +28,6 @@ import {
|
|||||||
useGetWorkspaceIdentityMembershipDetails
|
useGetWorkspaceIdentityMembershipDetails
|
||||||
} from "@app/hooks/api";
|
} from "@app/hooks/api";
|
||||||
import { ActorType } from "@app/hooks/api/auditLogs/enums";
|
import { ActorType } from "@app/hooks/api/auditLogs/enums";
|
||||||
import { ProjectType } from "@app/hooks/api/workspace/types";
|
|
||||||
|
|
||||||
import { IdentityProjectAdditionalPrivilegeSection } from "./components/IdentityProjectAdditionalPrivilegeSection";
|
import { IdentityProjectAdditionalPrivilegeSection } from "./components/IdentityProjectAdditionalPrivilegeSection";
|
||||||
import { IdentityRoleDetailsSection } from "./components/IdentityRoleDetailsSection";
|
import { IdentityRoleDetailsSection } from "./components/IdentityRoleDetailsSection";
|
||||||
@@ -68,9 +67,7 @@ const Page = () => {
|
|||||||
type: "success",
|
type: "success",
|
||||||
text: "Identity privilege assumption has started"
|
text: "Identity privilege assumption has started"
|
||||||
});
|
});
|
||||||
const url = getProjectHomePage(
|
const url = getProjectHomePage(currentWorkspace.type);
|
||||||
getCurrentProductFromUrl(window.location.href) || ProjectType.SecretManager
|
|
||||||
);
|
|
||||||
window.location.href = url.replace("$projectId", currentWorkspace.id);
|
window.location.href = url.replace("$projectId", currentWorkspace.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -89,7 +86,7 @@ const Page = () => {
|
|||||||
});
|
});
|
||||||
handlePopUpClose("deleteIdentity");
|
handlePopUpClose("deleteIdentity");
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/access-management",
|
to: `${getProjectBaseURL(currentWorkspace.type)}/access-management` as const,
|
||||||
params: {
|
params: {
|
||||||
projectId: workspaceId
|
projectId: workspaceId
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import { createFileRoute, linkOptions } from '@tanstack/react-router'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { IdentityDetailsByIDPage } from './IdentityDetailsByIDPage'
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/identities/$identityId',
|
||||||
|
)({
|
||||||
|
component: IdentityDetailsByIDPage,
|
||||||
|
beforeLoad: ({ context, params }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
link: linkOptions({
|
||||||
|
to: '/projects/$projectId/access-management',
|
||||||
|
params: {
|
||||||
|
projectId: params.projectId,
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
selectedTab: ProjectAccessControlTabs.Identities,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Machine Identity',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import { createFileRoute, linkOptions } from '@tanstack/react-router'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { IdentityDetailsByIDPage } from './IdentityDetailsByIDPage'
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/kms/$projectId/_kms-layout/identities/$identityId',
|
||||||
|
)({
|
||||||
|
component: IdentityDetailsByIDPage,
|
||||||
|
beforeLoad: ({ context, params }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
link: linkOptions({
|
||||||
|
to: '/projects/$projectId/access-management',
|
||||||
|
params: {
|
||||||
|
projectId: params.projectId,
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
selectedTab: ProjectAccessControlTabs.Identities,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Machine Identity',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import { createFileRoute, linkOptions } from '@tanstack/react-router'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { IdentityDetailsByIDPage } from './IdentityDetailsByIDPage'
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/identities/$identityId',
|
||||||
|
)({
|
||||||
|
component: IdentityDetailsByIDPage,
|
||||||
|
beforeLoad: ({ context, params }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
link: linkOptions({
|
||||||
|
to: '/projects/$projectId/access-management',
|
||||||
|
params: {
|
||||||
|
projectId: params.projectId,
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
selectedTab: ProjectAccessControlTabs.Identities,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Machine Identity',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import { createFileRoute, linkOptions } from '@tanstack/react-router'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { IdentityDetailsByIDPage } from './IdentityDetailsByIDPage'
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/secret-scanning/$projectId/_secret-scanning-layout/identities/$identityId',
|
||||||
|
)({
|
||||||
|
component: IdentityDetailsByIDPage,
|
||||||
|
beforeLoad: ({ context, params }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
link: linkOptions({
|
||||||
|
to: '/projects/$projectId/access-management',
|
||||||
|
params: {
|
||||||
|
projectId: params.projectId,
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
selectedTab: ProjectAccessControlTabs.Identities,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Machine Identity',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import { createFileRoute, linkOptions } from '@tanstack/react-router'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { IdentityDetailsByIDPage } from './IdentityDetailsByIDPage'
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/ssh/$projectId/_ssh-layout/identities/$identityId',
|
||||||
|
)({
|
||||||
|
component: IdentityDetailsByIDPage,
|
||||||
|
beforeLoad: ({ context, params }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
link: linkOptions({
|
||||||
|
to: '/projects/$projectId/access-management',
|
||||||
|
params: {
|
||||||
|
projectId: params.projectId,
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
selectedTab: ProjectAccessControlTabs.Identities,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Machine Identity',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -21,7 +21,7 @@ import {
|
|||||||
useOrganization,
|
useOrganization,
|
||||||
useWorkspace
|
useWorkspace
|
||||||
} from "@app/context";
|
} from "@app/context";
|
||||||
import { getCurrentProductFromUrl, getProjectHomePage } from "@app/helpers/project";
|
import { getProjectBaseURL, getProjectHomePage } from "@app/helpers/project";
|
||||||
import { usePopUp } from "@app/hooks";
|
import { usePopUp } from "@app/hooks";
|
||||||
import {
|
import {
|
||||||
useAssumeProjectPrivileges,
|
useAssumeProjectPrivileges,
|
||||||
@@ -29,7 +29,6 @@ import {
|
|||||||
useGetWorkspaceUserDetails
|
useGetWorkspaceUserDetails
|
||||||
} from "@app/hooks/api";
|
} from "@app/hooks/api";
|
||||||
import { ActorType } from "@app/hooks/api/auditLogs/enums";
|
import { ActorType } from "@app/hooks/api/auditLogs/enums";
|
||||||
import { ProjectType } from "@app/hooks/api/workspace/types";
|
|
||||||
|
|
||||||
import { MemberProjectAdditionalPrivilegeSection } from "./components/MemberProjectAdditionalPrivilegeSection";
|
import { MemberProjectAdditionalPrivilegeSection } from "./components/MemberProjectAdditionalPrivilegeSection";
|
||||||
import { MemberRoleDetailsSection } from "./components/MemberRoleDetailsSection";
|
import { MemberRoleDetailsSection } from "./components/MemberRoleDetailsSection";
|
||||||
@@ -73,9 +72,7 @@ export const Page = () => {
|
|||||||
text: "User privilege assumption has started"
|
text: "User privilege assumption has started"
|
||||||
});
|
});
|
||||||
|
|
||||||
const url = getProjectHomePage(
|
const url = getProjectHomePage(currentWorkspace.type);
|
||||||
getCurrentProductFromUrl(window.location.href) || ProjectType.SecretManager
|
|
||||||
);
|
|
||||||
window.location.href = url.replace("$projectId", currentWorkspace.id);
|
window.location.href = url.replace("$projectId", currentWorkspace.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -96,7 +93,7 @@ export const Page = () => {
|
|||||||
type: "success"
|
type: "success"
|
||||||
});
|
});
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/access-management",
|
to: `${getProjectBaseURL(currentWorkspace.type)}/access-management` as const,
|
||||||
params: {
|
params: {
|
||||||
projectId: currentWorkspace.id
|
projectId: currentWorkspace.id
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import { createFileRoute, linkOptions } from '@tanstack/react-router'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { MemberDetailsByIDPage } from './MemberDetailsByIDPage'
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/members/$membershipId',
|
||||||
|
)({
|
||||||
|
component: MemberDetailsByIDPage,
|
||||||
|
beforeLoad: ({ context, params }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
link: linkOptions({
|
||||||
|
to: '/projects/$projectId/access-management',
|
||||||
|
params: {
|
||||||
|
projectId: params.projectId,
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
selectedTab: ProjectAccessControlTabs.Member,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'User',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import { createFileRoute, linkOptions } from '@tanstack/react-router'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { MemberDetailsByIDPage } from './MemberDetailsByIDPage'
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/kms/$projectId/_kms-layout/members/$membershipId',
|
||||||
|
)({
|
||||||
|
component: MemberDetailsByIDPage,
|
||||||
|
beforeLoad: ({ context, params }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
link: linkOptions({
|
||||||
|
to: '/projects/$projectId/access-management',
|
||||||
|
params: {
|
||||||
|
projectId: params.projectId,
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
selectedTab: ProjectAccessControlTabs.Member,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'User',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import { createFileRoute, linkOptions } from '@tanstack/react-router'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { MemberDetailsByIDPage } from './MemberDetailsByIDPage'
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/members/$membershipId',
|
||||||
|
)({
|
||||||
|
component: MemberDetailsByIDPage,
|
||||||
|
beforeLoad: ({ context, params }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
link: linkOptions({
|
||||||
|
to: '/projects/$projectId/access-management',
|
||||||
|
params: {
|
||||||
|
projectId: params.projectId,
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
selectedTab: ProjectAccessControlTabs.Member,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'User',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import { createFileRoute, linkOptions } from '@tanstack/react-router'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { MemberDetailsByIDPage } from './MemberDetailsByIDPage'
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/secret-scanning/$projectId/_secret-scanning-layout/members/$membershipId',
|
||||||
|
)({
|
||||||
|
component: MemberDetailsByIDPage,
|
||||||
|
beforeLoad: ({ context, params }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
link: linkOptions({
|
||||||
|
to: '/projects/$projectId/access-management',
|
||||||
|
params: {
|
||||||
|
projectId: params.projectId,
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
selectedTab: ProjectAccessControlTabs.Member,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'User',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import { createFileRoute, linkOptions } from '@tanstack/react-router'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { MemberDetailsByIDPage } from './MemberDetailsByIDPage'
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/ssh/$projectId/_ssh-layout/members/$membershipId',
|
||||||
|
)({
|
||||||
|
component: MemberDetailsByIDPage,
|
||||||
|
beforeLoad: ({ context, params }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
link: linkOptions({
|
||||||
|
to: '/projects/$projectId/access-management',
|
||||||
|
params: {
|
||||||
|
projectId: params.projectId,
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
selectedTab: ProjectAccessControlTabs.Member,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'User',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -25,6 +25,7 @@ import { RolePermissionsSection } from "@app/pages/project/RoleDetailsBySlugPage
|
|||||||
import { ProjectAccessControlTabs } from "@app/types/project";
|
import { ProjectAccessControlTabs } from "@app/types/project";
|
||||||
|
|
||||||
import { RoleModal } from "./components/RoleModal";
|
import { RoleModal } from "./components/RoleModal";
|
||||||
|
import { getProjectBaseURL } from "@app/helpers/project";
|
||||||
|
|
||||||
const Page = () => {
|
const Page = () => {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
@@ -60,7 +61,7 @@ const Page = () => {
|
|||||||
});
|
});
|
||||||
handlePopUpClose("deleteRole");
|
handlePopUpClose("deleteRole");
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/access-management",
|
to: `${getProjectBaseURL(currentWorkspace.type)}/access-management` as const,
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
},
|
},
|
||||||
|
|||||||
+2
-1
@@ -10,6 +10,7 @@ import { ProjectPermissionSecretActions } from "@app/context/ProjectPermissionCo
|
|||||||
import { useCreateProjectRole, useGetProjectRoleBySlug } from "@app/hooks/api";
|
import { useCreateProjectRole, useGetProjectRoleBySlug } from "@app/hooks/api";
|
||||||
import { TProjectRole } from "@app/hooks/api/roles/types";
|
import { TProjectRole } from "@app/hooks/api/roles/types";
|
||||||
import { slugSchema } from "@app/lib/schemas";
|
import { slugSchema } from "@app/lib/schemas";
|
||||||
|
import { getProjectBaseURL } from "@app/helpers/project";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
isOpen: boolean;
|
isOpen: boolean;
|
||||||
@@ -80,7 +81,7 @@ const Content = ({ role, onClose }: ContentProps) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/roles/$roleSlug",
|
to: `${getProjectBaseURL(currentWorkspace.type)}/roles/$roleSlug` as const,
|
||||||
params: {
|
params: {
|
||||||
roleSlug: newRole.slug,
|
roleSlug: newRole.slug,
|
||||||
projectId: currentWorkspace.id
|
projectId: currentWorkspace.id
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import {
|
|||||||
} from "@app/hooks/api";
|
} from "@app/hooks/api";
|
||||||
import { UsePopUpState } from "@app/hooks/usePopUp";
|
import { UsePopUpState } from "@app/hooks/usePopUp";
|
||||||
import { slugSchema } from "@app/lib/schemas";
|
import { slugSchema } from "@app/lib/schemas";
|
||||||
|
import { getProjectBaseURL } from "@app/helpers/project";
|
||||||
|
|
||||||
const schema = z
|
const schema = z
|
||||||
.object({
|
.object({
|
||||||
@@ -100,7 +101,7 @@ export const RoleModal = ({ popUp, handlePopUpToggle }: Props) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/roles/$roleSlug",
|
to: `${getProjectBaseURL(currentWorkspace.type)}/roles/$roleSlug` as const,
|
||||||
params: {
|
params: {
|
||||||
roleSlug: newRole.slug,
|
roleSlug: newRole.slug,
|
||||||
projectId
|
projectId
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import { createFileRoute, linkOptions } from '@tanstack/react-router'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { RoleDetailsBySlugPage } from './RoleDetailsBySlugPage'
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/roles/$roleSlug',
|
||||||
|
)({
|
||||||
|
component: RoleDetailsBySlugPage,
|
||||||
|
beforeLoad: ({ context, params }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
link: linkOptions({
|
||||||
|
to: '/projects/$projectId/access-management',
|
||||||
|
params: {
|
||||||
|
projectId: params.projectId,
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
selectedTab: ProjectAccessControlTabs.Roles,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Roles',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import { createFileRoute, linkOptions } from '@tanstack/react-router'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { RoleDetailsBySlugPage } from './RoleDetailsBySlugPage'
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/kms/$projectId/_kms-layout/roles/$roleSlug',
|
||||||
|
)({
|
||||||
|
component: RoleDetailsBySlugPage,
|
||||||
|
beforeLoad: ({ context, params }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
link: linkOptions({
|
||||||
|
to: '/projects/$projectId/access-management',
|
||||||
|
params: {
|
||||||
|
projectId: params.projectId,
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
selectedTab: ProjectAccessControlTabs.Roles,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Roles',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import { createFileRoute, linkOptions } from '@tanstack/react-router'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { RoleDetailsBySlugPage } from './RoleDetailsBySlugPage'
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/roles/$roleSlug',
|
||||||
|
)({
|
||||||
|
component: RoleDetailsBySlugPage,
|
||||||
|
beforeLoad: ({ context, params }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
link: linkOptions({
|
||||||
|
to: '/projects/$projectId/access-management',
|
||||||
|
params: {
|
||||||
|
projectId: params.projectId,
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
selectedTab: ProjectAccessControlTabs.Roles,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Roles',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import { createFileRoute, linkOptions } from '@tanstack/react-router'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { RoleDetailsBySlugPage } from './RoleDetailsBySlugPage'
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/secret-scanning/$projectId/_secret-scanning-layout/roles/$roleSlug',
|
||||||
|
)({
|
||||||
|
component: RoleDetailsBySlugPage,
|
||||||
|
beforeLoad: ({ context, params }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
link: linkOptions({
|
||||||
|
to: '/projects/$projectId/access-management',
|
||||||
|
params: {
|
||||||
|
projectId: params.projectId,
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
selectedTab: ProjectAccessControlTabs.Roles,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Roles',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import { createFileRoute, linkOptions } from '@tanstack/react-router'
|
||||||
|
|
||||||
|
import { ProjectAccessControlTabs } from '@app/types/project'
|
||||||
|
|
||||||
|
import { RoleDetailsBySlugPage } from './RoleDetailsBySlugPage'
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/projects/ssh/$projectId/_ssh-layout/roles/$roleSlug',
|
||||||
|
)({
|
||||||
|
component: RoleDetailsBySlugPage,
|
||||||
|
beforeLoad: ({ context, params }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Access Control',
|
||||||
|
link: linkOptions({
|
||||||
|
to: '/projects/$projectId/access-management',
|
||||||
|
params: {
|
||||||
|
projectId: params.projectId,
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
selectedTab: ProjectAccessControlTabs.Roles,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Roles',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
import { createFileRoute } from "@tanstack/react-router";
|
||||||
|
|
||||||
|
import { SettingsPage } from "./SettingsPage";
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/_project-general-layout/settings"
|
||||||
|
)({
|
||||||
|
component: SettingsPage,
|
||||||
|
beforeLoad: ({ context }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: "Settings"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
import { createFileRoute } from "@tanstack/react-router";
|
||||||
|
|
||||||
|
import { SettingsPage } from "./SettingsPage";
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/_project-general-layout/settings"
|
||||||
|
)({
|
||||||
|
component: SettingsPage,
|
||||||
|
beforeLoad: ({ context }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: "Settings"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
import { createFileRoute } from "@tanstack/react-router";
|
||||||
|
|
||||||
|
import { SettingsPage } from "./SettingsPage";
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/_project-general-layout/settings"
|
||||||
|
)({
|
||||||
|
component: SettingsPage,
|
||||||
|
beforeLoad: ({ context }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: "Settings"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
import { createFileRoute } from "@tanstack/react-router";
|
||||||
|
|
||||||
|
import { SettingsPage } from "./SettingsPage";
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/_project-general-layout/settings"
|
||||||
|
)({
|
||||||
|
component: SettingsPage,
|
||||||
|
beforeLoad: ({ context }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: "Settings"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
import { createFileRoute } from '@tanstack/react-router'
|
||||||
|
|
||||||
|
import { SettingsPage } from './SettingsPage'
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/_project-layout/projects/ssh/$projectId/_ssh-layout/settings',
|
||||||
|
)({
|
||||||
|
component: SettingsPage,
|
||||||
|
beforeLoad: ({ context }) => {
|
||||||
|
return {
|
||||||
|
breadcrumbs: [
|
||||||
|
...context.breadcrumbs,
|
||||||
|
{
|
||||||
|
label: 'Settings',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -1,31 +1,15 @@
|
|||||||
import { createFileRoute } from "@tanstack/react-router";
|
import { createFileRoute } from "@tanstack/react-router";
|
||||||
|
|
||||||
import { BreadcrumbTypes } from "@app/components/v2";
|
import { BreadcrumbTypes } from "@app/components/v2";
|
||||||
import { workspaceKeys } from "@app/hooks/api";
|
|
||||||
import { fetchUserProjectPermissions, roleQueryKeys } from "@app/hooks/api/roles/queries";
|
|
||||||
import { fetchWorkspaceById } from "@app/hooks/api/workspace/queries";
|
|
||||||
import { ProjectLayout } from "@app/layouts/ProjectLayout";
|
import { ProjectLayout } from "@app/layouts/ProjectLayout";
|
||||||
import { ProjectSelect } from "@app/layouts/ProjectLayout/components/ProjectSelect";
|
import { ProjectSelect } from "@app/layouts/ProjectLayout/components/ProjectSelect";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout"
|
"/_authenticate/_inject-org-details/_org-layout/_project-layout"
|
||||||
)({
|
)({
|
||||||
component: ProjectLayout,
|
component: ProjectLayout,
|
||||||
beforeLoad: async ({ params, context }) => {
|
beforeLoad: async () => {
|
||||||
const project = await context.queryClient.ensureQueryData({
|
|
||||||
queryKey: workspaceKeys.getWorkspaceById(params.projectId),
|
|
||||||
queryFn: () => fetchWorkspaceById(params.projectId)
|
|
||||||
});
|
|
||||||
|
|
||||||
await context.queryClient.ensureQueryData({
|
|
||||||
queryKey: roleQueryKeys.getUserProjectPermissions({
|
|
||||||
workspaceId: params.projectId
|
|
||||||
}),
|
|
||||||
queryFn: () => fetchUserProjectPermissions({ workspaceId: params.projectId })
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
project,
|
|
||||||
breadcrumbs: [
|
breadcrumbs: [
|
||||||
{
|
{
|
||||||
type: BreadcrumbTypes.Component,
|
type: BreadcrumbTypes.Component,
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ export const CommitDetailsPage = () => {
|
|||||||
|
|
||||||
const handleGoBackToHistory = () => {
|
const handleGoBackToHistory = () => {
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/commits/$environment/$folderId",
|
to: "/projects/secret-management/$projectId/commits/$environment/$folderId",
|
||||||
params: {
|
params: {
|
||||||
projectId: currentWorkspace.id,
|
projectId: currentWorkspace.id,
|
||||||
folderId,
|
folderId,
|
||||||
@@ -49,7 +49,7 @@ export const CommitDetailsPage = () => {
|
|||||||
|
|
||||||
const handleGoToRollbackPreview = () => {
|
const handleGoToRollbackPreview = () => {
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/commits/$environment/$folderId/$commitId/restore",
|
to: "/projects/secret-management/$projectId/commits/$environment/$folderId/$commitId/restore",
|
||||||
params: {
|
params: {
|
||||||
projectId: currentWorkspace.id,
|
projectId: currentWorkspace.id,
|
||||||
folderId,
|
folderId,
|
||||||
|
|||||||
+1
-1
@@ -102,7 +102,7 @@ export const RollbackPreviewTab = (): JSX.Element => {
|
|||||||
|
|
||||||
const goBackToHistory = () => {
|
const goBackToHistory = () => {
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/commits/$environment/$folderId",
|
to: "/projects/secret-management/$projectId/commits/$environment/$folderId",
|
||||||
params: {
|
params: {
|
||||||
projectId: currentWorkspace.id,
|
projectId: currentWorkspace.id,
|
||||||
folderId,
|
folderId,
|
||||||
|
|||||||
+4
-4
@@ -12,7 +12,7 @@ const RollbackPreviewTabQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/commits/$environment/$folderId/$commitId/restore"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/commits/$environment/$folderId/$commitId/restore"
|
||||||
)({
|
)({
|
||||||
component: RollbackPreviewTab,
|
component: RollbackPreviewTab,
|
||||||
validateSearch: zodValidator(RollbackPreviewTabQueryParamsSchema),
|
validateSearch: zodValidator(RollbackPreviewTabQueryParamsSchema),
|
||||||
@@ -33,7 +33,7 @@ export const Route = createFileRoute(
|
|||||||
links: context.project.environments.map((el) => ({
|
links: context.project.environments.map((el) => ({
|
||||||
label: el.name,
|
label: el.name,
|
||||||
link: linkOptions({
|
link: linkOptions({
|
||||||
to: "/projects/$projectId/secret-manager/secrets/$envSlug",
|
to: "/projects/secret-management/$projectId/secrets/$envSlug",
|
||||||
params: {
|
params: {
|
||||||
projectId: params.projectId,
|
projectId: params.projectId,
|
||||||
envSlug: el.slug
|
envSlug: el.slug
|
||||||
@@ -56,7 +56,7 @@ export const Route = createFileRoute(
|
|||||||
{
|
{
|
||||||
label: "Commits",
|
label: "Commits",
|
||||||
link: linkOptions({
|
link: linkOptions({
|
||||||
to: "/projects/$projectId/secret-manager/commits/$environment/$folderId",
|
to: "/projects/secret-management/$projectId/commits/$environment/$folderId",
|
||||||
params: {
|
params: {
|
||||||
projectId: params.projectId,
|
projectId: params.projectId,
|
||||||
environment: params.environment,
|
environment: params.environment,
|
||||||
@@ -70,7 +70,7 @@ export const Route = createFileRoute(
|
|||||||
{
|
{
|
||||||
label: params.commitId,
|
label: params.commitId,
|
||||||
link: linkOptions({
|
link: linkOptions({
|
||||||
to: "/projects/$projectId/secret-manager/commits/$environment/$folderId/$commitId",
|
to: "/projects/secret-management/$projectId/commits/$environment/$folderId/$commitId",
|
||||||
params: {
|
params: {
|
||||||
projectId: params.projectId,
|
projectId: params.projectId,
|
||||||
environment: params.environment,
|
environment: params.environment,
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ const CommitDetailsPageQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/commits/$environment/$folderId/$commitId/"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/commits/$environment/$folderId/$commitId/"
|
||||||
)({
|
)({
|
||||||
component: CommitDetailsPage,
|
component: CommitDetailsPage,
|
||||||
validateSearch: zodValidator(CommitDetailsPageQueryParamsSchema),
|
validateSearch: zodValidator(CommitDetailsPageQueryParamsSchema),
|
||||||
@@ -33,7 +33,7 @@ export const Route = createFileRoute(
|
|||||||
links: context.project.environments.map((el) => ({
|
links: context.project.environments.map((el) => ({
|
||||||
label: el.name,
|
label: el.name,
|
||||||
link: linkOptions({
|
link: linkOptions({
|
||||||
to: "/projects/$projectId/secret-manager/secrets/$envSlug",
|
to: "/projects/secret-management/$projectId/secrets/$envSlug",
|
||||||
params: {
|
params: {
|
||||||
projectId: params.projectId,
|
projectId: params.projectId,
|
||||||
envSlug: el.slug
|
envSlug: el.slug
|
||||||
@@ -56,7 +56,7 @@ export const Route = createFileRoute(
|
|||||||
{
|
{
|
||||||
label: "Commits",
|
label: "Commits",
|
||||||
link: linkOptions({
|
link: linkOptions({
|
||||||
to: "/projects/$projectId/secret-manager/commits/$environment/$folderId",
|
to: "/projects/secret-management/$projectId/commits/$environment/$folderId",
|
||||||
params: {
|
params: {
|
||||||
projectId: params.projectId,
|
projectId: params.projectId,
|
||||||
environment: params.environment,
|
environment: params.environment,
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ export const CommitsPage = () => {
|
|||||||
|
|
||||||
const handleSelectCommit = (commitId: string) => {
|
const handleSelectCommit = (commitId: string) => {
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/commits/$environment/$folderId/$commitId",
|
to: "/projects/secret-management/$projectId/commits/$environment/$folderId/$commitId",
|
||||||
params: {
|
params: {
|
||||||
projectId: currentWorkspace.id,
|
projectId: currentWorkspace.id,
|
||||||
folderId,
|
folderId,
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ const CommitsPageQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/commits/$environment/$folderId/"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/commits/$environment/$folderId/"
|
||||||
)({
|
)({
|
||||||
component: CommitsPage,
|
component: CommitsPage,
|
||||||
validateSearch: zodValidator(CommitsPageQueryParamsSchema),
|
validateSearch: zodValidator(CommitsPageQueryParamsSchema),
|
||||||
@@ -34,7 +34,7 @@ export const Route = createFileRoute(
|
|||||||
links: context.project.environments.map((el) => ({
|
links: context.project.environments.map((el) => ({
|
||||||
label: el.name,
|
label: el.name,
|
||||||
link: linkOptions({
|
link: linkOptions({
|
||||||
to: "/projects/$projectId/secret-manager/secrets/$envSlug",
|
to: "/projects/secret-management/$projectId/secrets/$envSlug",
|
||||||
params: {
|
params: {
|
||||||
projectId: params.projectId,
|
projectId: params.projectId,
|
||||||
envSlug: el.slug
|
envSlug: el.slug
|
||||||
@@ -57,7 +57,7 @@ export const Route = createFileRoute(
|
|||||||
{
|
{
|
||||||
label: "Commits",
|
label: "Commits",
|
||||||
link: linkOptions({
|
link: linkOptions({
|
||||||
to: "/projects/$projectId/secret-manager/commits/$environment/$folderId",
|
to: "/projects/secret-management/$projectId/commits/$environment/$folderId",
|
||||||
params: {
|
params: {
|
||||||
projectId: params.projectId,
|
projectId: params.projectId,
|
||||||
environment: params.environment,
|
environment: params.environment,
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { createFileRoute } from "@tanstack/react-router";
|
import { createFileRoute } from '@tanstack/react-router'
|
||||||
|
|
||||||
import { IPAllowListPage } from "./IPAllowlistPage";
|
import { IPAllowListPage } from './IPAllowlistPage'
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/allowlist"
|
'/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/allowlist',
|
||||||
)({
|
)({
|
||||||
component: () => IPAllowListPage
|
component: () => IPAllowListPage,
|
||||||
});
|
})
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { IntegrationsListPageTabs } from "@app/types/integrations";
|
|||||||
import { IntegrationDetailsByIDPage } from "./IntegrationsDetailsByIDPage";
|
import { IntegrationDetailsByIDPage } from "./IntegrationsDetailsByIDPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/$integrationId"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/$integrationId"
|
||||||
)({
|
)({
|
||||||
component: IntegrationDetailsByIDPage,
|
component: IntegrationDetailsByIDPage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
@@ -15,7 +15,7 @@ export const Route = createFileRoute(
|
|||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({
|
link: linkOptions({
|
||||||
to: "/projects/$projectId/secret-manager/integrations",
|
to: "/projects/secret-management/$projectId/integrations",
|
||||||
params,
|
params,
|
||||||
search: {
|
search: {
|
||||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||||
|
|||||||
+30
-30
@@ -42,7 +42,7 @@ export const redirectForProviderAuth = (
|
|||||||
switch (integrationOption.slug) {
|
switch (integrationOption.slug) {
|
||||||
case "gcp-secret-manager":
|
case "gcp-secret-manager":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/gcp-secret-manager/authorize",
|
to: "/projects/secret-management/$projectId/integrations/gcp-secret-manager/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -54,7 +54,7 @@ export const redirectForProviderAuth = (
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/azure-key-vault/authorize",
|
to: "/projects/secret-management/$projectId/integrations/azure-key-vault/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
},
|
},
|
||||||
@@ -76,7 +76,7 @@ export const redirectForProviderAuth = (
|
|||||||
}
|
}
|
||||||
case "aws-parameter-store":
|
case "aws-parameter-store":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/aws-parameter-store/authorize",
|
to: "/projects/secret-management/$projectId/integrations/aws-parameter-store/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -84,7 +84,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "aws-secret-manager":
|
case "aws-secret-manager":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/aws-secret-manager/authorize",
|
to: "/projects/secret-management/$projectId/integrations/aws-secret-manager/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -120,7 +120,7 @@ export const redirectForProviderAuth = (
|
|||||||
}
|
}
|
||||||
case "github":
|
case "github":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/github/auth-mode-selection",
|
to: "/projects/secret-management/$projectId/integrations/github/auth-mode-selection",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -128,7 +128,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "gitlab":
|
case "gitlab":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/gitlab/authorize",
|
to: "/projects/secret-management/$projectId/integrations/gitlab/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -136,7 +136,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "render":
|
case "render":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/render/authorize",
|
to: "/projects/secret-management/$projectId/integrations/render/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -144,7 +144,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "flyio":
|
case "flyio":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/flyio/authorize",
|
to: "/projects/secret-management/$projectId/integrations/flyio/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -152,7 +152,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "circleci":
|
case "circleci":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/circleci/authorize",
|
to: "/projects/secret-management/$projectId/integrations/circleci/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -160,7 +160,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "databricks":
|
case "databricks":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/databricks/authorize",
|
to: "/projects/secret-management/$projectId/integrations/databricks/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -168,7 +168,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "laravel-forge":
|
case "laravel-forge":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/laravel-forge/authorize",
|
to: "/projects/secret-management/$projectId/integrations/laravel-forge/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -176,7 +176,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "travisci":
|
case "travisci":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/travisci/authorize",
|
to: "/projects/secret-management/$projectId/integrations/travisci/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -184,7 +184,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "supabase":
|
case "supabase":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/supabase/authorize",
|
to: "/projects/secret-management/$projectId/integrations/supabase/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -192,7 +192,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "checkly":
|
case "checkly":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/checkly/authorize",
|
to: "/projects/secret-management/$projectId/integrations/checkly/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -200,7 +200,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "qovery":
|
case "qovery":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/qovery/authorize",
|
to: "/projects/secret-management/$projectId/integrations/qovery/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -208,7 +208,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "railway":
|
case "railway":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/railway/authorize",
|
to: "/projects/secret-management/$projectId/integrations/railway/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -216,7 +216,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "terraform-cloud":
|
case "terraform-cloud":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/terraform-cloud/authorize",
|
to: "/projects/secret-management/$projectId/integrations/terraform-cloud/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -224,7 +224,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "hashicorp-vault":
|
case "hashicorp-vault":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/hashicorp-vault/authorize",
|
to: "/projects/secret-management/$projectId/integrations/hashicorp-vault/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -232,7 +232,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "cloudflare-pages":
|
case "cloudflare-pages":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/cloudflare-pages/authorize",
|
to: "/projects/secret-management/$projectId/integrations/cloudflare-pages/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -240,7 +240,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "cloudflare-workers":
|
case "cloudflare-workers":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/cloudflare-workers/authorize",
|
to: "/projects/secret-management/$projectId/integrations/cloudflare-workers/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -257,7 +257,7 @@ export const redirectForProviderAuth = (
|
|||||||
}
|
}
|
||||||
case "codefresh":
|
case "codefresh":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/codefresh/authorize",
|
to: "/projects/secret-management/$projectId/integrations/codefresh/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -265,7 +265,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "digital-ocean-app-platform":
|
case "digital-ocean-app-platform":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/digital-ocean-app-platform/authorize",
|
to: "/projects/secret-management/$projectId/integrations/digital-ocean-app-platform/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -273,7 +273,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "cloud-66":
|
case "cloud-66":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/cloud-66/authorize",
|
to: "/projects/secret-management/$projectId/integrations/cloud-66/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -281,7 +281,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "northflank":
|
case "northflank":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/northflank/authorize",
|
to: "/projects/secret-management/$projectId/integrations/northflank/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -289,7 +289,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "windmill":
|
case "windmill":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/windmill/authorize",
|
to: "/projects/secret-management/$projectId/integrations/windmill/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -297,7 +297,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "teamcity":
|
case "teamcity":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/teamcity/authorize",
|
to: "/projects/secret-management/$projectId/integrations/teamcity/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -305,7 +305,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "hasura-cloud":
|
case "hasura-cloud":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/hasura-cloud/authorize",
|
to: "/projects/secret-management/$projectId/integrations/hasura-cloud/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -313,7 +313,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "rundeck":
|
case "rundeck":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/rundeck/authorize",
|
to: "/projects/secret-management/$projectId/integrations/rundeck/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -321,7 +321,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "azure-devops":
|
case "azure-devops":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/azure-devops/authorize",
|
to: "/projects/secret-management/$projectId/integrations/azure-devops/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
@@ -329,7 +329,7 @@ export const redirectForProviderAuth = (
|
|||||||
break;
|
break;
|
||||||
case "octopus-deploy":
|
case "octopus-deploy":
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/octopus-deploy/authorize",
|
to: "/projects/secret-management/$projectId/integrations/octopus-deploy/authorize",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -59,7 +59,7 @@ export const IntegrationRow = ({
|
|||||||
<Tr
|
<Tr
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/integrations/$integrationId",
|
to: "/projects/secret-management/$projectId/integrations/$integrationId",
|
||||||
params: {
|
params: {
|
||||||
integrationId: integration.id,
|
integrationId: integration.id,
|
||||||
projectId: currentWorkspace.id
|
projectId: currentWorkspace.id
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ const IntegrationsListPageQuerySchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/"
|
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/"
|
||||||
)({
|
)({
|
||||||
component: IntegrationsListPage,
|
component: IntegrationsListPage,
|
||||||
validateSearch: zodValidator(IntegrationsListPageQuerySchema),
|
validateSearch: zodValidator(IntegrationsListPageQuerySchema),
|
||||||
@@ -36,7 +36,7 @@ export const Route = createFileRoute(
|
|||||||
});
|
});
|
||||||
} catch {
|
} catch {
|
||||||
throw redirect({
|
throw redirect({
|
||||||
to: "/projects/$projectId/secret-manager/integrations",
|
to: "/projects/secret-management/$projectId/integrations",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
},
|
},
|
||||||
@@ -46,7 +46,7 @@ export const Route = createFileRoute(
|
|||||||
|
|
||||||
if (secretSyncs.length) {
|
if (secretSyncs.length) {
|
||||||
throw redirect({
|
throw redirect({
|
||||||
to: "/projects/$projectId/secret-manager/integrations",
|
to: "/projects/secret-management/$projectId/integrations",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
},
|
},
|
||||||
@@ -62,7 +62,7 @@ export const Route = createFileRoute(
|
|||||||
});
|
});
|
||||||
} catch {
|
} catch {
|
||||||
throw redirect({
|
throw redirect({
|
||||||
to: "/projects/$projectId/secret-manager/integrations",
|
to: "/projects/secret-management/$projectId/integrations",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
},
|
},
|
||||||
@@ -72,7 +72,7 @@ export const Route = createFileRoute(
|
|||||||
|
|
||||||
if (integrations.length) {
|
if (integrations.length) {
|
||||||
throw redirect({
|
throw redirect({
|
||||||
to: "/projects/$projectId/secret-manager/integrations",
|
to: "/projects/secret-management/$projectId/integrations",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
},
|
},
|
||||||
@@ -81,7 +81,7 @@ export const Route = createFileRoute(
|
|||||||
}
|
}
|
||||||
|
|
||||||
throw redirect({
|
throw redirect({
|
||||||
to: "/projects/$projectId/secret-manager/integrations",
|
to: "/projects/secret-management/$projectId/integrations",
|
||||||
params: {
|
params: {
|
||||||
projectId
|
projectId
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -667,7 +667,7 @@ export const OverviewPage = () => {
|
|||||||
const envIndex = visibleEnvs.findIndex((el) => slug === el.slug);
|
const envIndex = visibleEnvs.findIndex((el) => slug === el.slug);
|
||||||
if (envIndex !== -1) {
|
if (envIndex !== -1) {
|
||||||
navigate({
|
navigate({
|
||||||
to: "/projects/$projectId/secret-manager/secrets/$envSlug",
|
to: "/projects/secret-management/$projectId/secrets/$envSlug",
|
||||||
params: {
|
params: {
|
||||||
projectId: workspaceId,
|
projectId: workspaceId,
|
||||||
envSlug: slug
|
envSlug: slug
|
||||||
@@ -1420,7 +1420,7 @@ export const OverviewPage = () => {
|
|||||||
iconSize="3x"
|
iconSize="3x"
|
||||||
>
|
>
|
||||||
<Link
|
<Link
|
||||||
to="/projects/$projectId/secret-manager/settings"
|
to="/projects/secret-management/$projectId/settings"
|
||||||
params={{
|
params={{
|
||||||
projectId: workspaceId
|
projectId: workspaceId
|
||||||
}}
|
}}
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@ type Props = {
|
|||||||
|
|
||||||
export const FolderBreadCrumbs = ({ secretPath = "/", onResetSearch }: Props) => {
|
export const FolderBreadCrumbs = ({ secretPath = "/", onResetSearch }: Props) => {
|
||||||
const navigate = useNavigate({
|
const navigate = useNavigate({
|
||||||
from: "/projects/$projectId/secret-manager/overview"
|
from: "/projects/secret-management/$projectId/overview"
|
||||||
});
|
});
|
||||||
|
|
||||||
const onFolderCrumbClick = (index: number) => {
|
const onFolderCrumbClick = (index: number) => {
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@ export const QuickSearchDynamicSecretItem = ({
|
|||||||
onClose
|
onClose
|
||||||
}: Props) => {
|
}: Props) => {
|
||||||
const navigate = useNavigate({
|
const navigate = useNavigate({
|
||||||
from: "/projects/$projectId/secret-manager/overview"
|
from: "/projects/secret-management/$projectId/overview"
|
||||||
});
|
});
|
||||||
|
|
||||||
const [groupDynamicSecret] = dynamicSecretGroup;
|
const [groupDynamicSecret] = dynamicSecretGroup;
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user