mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-20 22:17:52 +00:00
Merge branch 'main' into feat/multipleApprovalEnvs
This commit is contained in:
@@ -34,7 +34,7 @@ export const CommitDetailsPage = () => {
|
||||
|
||||
const handleGoBackToHistory = () => {
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/commits/$environment/$folderId",
|
||||
to: "/projects/secret-management/$projectId/commits/$environment/$folderId",
|
||||
params: {
|
||||
projectId: currentWorkspace.id,
|
||||
folderId,
|
||||
@@ -49,7 +49,7 @@ export const CommitDetailsPage = () => {
|
||||
|
||||
const handleGoToRollbackPreview = () => {
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/commits/$environment/$folderId/$commitId/restore",
|
||||
to: "/projects/secret-management/$projectId/commits/$environment/$folderId/$commitId/restore",
|
||||
params: {
|
||||
projectId: currentWorkspace.id,
|
||||
folderId,
|
||||
|
||||
+1
-1
@@ -102,7 +102,7 @@ export const RollbackPreviewTab = (): JSX.Element => {
|
||||
|
||||
const goBackToHistory = () => {
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/commits/$environment/$folderId",
|
||||
to: "/projects/secret-management/$projectId/commits/$environment/$folderId",
|
||||
params: {
|
||||
projectId: currentWorkspace.id,
|
||||
folderId,
|
||||
|
||||
+4
-4
@@ -12,7 +12,7 @@ const RollbackPreviewTabQueryParamsSchema = z.object({
|
||||
});
|
||||
|
||||
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,
|
||||
validateSearch: zodValidator(RollbackPreviewTabQueryParamsSchema),
|
||||
@@ -33,7 +33,7 @@ export const Route = createFileRoute(
|
||||
links: context.project.environments.map((el) => ({
|
||||
label: el.name,
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/secrets/$envSlug",
|
||||
to: "/projects/secret-management/$projectId/secrets/$envSlug",
|
||||
params: {
|
||||
projectId: params.projectId,
|
||||
envSlug: el.slug
|
||||
@@ -56,7 +56,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Commits",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/commits/$environment/$folderId",
|
||||
to: "/projects/secret-management/$projectId/commits/$environment/$folderId",
|
||||
params: {
|
||||
projectId: params.projectId,
|
||||
environment: params.environment,
|
||||
@@ -70,7 +70,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: params.commitId,
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/commits/$environment/$folderId/$commitId",
|
||||
to: "/projects/secret-management/$projectId/commits/$environment/$folderId/$commitId",
|
||||
params: {
|
||||
projectId: params.projectId,
|
||||
environment: params.environment,
|
||||
|
||||
@@ -12,7 +12,7 @@ const CommitDetailsPageQueryParamsSchema = z.object({
|
||||
});
|
||||
|
||||
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,
|
||||
validateSearch: zodValidator(CommitDetailsPageQueryParamsSchema),
|
||||
@@ -33,7 +33,7 @@ export const Route = createFileRoute(
|
||||
links: context.project.environments.map((el) => ({
|
||||
label: el.name,
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/secrets/$envSlug",
|
||||
to: "/projects/secret-management/$projectId/secrets/$envSlug",
|
||||
params: {
|
||||
projectId: params.projectId,
|
||||
envSlug: el.slug
|
||||
@@ -56,7 +56,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Commits",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/commits/$environment/$folderId",
|
||||
to: "/projects/secret-management/$projectId/commits/$environment/$folderId",
|
||||
params: {
|
||||
projectId: params.projectId,
|
||||
environment: params.environment,
|
||||
|
||||
@@ -31,7 +31,7 @@ export const CommitsPage = () => {
|
||||
|
||||
const handleSelectCommit = (commitId: string) => {
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/commits/$environment/$folderId/$commitId",
|
||||
to: "/projects/secret-management/$projectId/commits/$environment/$folderId/$commitId",
|
||||
params: {
|
||||
projectId: currentWorkspace.id,
|
||||
folderId,
|
||||
|
||||
@@ -13,7 +13,7 @@ const CommitsPageQueryParamsSchema = z.object({
|
||||
});
|
||||
|
||||
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,
|
||||
validateSearch: zodValidator(CommitsPageQueryParamsSchema),
|
||||
@@ -34,7 +34,7 @@ export const Route = createFileRoute(
|
||||
links: context.project.environments.map((el) => ({
|
||||
label: el.name,
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/secrets/$envSlug",
|
||||
to: "/projects/secret-management/$projectId/secrets/$envSlug",
|
||||
params: {
|
||||
projectId: params.projectId,
|
||||
envSlug: el.slug
|
||||
@@ -57,7 +57,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Commits",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/commits/$environment/$folderId",
|
||||
to: "/projects/secret-management/$projectId/commits/$environment/$folderId",
|
||||
params: {
|
||||
projectId: params.projectId,
|
||||
environment: params.environment,
|
||||
|
||||
@@ -3,7 +3,7 @@ import { createFileRoute } from "@tanstack/react-router";
|
||||
import { IPAllowListPage } from "./IPAllowlistPage";
|
||||
|
||||
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
|
||||
});
|
||||
|
||||
@@ -5,7 +5,7 @@ import { IntegrationsListPageTabs } from "@app/types/integrations";
|
||||
import { IntegrationDetailsByIDPage } from "./IntegrationsDetailsByIDPage";
|
||||
|
||||
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,
|
||||
beforeLoad: ({ context, params }) => {
|
||||
@@ -15,7 +15,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+30
-30
@@ -42,7 +42,7 @@ export const redirectForProviderAuth = (
|
||||
switch (integrationOption.slug) {
|
||||
case "gcp-secret-manager":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/gcp-secret-manager/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/gcp-secret-manager/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -54,7 +54,7 @@ export const redirectForProviderAuth = (
|
||||
return;
|
||||
}
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/azure-key-vault/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/azure-key-vault/authorize",
|
||||
params: {
|
||||
projectId
|
||||
},
|
||||
@@ -76,7 +76,7 @@ export const redirectForProviderAuth = (
|
||||
}
|
||||
case "aws-parameter-store":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/aws-parameter-store/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/aws-parameter-store/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -84,7 +84,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "aws-secret-manager":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/aws-secret-manager/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/aws-secret-manager/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -120,7 +120,7 @@ export const redirectForProviderAuth = (
|
||||
}
|
||||
case "github":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/github/auth-mode-selection",
|
||||
to: "/projects/secret-management/$projectId/integrations/github/auth-mode-selection",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -128,7 +128,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "gitlab":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/gitlab/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/gitlab/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -136,7 +136,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "render":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/render/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/render/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -144,7 +144,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "flyio":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/flyio/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/flyio/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -152,7 +152,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "circleci":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/circleci/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/circleci/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -160,7 +160,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "databricks":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/databricks/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/databricks/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -168,7 +168,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "laravel-forge":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/laravel-forge/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/laravel-forge/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -176,7 +176,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "travisci":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/travisci/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/travisci/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -184,7 +184,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "supabase":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/supabase/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/supabase/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -192,7 +192,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "checkly":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/checkly/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/checkly/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -200,7 +200,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "qovery":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/qovery/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/qovery/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -208,7 +208,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "railway":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/railway/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/railway/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -216,7 +216,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "terraform-cloud":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/terraform-cloud/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/terraform-cloud/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -224,7 +224,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "hashicorp-vault":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/hashicorp-vault/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/hashicorp-vault/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -232,7 +232,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "cloudflare-pages":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/cloudflare-pages/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/cloudflare-pages/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -240,7 +240,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "cloudflare-workers":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/cloudflare-workers/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/cloudflare-workers/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -257,7 +257,7 @@ export const redirectForProviderAuth = (
|
||||
}
|
||||
case "codefresh":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/codefresh/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/codefresh/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -265,7 +265,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "digital-ocean-app-platform":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/digital-ocean-app-platform/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/digital-ocean-app-platform/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -273,7 +273,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "cloud-66":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/cloud-66/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/cloud-66/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -281,7 +281,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "northflank":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/northflank/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/northflank/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -289,7 +289,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "windmill":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/windmill/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/windmill/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -297,7 +297,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "teamcity":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/teamcity/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/teamcity/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -305,7 +305,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "hasura-cloud":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/hasura-cloud/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/hasura-cloud/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -313,7 +313,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "rundeck":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/rundeck/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/rundeck/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -321,7 +321,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "azure-devops":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/azure-devops/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/azure-devops/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
@@ -329,7 +329,7 @@ export const redirectForProviderAuth = (
|
||||
break;
|
||||
case "octopus-deploy":
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/octopus-deploy/authorize",
|
||||
to: "/projects/secret-management/$projectId/integrations/octopus-deploy/authorize",
|
||||
params: {
|
||||
projectId
|
||||
}
|
||||
|
||||
+1
-1
@@ -59,7 +59,7 @@ export const IntegrationRow = ({
|
||||
<Tr
|
||||
onClick={() =>
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/$integrationId",
|
||||
to: "/projects/secret-management/$projectId/integrations/$integrationId",
|
||||
params: {
|
||||
integrationId: integration.id,
|
||||
projectId: currentWorkspace.id
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
import { TBitbucketSync } from "@app/hooks/api/secretSyncs/types/bitbucket-sync";
|
||||
|
||||
import { getSecretSyncDestinationColValues } from "../helpers";
|
||||
import { SecretSyncTableCell } from "../SecretSyncTableCell";
|
||||
|
||||
type Props = {
|
||||
secretSync: TBitbucketSync;
|
||||
};
|
||||
|
||||
export const BitbucketSyncDestinationCol = ({ secretSync }: Props) => {
|
||||
const { primaryText, secondaryText } = getSecretSyncDestinationColValues(secretSync);
|
||||
|
||||
return <SecretSyncTableCell primaryText={primaryText} secondaryText={secondaryText} />;
|
||||
};
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
import { TDigitalOceanAppPlatformSync } from "@app/hooks/api/secretSyncs/types/digital-ocean-app-platform-sync";
|
||||
|
||||
import { getSecretSyncDestinationColValues } from "../helpers";
|
||||
import { SecretSyncTableCell } from "../SecretSyncTableCell";
|
||||
|
||||
type Props = {
|
||||
secretSync: TDigitalOceanAppPlatformSync;
|
||||
};
|
||||
|
||||
export const DigitalOceanAppPlatformSyncDestinationCol = ({ secretSync }: Props) => {
|
||||
const { primaryText, secondaryText } = getSecretSyncDestinationColValues(secretSync);
|
||||
|
||||
return <SecretSyncTableCell primaryText={primaryText} secondaryText={secondaryText} />;
|
||||
};
|
||||
+6
@@ -6,11 +6,13 @@ import { AwsSecretsManagerSyncDestinationCol } from "./AwsSecretsManagerSyncDest
|
||||
import { AzureAppConfigurationDestinationSyncCol } from "./AzureAppConfigurationDestinationSyncCol";
|
||||
import { AzureDevOpsSyncDestinationCol } from "./AzureDevOpsSyncDestinationCol";
|
||||
import { AzureKeyVaultDestinationSyncCol } from "./AzureKeyVaultDestinationSyncCol";
|
||||
import { BitbucketSyncDestinationCol } from "./BitbucketSyncDestinationCol";
|
||||
import { CamundaSyncDestinationCol } from "./CamundaSyncDestinationCol";
|
||||
import { ChecklySyncDestinationCol } from "./ChecklySyncDestinationCol";
|
||||
import { CloudflarePagesSyncDestinationCol } from "./CloudflarePagesSyncDestinationCol";
|
||||
import { CloudflareWorkersSyncDestinationCol } from "./CloudflareWorkersSyncDestinationCol";
|
||||
import { DatabricksSyncDestinationCol } from "./DatabricksSyncDestinationCol";
|
||||
import { DigitalOceanAppPlatformSyncDestinationCol } from "./DigitalOceanAppPlatformSyncDestinationCol";
|
||||
import { FlyioSyncDestinationCol } from "./FlyioSyncDestinationCol";
|
||||
import { GcpSyncDestinationCol } from "./GcpSyncDestinationCol";
|
||||
import { GitHubSyncDestinationCol } from "./GitHubSyncDestinationCol";
|
||||
@@ -88,6 +90,10 @@ export const SecretSyncDestinationCol = ({ secretSync }: Props) => {
|
||||
return <ChecklySyncDestinationCol secretSync={secretSync} />;
|
||||
case SecretSync.Supabase:
|
||||
return <SupabaseSyncDestinationCol secretSync={secretSync} />;
|
||||
case SecretSync.DigitalOceanAppPlatform:
|
||||
return <DigitalOceanAppPlatformSyncDestinationCol secretSync={secretSync} />;
|
||||
case SecretSync.Bitbucket:
|
||||
return <BitbucketSyncDestinationCol secretSync={secretSync} />;
|
||||
default:
|
||||
throw new Error(
|
||||
`Unhandled Secret Sync Destination Col: ${(secretSync as TSecretSync).destination}`
|
||||
|
||||
+8
@@ -174,6 +174,14 @@ export const getSecretSyncDestinationColValues = (secretSync: TSecretSync) => {
|
||||
primaryText = destinationConfig.projectName;
|
||||
secondaryText = "Supabase Project";
|
||||
break;
|
||||
case SecretSync.DigitalOceanAppPlatform:
|
||||
primaryText = destinationConfig.appName;
|
||||
secondaryText = "Digital Ocean App";
|
||||
break;
|
||||
case SecretSync.Bitbucket:
|
||||
primaryText = destinationConfig.workspaceSlug;
|
||||
secondaryText = destinationConfig.repositorySlug;
|
||||
break;
|
||||
default:
|
||||
throw new Error(`Unhandled Destination Col Values ${destination}`);
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ const IntegrationsListPageQuerySchema = z.object({
|
||||
});
|
||||
|
||||
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,
|
||||
validateSearch: zodValidator(IntegrationsListPageQuerySchema),
|
||||
@@ -36,7 +36,7 @@ export const Route = createFileRoute(
|
||||
});
|
||||
} catch {
|
||||
throw redirect({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params: {
|
||||
projectId
|
||||
},
|
||||
@@ -46,7 +46,7 @@ export const Route = createFileRoute(
|
||||
|
||||
if (secretSyncs.length) {
|
||||
throw redirect({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params: {
|
||||
projectId
|
||||
},
|
||||
@@ -62,7 +62,7 @@ export const Route = createFileRoute(
|
||||
});
|
||||
} catch {
|
||||
throw redirect({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params: {
|
||||
projectId
|
||||
},
|
||||
@@ -72,7 +72,7 @@ export const Route = createFileRoute(
|
||||
|
||||
if (integrations.length) {
|
||||
throw redirect({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params: {
|
||||
projectId
|
||||
},
|
||||
@@ -81,7 +81,7 @@ export const Route = createFileRoute(
|
||||
}
|
||||
|
||||
throw redirect({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params: {
|
||||
projectId
|
||||
},
|
||||
|
||||
@@ -667,7 +667,7 @@ export const OverviewPage = () => {
|
||||
const envIndex = visibleEnvs.findIndex((el) => slug === el.slug);
|
||||
if (envIndex !== -1) {
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/secrets/$envSlug",
|
||||
to: "/projects/secret-management/$projectId/secrets/$envSlug",
|
||||
params: {
|
||||
projectId: workspaceId,
|
||||
envSlug: slug
|
||||
@@ -1420,7 +1420,7 @@ export const OverviewPage = () => {
|
||||
iconSize="3x"
|
||||
>
|
||||
<Link
|
||||
to="/projects/$projectId/secret-manager/settings"
|
||||
to="/projects/secret-management/$projectId/settings"
|
||||
params={{
|
||||
projectId: workspaceId
|
||||
}}
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@ type Props = {
|
||||
|
||||
export const FolderBreadCrumbs = ({ secretPath = "/", onResetSearch }: Props) => {
|
||||
const navigate = useNavigate({
|
||||
from: "/projects/$projectId/secret-manager/overview"
|
||||
from: "/projects/secret-management/$projectId/overview"
|
||||
});
|
||||
|
||||
const onFolderCrumbClick = (index: number) => {
|
||||
|
||||
+1
-1
@@ -53,7 +53,7 @@ export const SecretSearchInput = ({
|
||||
}}
|
||||
autoComplete="off"
|
||||
className="input text-md h-[2.3rem] w-full rounded-md rounded-l-none bg-mineshaft-800 py-[0.375rem] pl-2.5 pr-8 text-gray-400 placeholder-mineshaft-50 placeholder-opacity-50 outline-none duration-200 placeholder:text-sm hover:ring-bunker-400/60 focus:bg-mineshaft-700/80 focus:ring-1 focus:ring-primary-400/50"
|
||||
placeholder="Search by secret/folder name..."
|
||||
placeholder="Search by secret, folder, tag or metadata..."
|
||||
value={value}
|
||||
onChange={(e) => onChange(e.target.value)}
|
||||
/>
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ export const QuickSearchDynamicSecretItem = ({
|
||||
onClose
|
||||
}: Props) => {
|
||||
const navigate = useNavigate({
|
||||
from: "/projects/$projectId/secret-manager/overview"
|
||||
from: "/projects/secret-management/$projectId/overview"
|
||||
});
|
||||
|
||||
const [groupDynamicSecret] = dynamicSecretGroup;
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@ type Props = {
|
||||
|
||||
export const QuickSearchFolderItem = ({ folderGroup, onClose }: Props) => {
|
||||
const navigate = useNavigate({
|
||||
from: "/projects/$projectId/secret-manager/overview"
|
||||
from: "/projects/secret-management/$projectId/overview"
|
||||
});
|
||||
|
||||
const [groupFolder] = folderGroup;
|
||||
|
||||
+19
-1
@@ -1,6 +1,7 @@
|
||||
import {
|
||||
faCheck,
|
||||
faChevronRight,
|
||||
faCode,
|
||||
faCopy,
|
||||
faEye,
|
||||
faFolder,
|
||||
@@ -46,7 +47,7 @@ export const QuickSearchSecretItem = ({
|
||||
isSingleEnv,
|
||||
search
|
||||
}: Props) => {
|
||||
const navigate = useNavigate({ from: "/projects/$projectId/secret-manager/overview" });
|
||||
const navigate = useNavigate({ from: "/projects/secret-management/$projectId/overview" });
|
||||
const envSlugMap = new Map(environments.map((env) => [env.slug, env]));
|
||||
const [isUrlCopied, , setIsUrlCopied] = useTimedReset<boolean>({
|
||||
initialState: false
|
||||
@@ -82,6 +83,17 @@ export const QuickSearchSecretItem = ({
|
||||
search.trim() &&
|
||||
secretGroupTags?.find((tag) => tag && tag.slug.toLowerCase().includes(search.toLowerCase()));
|
||||
|
||||
const secretGroupMetadata = secretGroup.flatMap((secret) => secret.secretMetadata);
|
||||
|
||||
const metadataMatch =
|
||||
search.trim() &&
|
||||
secretGroupMetadata?.find(
|
||||
(metadata) =>
|
||||
metadata &&
|
||||
(metadata.key.toLowerCase().includes(search.toLowerCase()) ||
|
||||
metadata.value.toLowerCase().includes(search.toLowerCase()))
|
||||
);
|
||||
|
||||
return (
|
||||
<Tr
|
||||
className="hover cursor-pointer bg-mineshaft-700 hover:bg-mineshaft-600"
|
||||
@@ -109,6 +121,12 @@ export const QuickSearchSecretItem = ({
|
||||
{tagMatch.slug}
|
||||
</Badge>
|
||||
)}
|
||||
{metadataMatch && !tagMatch && (
|
||||
<Badge variant="primary" className="flex items-center gap-1 whitespace-nowrap">
|
||||
<FontAwesomeIcon size="xs" icon={faCode} />
|
||||
<p className="truncate">Metadata Match</p>
|
||||
</Badge>
|
||||
)}
|
||||
{isSingleEnv ? (
|
||||
<Tooltip
|
||||
isDisabled={!groupSecret?.secretValueHidden}
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@ type Props = {
|
||||
|
||||
export const QuickSearchSecretRotationItem = ({ secretRotationGroup, onClose }: Props) => {
|
||||
const navigate = useNavigate({
|
||||
from: "/projects/$projectId/secret-manager/overview"
|
||||
from: "/projects/secret-management/$projectId/overview"
|
||||
});
|
||||
|
||||
const [groupSecretRotation] = secretRotationGroup;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
export const getExpandedRowStyle = (scrollOffset: number) => ({
|
||||
marginLeft: scrollOffset,
|
||||
width: "calc(100vw - 355px)", // 350px accounts for sidebar and margin
|
||||
width: "calc(100vw - 275px)", // accounts for sidebar and margin
|
||||
maxWidth: "1270px" // largest width of table on ultra-wide
|
||||
});
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ const SecretOverviewPageQuerySchema = z.object({
|
||||
});
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_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"
|
||||
)({
|
||||
component: OverviewPage,
|
||||
validateSearch: zodValidator(SecretOverviewPageQuerySchema),
|
||||
@@ -24,7 +24,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Secrets",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/overview",
|
||||
to: "/projects/secret-management/$projectId/overview",
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ const SecretApprovalPageQueryParams = z.object({
|
||||
});
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_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"
|
||||
)({
|
||||
component: SecretApprovalsPage,
|
||||
validateSearch: zodValidator(SecretApprovalPageQueryParams),
|
||||
|
||||
@@ -234,7 +234,7 @@ const Page = () => {
|
||||
type: "error"
|
||||
});
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/overview",
|
||||
to: "/projects/secret-management/$projectId/overview",
|
||||
params: {
|
||||
projectId: workspaceId
|
||||
}
|
||||
@@ -386,7 +386,7 @@ const Page = () => {
|
||||
const handleOnClickRollbackMode = () => {
|
||||
if (isPITEnabled) {
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/commits/$environment/$folderId",
|
||||
to: "/projects/secret-management/$projectId/commits/$environment/$folderId",
|
||||
params: {
|
||||
projectId: workspaceId,
|
||||
folderId,
|
||||
|
||||
+37
-30
@@ -1,6 +1,6 @@
|
||||
/* eslint-disable jsx-a11y/label-has-associated-control */
|
||||
import React, { useCallback, useState } from "react";
|
||||
import { faCodeCommit, faEye, faFolder, faKey, faTrash } from "@fortawesome/free-solid-svg-icons";
|
||||
import { faCodeCommit, faEye, faFolder, faKey } from "@fortawesome/free-solid-svg-icons";
|
||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||
|
||||
import { Badge, Button, Input, Modal, ModalContent } from "@app/components/v2";
|
||||
@@ -296,39 +296,46 @@ export const CommitForm: React.FC<CommitFormProps> = ({
|
||||
<>
|
||||
{/* Floating Panel */}
|
||||
{!isModalOpen && (
|
||||
<div className="fixed bottom-4 z-40 w-64 self-center rounded-lg border border-mineshaft-600 bg-mineshaft-800 shadow-2xl">
|
||||
<div className="flex w-full justify-center border-b border-mineshaft-600 p-2">
|
||||
<div className="flex w-full items-center justify-between">
|
||||
<div className="fixed bottom-4 left-1/2 z-40 w-full max-w-3xl -translate-x-1/2 self-center rounded-lg border border-yellow/30 bg-mineshaft-800 shadow-2xl lg:left-auto lg:translate-x-0">
|
||||
<div className="flex items-center justify-between p-4">
|
||||
{/* Left Content */}
|
||||
<div className="flex-1">
|
||||
{/* Header */}
|
||||
<div className="flex items-center gap-2">
|
||||
<FontAwesomeIcon icon={faCodeCommit} className="text-mineshaft-400" />
|
||||
<div className="h-2 w-2 rounded-full bg-yellow-500" />
|
||||
<span className="font-medium text-mineshaft-100">Pending Changes</span>
|
||||
<Badge variant="primary" className="text-xs">
|
||||
{totalChangesCount} Change{totalChangesCount !== 1 ? "s" : ""}
|
||||
</Badge>
|
||||
</div>
|
||||
<Badge variant="primary" className="text-xs">
|
||||
{totalChangesCount} Change{totalChangesCount !== 1 ? "s" : ""}
|
||||
</Badge>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex justify-center gap-2 p-2">
|
||||
<Button
|
||||
size="sm"
|
||||
leftIcon={<FontAwesomeIcon icon={faTrash} />}
|
||||
onClick={() => clearAllPendingChanges({ workspaceId, environment, secretPath })}
|
||||
isDisabled={totalChangesCount === 0}
|
||||
variant="outline_bg"
|
||||
className="h-8 flex-1 hover:border-red/40 hover:bg-red/[0.1]"
|
||||
>
|
||||
Discard
|
||||
</Button>
|
||||
<Button
|
||||
variant="outline_bg"
|
||||
leftIcon={<FontAwesomeIcon icon={faEye} />}
|
||||
onClick={() => setIsModalOpen(true)}
|
||||
isDisabled={totalChangesCount === 0}
|
||||
className="h-8 flex-1"
|
||||
>
|
||||
Review
|
||||
</Button>
|
||||
{/* Description */}
|
||||
<p className="text-sm leading-5 text-mineshaft-400">
|
||||
Review pending changes and commit them to apply the updates.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Right Buttons */}
|
||||
<div className="ml-6 mt-0.5 flex items-center gap-3">
|
||||
<Button
|
||||
size="sm"
|
||||
onClick={() => clearAllPendingChanges({ workspaceId, environment, secretPath })}
|
||||
isDisabled={totalChangesCount === 0}
|
||||
variant="outline_bg"
|
||||
className="px-4 hover:border-red/40 hover:bg-red/[0.1]"
|
||||
>
|
||||
Discard
|
||||
</Button>
|
||||
<Button
|
||||
variant="solid"
|
||||
leftIcon={<FontAwesomeIcon icon={faEye} />}
|
||||
onClick={() => setIsModalOpen(true)}
|
||||
isDisabled={totalChangesCount === 0}
|
||||
className="px-6"
|
||||
>
|
||||
Review Changes
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
+388
-126
@@ -1,25 +1,65 @@
|
||||
import { useEffect } from "react";
|
||||
import { useCallback, useEffect, useMemo, useState } from "react";
|
||||
import { Controller, useForm } from "react-hook-form";
|
||||
import { faClock, faTrash } from "@fortawesome/free-solid-svg-icons";
|
||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||
import { zodResolver } from "@hookform/resolvers/zod";
|
||||
import { useQueryClient } from "@tanstack/react-query";
|
||||
import { twMerge } from "tailwind-merge";
|
||||
import { z } from "zod";
|
||||
|
||||
import { createNotification } from "@app/components/notifications";
|
||||
import {
|
||||
Button,
|
||||
DatePicker,
|
||||
FilterableSelect,
|
||||
FormControl,
|
||||
Input,
|
||||
Modal,
|
||||
ModalContent,
|
||||
Select,
|
||||
SelectItem,
|
||||
TextArea
|
||||
} from "@app/components/v2";
|
||||
import { useWorkspace } from "@app/context";
|
||||
import { useGetWorkspaceUsers } from "@app/hooks/api";
|
||||
import { dashboardKeys } from "@app/hooks/api/dashboard/queries";
|
||||
import { useCreateReminder, useDeleteReminder } from "@app/hooks/api/reminders";
|
||||
import { reminderKeys } from "@app/hooks/api/reminders/queries";
|
||||
import { Reminder } from "@app/hooks/api/reminders/types";
|
||||
import { secretKeys } from "@app/hooks/api/secrets/queries";
|
||||
|
||||
// Constants
|
||||
const MIN_REPEAT_DAYS = 1;
|
||||
const MAX_REPEAT_DAYS = 365;
|
||||
const DEFAULT_REPEAT_DAYS = 30;
|
||||
const DEFAULT_TEXTAREA_ROWS = 8;
|
||||
|
||||
// Enums
|
||||
enum ReminderType {
|
||||
Recurring = "Recurring",
|
||||
OneTime = "One Time"
|
||||
}
|
||||
|
||||
// Types
|
||||
interface RecipientOption {
|
||||
label: string;
|
||||
value: string;
|
||||
}
|
||||
|
||||
interface ReminderFormProps {
|
||||
isOpen: boolean;
|
||||
reminderId?: string;
|
||||
onOpenChange: () => void;
|
||||
workspaceId: string;
|
||||
environment: string;
|
||||
secretPath: string;
|
||||
secretId: string;
|
||||
reminder?: Reminder;
|
||||
}
|
||||
|
||||
// Validation Schema
|
||||
const ReminderFormSchema = z.object({
|
||||
note: z.string().optional().nullable(),
|
||||
message: z.string().optional().nullable(),
|
||||
recipients: z
|
||||
.array(
|
||||
z.object({
|
||||
@@ -28,182 +68,404 @@ const ReminderFormSchema = z.object({
|
||||
})
|
||||
)
|
||||
.optional(),
|
||||
days: z
|
||||
repeatDays: z
|
||||
.number()
|
||||
.min(1, { message: "Must be at least 1 day" })
|
||||
.max(365, { message: "Must be less than 365 days" })
|
||||
.min(MIN_REPEAT_DAYS, { message: `Must be at least ${MIN_REPEAT_DAYS} day` })
|
||||
.max(MAX_REPEAT_DAYS, { message: `Must be less than ${MAX_REPEAT_DAYS} days` })
|
||||
.nullable()
|
||||
.optional(),
|
||||
nextReminderDate: z.coerce
|
||||
.date()
|
||||
.refine((data) => data > new Date(), { message: "Reminder date must be in the future" })
|
||||
.nullable()
|
||||
.optional(),
|
||||
reminderType: z.enum(["Recurring", "One Time"])
|
||||
});
|
||||
|
||||
export type TReminderFormSchema = z.infer<typeof ReminderFormSchema>;
|
||||
|
||||
interface ReminderFormProps {
|
||||
isOpen: boolean;
|
||||
repeatDays?: number | null;
|
||||
note?: string | null;
|
||||
recipients?: string[] | null;
|
||||
onOpenChange: (isOpen: boolean, data?: TReminderFormSchema) => void;
|
||||
}
|
||||
// Custom hook for form state management
|
||||
const useReminderForm = (reminderData?: Reminder) => {
|
||||
const { repeatDays, message, nextReminderDate } = reminderData || {};
|
||||
|
||||
const isEditMode = Boolean(reminderData);
|
||||
|
||||
const defaultValues = useMemo(
|
||||
() => ({
|
||||
repeatDays: repeatDays || null,
|
||||
message: message || "",
|
||||
nextReminderDate: nextReminderDate || null,
|
||||
reminderType: repeatDays ? ReminderType.Recurring : ReminderType.OneTime,
|
||||
recipients: []
|
||||
}),
|
||||
[repeatDays, message, nextReminderDate]
|
||||
);
|
||||
|
||||
return {
|
||||
isEditMode,
|
||||
reminderData,
|
||||
defaultValues
|
||||
};
|
||||
};
|
||||
|
||||
// Custom hook for workspace members
|
||||
const useWorkspaceMembers = () => {
|
||||
const { currentWorkspace } = useWorkspace();
|
||||
const { data: members = [] } = useGetWorkspaceUsers(currentWorkspace?.id);
|
||||
|
||||
const memberOptions = useMemo(
|
||||
(): RecipientOption[] =>
|
||||
members.map((member) => ({
|
||||
label: member.user.username || member.user.email,
|
||||
value: member.user.id
|
||||
})),
|
||||
[members]
|
||||
);
|
||||
|
||||
return { members, memberOptions };
|
||||
};
|
||||
|
||||
// Main component
|
||||
export const CreateReminderForm = ({
|
||||
isOpen,
|
||||
onOpenChange,
|
||||
repeatDays,
|
||||
note,
|
||||
recipients
|
||||
workspaceId,
|
||||
environment,
|
||||
secretPath,
|
||||
secretId,
|
||||
reminder
|
||||
}: ReminderFormProps) => {
|
||||
const { currentWorkspace } = useWorkspace();
|
||||
const queryClient = useQueryClient();
|
||||
const [isDatePickerOpen, setIsDatePickerOpen] = useState(false);
|
||||
|
||||
const { data: members = [] } = useGetWorkspaceUsers(currentWorkspace?.id);
|
||||
// Custom hooks
|
||||
const { isEditMode, reminderData } = useReminderForm(reminder);
|
||||
const { memberOptions } = useWorkspaceMembers();
|
||||
|
||||
// API mutations
|
||||
const { mutateAsync: createReminder } = useCreateReminder(secretId);
|
||||
const { mutateAsync: deleteReminder } = useDeleteReminder(secretId);
|
||||
|
||||
// Form setup
|
||||
const form = useForm<TReminderFormSchema>({
|
||||
defaultValues: {
|
||||
repeatDays: reminderData?.repeatDays || null,
|
||||
message: reminderData?.message || "",
|
||||
nextReminderDate: reminderData?.nextReminderDate || null,
|
||||
reminderType: reminderData?.repeatDays ? ReminderType.Recurring : ReminderType.OneTime,
|
||||
recipients: []
|
||||
},
|
||||
resolver: zodResolver(ReminderFormSchema)
|
||||
});
|
||||
|
||||
const {
|
||||
register,
|
||||
control,
|
||||
setValue,
|
||||
handleSubmit,
|
||||
reset,
|
||||
watch,
|
||||
formState: { isSubmitting }
|
||||
} = useForm<TReminderFormSchema>({
|
||||
defaultValues: {
|
||||
days: repeatDays || undefined,
|
||||
note: note || ""
|
||||
},
|
||||
resolver: zodResolver(ReminderFormSchema)
|
||||
});
|
||||
} = form;
|
||||
|
||||
const handleFormSubmit = async (data: TReminderFormSchema) => {
|
||||
onOpenChange(false, data);
|
||||
// Watch form values
|
||||
const reminderType = watch("reminderType");
|
||||
|
||||
// Invalidate queries helper
|
||||
const invalidateQueries = () => {
|
||||
queryClient.invalidateQueries({
|
||||
queryKey: dashboardKeys.getDashboardSecrets({
|
||||
projectId: workspaceId,
|
||||
secretPath
|
||||
})
|
||||
});
|
||||
queryClient.invalidateQueries({
|
||||
queryKey: secretKeys.getProjectSecret({ workspaceId, environment, secretPath })
|
||||
});
|
||||
queryClient.invalidateQueries({
|
||||
queryKey: reminderKeys.getReminder(secretId)
|
||||
});
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
// On initial load, filter the members to only include the recipients
|
||||
if (members.length) {
|
||||
const filteredMembers = members.filter((m) => recipients?.find((r) => r === m.user.id));
|
||||
setValue(
|
||||
"recipients",
|
||||
filteredMembers.map((m) => ({
|
||||
label: m.user.username || m.user.email,
|
||||
value: m.user.id
|
||||
}))
|
||||
);
|
||||
}
|
||||
}, [members, isOpen, recipients]);
|
||||
// Form submission handler
|
||||
const handleFormSubmit = async (data: TReminderFormSchema) => {
|
||||
try {
|
||||
await createReminder({
|
||||
repeatDays: data.repeatDays,
|
||||
message: data.message,
|
||||
recipients: data.recipients?.map((r) => r.value) || [],
|
||||
secretId,
|
||||
nextReminderDate: data.nextReminderDate
|
||||
});
|
||||
|
||||
invalidateQueries();
|
||||
|
||||
createNotification({
|
||||
type: "success",
|
||||
text: `Successfully ${isEditMode ? "updated" : "created"} secret reminder`
|
||||
});
|
||||
|
||||
reset();
|
||||
onOpenChange();
|
||||
} catch (error) {
|
||||
console.error("Failed to save reminder:", error);
|
||||
createNotification({
|
||||
type: "error",
|
||||
text: "Failed to save reminder. Please try again."
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// Delete reminder handler
|
||||
const handleDeleteReminder = async () => {
|
||||
try {
|
||||
await deleteReminder({ reminderId: reminder?.id || "", secretId });
|
||||
invalidateQueries();
|
||||
reset();
|
||||
onOpenChange();
|
||||
|
||||
createNotification({
|
||||
type: "success",
|
||||
text: "Successfully deleted reminder"
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("Failed to delete reminder:", error);
|
||||
createNotification({
|
||||
type: "error",
|
||||
text: "Failed to delete reminder. Please try again."
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// Handle reminder type change
|
||||
const handleReminderTypeChange = useCallback(
|
||||
(newType: string) => {
|
||||
if (newType === ReminderType.Recurring) {
|
||||
setValue("repeatDays", DEFAULT_REPEAT_DAYS);
|
||||
setValue("nextReminderDate", null);
|
||||
} else if (newType === ReminderType.OneTime) {
|
||||
const tomorrow = new Date();
|
||||
tomorrow.setDate(tomorrow.getDate() + 1);
|
||||
setValue("nextReminderDate", tomorrow);
|
||||
setValue("repeatDays", null);
|
||||
}
|
||||
},
|
||||
[setValue]
|
||||
);
|
||||
|
||||
// Initialize form with existing data
|
||||
useEffect(() => {
|
||||
if (repeatDays) setValue("days", repeatDays);
|
||||
if (note) setValue("note", note);
|
||||
}, [repeatDays, note]);
|
||||
if (!reminderData) return;
|
||||
|
||||
const {
|
||||
repeatDays: repeatDaysInitial,
|
||||
message,
|
||||
recipients,
|
||||
nextReminderDate: nextReminderDateInitial
|
||||
} = reminderData;
|
||||
|
||||
if (repeatDaysInitial) {
|
||||
setValue("repeatDays", repeatDaysInitial);
|
||||
setValue("reminderType", ReminderType.Recurring);
|
||||
} else {
|
||||
setValue("reminderType", ReminderType.OneTime);
|
||||
}
|
||||
|
||||
if (message) setValue("message", message);
|
||||
if (nextReminderDateInitial) setValue("nextReminderDate", nextReminderDateInitial);
|
||||
|
||||
// Set recipients
|
||||
if (recipients?.length && memberOptions.length) {
|
||||
const selectedRecipients = memberOptions.filter((option) =>
|
||||
recipients.includes(option.value)
|
||||
);
|
||||
setValue("recipients", selectedRecipients);
|
||||
}
|
||||
}, [reminderData, memberOptions, setValue]);
|
||||
|
||||
return (
|
||||
<Modal isOpen={isOpen} onOpenChange={onOpenChange}>
|
||||
<ModalContent
|
||||
title={`${repeatDays ? "Update" : "Create"} reminder`}
|
||||
title={`${isEditMode ? "Update" : "Create"} reminder`}
|
||||
subTitle="Set up a reminder for when this secret should be rotated. Everyone with access to this project will be notified when the reminder is triggered."
|
||||
>
|
||||
<form onSubmit={handleSubmit(handleFormSubmit)}>
|
||||
<div className="space-y-2">
|
||||
<div>
|
||||
<Controller
|
||||
control={control}
|
||||
name="days"
|
||||
render={({ field, fieldState }) => (
|
||||
<>
|
||||
<FormControl
|
||||
isRequired
|
||||
className="mb-0"
|
||||
label="Reminder Interval (in days)"
|
||||
isError={Boolean(fieldState.error)}
|
||||
errorText={fieldState.error?.message || ""}
|
||||
>
|
||||
<Input
|
||||
onChange={(el) => setValue("days", parseInt(el.target.value, 10))}
|
||||
type="number"
|
||||
placeholder="31"
|
||||
defaultValue={repeatDays || undefined}
|
||||
value={field.value || undefined}
|
||||
/>
|
||||
</FormControl>
|
||||
<div
|
||||
className={twMerge(
|
||||
"ml-1 mt-2 text-xs",
|
||||
field.value ? "opacity-60" : "opacity-0"
|
||||
)}
|
||||
>
|
||||
A reminder will be sent every{" "}
|
||||
{field.value && field.value > 1 ? `${field.value} days` : "day"}
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<FormControl label="Note" className="mb-0">
|
||||
<TextArea
|
||||
placeholder="Remember to rotate the AWS secret every month."
|
||||
className="border border-mineshaft-600 text-sm"
|
||||
rows={8}
|
||||
defaultValue={note || ""}
|
||||
reSize="none"
|
||||
cols={30}
|
||||
{...register("note")}
|
||||
/>
|
||||
</FormControl>
|
||||
<form onSubmit={handleSubmit(handleFormSubmit)} className="space-y-6">
|
||||
{/* Reminder Type Selection */}
|
||||
<Controller
|
||||
name="reminderType"
|
||||
control={control}
|
||||
render={({ field: { value, onChange }, fieldState: { error } }) => (
|
||||
<FormControl
|
||||
errorText={error?.message}
|
||||
isError={Boolean(error?.message)}
|
||||
label="Recurrence"
|
||||
>
|
||||
<Select
|
||||
value={value}
|
||||
onValueChange={(val) => {
|
||||
onChange(val);
|
||||
handleReminderTypeChange(val);
|
||||
}}
|
||||
className="w-full border border-mineshaft-500 capitalize"
|
||||
position="popper"
|
||||
placeholder="Select reminder recurrence"
|
||||
dropdownContainerClassName="max-w-none"
|
||||
>
|
||||
{Object.values(ReminderType).map((type) => (
|
||||
<SelectItem value={type} key={type}>
|
||||
{type}
|
||||
</SelectItem>
|
||||
))}
|
||||
</Select>
|
||||
</FormControl>
|
||||
)}
|
||||
/>
|
||||
|
||||
{/* Conditional Fields Based on Reminder Type */}
|
||||
{reminderType === ReminderType.Recurring ? (
|
||||
<Controller
|
||||
control={control}
|
||||
name="recipients"
|
||||
render={({ field }) => (
|
||||
<FormControl
|
||||
tooltipText={
|
||||
<div>
|
||||
Select users to receive reminders.
|
||||
<br />
|
||||
<br /> If none are selected, all project members will receive the reminder.
|
||||
</div>
|
||||
}
|
||||
label="Recipients"
|
||||
className="mb-0"
|
||||
>
|
||||
<FilterableSelect
|
||||
className="w-full"
|
||||
placeholder="Select reminder recipients..."
|
||||
isMulti
|
||||
name="recipients"
|
||||
options={members.map((member) => ({
|
||||
label: member.user.username || member.user.email,
|
||||
value: member.user.id
|
||||
}))}
|
||||
value={field.value}
|
||||
onChange={field.onChange}
|
||||
/>
|
||||
</FormControl>
|
||||
name="repeatDays"
|
||||
render={({ field, fieldState }) => (
|
||||
<div>
|
||||
<FormControl
|
||||
isRequired
|
||||
className="mb-0"
|
||||
label="Reminder Interval (in days)"
|
||||
isError={Boolean(fieldState.error)}
|
||||
errorText={fieldState.error?.message || ""}
|
||||
>
|
||||
<Input
|
||||
onChange={(el) => {
|
||||
const value = parseInt(el.target.value, 10);
|
||||
setValue("repeatDays", Number.isNaN(value) ? null : value);
|
||||
}}
|
||||
type="number"
|
||||
placeholder={DEFAULT_REPEAT_DAYS.toString()}
|
||||
value={field.value || ""}
|
||||
min={MIN_REPEAT_DAYS}
|
||||
max={MAX_REPEAT_DAYS}
|
||||
/>
|
||||
</FormControl>
|
||||
|
||||
{/* Interval description */}
|
||||
<div
|
||||
className={twMerge(
|
||||
"ml-1 mt-2 text-xs",
|
||||
field.value ? "opacity-60" : "opacity-0"
|
||||
)}
|
||||
>
|
||||
A reminder will be sent every{" "}
|
||||
{field.value && field.value > 1 ? `${field.value} days` : "day"}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
<div className="mt-7 flex items-center space-x-4">
|
||||
) : (
|
||||
<Controller
|
||||
control={control}
|
||||
name="nextReminderDate"
|
||||
render={({ field, fieldState }) => (
|
||||
<div>
|
||||
<FormControl
|
||||
isRequired
|
||||
className="mb-0"
|
||||
label="Reminder Date"
|
||||
isError={Boolean(fieldState.error)}
|
||||
errorText={fieldState.error?.message || ""}
|
||||
>
|
||||
<DatePicker
|
||||
value={field.value || undefined}
|
||||
className="w-full"
|
||||
onChange={field.onChange}
|
||||
dateFormat="P"
|
||||
popUpProps={{
|
||||
open: isDatePickerOpen,
|
||||
onOpenChange: setIsDatePickerOpen
|
||||
}}
|
||||
popUpContentProps={{}}
|
||||
hideTime
|
||||
hidden={{ before: new Date(Date.now() + 86400000) }}
|
||||
/>
|
||||
</FormControl>
|
||||
</div>
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
|
||||
{/* Message/Note Field */}
|
||||
<FormControl label="Note" className="mb-0">
|
||||
<TextArea
|
||||
placeholder="Remember to rotate the AWS secret every month."
|
||||
className="border border-mineshaft-600 text-sm"
|
||||
rows={DEFAULT_TEXTAREA_ROWS}
|
||||
reSize="none"
|
||||
cols={30}
|
||||
{...register("message")}
|
||||
/>
|
||||
</FormControl>
|
||||
|
||||
{/* Recipients Selection */}
|
||||
<Controller
|
||||
control={control}
|
||||
name="recipients"
|
||||
render={({ field }) => (
|
||||
<FormControl
|
||||
tooltipText={
|
||||
<div>
|
||||
Select users to receive reminders.
|
||||
<br />
|
||||
<br /> If none are selected, all project members will receive the reminder.
|
||||
</div>
|
||||
}
|
||||
label="Recipients"
|
||||
className="mb-0"
|
||||
>
|
||||
<FilterableSelect
|
||||
menuPlacement="top"
|
||||
className="w-full"
|
||||
placeholder="Select reminder recipients..."
|
||||
isMulti
|
||||
name="recipients"
|
||||
options={memberOptions}
|
||||
value={field.value}
|
||||
onChange={field.onChange}
|
||||
/>
|
||||
</FormControl>
|
||||
)}
|
||||
/>
|
||||
|
||||
{/* Action Buttons */}
|
||||
<div className="flex items-center space-x-4 pt-4">
|
||||
<Button
|
||||
isDisabled={isSubmitting}
|
||||
isLoading={isSubmitting}
|
||||
key="layout-create-project-submit"
|
||||
className=""
|
||||
leftIcon={<FontAwesomeIcon icon={faClock} />}
|
||||
type="submit"
|
||||
>
|
||||
{repeatDays ? "Update" : "Create"} reminder
|
||||
{isEditMode ? "Update" : "Create"} reminder
|
||||
</Button>
|
||||
{repeatDays && (
|
||||
|
||||
{isEditMode && (
|
||||
<Button
|
||||
key="layout-cancel-create-project"
|
||||
onClick={() => onOpenChange(false, { days: null, note: null })}
|
||||
onClick={handleDeleteReminder}
|
||||
colorSchema="danger"
|
||||
variant="outline"
|
||||
leftIcon={<FontAwesomeIcon icon={faTrash} />}
|
||||
type="button"
|
||||
isDisabled={isSubmitting}
|
||||
>
|
||||
Delete reminder
|
||||
</Button>
|
||||
)}
|
||||
|
||||
<Button
|
||||
key="layout-cancel-create-project"
|
||||
onClick={() => onOpenChange(false)}
|
||||
onClick={onOpenChange}
|
||||
variant="plain"
|
||||
colorSchema="secondary"
|
||||
type="button"
|
||||
isDisabled={isSubmitting}
|
||||
>
|
||||
Cancel
|
||||
</Button>
|
||||
|
||||
+33
-38
@@ -1,4 +1,4 @@
|
||||
import { useEffect } from "react";
|
||||
import { useEffect, useMemo } from "react";
|
||||
import { Controller, useFieldArray, useForm } from "react-hook-form";
|
||||
import { subject } from "@casl/ability";
|
||||
import { faCircleQuestion, faEye } from "@fortawesome/free-regular-svg-icons";
|
||||
@@ -52,9 +52,11 @@ import {
|
||||
useWorkspace
|
||||
} from "@app/context";
|
||||
import { ProjectPermissionSecretActions } from "@app/context/ProjectPermissionContext/types";
|
||||
import { getProjectBaseURL } from "@app/helpers/project";
|
||||
import { usePopUp, useToggle } from "@app/hooks";
|
||||
import { useGetSecretVersion } from "@app/hooks/api";
|
||||
import { ActorType } from "@app/hooks/api/auditLogs/enums";
|
||||
import { useGetReminder } from "@app/hooks/api/reminders";
|
||||
import { useGetSecretAccessList } from "@app/hooks/api/secrets/queries";
|
||||
import { SecretV3RawSanitized, WsTag } from "@app/hooks/api/types";
|
||||
import { ProjectType } from "@app/hooks/api/workspace/types";
|
||||
@@ -114,6 +116,7 @@ export const SecretDetailSidebar = ({
|
||||
|
||||
const { permission } = useProjectPermission();
|
||||
const { currentWorkspace } = useWorkspace();
|
||||
const { data: reminderData } = useGetReminder(secret?.id);
|
||||
|
||||
const tagFields = useFieldArray({
|
||||
control,
|
||||
@@ -220,23 +223,8 @@ export const SecretDetailSidebar = ({
|
||||
await onSaveSecret(secret, { ...secret, ...data }, () => reset());
|
||||
};
|
||||
|
||||
const handleReminderSubmit = async (
|
||||
reminderRepeatDays: number | null | undefined,
|
||||
reminderNote: string | null | undefined,
|
||||
reminderRecipients: string[] | undefined
|
||||
) => {
|
||||
await onSaveSecret(
|
||||
secret,
|
||||
{ ...secret, reminderRepeatDays, reminderNote, isReminderEvent: true, reminderRecipients },
|
||||
() => {}
|
||||
);
|
||||
};
|
||||
|
||||
const [createReminderFormOpen, setCreateReminderFormOpen] = useToggle(false);
|
||||
|
||||
const secretReminderRepeatDays = watch("reminderRepeatDays");
|
||||
const secretReminderNote = watch("reminderNote");
|
||||
const secretReminderRecipients = watch("reminderRecipients");
|
||||
useEffect(() => {
|
||||
setValue(
|
||||
"reminderRecipients",
|
||||
@@ -302,27 +290,33 @@ export const SecretDetailSidebar = ({
|
||||
}
|
||||
};
|
||||
|
||||
const getDaysUntilReminder = useMemo(() => {
|
||||
return (): string => {
|
||||
const now = new Date();
|
||||
now.setHours(0, 0, 0, 0);
|
||||
|
||||
const target = new Date(reminderData?.nextReminderDate || "");
|
||||
target.setHours(0, 0, 0, 0);
|
||||
|
||||
const diffTime = target.getTime() - now.getTime();
|
||||
const daysRemaining = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
|
||||
|
||||
return `Days until next reminder: ${daysRemaining}`;
|
||||
};
|
||||
}, [reminderData]);
|
||||
|
||||
return (
|
||||
<>
|
||||
<CreateReminderForm
|
||||
repeatDays={secretReminderRepeatDays}
|
||||
note={secretReminderNote}
|
||||
recipients={secretReminderRecipients}
|
||||
isOpen={createReminderFormOpen}
|
||||
onOpenChange={(_, data) => {
|
||||
onOpenChange={() => {
|
||||
setCreateReminderFormOpen.toggle();
|
||||
|
||||
if (data) {
|
||||
const recipients = data.recipients?.length
|
||||
? data.recipients.map((recipient) => recipient.value)
|
||||
: undefined;
|
||||
|
||||
setValue("reminderRepeatDays", data.days, { shouldDirty: false });
|
||||
setValue("reminderNote", data.note, { shouldDirty: false });
|
||||
setValue("reminderRecipients", recipients, { shouldDirty: false });
|
||||
handleReminderSubmit(data.days, data.note, recipients);
|
||||
}
|
||||
}}
|
||||
workspaceId={currentWorkspace.id}
|
||||
environment={environment}
|
||||
secretPath={secretPath}
|
||||
secretId={secret?.id}
|
||||
reminder={reminderData}
|
||||
/>
|
||||
<UpgradePlanModal
|
||||
isOpen={popUp.secretAccessUpgradePlan.isOpen}
|
||||
@@ -734,14 +728,11 @@ export const SecretDetailSidebar = ({
|
||||
)}
|
||||
/>
|
||||
<FormControl>
|
||||
{secretReminderRepeatDays && secretReminderRepeatDays > 0 ? (
|
||||
{reminderData && reminderData.nextReminderDate ? (
|
||||
<div className="flex items-center justify-between px-2">
|
||||
<div className="flex items-center space-x-2">
|
||||
<FontAwesomeIcon className="text-primary-500" icon={faClock} />
|
||||
<span className="text-sm text-bunker-300">
|
||||
Reminder every {secretReminderRepeatDays}{" "}
|
||||
{secretReminderRepeatDays > 1 ? "days" : "day"}
|
||||
</span>
|
||||
<span className="text-sm text-bunker-300">{getDaysUntilReminder()}</span>
|
||||
</div>
|
||||
<div>
|
||||
<Button
|
||||
@@ -990,7 +981,9 @@ export const SecretDetailSidebar = ({
|
||||
className="z-[100] capitalize"
|
||||
>
|
||||
<Link
|
||||
to="/projects/$projectId/members/$membershipId"
|
||||
to={
|
||||
`${getProjectBaseURL(currentWorkspace.type)}/members/$membershipId` as const
|
||||
}
|
||||
params={{
|
||||
projectId: currentWorkspace.id,
|
||||
membershipId: user.membershipId
|
||||
@@ -1021,7 +1014,9 @@ export const SecretDetailSidebar = ({
|
||||
className="z-[100]"
|
||||
>
|
||||
<Link
|
||||
to="/projects/$projectId/identities/$identityId"
|
||||
to={
|
||||
`${getProjectBaseURL(currentWorkspace.type)}/identities/$identityId` as const
|
||||
}
|
||||
params={{
|
||||
projectId: currentWorkspace.id,
|
||||
identityId: identity.id
|
||||
|
||||
@@ -13,7 +13,7 @@ const SecretDashboardPageQueryParamsSchema = z.object({
|
||||
tags: z.string().catch("")
|
||||
});
|
||||
export const Route = createFileRoute(
|
||||
"/_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"
|
||||
)({
|
||||
component: SecretDashboardPage,
|
||||
validateSearch: zodValidator(SecretDashboardPageQueryParamsSchema),
|
||||
@@ -28,7 +28,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Secrets",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/overview",
|
||||
to: "/projects/secret-management/$projectId/overview",
|
||||
params
|
||||
})
|
||||
},
|
||||
@@ -39,7 +39,7 @@ export const Route = createFileRoute(
|
||||
links: context.project.environments.map((el) => ({
|
||||
label: el.name,
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/secrets/$envSlug",
|
||||
to: "/projects/secret-management/$projectId/secrets/$envSlug",
|
||||
params: {
|
||||
projectId: params.projectId,
|
||||
envSlug: el.slug
|
||||
|
||||
@@ -172,7 +172,7 @@ const Page = () => {
|
||||
PostgreSQL and Microsoft SQL Server Rotations can now be created from the{" "}
|
||||
<Link
|
||||
className="text-mineshaft-100 underline decoration-primary underline-offset-2 hover:text-mineshaft-200"
|
||||
to="/projects/$projectId/secret-manager/overview"
|
||||
to="/projects/secret-management/$projectId/overview"
|
||||
params={{ projectId: currentWorkspace.id }}
|
||||
>
|
||||
Secret Manager Dashboard
|
||||
@@ -407,7 +407,7 @@ const Page = () => {
|
||||
Infisical is revamping its Secret Rotation experience. Navigate to the{" "}
|
||||
<Link
|
||||
className="text-mineshaft-100 underline decoration-primary underline-offset-2 hover:text-mineshaft-200"
|
||||
to="/projects/$projectId/secret-manager/overview"
|
||||
to="/projects/secret-management/$projectId/overview"
|
||||
params={{ projectId: currentWorkspace.id }}
|
||||
>
|
||||
Secret Manager Dashboard
|
||||
@@ -424,7 +424,7 @@ const Page = () => {
|
||||
<Button
|
||||
onClick={() =>
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/overview",
|
||||
to: "/projects/secret-management/$projectId/overview",
|
||||
params: { projectId: currentWorkspace.id }
|
||||
})
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ import { createFileRoute } from "@tanstack/react-router";
|
||||
import { SecretRotationPage } from "./SecretRotationPage";
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/secret-rotation"
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/secret-rotation"
|
||||
)({
|
||||
component: SecretRotationPage,
|
||||
beforeLoad: ({ context }) => {
|
||||
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
import { GenericFieldLabel } from "@app/components/secret-syncs";
|
||||
import { TBitbucketSync } from "@app/hooks/api/secretSyncs/types/bitbucket-sync";
|
||||
|
||||
type Props = {
|
||||
secretSync: TBitbucketSync;
|
||||
};
|
||||
|
||||
export const BitbucketSyncDestinationSection = ({ secretSync }: Props) => {
|
||||
const {
|
||||
destinationConfig: { workspaceSlug, repositorySlug, environmentId }
|
||||
} = secretSync;
|
||||
|
||||
return (
|
||||
<>
|
||||
<GenericFieldLabel label="Workspace">{workspaceSlug}</GenericFieldLabel>
|
||||
<GenericFieldLabel label="Repository">{repositorySlug}</GenericFieldLabel>
|
||||
{environmentId && (
|
||||
<GenericFieldLabel label="Deployment Environment">{environmentId}</GenericFieldLabel>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
};
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
import { GenericFieldLabel } from "@app/components/secret-syncs";
|
||||
import { TDigitalOceanAppPlatformSync } from "@app/hooks/api/secretSyncs/types/digital-ocean-app-platform-sync";
|
||||
|
||||
type Props = {
|
||||
secretSync: TDigitalOceanAppPlatformSync;
|
||||
};
|
||||
|
||||
export const DigitalOceanAppPlatformSyncDestinationSection = ({ secretSync }: Props) => {
|
||||
const { destinationConfig } = secretSync;
|
||||
|
||||
return <GenericFieldLabel label="App">{destinationConfig.appName}</GenericFieldLabel>;
|
||||
};
|
||||
+10
@@ -17,11 +17,13 @@ import { AwsSecretsManagerSyncDestinationSection } from "./AwsSecretsManagerSync
|
||||
import { AzureAppConfigurationSyncDestinationSection } from "./AzureAppConfigurationSyncDestinationSection";
|
||||
import { AzureDevOpsSyncDestinationSection } from "./AzureDevOpsSyncDestinationSection";
|
||||
import { AzureKeyVaultSyncDestinationSection } from "./AzureKeyVaultSyncDestinationSection";
|
||||
import { BitbucketSyncDestinationSection } from "./BitbucketSyncDestinationSection";
|
||||
import { CamundaSyncDestinationSection } from "./CamundaSyncDestinationSection";
|
||||
import { ChecklySyncDestinationSection } from "./ChecklySyncDestinationSection";
|
||||
import { CloudflarePagesSyncDestinationSection } from "./CloudflarePagesSyncDestinationSection";
|
||||
import { CloudflareWorkersSyncDestinationSection } from "./CloudflareWorkersSyncDestinationSection";
|
||||
import { DatabricksSyncDestinationSection } from "./DatabricksSyncDestinationSection";
|
||||
import { DigitalOceanAppPlatformSyncDestinationSection } from "./DigitalOceanAppPlatformSyncDestinationSection";
|
||||
import { FlyioSyncDestinationSection } from "./FlyioSyncDestinationSection";
|
||||
import { GcpSyncDestinationSection } from "./GcpSyncDestinationSection";
|
||||
import { GitHubSyncDestinationSection } from "./GitHubSyncDestinationSection";
|
||||
@@ -134,6 +136,14 @@ export const SecretSyncDestinationSection = ({ secretSync, onEditDestination }:
|
||||
case SecretSync.Supabase:
|
||||
DestinationComponents = <SupabaseSyncDestinationSection secretSync={secretSync} />;
|
||||
break;
|
||||
case SecretSync.DigitalOceanAppPlatform:
|
||||
DestinationComponents = (
|
||||
<DigitalOceanAppPlatformSyncDestinationSection secretSync={secretSync} />
|
||||
);
|
||||
break;
|
||||
case SecretSync.Bitbucket:
|
||||
DestinationComponents = <BitbucketSyncDestinationSection secretSync={secretSync} />;
|
||||
break;
|
||||
default:
|
||||
throw new Error(`Unhandled Destination Section components: ${destination}`);
|
||||
}
|
||||
|
||||
+2
@@ -65,6 +65,8 @@ export const SecretSyncOptionsSection = ({ secretSync, onEditOptions }: Props) =
|
||||
case SecretSync.Railway:
|
||||
case SecretSync.Supabase:
|
||||
case SecretSync.Checkly:
|
||||
case SecretSync.DigitalOceanAppPlatform:
|
||||
case SecretSync.Bitbucket:
|
||||
AdditionalSyncOptionsComponent = null;
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -5,7 +5,7 @@ import { IntegrationsListPageTabs } from "@app/types/integrations";
|
||||
import { SecretSyncDetailsByIDPage } from "./SecretSyncDetailsByIDPage";
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_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"
|
||||
)({
|
||||
component: SecretSyncDetailsByIDPage,
|
||||
beforeLoad: ({ context, params }) => {
|
||||
@@ -15,7 +15,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.SecretSyncs
|
||||
|
||||
@@ -4,9 +4,10 @@ import { useTranslation } from "react-i18next";
|
||||
import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2";
|
||||
import { useWorkspace } from "@app/context";
|
||||
import { ProjectVersion } from "@app/hooks/api/workspace/types";
|
||||
import { ProjectGeneralTab } from "@app/pages/project/SettingsPage/components/ProjectGeneralTab";
|
||||
|
||||
import { EncryptionTab } from "./components/EncryptionTab";
|
||||
import { ProjectGeneralTab } from "./components/ProjectGeneralTab";
|
||||
import { SecretSettingsTab } from "./components/ProjectGeneralTab";
|
||||
import { WebhooksTab } from "./components/WebhooksTab";
|
||||
import { WorkflowIntegrationTab } from "./components/WorkflowIntegrationSection";
|
||||
|
||||
@@ -15,6 +16,7 @@ export const SettingsPage = () => {
|
||||
const { currentWorkspace } = useWorkspace();
|
||||
const tabs = [
|
||||
{ name: "General", key: "tab-project-general", Component: ProjectGeneralTab },
|
||||
{ name: "Secrets Management", key: "tab-secret-general", Component: SecretSettingsTab },
|
||||
{
|
||||
name: "Encryption",
|
||||
key: "tab-project-encryption",
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@ import { SecretSharingSection } from "../SecretSharingSection";
|
||||
import { SecretSnapshotsLegacySection } from "../SecretSnapshotsLegacySection";
|
||||
import { SecretTagsSection } from "../SecretTagsSection";
|
||||
|
||||
export const ProjectGeneralTab = () => {
|
||||
export const SecretSettingsTab = () => {
|
||||
return (
|
||||
<div>
|
||||
<EnvironmentSection />
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
export { ProjectGeneralTab } from "./ProjectGeneralTab";
|
||||
export { SecretSettingsTab } from "./ProjectGeneralTab";
|
||||
|
||||
@@ -3,7 +3,7 @@ import { createFileRoute } from "@tanstack/react-router";
|
||||
import { SettingsPage } from "./SettingsPage";
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/settings"
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/settings"
|
||||
)({
|
||||
component: SettingsPage,
|
||||
beforeLoad: ({ context }) => {
|
||||
|
||||
+1
-1
@@ -68,7 +68,7 @@ export const AWSParameterStoreAuthorizeIntegrationPage = () => {
|
||||
});
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/aws-parameter-store/create",
|
||||
to: "/projects/secret-management/$projectId/integrations/aws-parameter-store/create",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@ import { IntegrationsListPageTabs } from "@app/types/integrations";
|
||||
import { AWSParameterStoreAuthorizeIntegrationPage } from "./AwsParameterStoreAuthorizePage";
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/aws-parameter-store/authorize"
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/aws-parameter-store/authorize"
|
||||
)({
|
||||
component: AWSParameterStoreAuthorizeIntegrationPage,
|
||||
beforeLoad: ({ context, params }) => {
|
||||
@@ -15,7 +15,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -156,7 +156,7 @@ export const AWSParameterStoreConfigurePage = () => {
|
||||
setPathErrorText("");
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
+2
-2
@@ -11,7 +11,7 @@ const AwsParameterStoreConfigurePageQueryParamsSchema = z.object({
|
||||
});
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_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"
|
||||
)({
|
||||
component: AWSParameterStoreConfigurePage,
|
||||
validateSearch: zodValidator(AwsParameterStoreConfigurePageQueryParamsSchema),
|
||||
@@ -22,7 +22,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -66,7 +66,7 @@ export const AWSSecretManagerAuthorizePage = () => {
|
||||
})
|
||||
});
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/aws-secret-manager/create",
|
||||
to: "/projects/secret-management/$projectId/integrations/aws-secret-manager/create",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@ import { IntegrationsListPageTabs } from "@app/types/integrations";
|
||||
import { AWSSecretManagerAuthorizePage } from "./AwsSecretManagerAuthorizePage";
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/aws-secret-manager/authorize"
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/aws-secret-manager/authorize"
|
||||
)({
|
||||
component: AWSSecretManagerAuthorizePage,
|
||||
beforeLoad: ({ context, params }) => {
|
||||
@@ -15,7 +15,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -204,7 +204,7 @@ export const AwsSecretManagerConfigurePage = () => {
|
||||
});
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
+2
-2
@@ -11,7 +11,7 @@ const AwsSecretManagerConfigurePageQueryParamsSchema = z.object({
|
||||
});
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_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"
|
||||
)({
|
||||
component: AwsSecretManagerConfigurePage,
|
||||
validateSearch: zodValidator(AwsSecretManagerConfigurePageQueryParamsSchema),
|
||||
@@ -22,7 +22,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -131,7 +131,7 @@ export const AzureAppConfigurationConfigurePage = () => {
|
||||
});
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
+2
-2
@@ -11,7 +11,7 @@ const AzureAppConfigurationPageQueryParamsSchema = z.object({
|
||||
});
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_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"
|
||||
)({
|
||||
component: AzureAppConfigurationConfigurePage,
|
||||
validateSearch: zodValidator(AzureAppConfigurationPageQueryParamsSchema),
|
||||
@@ -22,7 +22,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -28,7 +28,7 @@ export const AzureAppConfigurationOauthCallbackPage = () => {
|
||||
});
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/azure-app-configuration/create",
|
||||
to: "/projects/secret-management/$projectId/integrations/azure-app-configuration/create",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
+2
-2
@@ -12,7 +12,7 @@ export const AzureAppConfigurationOauthCallbackPageQueryParamsSchema = z.object(
|
||||
});
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_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"
|
||||
)({
|
||||
component: AzureAppConfigurationOauthCallbackPage,
|
||||
validateSearch: zodValidator(AzureAppConfigurationOauthCallbackPageQueryParamsSchema),
|
||||
@@ -23,7 +23,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -39,7 +39,7 @@ export const AzureDevopsAuthorizePage = () => {
|
||||
setIsLoading(false);
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/azure-devops/create",
|
||||
to: "/projects/secret-management/$projectId/integrations/azure-devops/create",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
@@ -5,7 +5,7 @@ import { IntegrationsListPageTabs } from "@app/types/integrations";
|
||||
import { AzureDevopsAuthorizePage } from "./AzureDevopsAuthorizePage";
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/azure-devops/authorize"
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/azure-devops/authorize"
|
||||
)({
|
||||
component: AzureDevopsAuthorizePage,
|
||||
beforeLoad: ({ context, params }) => {
|
||||
@@ -15,7 +15,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -80,7 +80,7 @@ export const AzureDevopsConfigurePage = () => {
|
||||
setIsLoading(false);
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
@@ -11,7 +11,7 @@ const AzureDevopsConfigurePageQueryParamsSchema = z.object({
|
||||
});
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_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"
|
||||
)({
|
||||
component: AzureDevopsConfigurePage,
|
||||
validateSearch: zodValidator(AzureDevopsConfigurePageQueryParamsSchema),
|
||||
@@ -22,7 +22,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
@@ -11,7 +11,7 @@ const PageQueryParamsSchema = z.object({
|
||||
});
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_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"
|
||||
)({
|
||||
component: AzureKeyVaultAuthorizePage,
|
||||
validateSearch: PageQueryParamsSchema,
|
||||
@@ -22,7 +22,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -88,7 +88,7 @@ export const AzureKeyVaultConfigurePage = () => {
|
||||
setIsLoading(false);
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
@@ -11,7 +11,7 @@ const AzureKeyVaultConfigurePageQueryParamsSchema = z.object({
|
||||
});
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_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"
|
||||
)({
|
||||
component: AzureKeyVaultConfigurePage,
|
||||
validateSearch: zodValidator(AzureKeyVaultConfigurePageQueryParamsSchema),
|
||||
@@ -22,7 +22,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -28,7 +28,7 @@ export const AzureKeyVaultOauthCallbackPage = () => {
|
||||
});
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/azure-key-vault/create",
|
||||
to: "/projects/secret-management/$projectId/integrations/azure-key-vault/create",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
+2
-2
@@ -12,7 +12,7 @@ export const AzureKeyVaultOauthCallbackQueryParamsSchema = z.object({
|
||||
});
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_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"
|
||||
)({
|
||||
component: AzureKeyVaultOauthCallbackPage,
|
||||
validateSearch: zodValidator(AzureKeyVaultOauthCallbackQueryParamsSchema),
|
||||
@@ -23,7 +23,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -148,7 +148,7 @@ export const BitbucketConfigurePage = () => {
|
||||
text: "Successfully created integration"
|
||||
});
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
@@ -11,7 +11,7 @@ const BitbucketConfigurePageQueryParamsSchema = z.object({
|
||||
});
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_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"
|
||||
)({
|
||||
component: BitbucketConfigurePage,
|
||||
validateSearch: zodValidator(BitbucketConfigurePageQueryParamsSchema),
|
||||
@@ -22,7 +22,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@ export const BitbucketOauthCallbackPage = () => {
|
||||
});
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/bitbucket/create",
|
||||
to: "/projects/secret-management/$projectId/integrations/bitbucket/create",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
@@ -12,7 +12,7 @@ export const BitbucketOauthCallbackQueryParamsSchema = z.object({
|
||||
});
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_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"
|
||||
)({
|
||||
component: BitbucketOauthCallbackPage,
|
||||
validateSearch: zodValidator(BitbucketOauthCallbackQueryParamsSchema),
|
||||
@@ -23,7 +23,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ export const ChecklyAuthorizePage = () => {
|
||||
setIsLoading(false);
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/checkly/create",
|
||||
to: "/projects/secret-management/$projectId/integrations/checkly/create",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
@@ -5,7 +5,7 @@ import { IntegrationsListPageTabs } from "@app/types/integrations";
|
||||
import { ChecklyAuthorizePage } from "./ChecklyAuthorizePage";
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/checkly/authorize"
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/checkly/authorize"
|
||||
)({
|
||||
component: ChecklyAuthorizePage,
|
||||
beforeLoad: ({ context, params }) => {
|
||||
@@ -15,7 +15,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -113,7 +113,7 @@ export const ChecklyConfigurePage = () => {
|
||||
setIsLoading(false);
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
@@ -11,7 +11,7 @@ const ChecklyConfigurePageQueryParamsSchema = z.object({
|
||||
});
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_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"
|
||||
)({
|
||||
component: ChecklyConfigurePage,
|
||||
validateSearch: zodValidator(ChecklyConfigurePageQueryParamsSchema),
|
||||
@@ -22,7 +22,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ export const CircleCIAuthorizePage = () => {
|
||||
setIsLoading(false);
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/circleci/create",
|
||||
to: "/projects/secret-management/$projectId/integrations/circleci/create",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
@@ -5,7 +5,7 @@ import { IntegrationsListPageTabs } from "@app/types/integrations";
|
||||
import { CircleCIAuthorizePage } from "./CircleCIAuthorizePage";
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/circleci/authorize"
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/circleci/authorize"
|
||||
)({
|
||||
component: CircleCIAuthorizePage,
|
||||
beforeLoad: ({ context, params }) => {
|
||||
@@ -15,7 +15,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -103,7 +103,7 @@ export const CircleCIConfigurePage = () => {
|
||||
text: "Successfully created integration"
|
||||
});
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
@@ -11,7 +11,7 @@ const CircleCIConfigurePageQueryParamsSchema = z.object({
|
||||
});
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_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"
|
||||
)({
|
||||
component: CircleCIConfigurePage,
|
||||
validateSearch: zodValidator(CircleCIConfigurePageQueryParamsSchema),
|
||||
@@ -22,7 +22,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -34,7 +34,7 @@ export const Cloud66AuthorizePage = () => {
|
||||
setIsLoading(false);
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/cloud-66/create",
|
||||
to: "/projects/secret-management/$projectId/integrations/cloud-66/create",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
@@ -5,7 +5,7 @@ import { IntegrationsListPageTabs } from "@app/types/integrations";
|
||||
import { Cloud66AuthorizePage } from "./Cloud66AuthorizePage";
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/cloud-66/authorize"
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/cloud-66/authorize"
|
||||
)({
|
||||
component: Cloud66AuthorizePage,
|
||||
beforeLoad: ({ context, params }) => {
|
||||
@@ -15,7 +15,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -75,7 +75,7 @@ export const Cloud66ConfigurePage = () => {
|
||||
setIsLoading(false);
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
@@ -11,7 +11,7 @@ const Cloud66ConfigurePageQueryParamsSchema = z.object({
|
||||
});
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_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"
|
||||
)({
|
||||
component: Cloud66ConfigurePage,
|
||||
validateSearch: zodValidator(Cloud66ConfigurePageQueryParamsSchema),
|
||||
@@ -22,7 +22,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -41,7 +41,7 @@ export const CloudflarePagesAuthorizePage = () => {
|
||||
setIsLoading(false);
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/cloudflare-pages/create",
|
||||
to: "/projects/secret-management/$projectId/integrations/cloudflare-pages/create",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@ import { IntegrationsListPageTabs } from "@app/types/integrations";
|
||||
import { CloudflarePagesAuthorizePage } from "./CloudflarePagesAuthorizePage";
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/cloudflare-pages/authorize"
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/cloudflare-pages/authorize"
|
||||
)({
|
||||
component: CloudflarePagesAuthorizePage,
|
||||
beforeLoad: ({ context, params }) => {
|
||||
@@ -15,7 +15,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -94,7 +94,7 @@ export const CloudflarePagesConfigurePage = () => {
|
||||
setIsLoading(false);
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
+2
-2
@@ -11,7 +11,7 @@ const CloudflarePagesConfigurePageQueryParamsSchema = z.object({
|
||||
});
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_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"
|
||||
)({
|
||||
component: CloudflarePagesConfigurePage,
|
||||
validateSearch: zodValidator(CloudflarePagesConfigurePageQueryParamsSchema),
|
||||
@@ -22,7 +22,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -41,7 +41,7 @@ export const CloudflareWorkersAuthorizePage = () => {
|
||||
setIsLoading(false);
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/cloudflare-workers/create",
|
||||
to: "/projects/secret-management/$projectId/integrations/cloudflare-workers/create",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@ import { IntegrationsListPageTabs } from "@app/types/integrations";
|
||||
import { CloudflareWorkersAuthorizePage } from "./CloudflareWorkersAuthorizePage";
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/cloudflare-workers/authorize"
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/cloudflare-workers/authorize"
|
||||
)({
|
||||
component: CloudflareWorkersAuthorizePage,
|
||||
beforeLoad: ({ context, params }) => {
|
||||
@@ -15,7 +15,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -67,7 +67,7 @@ export const CloudflareWorkersConfigurePage = () => {
|
||||
setIsLoading(false);
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
+2
-2
@@ -11,7 +11,7 @@ const CloudflareWorkersConfigurePageQueryParamsSchema = z.object({
|
||||
});
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_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"
|
||||
)({
|
||||
component: CloudflareWorkersConfigurePage,
|
||||
validateSearch: zodValidator(CloudflareWorkersConfigurePageQueryParamsSchema),
|
||||
@@ -22,7 +22,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ export const CodefreshAuthorizePage = () => {
|
||||
setIsLoading(false);
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/codefresh/create",
|
||||
to: "/projects/secret-management/$projectId/integrations/codefresh/create",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
@@ -5,7 +5,7 @@ import { IntegrationsListPageTabs } from "@app/types/integrations";
|
||||
import { CodefreshAuthorizePage } from "./CodefreshAuthorizePage";
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/codefresh/authorize"
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/codefresh/authorize"
|
||||
)({
|
||||
component: CodefreshAuthorizePage,
|
||||
beforeLoad: ({ context, params }) => {
|
||||
@@ -15,7 +15,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -71,7 +71,7 @@ export const CodefreshConfigurePage = () => {
|
||||
setIsLoading(false);
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
@@ -11,7 +11,7 @@ const CodefreshConfigurePageQueryParamsSchema = z.object({
|
||||
});
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_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"
|
||||
)({
|
||||
component: CodefreshConfigurePage,
|
||||
validateSearch: zodValidator(CodefreshConfigurePageQueryParamsSchema),
|
||||
@@ -22,7 +22,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -40,7 +40,7 @@ export const DatabricksAuthorizePage = () => {
|
||||
});
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/databricks/create",
|
||||
to: "/projects/secret-management/$projectId/integrations/databricks/create",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
@@ -5,7 +5,7 @@ import { IntegrationsListPageTabs } from "@app/types/integrations";
|
||||
import { DatabricksAuthorizePage } from "./DatabricksAuthorizePage";
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/databricks/authorize"
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/databricks/authorize"
|
||||
)({
|
||||
component: DatabricksAuthorizePage,
|
||||
beforeLoad: ({ context, params }) => {
|
||||
@@ -15,7 +15,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -87,7 +87,7 @@ export const DatabricksConfigurePage = () => {
|
||||
});
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
@@ -11,7 +11,7 @@ const DatabricksConfigurePageQueryParamsSchema = z.object({
|
||||
});
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_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"
|
||||
)({
|
||||
component: DatabricksConfigurePage,
|
||||
validateSearch: zodValidator(DatabricksConfigurePageQueryParamsSchema),
|
||||
@@ -22,7 +22,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ export const DigitalOceanAppPlatformAuthorizePage = () => {
|
||||
setIsLoading(false);
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/digital-ocean-app-platform/create",
|
||||
to: "/projects/secret-management/$projectId/integrations/digital-ocean-app-platform/create",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@ import { IntegrationsListPageTabs } from "@app/types/integrations";
|
||||
import { DigitalOceanAppPlatformAuthorizePage } from "./DigitalOceanAppPlatformAuthorizePage";
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/digital-ocean-app-platform/authorize"
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/digital-ocean-app-platform/authorize"
|
||||
)({
|
||||
component: DigitalOceanAppPlatformAuthorizePage,
|
||||
beforeLoad: ({ context, params }) => {
|
||||
@@ -15,7 +15,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -72,7 +72,7 @@ export const DigitalOceanAppPlatformConfigurePage = () => {
|
||||
setIsLoading(false);
|
||||
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
+2
-2
@@ -11,7 +11,7 @@ const DigitalOceanAppPlatformConfigurePageQueryParamsSchema = z.object({
|
||||
});
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_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"
|
||||
)({
|
||||
component: DigitalOceanAppPlatformConfigurePage,
|
||||
validateSearch: zodValidator(DigitalOceanAppPlatformConfigurePageQueryParamsSchema),
|
||||
@@ -22,7 +22,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
+1
-1
@@ -44,7 +44,7 @@ export const FlyioAuthorizePage = () => {
|
||||
|
||||
setIsLoading(false);
|
||||
navigate({
|
||||
to: "/projects/$projectId/secret-manager/integrations/flyio/create",
|
||||
to: "/projects/secret-management/$projectId/integrations/flyio/create",
|
||||
params: {
|
||||
projectId: currentWorkspace.id
|
||||
},
|
||||
|
||||
@@ -5,7 +5,7 @@ import { IntegrationsListPageTabs } from "@app/types/integrations";
|
||||
import { FlyioAuthorizePage } from "./FlyioAuthorizePage";
|
||||
|
||||
export const Route = createFileRoute(
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/secret-manager/_secret-manager-layout/integrations/flyio/authorize"
|
||||
"/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/integrations/flyio/authorize"
|
||||
)({
|
||||
component: FlyioAuthorizePage,
|
||||
beforeLoad: ({ context, params }) => {
|
||||
@@ -15,7 +15,7 @@ export const Route = createFileRoute(
|
||||
{
|
||||
label: "Integrations",
|
||||
link: linkOptions({
|
||||
to: "/projects/$projectId/secret-manager/integrations",
|
||||
to: "/projects/secret-management/$projectId/integrations",
|
||||
params,
|
||||
search: {
|
||||
selectedTab: IntegrationsListPageTabs.NativeIntegrations
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user