From 16c06dacfe77b2fd0b412208995a5c2b8a97db92 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Wed, 19 Nov 2025 14:09:28 +0530 Subject: [PATCH 01/13] fix: orgid in routing --- .../src/components/navigation/NavHeader.tsx | 14 +- .../SecretDashboardPathBreadcrumb.tsx | 5 +- frontend/src/const/routes.ts | 324 +- frontend/src/helpers/project.ts | 16 +- frontend/src/layouts/KmsLayout/KmsLayout.tsx | 18 +- .../components/NavBar/Navbar.tsx | 25 +- .../components/OrgNavBar/OrgNavBar.tsx | 28 +- frontend/src/layouts/PamLayout/PamLayout.tsx | 21 +- .../PkiManagerLayout/PkiManagerLayout.tsx | 33 +- .../SecretManagerLayout.tsx | 27 +- .../SecretScanningLayout.tsx | 20 +- frontend/src/layouts/SshLayout/SshLayout.tsx | 17 +- .../src/pages/auth/LoginPage/Login.utils.tsx | 10 +- .../components/PkiCollectionModal.tsx | 6 +- .../components/PkiCollectionTable.tsx | 11 +- .../pages/cert-manager/AlertingPage/route.tsx | 2 +- .../CertAuthDetailsByIDPage.tsx | 14 +- .../CertAuthDetailsByIDPage/route.tsx | 5 +- .../components/CaTable.tsx | 11 +- .../CertificateAuthoritiesPage/route.tsx | 2 +- .../IntegrationsListPage/route.tsx | 2 +- .../PkiCollectionDetailsByIDPage.tsx | 14 +- .../PkiCollectionDetailsByIDPage/routes.tsx | 5 +- .../PkiSubscriberDetailsByIDPage.tsx | 8 +- .../PkiSubscriberDetailsByIDPage/route.tsx | 5 +- .../components/PkiSubscribersTable.tsx | 5 +- .../cert-manager/PkiSubscribersPage/route.tsx | 2 +- .../PkiSyncDetailsByIDPage/route.tsx | 4 +- .../PkiTemplateListPage/route.tsx | 2 +- .../pages/cert-manager/PoliciesPage/route.tsx | 2 +- .../pages/cert-manager/SettingsPage/route.tsx | 2 +- frontend/src/pages/cert-manager/layout.tsx | 2 +- frontend/src/pages/kms/KmipPage/route.tsx | 2 +- frontend/src/pages/kms/OverviewPage/route.tsx | 2 +- frontend/src/pages/kms/SettingsPage/route.tsx | 2 +- frontend/src/pages/kms/layout.tsx | 2 +- .../pages/middlewares/inject-org-details.tsx | 11 +- .../middlewares/restrict-login-signup.tsx | 3 +- .../AccessManagementPage/route.tsx | 2 +- .../components/AppConnectionRow.tsx | 4 +- .../AppConnectionsPage/route.tsx | 2 +- .../OauthCallbackPage/route.tsx | 2 +- .../organization/AuditLogsPage/route.tsx | 2 +- .../pages/organization/BillingPage/route.tsx | 7 +- .../GroupDetailsByIDPage/route.tsx | 2 +- .../IdentityProjectRow.tsx | 3 + .../IdentityDetailsByIDPage/route.tsx | 2 +- .../organization/NetworkingPage/route.tsx | 2 +- .../ProjectsPage/ProjectsPage.tsx | 16 + .../components/AllProjectView.tsx | 5 +- .../ProjectsPage/components/MyProjectView.tsx | 2 + .../pages/organization/ProjectsPage/route.tsx | 2 +- .../pages/organization/RoleByIDPage/route.tsx | 9 +- .../organization/SecretSharingPage/route.tsx | 2 +- .../SettingsPage/OauthCallbackPage/route.tsx | 2 +- .../pages/organization/SettingsPage/route.tsx | 2 +- .../UserProjectsSection/UserProjectRow.tsx | 3 + .../UserDetailsByIDPage/route.tsx | 2 +- .../components/FolderBreadCrumbs.tsx | 2 +- .../src/pages/pam/PamAccountsPage/route.tsx | 6 +- .../src/pages/pam/PamResourcesPage/route.tsx | 2 +- .../PamSessionByIDPage.tsx | 6 +- .../pages/pam/PamSessionsByIDPage/route.tsx | 4 +- .../src/pages/pam/PamSessionsPage/route.tsx | 2 +- frontend/src/pages/pam/SettingsPage/route.tsx | 2 +- frontend/src/pages/pam/layout.tsx | 2 +- .../AccessControlPage/route-cert-manager.tsx | 2 +- .../project/AccessControlPage/route-kms.tsx | 2 +- .../project/AccessControlPage/route-pam.tsx | 2 +- .../route-secret-manager.tsx | 2 +- .../route-secret-scanning.tsx | 2 +- .../project/AccessControlPage/route-ssh.tsx | 2 +- .../AppConnectionsPage/route-cert-manager.tsx | 2 +- .../route-secret-manager.tsx | 2 +- .../route-secret-scanning.tsx | 2 +- .../AuditLogsPage/route-cert-manager.tsx | 2 +- .../pages/project/AuditLogsPage/route-kms.tsx | 2 +- .../pages/project/AuditLogsPage/route-pam.tsx | 2 +- .../AuditLogsPage/route-secret-manager.tsx | 2 +- .../AuditLogsPage/route-secret-scanning.tsx | 2 +- .../pages/project/AuditLogsPage/route-ssh.tsx | 2 +- .../route-cert-manager.tsx | 5 +- .../GroupDetailsByIDPage/route-kms.tsx | 5 +- .../GroupDetailsByIDPage/route-pam.tsx | 5 +- .../route-secret-manager.tsx | 5 +- .../route-secret-scanning.tsx | 5 +- .../GroupDetailsByIDPage/route-ssh.tsx | 5 +- .../route-cert-manager.tsx | 5 +- .../IdentityDetailsByIDPage/route-kms.tsx | 5 +- .../IdentityDetailsByIDPage/route-pam.tsx | 5 +- .../route-secret-manager.tsx | 5 +- .../route-secret-scanning.tsx | 5 +- .../IdentityDetailsByIDPage/route-ssh.tsx | 5 +- .../route-cert-manager.tsx | 5 +- .../MemberDetailsByIDPage/route-kms.tsx | 5 +- .../MemberDetailsByIDPage/route-pam.tsx | 5 +- .../route-secret-manager.tsx | 5 +- .../route-secret-scanning.tsx | 5 +- .../MemberDetailsByIDPage/route-ssh.tsx | 5 +- .../route-cert-manager.tsx | 5 +- .../RoleDetailsBySlugPage/route-kms.tsx | 5 +- .../RoleDetailsBySlugPage/route-pam.tsx | 5 +- .../route-secret-manager.tsx | 5 +- .../route-secret-scanning.tsx | 5 +- .../RoleDetailsBySlugPage/route-ssh.tsx | 5 +- .../CommitDetailsPage/CommitDetailsPage.tsx | 14 +- .../RollbackPreviewTab/RollbackPreviewTab.tsx | 6 +- .../components/RollbackPreviewTab/route.tsx | 11 +- .../CommitDetailsPage/route.tsx | 8 +- .../CommitsPage/CommitsPage.tsx | 12 +- .../secret-manager/CommitsPage/route.tsx | 8 +- .../secret-manager/IPAllowlistPage/route.tsx | 2 +- .../IntegrationsDetailsByIDPage/route.tsx | 4 +- .../IntegrationsListPage.utils.tsx | 91 +- .../NativeIntegrationsTab/IntegrationRow.tsx | 11 +- .../NativeIntegrationsTab.tsx | 5 +- .../IntegrationsListPage/route.tsx | 25 +- .../OverviewPage/OverviewPage.tsx | 13 +- .../FolderBreadCrumbs/FolderBreadCrumbs.tsx | 2 +- .../QuickSearchDynamicSecretItem.tsx | 2 +- .../components/QuickSearchFolderItem.tsx | 2 +- .../components/QuickSearchSecretItem.tsx | 4 +- .../QuickSearchSecretRotationItem.tsx | 2 +- .../secret-manager/OverviewPage/route.tsx | 4 +- .../SecretApprovalsPage/route.tsx | 2 +- .../SecretDashboardPage.tsx | 11 +- .../FolderBreadCrumbs/FolderBreadCrumbs.tsx | 2 +- .../SecretDashboardPage/route.tsx | 16 +- .../SecretRotationPage/SecretRotationPage.tsx | 14 +- .../SecretRotationPage/route.tsx | 2 +- .../SecretSyncDetailsByIDPage/route.tsx | 4 +- .../secret-manager/SettingsPage/route.tsx | 2 +- .../AwsParameterStoreAuthorizePage.tsx | 6 +- .../AwsParameterStoreAuthorizePage/route.tsx | 4 +- .../AwsParamterStoreConfigurePage.tsx | 7 +- .../AwsParameterStoreConfigurePage/route.tsx | 4 +- .../AwsSecretManagerAuthorizePage.tsx | 7 +- .../AwsSecretManagerAuthorizePage/route.tsx | 4 +- .../AwsSecretManagerConfigurePage.tsx | 6 +- .../AwsSecretManagerConfigurePage/route.tsx | 4 +- .../AzureAppConfigurationConfigurePage.tsx | 7 +- .../route.tsx | 4 +- ...AzureAppConfigurationOauthCallbackPage.tsx | 7 +- .../route.tsx | 4 +- .../AzureDevopsAuthorizePage.tsx | 7 +- .../AzureDevopsAuthorizePage/route.tsx | 4 +- .../AzureDevopsConfigurePage.tsx | 7 +- .../AzureDevopsConfigurePage/route.tsx | 4 +- .../AzureKeyVaultAuthorizePage/route.tsx | 4 +- .../AzureKeyVaultConfigurePage.tsx | 7 +- .../AzureKeyVaultConfigurePage/route.tsx | 4 +- .../AzureKeyVaultOauthCallback.tsx | 7 +- .../AzureKeyVaultOauthCallbackPage/route.tsx | 4 +- .../BitbucketConfigurePage.tsx | 7 +- .../BitbucketConfigurePage/route.tsx | 4 +- .../BitbucketOauthCallbackPage.tsx | 6 +- .../BitbucketOauthCallbackPage/route.tsx | 4 +- .../ChecklyAuthorizePage.tsx | 6 +- .../ChecklyAuthorizePage/route.tsx | 4 +- .../ChecklyConfigurePage.tsx | 7 +- .../ChecklyConfigurePage/route.tsx | 4 +- .../CircleCIAuthorizePage.tsx | 7 +- .../CircleCIAuthorizePage/route.tsx | 4 +- .../CircleCIConfigurePage.tsx | 7 +- .../CircleCIConfigurePage/route.tsx | 4 +- .../Cloud66AuthorizePage.tsx | 7 +- .../Cloud66AuthorizePage/route.tsx | 4 +- .../Cloud66ConfigurePage.tsx | 7 +- .../Cloud66ConfigurePage/route.tsx | 4 +- .../CloudflarePagesAuthorizePage.tsx | 7 +- .../CloudflarePagesAuthorizePage/route.tsx | 4 +- .../CloudflarePagesConfigurePage.tsx | 7 +- .../CloudflarePagesConfigurePage/route.tsx | 4 +- .../CloudflareWorkersAuthorizePage.tsx | 7 +- .../CloudflareWorkersAuthorizePage/route.tsx | 4 +- .../CloudflareWorkersConfigurePage.tsx | 7 +- .../CloudflareWorkersConfigurePage/route.tsx | 4 +- .../CodefreshAuthorizePage.tsx | 7 +- .../CodefreshAuthorizePage/route.tsx | 4 +- .../CodefreshConfigurePage.tsx | 7 +- .../CodefreshConfigurePage/route.tsx | 4 +- .../DatabricksAuthorizePage.tsx | 7 +- .../DatabricksAuthorizePage/route.tsx | 4 +- .../DatabricksConfigurePage.tsx | 7 +- .../DatabricksConfigurePage/route.tsx | 4 +- .../DigitalOceanAppPlatformAuthorizePage.tsx | 7 +- .../route.tsx | 4 +- .../DigitalOceanAppPlatformConfigurePage.tsx | 7 +- .../route.tsx | 4 +- .../FlyioAuthorizePage/FlyioAuthorizePage.tsx | 7 +- .../integrations/FlyioAuthorizePage/route.tsx | 4 +- .../FlyioConfigurePage/FlyioConfigurePage.tsx | 7 +- .../integrations/FlyioConfigurePage/route.tsx | 4 +- .../GcpSecretManagerAuthorizePage.tsx | 7 +- .../GcpSecretManagerAuthorizePage/route.tsx | 4 +- .../GcpSecretManagerConfigurePage.tsx | 7 +- .../GcpSecretManagerConfigurePage/route.tsx | 4 +- .../GcpSecretManagerOauthCallbackPage.tsx | 7 +- .../route.tsx | 4 +- .../GithubAuthorizePage.tsx | 7 +- .../GithubAuthorizePage/route.tsx | 4 +- .../GithubConfigurePage.tsx | 7 +- .../GithubConfigurePage/route.tsx | 4 +- .../GithubOauthCallbackPage.tsx | 7 +- .../GithubOauthCallbackPage/route.tsx | 4 +- .../GitlabAuthorizePage/route.tsx | 4 +- .../GitlabConfigurePage.tsx | 7 +- .../GitlabConfigurePage/route.tsx | 4 +- .../GitlabOauthCallbackPage/route.tsx | 4 +- .../HashicorpVaultAuthorizePage.tsx | 7 +- .../HashicorpVaultAuthorizePage/route.tsx | 4 +- .../HashicorpVaultConfigurePage.tsx | 7 +- .../HashicorpVaultConfigurePage/route.tsx | 4 +- .../HasuraCloudAuthorizePage.tsx | 7 +- .../HasuraCloudAuthorizePage/route.tsx | 4 +- .../HasuraCloudConfigurePage.tsx | 7 +- .../HasuraCloudConfigurePage/route.tsx | 4 +- .../HerokuConfigurePage.tsx | 7 +- .../HerokuConfigurePage/route.tsx | 4 +- .../HerokuOauthCallbackPage/route.tsx | 4 +- .../LaravelForgeAuthorizePage.tsx | 6 +- .../LaravelForgeAuthorizePage/route.tsx | 4 +- .../LaravelForgeConfigurePage.tsx | 7 +- .../LaravelForgeConfigurePage/route.tsx | 4 +- .../NetlifyConfigurePage.tsx | 7 +- .../NetlifyConfigurePage/route.tsx | 4 +- .../NetlifyOauthCallbackPage.tsx | 7 +- .../NetlifyOauthCallbackPage/route.tsx | 4 +- .../NorthflankAuthorizePage.tsx | 7 +- .../NorthflankAuthorizePage/route.tsx | 4 +- .../NorthflankConfigurePage.tsx | 7 +- .../NorthflankConfigurePage/route.tsx | 4 +- .../OctopusDeployAuthorizePage.tsx | 7 +- .../OctopusDeployAuthorizePage/route.tsx | 4 +- .../OctopusDeployConfigurePage.tsx | 7 +- .../OctopusDeployConfigurePage/route.tsx | 4 +- .../QoveryAuthorizePage.tsx | 7 +- .../QoveryAuthorizePage/route.tsx | 4 +- .../QoveryConfigurePage.tsx | 7 +- .../QoveryConfigurePage/route.tsx | 4 +- .../RailwayAuthorizePage.tsx | 7 +- .../RailwayAuthorizePage/route.tsx | 4 +- .../RailwayConfigurePage.tsx | 6 +- .../RailwayConfigurePage/route.tsx | 4 +- .../RenderAuthorizePage.tsx | 7 +- .../RenderAuthorizePage/route.tsx | 4 +- .../RenderConfigurePage.tsx | 7 +- .../RenderConfigurePage/route.tsx | 4 +- .../RundeckAuthorizePage.tsx | 6 +- .../RundeckAuthorizePage/route.tsx | 4 +- .../RundeckConfigurePage.tsx | 6 +- .../RundeckConfigurePage/route.tsx | 4 +- .../SelectIntegrationAuthPage.tsx | 6 +- .../SelectIntegrationAuthPage/route.tsx | 4 +- .../SupabaseAuthorizePage.tsx | 6 +- .../SupabaseAuthorizePage/route.tsx | 4 +- .../SupabaseConfigurePage.tsx | 6 +- .../SupabaseConfigurePage/route.tsx | 4 +- .../TeamcityAuthorizePage.tsx | 6 +- .../TeamcityAuthorizePage/route.tsx | 4 +- .../TeamcityConfigurePage.tsx | 7 +- .../TeamcityConfigurePage/route.tsx | 4 +- .../TerraformCloudAuthorizePage.tsx | 7 +- .../TerraformCloudAuthorizePage/route.tsx | 4 +- .../TerraformCloudConfigurePage.tsx | 6 +- .../TerraformCloudConfigurePage/route.tsx | 4 +- .../TravisCIAuthorizePage.tsx | 6 +- .../TravisCIAuthorizePage/route.tsx | 4 +- .../TravisCIConfigurePage.tsx | 6 +- .../TravisCIConfigurePage/route.tsx | 4 +- .../VercelConfigurePage.tsx | 7 +- .../VercelConfigurePage/route.tsx | 4 +- .../VercelOauthCallbackPage.tsx | 7 +- .../VercelOauthCallbackPage/route.tsx | 4 +- .../WindmillAuthorizePage.tsx | 6 +- .../WindmillAuthorizePage/route.tsx | 4 +- .../WindmillConfigurePage.tsx | 7 +- .../WindmillConfigurePage/route.tsx | 4 +- ...zure-app-configurations-oauth-redirect.tsx | 13 +- .../route-azure-key-vault-oauth-redirect.tsx | 13 +- .../route-bitbucket-oauth-redirect.tsx | 13 +- .../integrations/route-gcp-oauth-redirect.tsx | 13 +- .../route-github-oauth-redirect.tsx | 13 +- .../route-gitlab-oauth-redirect.tsx | 13 +- .../route-heroku-oauth-redirect.tsx | 13 +- .../route-netlify-oauth-redirect.tsx | 13 +- .../route-vercel-oauth-redirect.tsx | 13 +- frontend/src/pages/secret-manager/layout.tsx | 2 +- .../redirects/redirect-approval-page.tsx | 4 +- .../SecretScanningDataSourceByIdPage.tsx | 5 +- .../components/SecretScanningResourceRow.tsx | 5 +- .../components/SecretScanningScanRow.tsx | 6 +- .../route.tsx | 4 +- .../SecretScanningDataSourceRow.tsx | 7 +- .../SecretScanningDataSourcesPage/route.tsx | 2 +- .../SecretScanningFindingsPage/route.tsx | 2 +- .../secret-scanning/SettingsPage/route.tsx | 2 +- frontend/src/pages/secret-scanning/layout.tsx | 2 +- frontend/src/pages/ssh/SettingsPage/route.tsx | 2 +- .../pages/ssh/SshCaByIDPage/SshCaByIDPage.tsx | 15 +- .../src/pages/ssh/SshCaByIDPage/route.tsx | 4 +- .../ssh/SshCasPage/components/SshCaModal.tsx | 6 +- .../ssh/SshCasPage/components/SshCaTable.tsx | 11 +- frontend/src/pages/ssh/SshCasPage/route.tsx | 4 +- frontend/src/pages/ssh/SshCertsPage/route.tsx | 2 +- .../SshHostGroupDetailsByIDPage.tsx | 14 +- .../ssh/SshHostGroupDetailsByIDPage/route.tsx | 4 +- .../components/SshHostGroupsTable.tsx | 14 +- frontend/src/pages/ssh/SshHostsPage/route.tsx | 2 +- frontend/src/pages/ssh/layout.tsx | 2 +- frontend/src/routeTree.gen.ts | 6805 +++++++++-------- frontend/src/routes.ts | 64 +- 312 files changed, 4776 insertions(+), 4324 deletions(-) diff --git a/frontend/src/components/navigation/NavHeader.tsx b/frontend/src/components/navigation/NavHeader.tsx index a912980f1..837fae807 100644 --- a/frontend/src/components/navigation/NavHeader.tsx +++ b/frontend/src/components/navigation/NavHeader.tsx @@ -70,7 +70,8 @@ export default function NavHeader({ {currentOrg?.name?.charAt(0)} {currentOrg?.name} @@ -90,8 +91,8 @@ export default function NavHeader({ {pageName === "Secrets" ? ( {pageName} @@ -126,8 +127,8 @@ export default function NavHeader({
{userAvailableEnvs?.find(({ slug }) => slug === currentEnv)?.name} @@ -188,8 +189,9 @@ export default function NavHeader({
) : ( { + const { currentOrg } = useOrganization(); const [, isCopying, setIsCopying] = useTimedReset({ initialState: false }); @@ -69,8 +71,9 @@ export const SecretDashboardPathBreadcrumb = ({ ) : ( { switch (type) { case ProjectType.SecretManager: - return "/projects/secret-management/$projectId"; + return "/organizations/$orgId/projects/secret-management/$projectId"; case ProjectType.CertificateManager: - return "/projects/cert-management/$projectId"; + return "/organizations/$orgId/projects/cert-management/$projectId"; default: - return `/projects/${type}/$projectId` as const; + return `/organizations/$orgId/projects/${type}/$projectId` as const; } }; @@ -77,15 +77,15 @@ export const getProjectBaseURL = (type: ProjectType) => { export const getProjectHomePage = (type: ProjectType, environments: ProjectEnv[]) => { switch (type) { case ProjectType.SecretManager: - return "/projects/secret-management/$projectId/overview" as const; + return "/organizations/$orgId/projects/secret-management/$projectId/overview" as const; case ProjectType.CertificateManager: - return "/projects/cert-management/$projectId/policies" as const; + return "/organizations/$orgId/projects/cert-management/$projectId/policies" as const; case ProjectType.SecretScanning: - return `/projects/${type}/$projectId/data-sources` as const; + return `/organizations/$orgId/projects/${type}/$projectId/data-sources` as const; case ProjectType.PAM: - return `/projects/${type}/$projectId/accounts` as const; + return `/organizations/$orgId/projects/${type}/$projectId/accounts` as const; default: - return `/projects/${type}/$projectId/overview` as const; + return `/organizations/$orgId/projects/${type}/$projectId/overview` as const; } }; diff --git a/frontend/src/layouts/KmsLayout/KmsLayout.tsx b/frontend/src/layouts/KmsLayout/KmsLayout.tsx index eef78000a..9a5dc5aee 100644 --- a/frontend/src/layouts/KmsLayout/KmsLayout.tsx +++ b/frontend/src/layouts/KmsLayout/KmsLayout.tsx @@ -2,12 +2,13 @@ import { Link, Outlet, useLocation } from "@tanstack/react-router"; import { motion } from "framer-motion"; import { Tab, TabList, Tabs } from "@app/components/v2"; -import { useProject, useProjectPermission } from "@app/context"; +import { useOrganization, useProject, useProjectPermission } from "@app/context"; import { AssumePrivilegeModeBanner } from "../ProjectLayout/components/AssumePrivilegeModeBanner"; export const KmsLayout = () => { const { currentProject } = useProject(); + const { currentOrg } = useOrganization(); const { assumedPrivilegeDetails } = useProjectPermission(); const location = useLocation(); @@ -27,24 +28,27 @@ export const KmsLayout = () => { {({ isActive }) => Overview} {({ isActive }) => KMIP} @@ -62,16 +66,18 @@ export const KmsLayout = () => { )} {({ isActive }) => Audit Logs} diff --git a/frontend/src/layouts/OrganizationLayout/components/NavBar/Navbar.tsx b/frontend/src/layouts/OrganizationLayout/components/NavBar/Navbar.tsx index 6be963e2b..499465f0a 100644 --- a/frontend/src/layouts/OrganizationLayout/components/NavBar/Navbar.tsx +++ b/frontend/src/layouts/OrganizationLayout/components/NavBar/Navbar.tsx @@ -282,7 +282,7 @@ export const Navbar = () => {
- + infisical logo
@@ -322,7 +322,8 @@ export const Navbar = () => { type="button" onClick={async () => { navigate({ - to: "/organization/projects", + to: "/organizations/$orgId/projects", + params: { orgId: currentOrg.id }, search: (search) => ({ ...search, subOrganization: undefined }) }); if (isSubOrganization) { @@ -407,7 +408,8 @@ export const Navbar = () => { { navigate({ - to: "/organization/projects", + to: "/organizations/$orgId/projects", + params: { orgId: currentOrg.id }, search: (prev) => ({ ...prev, subOrganization: subOrg.name }) }); await router.invalidate({ sync: true }).catch(() => null); @@ -481,7 +483,7 @@ export const Navbar = () => { "min-w-6 bg-transparent text-mineshaft-200 hover:!bg-transparent hover:underline [&>svg]:!text-sub-org" )} > - + {currentOrg.subOrganization.name} @@ -511,7 +513,8 @@ export const Navbar = () => { { navigate({ - to: "/organization/projects", + to: "/organizations/$orgId/projects", + params: { orgId: currentOrg.id }, search: (prev) => ({ ...prev, subOrganization: subOrg.name }) }); await router.invalidate({ sync: true }).catch(() => null); @@ -593,7 +596,8 @@ export const Navbar = () => { isAllowed ? ( { {(isAllowed) => isAllowed ? ( {
- +
diff --git a/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupsTable.tsx b/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupsTable.tsx index 3ce5b4062..c3d850c6b 100644 --- a/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupsTable.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupsTable.tsx @@ -32,7 +32,12 @@ import { Tooltip, Tr } from "@app/components/v2"; -import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context"; +import { + ProjectPermissionActions, + ProjectPermissionSub, + useOrganization, + useProject +} from "@app/context"; import { getProjectBaseURL } from "@app/helpers/project"; import { getUserTablePreference, @@ -61,6 +66,7 @@ enum GroupsOrderBy { } export const GroupTable = ({ handlePopUpOpen }: Props) => { + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); const navigate = useNavigate(); @@ -161,6 +167,7 @@ export const GroupTable = ({ handlePopUpOpen }: Props) => { navigate({ to: `${getProjectBaseURL(currentProject.type)}/groups/$groupId` as const, params: { + orgId: currentOrg.id, projectId: currentProject.id, groupId: id } @@ -171,6 +178,7 @@ export const GroupTable = ({ handlePopUpOpen }: Props) => { navigate({ to: `${getProjectBaseURL(currentProject.type)}/groups/$groupId` as const, params: { + orgId: currentOrg.id, projectId: currentProject.id, groupId: id } diff --git a/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx b/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx index e98633368..72bae83f2 100644 --- a/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx @@ -277,6 +277,7 @@ export const IdentityTab = withProjectPermission( navigate({ to: `${getProjectBaseURL(currentProject.type)}/identities/$identityId` as const, params: { + orgId: currentOrg.id, projectId: currentProject.id, identityId: id } @@ -287,6 +288,7 @@ export const IdentityTab = withProjectPermission( navigate({ to: `${getProjectBaseURL(currentProject.type)}/identities/$identityId` as const, params: { + orgId: currentOrg.id, projectId: currentProject.id, identityId: id } diff --git a/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MemberRoleForm/MemberRoleForm.tsx b/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MemberRoleForm/MemberRoleForm.tsx index 187e1813a..aa5e9efb1 100644 --- a/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MemberRoleForm/MemberRoleForm.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MemberRoleForm/MemberRoleForm.tsx @@ -1,7 +1,7 @@ import { Link } from "@tanstack/react-router"; import { Alert, AlertDescription } from "@app/components/v2"; -import { useProject } from "@app/context"; +import { useOrganization, useProject } from "@app/context"; import { getProjectBaseURL } from "@app/helpers/project"; import { TWorkspaceUser } from "@app/hooks/api/types"; @@ -12,6 +12,7 @@ type Props = { onOpenUpgradeModal: (title: string) => void; }; export const MemberRoleForm = ({ projectMember, onOpenUpgradeModal }: Props) => { + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); return (
@@ -24,6 +25,7 @@ export const MemberRoleForm = ({ projectMember, onOpenUpgradeModal }: Props) => { select: (el) => el.groupId as string }); + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); const { data: groupMembership, isPending } = useGetWorkspaceGroupMembershipDetails( @@ -42,7 +48,8 @@ const Page = () => { { navigate({ to: `${getProjectBaseURL(currentProject.type)}/access-management` as const, params: { - projectId + projectId, + orgId: currentOrg.id }, search: { selectedTab: "identities" @@ -137,7 +138,8 @@ const Page = () => { { {(isAllowed) => isAllowed ? ( diff --git a/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx b/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx index 2c578ea4f..8064f070d 100644 --- a/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx +++ b/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx @@ -95,7 +95,8 @@ export const Page = () => { navigate({ to: `${getProjectBaseURL(currentProject.type)}/access-management` as const, params: { - projectId: currentProject.id + projectId: currentProject.id, + orgId: currentOrg.id } }); handlePopUpClose("removeMember"); @@ -116,7 +117,8 @@ export const Page = () => { { select: (el) => el.roleSlug as string }); const { currentProject } = useProject(); + const { currentOrg } = useOrganization(); const projectId = currentProject?.id || ""; + const orgId = currentOrg?.id || ""; const { data } = useGetProjectRoleBySlug(projectId, roleSlug as string); @@ -68,7 +75,8 @@ const Page = () => { navigate({ to: `${getProjectBaseURL(currentProject.type)}/access-management` as const, params: { - projectId + projectId, + orgId }, search: { selectedTab: ProjectAccessControlTabs.Roles @@ -87,7 +95,8 @@ const Page = () => { { resolver: zodResolver(schema) }); + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); const createRole = useCreateProjectRole(); @@ -83,6 +84,7 @@ const Content = ({ role, onClose }: ContentProps) => { navigate({ to: `${getProjectBaseURL(currentProject.type)}/roles/$roleSlug` as const, params: { + orgId: currentOrg.id, roleSlug: newRole.slug, projectId: currentProject.id } diff --git a/frontend/src/pages/project/RoleDetailsBySlugPage/components/RoleModal.tsx b/frontend/src/pages/project/RoleDetailsBySlugPage/components/RoleModal.tsx index 03525eac5..4fcb246ef 100644 --- a/frontend/src/pages/project/RoleDetailsBySlugPage/components/RoleModal.tsx +++ b/frontend/src/pages/project/RoleDetailsBySlugPage/components/RoleModal.tsx @@ -6,7 +6,7 @@ import { z } from "zod"; import { createNotification } from "@app/components/notifications"; import { Button, FormControl, Input, Modal, ModalContent } from "@app/components/v2"; -import { useProject } from "@app/context"; +import { useOrganization, useProject } from "@app/context"; import { getProjectBaseURL } from "@app/helpers/project"; import { useCreateProjectRole, @@ -38,6 +38,9 @@ export const RoleModal = ({ popUp, handlePopUpToggle }: Props) => { roleSlug: string; }; + const { currentOrg } = useOrganization(); + const orgId = currentOrg?.id || ""; + const { currentProject } = useProject(); const projectId = currentProject?.id || ""; @@ -93,6 +96,7 @@ export const RoleModal = ({ popUp, handlePopUpToggle }: Props) => { navigate({ to: `${getProjectBaseURL(currentProject.type)}/roles/$roleSlug` as const, params: { + orgId, roleSlug: slug, projectId } @@ -111,6 +115,7 @@ export const RoleModal = ({ popUp, handlePopUpToggle }: Props) => { navigate({ to: `${getProjectBaseURL(currentProject.type)}/roles/$roleSlug` as const, params: { + orgId, roleSlug: newRole.slug, projectId } diff --git a/frontend/src/pages/secret-manager/CommitDetailsPage/CommitDetailsPage.tsx b/frontend/src/pages/secret-manager/CommitDetailsPage/CommitDetailsPage.tsx index 705ea2663..90688778b 100644 --- a/frontend/src/pages/secret-manager/CommitDetailsPage/CommitDetailsPage.tsx +++ b/frontend/src/pages/secret-manager/CommitDetailsPage/CommitDetailsPage.tsx @@ -45,7 +45,7 @@ export const CommitDetailsPage = () => { folderId, environment: envSlug }, - search: (query: Record) => ({ + search: (query) => ({ ...query, secretPath }) @@ -62,7 +62,7 @@ export const CommitDetailsPage = () => { environment: envSlug, commitId: selectedCommitId }, - search: (query: Record) => ({ + search: (query) => ({ ...query, secretPath }) diff --git a/frontend/src/pages/secret-manager/CommitsPage/CommitsPage.tsx b/frontend/src/pages/secret-manager/CommitsPage/CommitsPage.tsx index e22b7c212..36e5c2015 100644 --- a/frontend/src/pages/secret-manager/CommitsPage/CommitsPage.tsx +++ b/frontend/src/pages/secret-manager/CommitsPage/CommitsPage.tsx @@ -46,7 +46,7 @@ export const CommitsPage = () => { environment: envSlug, commitId }, - search: (query: Record) => ({ + search: (query) => ({ ...query, secretPath }) diff --git a/frontend/src/pages/secret-manager/IntegrationsDetailsByIDPage/components/IntegrationAuditLogsSection.tsx b/frontend/src/pages/secret-manager/IntegrationsDetailsByIDPage/components/IntegrationAuditLogsSection.tsx index fcd080e65..fc0e31245 100644 --- a/frontend/src/pages/secret-manager/IntegrationsDetailsByIDPage/components/IntegrationAuditLogsSection.tsx +++ b/frontend/src/pages/secret-manager/IntegrationsDetailsByIDPage/components/IntegrationAuditLogsSection.tsx @@ -1,7 +1,7 @@ import { Link } from "@tanstack/react-router"; import { EmptyState } from "@app/components/v2"; -import { useProject, useSubscription } from "@app/context"; +import { useOrganization, useProject, useSubscription } from "@app/context"; import { EventType } from "@app/hooks/api/auditLogs/enums"; import { TIntegrationWithEnv } from "@app/hooks/api/integrations/types"; import { LogsSection } from "@app/pages/organization/AuditLogsPage/components/LogsSection"; @@ -15,6 +15,7 @@ type Props = { export const IntegrationAuditLogsSection = ({ integration }: Props) => { const { subscription } = useSubscription(); + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); const auditLogsRetentionDays = subscription?.auditLogsRetentionDays ?? 30; @@ -53,7 +54,12 @@ export const IntegrationAuditLogsSection = ({ integration }: Props) => {

Please{" "} {subscription && subscription.slug !== null ? ( - + { const navigate = useNavigate(); + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); const { t } = useTranslation(); @@ -33,7 +39,8 @@ export const IntegrationsListPage = () => { selectedTab: tab as IntegrationsListPageTabs }, params: { - projectId: currentProject.id + projectId: currentProject.id, + orgId: currentOrg.id } }); }; diff --git a/frontend/src/pages/secret-manager/IntegrationsListPage/components/CloudIntegrationSection/CloudIntegrationSection.tsx b/frontend/src/pages/secret-manager/IntegrationsListPage/components/CloudIntegrationSection/CloudIntegrationSection.tsx index 9a6db9def..ff92f9f41 100644 --- a/frontend/src/pages/secret-manager/IntegrationsListPage/components/CloudIntegrationSection/CloudIntegrationSection.tsx +++ b/frontend/src/pages/secret-manager/IntegrationsListPage/components/CloudIntegrationSection/CloudIntegrationSection.tsx @@ -24,6 +24,7 @@ import { ROUTE_PATHS } from "@app/const/routes"; import { ProjectPermissionActions, ProjectPermissionSub, + useOrganization, useProject, useProjectPermission } from "@app/context"; @@ -60,6 +61,7 @@ export const CloudIntegrationSection = ({ "deleteConfirmation" ] as const); const { permission } = useProjectPermission(); + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); const navigate = useNavigate(); @@ -138,6 +140,7 @@ export const CloudIntegrationSection = ({ navigate({ to: ROUTE_PATHS.SecretManager.IntegrationsListPage.path, params: { + orgId: currentOrg.id, projectId: currentProject.id }, search: { diff --git a/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncRow.tsx b/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncRow.tsx index 0e04281a4..5e00d62af 100644 --- a/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncRow.tsx +++ b/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncRow.tsx @@ -40,7 +40,7 @@ import { } from "@app/components/v2"; import { Badge } from "@app/components/v3"; import { ROUTE_PATHS } from "@app/const/routes"; -import { ProjectPermissionSub } from "@app/context"; +import { ProjectPermissionSub, useOrganization } from "@app/context"; import { ProjectPermissionSecretSyncActions } from "@app/context/ProjectPermissionContext/types"; import { SECRET_SYNC_MAP } from "@app/helpers/secretSyncs"; import { useToggle } from "@app/hooks"; @@ -81,6 +81,7 @@ export const SecretSyncRow = ({ projectId } = secretSync; + const { currentOrg } = useOrganization(); const { syncOption } = useSecretSyncOption(destination); const destinationName = SECRET_SYNC_MAP[destination].name; @@ -134,7 +135,8 @@ export const SecretSyncRow = ({ params: { syncId: id, destination, - projectId + projectId, + orgId: currentOrg.id } }) } diff --git a/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncsTab.tsx b/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncsTab.tsx index 24fba3b64..e584a73f7 100644 --- a/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncsTab.tsx +++ b/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncsTab.tsx @@ -9,7 +9,7 @@ import { TSecretSyncForm } from "@app/components/secret-syncs/forms/schemas"; import { Button, Spinner } from "@app/components/v2"; import { DocumentationLinkBadge } from "@app/components/v3"; import { ROUTE_PATHS } from "@app/const/routes"; -import { ProjectPermissionSub, useProject } from "@app/context"; +import { ProjectPermissionSub, useOrganization, useProject } from "@app/context"; import { ProjectPermissionSecretSyncActions } from "@app/context/ProjectPermissionContext/types"; import { usePopUp } from "@app/hooks"; import { useListSecretSyncs } from "@app/hooks/api/secretSyncs"; @@ -26,6 +26,7 @@ export const SecretSyncsTab = () => { const navigate = useNavigate(); + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); useEffect(() => { @@ -35,7 +36,8 @@ export const SecretSyncsTab = () => { navigate({ to: ROUTE_PATHS.SecretManager.IntegrationsListPage.path, params: { - projectId: currentProject.id + projectId: currentProject.id, + orgId: currentOrg.id }, search }); @@ -66,6 +68,7 @@ export const SecretSyncsTab = () => { navigate({ to: ROUTE_PATHS.SecretManager.IntegrationsListPage.path, params: { + orgId: currentOrg.id, projectId: currentProject.id }, search diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/EnvironmentTabs/EnvironmentTabs.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/EnvironmentTabs/EnvironmentTabs.tsx index f8a201717..ed8a5ae88 100644 --- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/EnvironmentTabs/EnvironmentTabs.tsx +++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/EnvironmentTabs/EnvironmentTabs.tsx @@ -24,6 +24,7 @@ import { ROUTE_PATHS } from "@app/const/routes"; import { ProjectPermissionActions, ProjectPermissionSub, + useOrganization, useProject, useSubscription } from "@app/context"; @@ -45,6 +46,7 @@ type Props = { const TABS_TO_SHOW = 5; export const EnvironmentTabs = ({ secretPath }: Props) => { + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); const currentEnv = useParams({ from: ROUTE_PATHS.SecretManager.SecretDashboardPage.id, @@ -96,7 +98,8 @@ export const EnvironmentTabs = ({ secretPath }: Props) => { to: ROUTE_PATHS.SecretManager.SecretDashboardPage.path, params: { envSlug, - projectId: currentProject.id + projectId: currentProject.id, + orgId: currentOrg.id }, search: (prev) => prev }); diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/SecretListView/SecretDetailSidebar.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/SecretListView/SecretDetailSidebar.tsx index 3cb2a59ca..5a9b522a3 100644 --- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/SecretListView/SecretDetailSidebar.tsx +++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/SecretListView/SecretDetailSidebar.tsx @@ -46,6 +46,7 @@ import { InfisicalSecretInput } from "@app/components/v2/InfisicalSecretInput"; import { ProjectPermissionActions, ProjectPermissionSub, + useOrganization, useProject, useProjectPermission, useSubscription @@ -98,6 +99,7 @@ export const SecretDetailSidebar = ({ secretPath, handleSecretShare }: Props) => { + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); const [isFieldFocused, setIsFieldFocused] = useToggle(); const queryClient = useQueryClient(); @@ -776,6 +778,7 @@ export const SecretDetailSidebar = ({ `${getProjectBaseURL(currentProject.type)}/identities/$identityId` as const } params={{ + orgId: currentOrg.id, projectId: currentProject.id, identityId: identity.id }} @@ -806,8 +809,9 @@ export const SecretDetailSidebar = ({ className="z-100" > { const navigate = useNavigate(); - const { destination, syncId, projectId } = useParams({ + const { destination, syncId, projectId, orgId } = useParams({ from: ROUTE_PATHS.SecretManager.SecretSyncDetailsByIDPage.id, select: (params) => ({ ...params, @@ -82,6 +82,7 @@ const PageContent = () => { navigate({ to: ROUTE_PATHS.SecretManager.IntegrationsListPage.path, params: { + orgId, projectId }, search: { diff --git a/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncActionTriggers.tsx b/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncActionTriggers.tsx index ad82460eb..517d1cc7c 100644 --- a/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncActionTriggers.tsx +++ b/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncActionTriggers.tsx @@ -36,7 +36,7 @@ import { } from "@app/components/v2"; import { Badge } from "@app/components/v3"; import { ROUTE_PATHS } from "@app/const/routes"; -import { ProjectPermissionSub } from "@app/context"; +import { ProjectPermissionSub, useOrganization } from "@app/context"; import { ProjectPermissionSecretSyncActions } from "@app/context/ProjectPermissionContext/types"; import { SECRET_SYNC_MAP } from "@app/helpers/secretSyncs"; import { usePopUp, useToggle } from "@app/hooks"; @@ -65,6 +65,7 @@ export const SecretSyncActionTriggers = ({ secretSync }: Props) => { const updateSync = useUpdateSecretSync(); const { destination, environment, folder } = secretSync; + const { currentOrg } = useOrganization(); const destinationName = SECRET_SYNC_MAP[destination].name; const { syncOption } = useSecretSyncOption(destination); @@ -291,6 +292,7 @@ export const SecretSyncActionTriggers = ({ secretSync }: Props) => { navigate({ to: ROUTE_PATHS.SecretManager.IntegrationsListPage.path, params: { + orgId: currentOrg.id, projectId: secretSync.projectId }, search: { diff --git a/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncAuditLogsSection.tsx b/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncAuditLogsSection.tsx index a08d88139..74011228b 100644 --- a/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncAuditLogsSection.tsx +++ b/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncAuditLogsSection.tsx @@ -2,7 +2,7 @@ import { faFingerprint } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { Link } from "@tanstack/react-router"; -import { useProject, useSubscription } from "@app/context"; +import { useOrganization, useProject, useSubscription } from "@app/context"; import { EventType } from "@app/hooks/api/auditLogs/enums"; import { TSecretSync } from "@app/hooks/api/secretSyncs"; import { LogsSection } from "@app/pages/organization/AuditLogsPage/components/LogsSection"; @@ -19,6 +19,7 @@ type Props = { export const SecretSyncAuditLogsSection = ({ secretSync }: Props) => { const { subscription } = useSubscription(); + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); const auditLogsRetentionDays = subscription?.auditLogsRetentionDays ?? 30; @@ -53,7 +54,12 @@ export const SecretSyncAuditLogsSection = ({ secretSync }: Props) => {

Please{" "} {subscription && subscription.slug !== null ? ( - + { const { code, state } = useSearch({ from: ROUTE_PATHS.SecretManager.Integratons.GitlabOauthCallbackPage.id }); + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); useEffect(() => { @@ -25,7 +26,8 @@ export const GitLabOAuthCallbackPage = () => { if (csrfToken !== storedState) { console.error("CSRF token mismatch"); navigate({ - to: "/organization/app-connections", + to: "/organizations/$orgId/app-connections", + params: { orgId: currentOrg.id }, search: { error: "invalid_state" } }); return; @@ -37,7 +39,8 @@ export const GitLabOAuthCallbackPage = () => { if (!storedFormData) { console.error("No stored form data found"); navigate({ - to: "/organization/app-connections", + to: "/organizations/$orgId/app-connections", + params: { orgId: currentOrg.id }, search: { error: "missing_form_data" } }); return; @@ -73,7 +76,8 @@ export const GitLabOAuthCallbackPage = () => { // Navigate to success page or app connections list navigate({ - to: "/organization/app-connections", + to: "/organizations/$orgId/app-connections", + params: { orgId: currentOrg.id }, search: { success: formData.isUpdate ? "connection_updated" : "connection_created", connectionId: appConnection.id @@ -82,12 +86,21 @@ export const GitLabOAuthCallbackPage = () => { } catch (err) { console.error("Error handling GitLab OAuth callback:", err); navigate({ - to: "/organization/app-connections", + to: "/organizations/$orgId/app-connections", + params: { orgId: currentOrg.id }, search: { error: "connection_failed" } }); } })(); - }, [code, state, navigate, createAppConnection, updateAppConnection, currentProject.id]); + }, [ + code, + state, + navigate, + createAppConnection, + updateAppConnection, + currentProject.id, + currentOrg.id + ]); return (

diff --git a/frontend/src/pages/secret-manager/integrations/HerokuOauthCallbackPage/HerokuOauthCallbackPage.tsx b/frontend/src/pages/secret-manager/integrations/HerokuOauthCallbackPage/HerokuOauthCallbackPage.tsx index 91e2b9d88..e2ed60d4e 100644 --- a/frontend/src/pages/secret-manager/integrations/HerokuOauthCallbackPage/HerokuOauthCallbackPage.tsx +++ b/frontend/src/pages/secret-manager/integrations/HerokuOauthCallbackPage/HerokuOauthCallbackPage.tsx @@ -2,7 +2,7 @@ import { useEffect } from "react"; import { useNavigate, useSearch } from "@tanstack/react-router"; import { ROUTE_PATHS } from "@app/const/routes"; -import { useProject } from "@app/context"; +import { useOrganization, useProject } from "@app/context"; import { useCreateAppConnection, useUpdateAppConnection } from "@app/hooks/api/appConnections"; import { HerokuConnectionMethod } from "@app/hooks/api/appConnections/types/heroku-connection"; @@ -14,7 +14,7 @@ export const HerokuOAuthCallbackPage = () => { const { code, state } = useSearch({ from: ROUTE_PATHS.SecretManager.Integratons.HerokuOauthCallbackPage.id }); - + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); useEffect(() => { @@ -25,7 +25,8 @@ export const HerokuOAuthCallbackPage = () => { if (state !== storedState) { console.error("CSRF token mismatch"); navigate({ - to: "/organization/app-connections", + to: "/organizations/$orgId/app-connections", + params: { orgId: currentOrg.id }, search: { error: "invalid_state" } }); return; @@ -39,7 +40,8 @@ export const HerokuOAuthCallbackPage = () => { if (!storedFormData) { console.error("No stored form data found"); navigate({ - to: "/organization/app-connections", + to: "/organizations/$orgId/app-connections", + params: { orgId: currentOrg.id }, search: { error: "missing_form_data" } }); return; @@ -74,7 +76,8 @@ export const HerokuOAuthCallbackPage = () => { // Navigate to success page or app connections list navigate({ - to: "/organization/app-connections", + to: "/organizations/$orgId/app-connections", + params: { orgId: currentOrg.id }, search: { success: formData.isUpdate ? "connection_updated" : "connection_created", connectionId: appConnection.id @@ -83,7 +86,8 @@ export const HerokuOAuthCallbackPage = () => { } catch (err) { console.error("Error handling Heroku OAuth callback:", err); navigate({ - to: "/organization/app-connections", + to: "/organizations/$orgId/app-connections", + params: { orgId: currentOrg.id }, search: { error: "connection_failed" } }); } diff --git a/frontend/src/pages/secret-scanning/SecretScanningDataSourcesPage/components/SecretScanningDataSourceRow.tsx b/frontend/src/pages/secret-scanning/SecretScanningDataSourcesPage/components/SecretScanningDataSourceRow.tsx index baeb143da..fc721e384 100644 --- a/frontend/src/pages/secret-scanning/SecretScanningDataSourcesPage/components/SecretScanningDataSourceRow.tsx +++ b/frontend/src/pages/secret-scanning/SecretScanningDataSourcesPage/components/SecretScanningDataSourceRow.tsx @@ -102,6 +102,7 @@ export const SecretScanningDataSourceRow = ({ navigate({ to: ROUTE_PATHS.SecretScanning.DataSourceByIdPage.path, params: { + orgId: currentOrg.id, dataSourceId: id, type, projectId From 1702766391b2700f270ac7fe01397c00df114f38 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Wed, 19 Nov 2025 20:44:02 +0530 Subject: [PATCH 04/13] fix: greptile review comments --- frontend/src/components/navigation/NavHeader.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/navigation/NavHeader.tsx b/frontend/src/components/navigation/NavHeader.tsx index 837fae807..127b1066e 100644 --- a/frontend/src/components/navigation/NavHeader.tsx +++ b/frontend/src/components/navigation/NavHeader.tsx @@ -71,7 +71,7 @@ export default function NavHeader({
{currentOrg?.name} From efd424f1a65985ce3016522c017642c53bb21d26 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Wed, 19 Nov 2025 20:44:52 +0530 Subject: [PATCH 05/13] fix: greptile review comments --- .../src/components/navigation/SecretDashboardPathBreadcrumb.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/navigation/SecretDashboardPathBreadcrumb.tsx b/frontend/src/components/navigation/SecretDashboardPathBreadcrumb.tsx index 07cf26e41..62f219da9 100644 --- a/frontend/src/components/navigation/SecretDashboardPathBreadcrumb.tsx +++ b/frontend/src/components/navigation/SecretDashboardPathBreadcrumb.tsx @@ -73,7 +73,7 @@ export const SecretDashboardPathBreadcrumb = ({ Date: Wed, 19 Nov 2025 20:57:22 +0530 Subject: [PATCH 06/13] fix: navbar suborgs navigation --- .../OrganizationLayout/components/NavBar/Navbar.tsx | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/frontend/src/layouts/OrganizationLayout/components/NavBar/Navbar.tsx b/frontend/src/layouts/OrganizationLayout/components/NavBar/Navbar.tsx index 499465f0a..36c4e2460 100644 --- a/frontend/src/layouts/OrganizationLayout/components/NavBar/Navbar.tsx +++ b/frontend/src/layouts/OrganizationLayout/components/NavBar/Navbar.tsx @@ -323,8 +323,7 @@ export const Navbar = () => { onClick={async () => { navigate({ to: "/organizations/$orgId/projects", - params: { orgId: currentOrg.id }, - search: (search) => ({ ...search, subOrganization: undefined }) + params: { orgId: currentOrg.id } }); if (isSubOrganization) { await router.invalidate({ sync: true }).catch(() => null); @@ -409,8 +408,7 @@ export const Navbar = () => { onClick={async () => { navigate({ to: "/organizations/$orgId/projects", - params: { orgId: currentOrg.id }, - search: (prev) => ({ ...prev, subOrganization: subOrg.name }) + params: { orgId: subOrg.id } }); await router.invalidate({ sync: true }).catch(() => null); }} @@ -514,8 +512,7 @@ export const Navbar = () => { onClick={async () => { navigate({ to: "/organizations/$orgId/projects", - params: { orgId: currentOrg.id }, - search: (prev) => ({ ...prev, subOrganization: subOrg.name }) + params: { orgId: subOrg.id } }); await router.invalidate({ sync: true }).catch(() => null); }} From 49cf710122497887d45f013fde8c0947ef027541 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Thu, 20 Nov 2025 01:46:40 +0530 Subject: [PATCH 07/13] fix: add orgId to OrgAdminBreakglassAccess email template and update link --- backend/src/services/auth/auth-login-service.ts | 3 ++- .../smtp/emails/OrgAdminBreakglassAccessTemplate.tsx | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/backend/src/services/auth/auth-login-service.ts b/backend/src/services/auth/auth-login-service.ts index e2f0f5f16..8e0f654a3 100644 --- a/backend/src/services/auth/auth-login-service.ts +++ b/backend/src/services/auth/auth-login-service.ts @@ -663,7 +663,8 @@ export const authLoginServiceFactory = ({ timestamp: new Date().toISOString(), ip: ipAddress, userAgent, - siteUrl: removeTrailingSlash(cfg.SITE_URL || "https://app.infisical.com") + siteUrl: removeTrailingSlash(cfg.SITE_URL || "https://app.infisical.com"), + orgId: organizationId }, template: SmtpTemplates.OrgAdminBreakglassAccess }); diff --git a/backend/src/services/smtp/emails/OrgAdminBreakglassAccessTemplate.tsx b/backend/src/services/smtp/emails/OrgAdminBreakglassAccessTemplate.tsx index ee09574b6..97ce9b522 100644 --- a/backend/src/services/smtp/emails/OrgAdminBreakglassAccessTemplate.tsx +++ b/backend/src/services/smtp/emails/OrgAdminBreakglassAccessTemplate.tsx @@ -7,6 +7,7 @@ import { BaseLink } from "./BaseLink"; interface OrgAdminBreakglassAccessTemplateProps extends Omit { email: string; timestamp: string; + orgId: string; ip: string; userAgent: string; } @@ -15,6 +16,7 @@ export const OrgAdminBreakglassAccessTemplate = ({ email, siteUrl, timestamp, + orgId, ip, userAgent }: OrgAdminBreakglassAccessTemplateProps) => { @@ -36,7 +38,7 @@ export const OrgAdminBreakglassAccessTemplate = ({ {userAgent} If you'd like to disable Admin SSO Bypass, please visit{" "} - Organization Security Settings. + Organization Security Settings. @@ -51,5 +53,6 @@ OrgAdminBreakglassAccessTemplate.PreviewProps = { "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.3.1 Safari/605.1.15", timestamp: "Tue Apr 29 2025 23:03:27 GMT+0000 (Coordinated Universal Time)", siteUrl: "https://infisical.com", - email: "august@infisical.com" + email: "august@infisical.com", + orgId: "123" } as OrgAdminBreakglassAccessTemplateProps; From 16df96ac60b16384528423aaa97887a59f8e8394 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Thu, 20 Nov 2025 19:46:06 +0530 Subject: [PATCH 08/13] fix: server redirects to new routing --- .../access-approval-request-service.ts | 6 +-- .../ee/services/license/license-service.ts | 6 +-- .../secret-approval-request-fns.ts | 4 +- .../secret-approval-request-service.ts | 6 +-- .../secret-rotation-v2-queue.ts | 2 +- .../secret-scanning-v2-queue.ts | 4 +- .../org/org-membership-user-factory.ts | 2 +- .../microsoft-teams/microsoft-teams-fns.ts | 7 +-- .../microsoft-teams-service.ts | 2 +- .../src/services/project/project-service.ts | 2 +- .../secret-sharing/secret-sharing-service.ts | 2 +- .../services/secret-sync/secret-sync-queue.ts | 2 +- backend/src/services/secret/secret-queue.ts | 2 +- .../service-token/service-token-dal.ts | 51 +++++++++++-------- .../service-token/service-token-service.ts | 2 +- 15 files changed, 54 insertions(+), 46 deletions(-) diff --git a/backend/src/ee/services/access-approval-request/access-approval-request-service.ts b/backend/src/ee/services/access-approval-request/access-approval-request-service.ts index 4b2608c24..6d97e3b9e 100644 --- a/backend/src/ee/services/access-approval-request/access-approval-request-service.ts +++ b/backend/src/ee/services/access-approval-request/access-approval-request-service.ts @@ -243,7 +243,7 @@ export const accessApprovalRequestServiceFactory = ({ ); const requesterFullName = `${requestedByUser.firstName} ${requestedByUser.lastName}`; - const projectPath = `/projects/secret-management/${project.id}`; + const projectPath = `/organizations/${project.orgId}/projects/secret-management/${project.id}`; const approvalPath = `${projectPath}/approval`; const approvalUrl = `${cfg.SITE_URL}${approvalPath}`; @@ -399,7 +399,7 @@ export const accessApprovalRequestServiceFactory = ({ const requesterFullName = `${requestedByUser.firstName} ${requestedByUser.lastName}`; const editorFullName = `${editedByUser.firstName} ${editedByUser.lastName}`; - const projectPath = `/projects/secret-management/${project.id}`; + const projectPath = `/organizations/${project.orgId}/projects/secret-management/${project.id}`; const approvalPath = `${projectPath}/approval`; const approvalUrl = `${cfg.SITE_URL}${approvalPath}`; @@ -766,7 +766,7 @@ export const accessApprovalRequestServiceFactory = ({ .map((appUser) => appUser.email) .filter((email): email is string => !!email); - const approvalPath = `/projects/secret-management/${project.id}/approval`; + const approvalPath = `/organizations/${project.orgId}/projects/secret-management/${project.id}/approval`; const approvalUrl = `${cfg.SITE_URL}${approvalPath}`; await notificationService.createUserNotifications( diff --git a/backend/src/ee/services/license/license-service.ts b/backend/src/ee/services/license/license-service.ts index bbd6147ed..93770ce64 100644 --- a/backend/src/ee/services/license/license-service.ts +++ b/backend/src/ee/services/license/license-service.ts @@ -445,8 +445,8 @@ export const licenseServiceFactory = ({ } = await licenseServerCloudApi.request.post( `/api/license-server/v1/customers/${organization.customerId}/billing-details/payment-methods`, { - success_url: `${envConfig.SITE_URL}/organization/billing`, - cancel_url: `${envConfig.SITE_URL}/organization/billing` + success_url: `${envConfig.SITE_URL}/organizations/${orgId}/billing`, + cancel_url: `${envConfig.SITE_URL}/organizations/${orgId}/billing` } ); @@ -459,7 +459,7 @@ export const licenseServiceFactory = ({ } = await licenseServerCloudApi.request.post( `/api/license-server/v1/customers/${organization.customerId}/billing-details/billing-portal`, { - return_url: `${envConfig.SITE_URL}/organization/billing` + return_url: `${envConfig.SITE_URL}/organizations/${orgId}/billing` } ); diff --git a/backend/src/ee/services/secret-approval-request/secret-approval-request-fns.ts b/backend/src/ee/services/secret-approval-request/secret-approval-request-fns.ts index 8f1c3d060..69d36e66f 100644 --- a/backend/src/ee/services/secret-approval-request/secret-approval-request-fns.ts +++ b/backend/src/ee/services/secret-approval-request/secret-approval-request-fns.ts @@ -37,7 +37,7 @@ export const sendApprovalEmailsFn = async ({ type: NotificationType.SECRET_CHANGE_REQUEST, title: "Secret Change Request", body: `You have a new secret change request pending your review for the project **${project.name}** in the organization **${project.organization.name}**.`, - link: `/projects/secret-management/${project.id}/approval` + link: `/organizations/${project.orgId}/projects/secret-management/${project.id}/approval` })) ); @@ -51,7 +51,7 @@ export const sendApprovalEmailsFn = async ({ firstName: reviewerUser.firstName, projectName: project.name, organizationName: project.organization.name, - approvalUrl: `${cfg.SITE_URL}/projects/secret-management/${project.id}/approval}` + approvalUrl: `${cfg.SITE_URL}/organizations/${project.orgId}/projects/secret-management/${project.id}/approval}` }, template: SmtpTemplates.SecretApprovalRequestNeedsReview }); diff --git a/backend/src/ee/services/secret-approval-request/secret-approval-request-service.ts b/backend/src/ee/services/secret-approval-request/secret-approval-request-service.ts index e6455c113..6b0f7e0ed 100644 --- a/backend/src/ee/services/secret-approval-request/secret-approval-request-service.ts +++ b/backend/src/ee/services/secret-approval-request/secret-approval-request-service.ts @@ -1037,7 +1037,7 @@ export const secretApprovalRequestServiceFactory = ({ bypassReason, secretPath: policy.secretPath, environment: env.name, - approvalUrl: `${cfg.SITE_URL}/projects/secret-management/${project.id}/approval` + approvalUrl: `${cfg.SITE_URL}/organizations/${project.orgId}/projects/secret-management/${project.id}/approval` }, template: SmtpTemplates.AccessSecretRequestBypassed }); @@ -1416,7 +1416,7 @@ export const secretApprovalRequestServiceFactory = ({ const env = await projectEnvDAL.findOne({ id: policy.envId }); const user = await userDAL.findById(actorId); - const projectPath = `/projects/secret-management/${projectId}`; + const projectPath = `/organizations/${actorOrgId}/projects/secret-management/${projectId}`; const approvalPath = `${projectPath}/approval`; const cfg = getConfig(); const approvalUrl = `${cfg.SITE_URL}${approvalPath}`; @@ -1792,7 +1792,7 @@ export const secretApprovalRequestServiceFactory = ({ const user = await userDAL.findById(actorId); const env = await projectEnvDAL.findOne({ id: policy.envId }); - const projectPath = `/projects/secret-management/${project.id}`; + const projectPath = `/organizations/${actorOrgId}/projects/secret-management/${project.id}`; const approvalPath = `${projectPath}/approval`; const cfg = getConfig(); const approvalUrl = `${cfg.SITE_URL}${approvalPath}`; diff --git a/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-queue.ts b/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-queue.ts index f653802b6..3c902e112 100644 --- a/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-queue.ts +++ b/backend/src/ee/services/secret-rotation-v2/secret-rotation-v2-queue.ts @@ -156,7 +156,7 @@ export const secretRotationV2QueueServiceFactory = async ({ const rotationType = SECRET_ROTATION_NAME_MAP[type as SecretRotation]; - const rotationPath = `/projects/secret-management/${projectId}/secrets/${environment.slug}`; + const rotationPath = `/organizations/${project.orgId}/projects/secret-management/${projectId}/secrets/${environment.slug}`; await notificationService.createUserNotifications( projectAdmins.map((admin) => ({ diff --git a/backend/src/ee/services/secret-scanning-v2/secret-scanning-v2-queue.ts b/backend/src/ee/services/secret-scanning-v2/secret-scanning-v2-queue.ts index 406c25e03..2b6ab6a20 100644 --- a/backend/src/ee/services/secret-scanning-v2/secret-scanning-v2-queue.ts +++ b/backend/src/ee/services/secret-scanning-v2/secret-scanning-v2-queue.ts @@ -637,7 +637,7 @@ export const secretScanningV2QueueServiceFactory = async ({ numberOfSecrets: payload.numberOfSecrets, isDiffScan: payload.isDiffScan, url: encodeURI( - `${appCfg.SITE_URL}/projects/secret-scanning/${projectId}/findings?search=scanId:${payload.scanId}` + `${appCfg.SITE_URL}/organizations/${project.orgId}/projects/secret-scanning/${projectId}/findings?search=scanId:${payload.scanId}` ), timestamp } @@ -648,7 +648,7 @@ export const secretScanningV2QueueServiceFactory = async ({ timestamp, errorMessage: payload.errorMessage, url: encodeURI( - `${appCfg.SITE_URL}/projects/secret-scanning/${projectId}/data-sources/${dataSource.type}/${dataSource.id}` + `${appCfg.SITE_URL}/organizations/${project.orgId}/projects/secret-scanning/${projectId}/data-sources/${dataSource.type}/${dataSource.id}` ) } }); diff --git a/backend/src/services/membership-user/org/org-membership-user-factory.ts b/backend/src/services/membership-user/org/org-membership-user-factory.ts index d21b27b69..deb819c7a 100644 --- a/backend/src/services/membership-user/org/org-membership-user-factory.ts +++ b/backend/src/services/membership-user/org/org-membership-user-factory.ts @@ -129,7 +129,7 @@ export const newOrgMembershipUserFactory = ({ recipients: emails as string[], substitutions: { subOrganizationName: orgDetails.slug, - callback_url: `${appCfg.SITE_URL}/organization/projects?subOrganization=${orgDetails.slug}` + callback_url: `${appCfg.SITE_URL}/organizations/${dto.permission.orgId}/projects?subOrganization=${orgDetails.slug}` } }); } else { diff --git a/backend/src/services/microsoft-teams/microsoft-teams-fns.ts b/backend/src/services/microsoft-teams/microsoft-teams-fns.ts index e940fda54..0fcfbbe01 100644 --- a/backend/src/services/microsoft-teams/microsoft-teams-fns.ts +++ b/backend/src/services/microsoft-teams/microsoft-teams-fns.ts @@ -357,7 +357,7 @@ export const isBotInstalledInTenant = async ( } }; -export const buildTeamsPayload = (notification: TNotification) => { +export const buildTeamsPayload = (orgId: string, notification: TNotification) => { const appCfg = getConfig(); switch (notification.type) { @@ -402,7 +402,7 @@ export const buildTeamsPayload = (notification: TNotification) => { { type: "Action.OpenUrl", title: "View request in Infisical", - url: `${appCfg.SITE_URL}/projects/secret-management/${payload.projectId}/approval?requestId=${payload.requestId}` + url: `${appCfg.SITE_URL}/organizations/${orgId}/projects/secret-management/${payload.projectId}/approval?requestId=${payload.requestId}` } ] }; @@ -590,10 +590,11 @@ export class TeamsBot extends TeamsActivityHandler { tenantId: string, channelId: string, teamId: string, + orgId: string, notification: TNotification ) { try { - const { adaptiveCard } = buildTeamsPayload(notification); + const { adaptiveCard } = buildTeamsPayload(orgId, notification); const adaptiveCardActivity = { type: "message", diff --git a/backend/src/services/microsoft-teams/microsoft-teams-service.ts b/backend/src/services/microsoft-teams/microsoft-teams-service.ts index ff17daa75..a9d1af840 100644 --- a/backend/src/services/microsoft-teams/microsoft-teams-service.ts +++ b/backend/src/services/microsoft-teams/microsoft-teams-service.ts @@ -759,7 +759,7 @@ export const microsoftTeamsServiceFactory = ({ }); for await (const channelId of target.channelIds) { - await teamsBot.sendMessageToChannel(botAccessToken, tenantId, channelId, target.teamId, notification); + await teamsBot.sendMessageToChannel(botAccessToken, tenantId, channelId, target.teamId, orgId, notification); } }; diff --git a/backend/src/services/project/project-service.ts b/backend/src/services/project/project-service.ts index 188c985fb..d30462e9b 100644 --- a/backend/src/services/project/project-service.ts +++ b/backend/src/services/project/project-service.ts @@ -1984,7 +1984,7 @@ export const projectServiceFactory = ({ projectTypeUrl = "cert-management"; } - const callbackPath = `/projects/${projectTypeUrl}/${project.id}/access-management?selectedTab=members&requesterEmail=${userDetails.email}`; + const callbackPath = `/organizations/${project.orgId}/projects/${projectTypeUrl}/${project.id}/access-management?selectedTab=members&requesterEmail=${userDetails.email}`; await notificationService.createUserNotifications( projectMembers diff --git a/backend/src/services/secret-sharing/secret-sharing-service.ts b/backend/src/services/secret-sharing/secret-sharing-service.ts index 87dd207f1..67170e5f6 100644 --- a/backend/src/services/secret-sharing/secret-sharing-service.ts +++ b/backend/src/services/secret-sharing/secret-sharing-service.ts @@ -391,7 +391,7 @@ export const secretSharingServiceFactory = ({ substitutions: { name: secretRequest.name, respondentUsername, - secretRequestUrl: `${appCfg.SITE_URL}/organization/secret-sharing?selectedTab=request-secret` + secretRequestUrl: `${appCfg.SITE_URL}/organizations/${secretRequest.orgId}/secret-sharing?selectedTab=request-secret` }, template: SmtpTemplates.SecretRequestCompleted }); diff --git a/backend/src/services/secret-sync/secret-sync-queue.ts b/backend/src/services/secret-sync/secret-sync-queue.ts index f6e23dded..fd15dc029 100644 --- a/backend/src/services/secret-sync/secret-sync-queue.ts +++ b/backend/src/services/secret-sync/secret-sync-queue.ts @@ -932,7 +932,7 @@ export const secretSyncQueueFactory = ({ break; } - const baseProjectPath = `/projects/secret-management/${projectId}`; + const baseProjectPath = `/organizations/${project.orgId}/projects/secret-management/${projectId}`; const overviewPath = `${baseProjectPath}/overview`; const syncPath = `${baseProjectPath}/integrations/secret-syncs/${destination}/${secretSync.id}`; diff --git a/backend/src/services/secret/secret-queue.ts b/backend/src/services/secret/secret-queue.ts index 61507d127..eefa0764f 100644 --- a/backend/src/services/secret/secret-queue.ts +++ b/backend/src/services/secret/secret-queue.ts @@ -742,7 +742,7 @@ export const secretQueueFactory = ({ environment: jobPayload.environmentName, count: jobPayload.count, projectName: project.name, - integrationUrl: `${appCfg.SITE_URL}/projects/secret-management/${project.id}/integrations?selectedTab=native-integrations` + integrationUrl: `${appCfg.SITE_URL}/organizations/${project.orgId}/projects/secret-management/${project.id}/integrations?selectedTab=native-integrations` } }); } diff --git a/backend/src/services/service-token/service-token-dal.ts b/backend/src/services/service-token/service-token-dal.ts index adb2f325a..ae2cd3574 100644 --- a/backend/src/services/service-token/service-token-dal.ts +++ b/backend/src/services/service-token/service-token-dal.ts @@ -30,28 +30,35 @@ export const serviceTokenDALFactory = (db: TDbClient) => { const findExpiringTokens = async (tx?: Knex, batchSize = 500, offset = 0) => { try { - const batch: { name: string; projectName: string; createdByEmail: string; id: string; projectId: string }[] = - await (tx || db.replicaNode())(TableName.ServiceToken) - .leftJoin( - TableName.Users, - `${TableName.Users}.id`, - db.raw(`${TableName.ServiceToken}."createdBy"::uuid`) - ) - .join(TableName.Project, `${TableName.Project}.id`, `${TableName.ServiceToken}.projectId`) - .whereRaw( - `${TableName.ServiceToken}."expiresAt" < NOW() + INTERVAL '1 day' AND ${TableName.ServiceToken}."expiryNotificationSent" = false` - ) - .whereNotNull(`${TableName.Users}.email`) - .select( - db.ref("id").withSchema(TableName.ServiceToken), - db.ref("name").withSchema(TableName.ServiceToken), - db.ref("projectId").withSchema(TableName.ServiceToken), - db.ref("createdBy").withSchema(TableName.ServiceToken), - db.ref("email").withSchema(TableName.Users).as("createdByEmail"), - db.ref("name").withSchema(TableName.Project).as("projectName") - ) - .limit(batchSize) - .offset(offset); + const batch: { + name: string; + projectName: string; + createdByEmail: string; + id: string; + projectId: string; + orgId: string; + }[] = await (tx || db.replicaNode())(TableName.ServiceToken) + .leftJoin( + TableName.Users, + `${TableName.Users}.id`, + db.raw(`${TableName.ServiceToken}."createdBy"::uuid`) + ) + .join(TableName.Project, `${TableName.Project}.id`, `${TableName.ServiceToken}.projectId`) + .whereRaw( + `${TableName.ServiceToken}."expiresAt" < NOW() + INTERVAL '1 day' AND ${TableName.ServiceToken}."expiryNotificationSent" = false` + ) + .whereNotNull(`${TableName.Users}.email`) + .select( + db.ref("id").withSchema(TableName.ServiceToken), + db.ref("name").withSchema(TableName.ServiceToken), + db.ref("projectId").withSchema(TableName.ServiceToken), + db.ref("createdBy").withSchema(TableName.ServiceToken), + db.ref("email").withSchema(TableName.Users).as("createdByEmail"), + db.ref("name").withSchema(TableName.Project).as("projectName"), + db.ref("orgId").withSchema(TableName.Project).as("orgId") + ) + .limit(batchSize) + .offset(offset); return batch; } catch (err) { diff --git a/backend/src/services/service-token/service-token-service.ts b/backend/src/services/service-token/service-token-service.ts index 081b99208..de759eb9a 100644 --- a/backend/src/services/service-token/service-token-service.ts +++ b/backend/src/services/service-token/service-token-service.ts @@ -225,7 +225,7 @@ export const serviceTokenServiceFactory = ({ substitutions: { tokenName: token.name, projectName: token.projectName, - url: `${appCfg.SITE_URL}/projects/secret-management/${token.projectId}/access-management?selectedTab=service-tokens` + url: `${appCfg.SITE_URL}/organizations/${token.orgId}/projects/secret-management/${token.projectId}/access-management?selectedTab=service-tokens` } }); await serviceTokenDAL.update({ id: token.id }, { expiryNotificationSent: true }); From e022f730eafb5aafc159a24638b23bdf15151cd8 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Thu, 20 Nov 2025 20:24:19 +0530 Subject: [PATCH 09/13] fix: added routes --- .../src/pages/auth/LoginPage/Login.utils.tsx | 2 +- .../auth/SelectOrgPage/SelectOrgSection.tsx | 2 +- .../src/pages/middlewares/authenticate.tsx | 2 +- .../pages/organization/NoOrgPage/route.tsx | 2 +- .../pages/redirects/organization-redirect.tsx | 22 + .../src/pages/redirects/project-redirect.tsx | 32 + ...zure-app-configurations-oauth-redirect.tsx | 9 +- .../route-azure-key-vault-oauth-redirect.tsx | 9 +- .../route-bitbucket-oauth-redirect.tsx | 9 +- .../integrations/route-gcp-oauth-redirect.tsx | 9 +- .../route-github-oauth-redirect.tsx | 9 +- .../route-gitlab-oauth-redirect.tsx | 9 +- .../route-heroku-oauth-redirect.tsx | 9 +- .../route-netlify-oauth-redirect.tsx | 9 +- .../route-vercel-oauth-redirect.tsx | 9 +- frontend/src/routeTree.gen.ts | 723 ++++++++++-------- frontend/src/routes.ts | 6 +- 17 files changed, 494 insertions(+), 378 deletions(-) create mode 100644 frontend/src/pages/redirects/organization-redirect.tsx create mode 100644 frontend/src/pages/redirects/project-redirect.tsx diff --git a/frontend/src/pages/auth/LoginPage/Login.utils.tsx b/frontend/src/pages/auth/LoginPage/Login.utils.tsx index 34032bd6d..06a897b5a 100644 --- a/frontend/src/pages/auth/LoginPage/Login.utils.tsx +++ b/frontend/src/pages/auth/LoginPage/Login.utils.tsx @@ -30,7 +30,7 @@ export const navigateUserToOrg = async (navigate: NavigateFn, organizationId?: s } else { // user is not part of any non-auth enforced orgs localStorage.removeItem("orgData.id"); - navigate({ to: "/organization/none" }); + navigate({ to: "/organizations/none" }); } }; diff --git a/frontend/src/pages/auth/SelectOrgPage/SelectOrgSection.tsx b/frontend/src/pages/auth/SelectOrgPage/SelectOrgSection.tsx index 4a7ef739e..2a3e9c554 100644 --- a/frontend/src/pages/auth/SelectOrgPage/SelectOrgSection.tsx +++ b/frontend/src/pages/auth/SelectOrgPage/SelectOrgSection.tsx @@ -222,7 +222,7 @@ export const SelectOrganizationSection = () => { // Case: User has no organizations. // This can happen if the user was previously a member, but the organization was deleted or the user was removed. if (organizations.data.length === 0) { - navigate({ to: "/organization/none" }); + navigate({ to: "/organizations/none" }); } else if (organizations.data.length === 1) { if (callbackPort) { handleCliRedirect(); diff --git a/frontend/src/pages/middlewares/authenticate.tsx b/frontend/src/pages/middlewares/authenticate.tsx index 03005ce05..3998dde63 100644 --- a/frontend/src/pages/middlewares/authenticate.tsx +++ b/frontend/src/pages/middlewares/authenticate.tsx @@ -44,7 +44,7 @@ export const Route = createFileRoute("/_authenticate")({ if ( !data.organizationId && location.pathname !== ROUTE_PATHS.Auth.PasswordSetupPage.path && - location.pathname !== "/organization/none" + location.pathname !== "/organizations/none" ) { throw redirect({ to: "/login/select-organization" }); } diff --git a/frontend/src/pages/organization/NoOrgPage/route.tsx b/frontend/src/pages/organization/NoOrgPage/route.tsx index 5d34fed93..597fcc931 100644 --- a/frontend/src/pages/organization/NoOrgPage/route.tsx +++ b/frontend/src/pages/organization/NoOrgPage/route.tsx @@ -2,6 +2,6 @@ import { createFileRoute } from "@tanstack/react-router"; import { NoOrgPage } from "./NoOrgPage"; -export const Route = createFileRoute("/_authenticate/organization/none")({ +export const Route = createFileRoute("/_authenticate/organizations/none")({ component: NoOrgPage }); diff --git a/frontend/src/pages/redirects/organization-redirect.tsx b/frontend/src/pages/redirects/organization-redirect.tsx new file mode 100644 index 000000000..d13cc69b8 --- /dev/null +++ b/frontend/src/pages/redirects/organization-redirect.tsx @@ -0,0 +1,22 @@ +import { createFileRoute, redirect } from "@tanstack/react-router"; + +export const Route = createFileRoute("/_authenticate/_inject-org-details/organization/$")({ + beforeLoad: ({ context, params, search }) => { + const orgId = context.organizationId; + + if (!orgId) { + throw redirect({ + to: "/login/select-organization" + }); + } + + // eslint-disable-next-line no-underscore-dangle + const remainingPath = params._splat || ""; + + throw redirect({ + to: `/organizations/$orgId/${remainingPath}` as const, + params: { orgId }, + search + }); + } +}); diff --git a/frontend/src/pages/redirects/project-redirect.tsx b/frontend/src/pages/redirects/project-redirect.tsx new file mode 100644 index 000000000..a893dc131 --- /dev/null +++ b/frontend/src/pages/redirects/project-redirect.tsx @@ -0,0 +1,32 @@ +import { createFileRoute, redirect } from "@tanstack/react-router"; + +import { localStorageService } from "@app/helpers/localStorage"; + +export const Route = createFileRoute("/_authenticate/_inject-org-details/projects/$")({ + beforeLoad: ({ context, params, search }) => { + const orgId = context.organizationId; + + if (!orgId) { + throw redirect({ + to: "/login/select-organization" + }); + } + + // eslint-disable-next-line no-underscore-dangle + const remainingPath = params._splat || ""; + const projectId = localStorageService.getIintegrationProjectId(); + + if (!projectId) { + throw redirect({ + to: "/organizations/$orgId/projects", + params: { orgId } + }); + } + + throw redirect({ + to: `/organizations/$orgId/projects/${remainingPath}` as const, + params: { orgId, projectId }, + search + }); + } +}); diff --git a/frontend/src/pages/secret-manager/integrations/route-azure-app-configurations-oauth-redirect.tsx b/frontend/src/pages/secret-manager/integrations/route-azure-app-configurations-oauth-redirect.tsx index a353f267e..aadb0ee09 100644 --- a/frontend/src/pages/secret-manager/integrations/route-azure-app-configurations-oauth-redirect.tsx +++ b/frontend/src/pages/secret-manager/integrations/route-azure-app-configurations-oauth-redirect.tsx @@ -7,10 +7,11 @@ import { localStorageService } from "@app/helpers/localStorage"; import { AzureAppConfigurationOauthCallbackPageQueryParamsSchema } from "./AzureAppConfigurationOauthCallbackPage/route"; export const Route = createFileRoute( - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/azure-app-configuration/oauth2/callback" + "/_authenticate/_inject-org-details/_org-layout/integrations/azure-app-configuration/oauth2/callback" )({ validateSearch: zodValidator(AzureAppConfigurationOauthCallbackPageQueryParamsSchema), - beforeLoad: ({ search, params }) => { + beforeLoad: ({ context, search }) => { + const orgId = context.organizationId; const projectId = localStorageService.getIintegrationProjectId(); if (!projectId) { createNotification({ @@ -20,12 +21,12 @@ export const Route = createFileRoute( }); throw redirect({ to: "/organizations/$orgId/projects", - params: { orgId: params.orgId } + params: { orgId } }); } throw redirect({ to: "/organizations/$orgId/projects/secret-management/$projectId/integrations/azure-app-configuration/oauth2/callback", - params: { orgId: params.orgId, projectId }, + params: { orgId, projectId }, search }); } diff --git a/frontend/src/pages/secret-manager/integrations/route-azure-key-vault-oauth-redirect.tsx b/frontend/src/pages/secret-manager/integrations/route-azure-key-vault-oauth-redirect.tsx index 6dd5ba9a3..70ac057f6 100644 --- a/frontend/src/pages/secret-manager/integrations/route-azure-key-vault-oauth-redirect.tsx +++ b/frontend/src/pages/secret-manager/integrations/route-azure-key-vault-oauth-redirect.tsx @@ -7,10 +7,11 @@ import { localStorageService } from "@app/helpers/localStorage"; import { AzureKeyVaultOauthCallbackQueryParamsSchema } from "./AzureKeyVaultOauthCallbackPage/route"; export const Route = createFileRoute( - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/azure-key-vault/oauth2/callback" + "/_authenticate/_inject-org-details/_org-layout/integrations/azure-key-vault/oauth2/callback" )({ validateSearch: zodValidator(AzureKeyVaultOauthCallbackQueryParamsSchema), - beforeLoad: ({ search, params }) => { + beforeLoad: ({ context, search }) => { + const orgId = context.organizationId; const projectId = localStorageService.getIintegrationProjectId(); if (!projectId) { createNotification({ @@ -20,12 +21,12 @@ export const Route = createFileRoute( }); throw redirect({ to: "/organizations/$orgId/projects", - params: { orgId: params.orgId } + params: { orgId } }); } throw redirect({ to: "/organizations/$orgId/projects/secret-management/$projectId/integrations/azure-key-vault/oauth2/callback", - params: { orgId: params.orgId, projectId }, + params: { orgId, projectId }, search }); } diff --git a/frontend/src/pages/secret-manager/integrations/route-bitbucket-oauth-redirect.tsx b/frontend/src/pages/secret-manager/integrations/route-bitbucket-oauth-redirect.tsx index 1f13a902c..4eef0cc1d 100644 --- a/frontend/src/pages/secret-manager/integrations/route-bitbucket-oauth-redirect.tsx +++ b/frontend/src/pages/secret-manager/integrations/route-bitbucket-oauth-redirect.tsx @@ -7,10 +7,11 @@ import { localStorageService } from "@app/helpers/localStorage"; import { BitbucketOauthCallbackQueryParamsSchema } from "./BitbucketOauthCallbackPage/route"; export const Route = createFileRoute( - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/bitbucket/oauth2/callback" + "/_authenticate/_inject-org-details/_org-layout/integrations/bitbucket/oauth2/callback" )({ validateSearch: zodValidator(BitbucketOauthCallbackQueryParamsSchema), - beforeLoad: ({ search, params }) => { + beforeLoad: ({ context, search }) => { + const orgId = context.organizationId; const projectId = localStorageService.getIintegrationProjectId(); if (!projectId) { createNotification({ @@ -20,12 +21,12 @@ export const Route = createFileRoute( }); throw redirect({ to: "/organizations/$orgId/projects", - params: { orgId: params.orgId } + params: { orgId } }); } throw redirect({ to: "/organizations/$orgId/projects/secret-management/$projectId/integrations/bitbucket/oauth2/callback", - params: { orgId: params.orgId, projectId }, + params: { orgId, projectId }, search }); } diff --git a/frontend/src/pages/secret-manager/integrations/route-gcp-oauth-redirect.tsx b/frontend/src/pages/secret-manager/integrations/route-gcp-oauth-redirect.tsx index b84bbc817..3cf8707c9 100644 --- a/frontend/src/pages/secret-manager/integrations/route-gcp-oauth-redirect.tsx +++ b/frontend/src/pages/secret-manager/integrations/route-gcp-oauth-redirect.tsx @@ -7,10 +7,11 @@ import { localStorageService } from "@app/helpers/localStorage"; import { GcpSecretManagerOAuthCallbackPageQueryParamsSchema } from "./GcpSecretManagerOauthCallbackPage/route"; export const Route = createFileRoute( - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/gcp-secret-manager/oauth2/callback" + "/_authenticate/_inject-org-details/_org-layout/integrations/gcp-secret-manager/oauth2/callback" )({ validateSearch: zodValidator(GcpSecretManagerOAuthCallbackPageQueryParamsSchema), - beforeLoad: ({ search, params }) => { + beforeLoad: ({ context, search }) => { + const orgId = context.organizationId; const projectId = localStorageService.getIintegrationProjectId(); if (!projectId) { createNotification({ @@ -20,12 +21,12 @@ export const Route = createFileRoute( }); throw redirect({ to: "/organizations/$orgId/projects", - params: { orgId: params.orgId } + params: { orgId } }); } throw redirect({ to: "/organizations/$orgId/projects/secret-management/$projectId/integrations/gcp-secret-manager/oauth2/callback", - params: { orgId: params.orgId, projectId }, + params: { orgId, projectId }, search }); } diff --git a/frontend/src/pages/secret-manager/integrations/route-github-oauth-redirect.tsx b/frontend/src/pages/secret-manager/integrations/route-github-oauth-redirect.tsx index c72a0886e..809047952 100644 --- a/frontend/src/pages/secret-manager/integrations/route-github-oauth-redirect.tsx +++ b/frontend/src/pages/secret-manager/integrations/route-github-oauth-redirect.tsx @@ -7,10 +7,11 @@ import { localStorageService } from "@app/helpers/localStorage"; import { GithubOAuthCallbackPageQueryParamsSchema } from "./GithubOauthCallbackPage/route"; export const Route = createFileRoute( - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/github/oauth2/callback" + "/_authenticate/_inject-org-details/_org-layout/integrations/github/oauth2/callback" )({ validateSearch: zodValidator(GithubOAuthCallbackPageQueryParamsSchema), - beforeLoad: ({ search, params }) => { + beforeLoad: ({ context, search }) => { + const orgId = context.organizationId; const projectId = localStorageService.getIintegrationProjectId(); if (!projectId) { createNotification({ @@ -20,12 +21,12 @@ export const Route = createFileRoute( }); throw redirect({ to: "/organizations/$orgId/projects", - params: { orgId: params.orgId } + params: { orgId } }); } throw redirect({ to: "/organizations/$orgId/projects/secret-management/$projectId/integrations/github/oauth2/callback", - params: { orgId: params.orgId, projectId }, + params: { orgId, projectId }, search }); } diff --git a/frontend/src/pages/secret-manager/integrations/route-gitlab-oauth-redirect.tsx b/frontend/src/pages/secret-manager/integrations/route-gitlab-oauth-redirect.tsx index ab5fca560..ae7dac3f4 100644 --- a/frontend/src/pages/secret-manager/integrations/route-gitlab-oauth-redirect.tsx +++ b/frontend/src/pages/secret-manager/integrations/route-gitlab-oauth-redirect.tsx @@ -7,10 +7,11 @@ import { localStorageService } from "@app/helpers/localStorage"; import { GitlabOAuthCallbackPageQueryParamsSchema } from "./GitlabOauthCallbackPage/route"; export const Route = createFileRoute( - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/gitlab/oauth2/callback" + "/_authenticate/_inject-org-details/_org-layout/integrations/gitlab/oauth2/callback" )({ validateSearch: zodValidator(GitlabOAuthCallbackPageQueryParamsSchema), - beforeLoad: ({ search, params }) => { + beforeLoad: ({ context, search }) => { + const orgId = context.organizationId; const projectId = localStorageService.getIintegrationProjectId(); if (!projectId) { createNotification({ @@ -20,12 +21,12 @@ export const Route = createFileRoute( }); throw redirect({ to: "/organizations/$orgId/projects", - params: { orgId: params.orgId } + params: { orgId } }); } throw redirect({ to: "/organizations/$orgId/projects/secret-management/$projectId/integrations/gitlab/oauth2/callback", - params: { orgId: params.orgId, projectId }, + params: { orgId, projectId }, search }); } diff --git a/frontend/src/pages/secret-manager/integrations/route-heroku-oauth-redirect.tsx b/frontend/src/pages/secret-manager/integrations/route-heroku-oauth-redirect.tsx index 84f35b686..aeb2de876 100644 --- a/frontend/src/pages/secret-manager/integrations/route-heroku-oauth-redirect.tsx +++ b/frontend/src/pages/secret-manager/integrations/route-heroku-oauth-redirect.tsx @@ -7,10 +7,11 @@ import { localStorageService } from "@app/helpers/localStorage"; import { HerokuOAuthCallbackPageQueryParamsSchema } from "./HerokuOauthCallbackPage/route"; export const Route = createFileRoute( - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/heroku/oauth2/callback" + "/_authenticate/_inject-org-details/_org-layout/integrations/heroku/oauth2/callback" )({ validateSearch: zodValidator(HerokuOAuthCallbackPageQueryParamsSchema), - beforeLoad: ({ search, params }) => { + beforeLoad: ({ context, search }) => { + const orgId = context.organizationId; const projectId = localStorageService.getIintegrationProjectId(); if (!projectId) { createNotification({ @@ -20,12 +21,12 @@ export const Route = createFileRoute( }); throw redirect({ to: "/organizations/$orgId/projects", - params: { orgId: params.orgId } + params: { orgId } }); } throw redirect({ to: "/organizations/$orgId/projects/secret-management/$projectId/integrations/heroku/oauth2/callback", - params: { orgId: params.orgId, projectId }, + params: { orgId, projectId }, search }); } diff --git a/frontend/src/pages/secret-manager/integrations/route-netlify-oauth-redirect.tsx b/frontend/src/pages/secret-manager/integrations/route-netlify-oauth-redirect.tsx index 5b9f316ff..8df73914d 100644 --- a/frontend/src/pages/secret-manager/integrations/route-netlify-oauth-redirect.tsx +++ b/frontend/src/pages/secret-manager/integrations/route-netlify-oauth-redirect.tsx @@ -7,10 +7,11 @@ import { localStorageService } from "@app/helpers/localStorage"; import { NetlifyOAuthCallbackPageQueryParamsSchema } from "./NetlifyOauthCallbackPage/route"; export const Route = createFileRoute( - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/netlify/oauth2/callback" + "/_authenticate/_inject-org-details/_org-layout/integrations/netlify/oauth2/callback" )({ validateSearch: zodValidator(NetlifyOAuthCallbackPageQueryParamsSchema), - beforeLoad: ({ search, params }) => { + beforeLoad: ({ context, search }) => { + const orgId = context.organizationId; const projectId = localStorageService.getIintegrationProjectId(); if (!projectId) { createNotification({ @@ -20,12 +21,12 @@ export const Route = createFileRoute( }); throw redirect({ to: "/organizations/$orgId/projects", - params: { orgId: params.orgId } + params: { orgId } }); } throw redirect({ to: "/organizations/$orgId/projects/secret-management/$projectId/integrations/netlify/oauth2/callback", - params: { orgId: params.orgId, projectId }, + params: { orgId, projectId }, search }); } diff --git a/frontend/src/pages/secret-manager/integrations/route-vercel-oauth-redirect.tsx b/frontend/src/pages/secret-manager/integrations/route-vercel-oauth-redirect.tsx index 3889cf98d..55c3facb5 100644 --- a/frontend/src/pages/secret-manager/integrations/route-vercel-oauth-redirect.tsx +++ b/frontend/src/pages/secret-manager/integrations/route-vercel-oauth-redirect.tsx @@ -7,10 +7,11 @@ import { localStorageService } from "@app/helpers/localStorage"; import { VercelOAuthCallbackPageQueryParamsSchema } from "./VercelOauthCallbackPage/route"; export const Route = createFileRoute( - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/vercel/oauth2/callback" + "/_authenticate/_inject-org-details/_org-layout/integrations/vercel/oauth2/callback" )({ validateSearch: zodValidator(VercelOAuthCallbackPageQueryParamsSchema), - beforeLoad: ({ search, params }) => { + beforeLoad: ({ context, search }) => { + const orgId = context.organizationId; const projectId = localStorageService.getIintegrationProjectId(); if (!projectId) { createNotification({ @@ -20,12 +21,12 @@ export const Route = createFileRoute( }); throw redirect({ to: "/organizations/$orgId/projects", - params: { orgId: params.orgId } + params: { orgId } }); } throw redirect({ to: "/organizations/$orgId/projects/secret-management/$projectId/integrations/vercel/oauth2/callback", - params: { orgId: params.orgId, projectId }, + params: { orgId, projectId }, search }); } diff --git a/frontend/src/routeTree.gen.ts b/frontend/src/routeTree.gen.ts index acf4afc33..1c89619ad 100644 --- a/frontend/src/routeTree.gen.ts +++ b/frontend/src/routeTree.gen.ts @@ -39,6 +39,8 @@ import { Route as adminSignUpPageRouteImport } from './pages/admin/SignUpPage/ro import { Route as organizationNoOrgPageRouteImport } from './pages/organization/NoOrgPage/route' import { Route as authSignUpPageRouteImport } from './pages/auth/SignUpPage/route' import { Route as authLoginPageRouteImport } from './pages/auth/LoginPage/route' +import { Route as redirectsProjectRedirectImport } from './pages/redirects/project-redirect' +import { Route as redirectsOrganizationRedirectImport } from './pages/redirects/organization-redirect' import { Route as adminLayoutImport } from './pages/admin/layout' import { Route as authProviderSuccessPageRouteImport } from './pages/auth/ProviderSuccessPage/route' import { Route as authProviderErrorPageRouteImport } from './pages/auth/ProviderErrorPage/route' @@ -56,6 +58,15 @@ import { Route as organizationNetworkingPageRouteImport } from './pages/organiza import { Route as organizationBillingPageRouteImport } from './pages/organization/BillingPage/route' import { Route as organizationAuditLogsPageRouteImport } from './pages/organization/AuditLogsPage/route' import { Route as organizationAccessManagementPageRouteImport } from './pages/organization/AccessManagementPage/route' +import { Route as secretManagerIntegrationsRouteVercelOauthRedirectImport } from './pages/secret-manager/integrations/route-vercel-oauth-redirect' +import { Route as secretManagerIntegrationsRouteNetlifyOauthRedirectImport } from './pages/secret-manager/integrations/route-netlify-oauth-redirect' +import { Route as secretManagerIntegrationsRouteHerokuOauthRedirectImport } from './pages/secret-manager/integrations/route-heroku-oauth-redirect' +import { Route as secretManagerIntegrationsRouteGitlabOauthRedirectImport } from './pages/secret-manager/integrations/route-gitlab-oauth-redirect' +import { Route as secretManagerIntegrationsRouteGithubOauthRedirectImport } from './pages/secret-manager/integrations/route-github-oauth-redirect' +import { Route as secretManagerIntegrationsRouteGcpOauthRedirectImport } from './pages/secret-manager/integrations/route-gcp-oauth-redirect' +import { Route as secretManagerIntegrationsRouteBitbucketOauthRedirectImport } from './pages/secret-manager/integrations/route-bitbucket-oauth-redirect' +import { Route as secretManagerIntegrationsRouteAzureKeyVaultOauthRedirectImport } from './pages/secret-manager/integrations/route-azure-key-vault-oauth-redirect' +import { Route as secretManagerIntegrationsRouteAzureAppConfigurationsOauthRedirectImport } from './pages/secret-manager/integrations/route-azure-app-configurations-oauth-redirect' import { Route as organizationRoleByIDPageRouteImport } from './pages/organization/RoleByIDPage/route' import { Route as organizationUserDetailsByIDPageRouteImport } from './pages/organization/UserDetailsByIDPage/route' import { Route as organizationIdentityDetailsByIDPageRouteImport } from './pages/organization/IdentityDetailsByIDPage/route' @@ -71,15 +82,6 @@ import { Route as secretManagerLayoutImport } from './pages/secret-manager/layou import { Route as pamLayoutImport } from './pages/pam/layout' import { Route as kmsLayoutImport } from './pages/kms/layout' import { Route as certManagerLayoutImport } from './pages/cert-manager/layout' -import { Route as secretManagerIntegrationsRouteVercelOauthRedirectImport } from './pages/secret-manager/integrations/route-vercel-oauth-redirect' -import { Route as secretManagerIntegrationsRouteNetlifyOauthRedirectImport } from './pages/secret-manager/integrations/route-netlify-oauth-redirect' -import { Route as secretManagerIntegrationsRouteHerokuOauthRedirectImport } from './pages/secret-manager/integrations/route-heroku-oauth-redirect' -import { Route as secretManagerIntegrationsRouteGitlabOauthRedirectImport } from './pages/secret-manager/integrations/route-gitlab-oauth-redirect' -import { Route as secretManagerIntegrationsRouteGithubOauthRedirectImport } from './pages/secret-manager/integrations/route-github-oauth-redirect' -import { Route as secretManagerIntegrationsRouteGcpOauthRedirectImport } from './pages/secret-manager/integrations/route-gcp-oauth-redirect' -import { Route as secretManagerIntegrationsRouteBitbucketOauthRedirectImport } from './pages/secret-manager/integrations/route-bitbucket-oauth-redirect' -import { Route as secretManagerIntegrationsRouteAzureKeyVaultOauthRedirectImport } from './pages/secret-manager/integrations/route-azure-key-vault-oauth-redirect' -import { Route as secretManagerIntegrationsRouteAzureAppConfigurationsOauthRedirectImport } from './pages/secret-manager/integrations/route-azure-app-configurations-oauth-redirect' import { Route as organizationAppConnectionsOauthCallbackPageRouteImport } from './pages/organization/AppConnections/OauthCallbackPage/route' import { Route as projectAuditLogsPageRouteSshImport } from './pages/project/AuditLogsPage/route-ssh' import { Route as projectAccessControlPageRouteSshImport } from './pages/project/AccessControlPage/route-ssh' @@ -251,6 +253,9 @@ const AuthenticatePersonalSettingsImport = createFileRoute( const AuthenticateInjectOrgDetailsAdminImport = createFileRoute( '/_authenticate/_inject-org-details/admin', )() +const AuthenticateInjectOrgDetailsOrgLayoutIntegrationsImport = createFileRoute( + '/_authenticate/_inject-org-details/_org-layout/integrations', +)() const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdImport = createFileRoute( '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId', @@ -263,10 +268,6 @@ const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretSharingImport createFileRoute( '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-sharing', )() -const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsImport = - createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations', - )() const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsImport = createFileRoute( '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections', @@ -509,8 +510,8 @@ const adminSignUpPageRouteRoute = adminSignUpPageRouteImport.update({ const organizationNoOrgPageRouteRoute = organizationNoOrgPageRouteImport.update( { - id: '/organization/none', - path: '/organization/none', + id: '/organizations/none', + path: '/organizations/none', getParentRoute: () => middlewaresAuthenticateRoute, } as any, ) @@ -527,11 +528,31 @@ const authLoginPageRouteRoute = authLoginPageRouteImport.update({ getParentRoute: () => RestrictLoginSignupLoginRoute, } as any) +const redirectsProjectRedirectRoute = redirectsProjectRedirectImport.update({ + id: '/projects/$', + path: '/projects/$', + getParentRoute: () => middlewaresInjectOrgDetailsRoute, +} as any) + +const redirectsOrganizationRedirectRoute = + redirectsOrganizationRedirectImport.update({ + id: '/organization/$', + path: '/organization/$', + getParentRoute: () => middlewaresInjectOrgDetailsRoute, + } as any) + const adminLayoutRoute = adminLayoutImport.update({ id: '/_admin-layout', getParentRoute: () => AuthenticateInjectOrgDetailsAdminRoute, } as any) +const AuthenticateInjectOrgDetailsOrgLayoutIntegrationsRoute = + AuthenticateInjectOrgDetailsOrgLayoutIntegrationsImport.update({ + id: '/integrations', + path: '/integrations', + getParentRoute: () => organizationLayoutRoute, + } as any) + const authProviderSuccessPageRouteRoute = authProviderSuccessPageRouteImport.update({ id: '/provider/success', @@ -625,16 +646,6 @@ const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretSharingRoute } as any, ) -const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsRoute = - AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsImport.update( - { - id: '/integrations', - path: '/integrations', - getParentRoute: () => - AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdRoute, - } as any, - ) - const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsRoute = AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsImport.update( { @@ -702,6 +713,80 @@ const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretManagerProjec } as any, ) +const secretManagerIntegrationsRouteVercelOauthRedirectRoute = + secretManagerIntegrationsRouteVercelOauthRedirectImport.update({ + id: '/vercel/oauth2/callback', + path: '/vercel/oauth2/callback', + getParentRoute: () => + AuthenticateInjectOrgDetailsOrgLayoutIntegrationsRoute, + } as any) + +const secretManagerIntegrationsRouteNetlifyOauthRedirectRoute = + secretManagerIntegrationsRouteNetlifyOauthRedirectImport.update({ + id: '/netlify/oauth2/callback', + path: '/netlify/oauth2/callback', + getParentRoute: () => + AuthenticateInjectOrgDetailsOrgLayoutIntegrationsRoute, + } as any) + +const secretManagerIntegrationsRouteHerokuOauthRedirectRoute = + secretManagerIntegrationsRouteHerokuOauthRedirectImport.update({ + id: '/heroku/oauth2/callback', + path: '/heroku/oauth2/callback', + getParentRoute: () => + AuthenticateInjectOrgDetailsOrgLayoutIntegrationsRoute, + } as any) + +const secretManagerIntegrationsRouteGitlabOauthRedirectRoute = + secretManagerIntegrationsRouteGitlabOauthRedirectImport.update({ + id: '/gitlab/oauth2/callback', + path: '/gitlab/oauth2/callback', + getParentRoute: () => + AuthenticateInjectOrgDetailsOrgLayoutIntegrationsRoute, + } as any) + +const secretManagerIntegrationsRouteGithubOauthRedirectRoute = + secretManagerIntegrationsRouteGithubOauthRedirectImport.update({ + id: '/github/oauth2/callback', + path: '/github/oauth2/callback', + getParentRoute: () => + AuthenticateInjectOrgDetailsOrgLayoutIntegrationsRoute, + } as any) + +const secretManagerIntegrationsRouteGcpOauthRedirectRoute = + secretManagerIntegrationsRouteGcpOauthRedirectImport.update({ + id: '/gcp-secret-manager/oauth2/callback', + path: '/gcp-secret-manager/oauth2/callback', + getParentRoute: () => + AuthenticateInjectOrgDetailsOrgLayoutIntegrationsRoute, + } as any) + +const secretManagerIntegrationsRouteBitbucketOauthRedirectRoute = + secretManagerIntegrationsRouteBitbucketOauthRedirectImport.update({ + id: '/bitbucket/oauth2/callback', + path: '/bitbucket/oauth2/callback', + getParentRoute: () => + AuthenticateInjectOrgDetailsOrgLayoutIntegrationsRoute, + } as any) + +const secretManagerIntegrationsRouteAzureKeyVaultOauthRedirectRoute = + secretManagerIntegrationsRouteAzureKeyVaultOauthRedirectImport.update({ + id: '/azure-key-vault/oauth2/callback', + path: '/azure-key-vault/oauth2/callback', + getParentRoute: () => + AuthenticateInjectOrgDetailsOrgLayoutIntegrationsRoute, + } as any) + +const secretManagerIntegrationsRouteAzureAppConfigurationsOauthRedirectRoute = + secretManagerIntegrationsRouteAzureAppConfigurationsOauthRedirectImport.update( + { + id: '/azure-app-configuration/oauth2/callback', + path: '/azure-app-configuration/oauth2/callback', + getParentRoute: () => + AuthenticateInjectOrgDetailsOrgLayoutIntegrationsRoute, + } as any, + ) + const organizationRoleByIDPageRouteRoute = organizationRoleByIDPageRouteImport.update({ id: '/roles/$roleId', @@ -864,80 +949,6 @@ const certManagerLayoutRoute = certManagerLayoutImport.update({ AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsCertManagementProjectIdRoute, } as any) -const secretManagerIntegrationsRouteVercelOauthRedirectRoute = - secretManagerIntegrationsRouteVercelOauthRedirectImport.update({ - id: '/vercel/oauth2/callback', - path: '/vercel/oauth2/callback', - getParentRoute: () => - AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsRoute, - } as any) - -const secretManagerIntegrationsRouteNetlifyOauthRedirectRoute = - secretManagerIntegrationsRouteNetlifyOauthRedirectImport.update({ - id: '/netlify/oauth2/callback', - path: '/netlify/oauth2/callback', - getParentRoute: () => - AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsRoute, - } as any) - -const secretManagerIntegrationsRouteHerokuOauthRedirectRoute = - secretManagerIntegrationsRouteHerokuOauthRedirectImport.update({ - id: '/heroku/oauth2/callback', - path: '/heroku/oauth2/callback', - getParentRoute: () => - AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsRoute, - } as any) - -const secretManagerIntegrationsRouteGitlabOauthRedirectRoute = - secretManagerIntegrationsRouteGitlabOauthRedirectImport.update({ - id: '/gitlab/oauth2/callback', - path: '/gitlab/oauth2/callback', - getParentRoute: () => - AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsRoute, - } as any) - -const secretManagerIntegrationsRouteGithubOauthRedirectRoute = - secretManagerIntegrationsRouteGithubOauthRedirectImport.update({ - id: '/github/oauth2/callback', - path: '/github/oauth2/callback', - getParentRoute: () => - AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsRoute, - } as any) - -const secretManagerIntegrationsRouteGcpOauthRedirectRoute = - secretManagerIntegrationsRouteGcpOauthRedirectImport.update({ - id: '/gcp-secret-manager/oauth2/callback', - path: '/gcp-secret-manager/oauth2/callback', - getParentRoute: () => - AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsRoute, - } as any) - -const secretManagerIntegrationsRouteBitbucketOauthRedirectRoute = - secretManagerIntegrationsRouteBitbucketOauthRedirectImport.update({ - id: '/bitbucket/oauth2/callback', - path: '/bitbucket/oauth2/callback', - getParentRoute: () => - AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsRoute, - } as any) - -const secretManagerIntegrationsRouteAzureKeyVaultOauthRedirectRoute = - secretManagerIntegrationsRouteAzureKeyVaultOauthRedirectImport.update({ - id: '/azure-key-vault/oauth2/callback', - path: '/azure-key-vault/oauth2/callback', - getParentRoute: () => - AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsRoute, - } as any) - -const secretManagerIntegrationsRouteAzureAppConfigurationsOauthRedirectRoute = - secretManagerIntegrationsRouteAzureAppConfigurationsOauthRedirectImport.update( - { - id: '/azure-app-configuration/oauth2/callback', - path: '/azure-app-configuration/oauth2/callback', - getParentRoute: () => - AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsRoute, - } as any, - ) - const organizationAppConnectionsOauthCallbackPageRouteRoute = organizationAppConnectionsOauthCallbackPageRouteImport.update({ id: '/$appConnection/oauth/callback', @@ -2320,10 +2331,10 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof authSignUpPageRouteImport parentRoute: typeof RestrictLoginSignupSignupImport } - '/_authenticate/organization/none': { - id: '/_authenticate/organization/none' - path: '/organization/none' - fullPath: '/organization/none' + '/_authenticate/organizations/none': { + id: '/_authenticate/organizations/none' + path: '/organizations/none' + fullPath: '/organizations/none' preLoaderRoute: typeof organizationNoOrgPageRouteImport parentRoute: typeof middlewaresAuthenticateImport } @@ -2425,6 +2436,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof authProviderSuccessPageRouteImport parentRoute: typeof RestrictLoginSignupLoginImport } + '/_authenticate/_inject-org-details/_org-layout/integrations': { + id: '/_authenticate/_inject-org-details/_org-layout/integrations' + path: '/integrations' + fullPath: '/integrations' + preLoaderRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutIntegrationsImport + parentRoute: typeof organizationLayoutImport + } '/_authenticate/_inject-org-details/admin/_admin-layout': { id: '/_authenticate/_inject-org-details/admin/_admin-layout' path: '' @@ -2432,6 +2450,20 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof adminLayoutImport parentRoute: typeof AuthenticateInjectOrgDetailsAdminImport } + '/_authenticate/_inject-org-details/organization/$': { + id: '/_authenticate/_inject-org-details/organization/$' + path: '/organization/$' + fullPath: '/organization/$' + preLoaderRoute: typeof redirectsOrganizationRedirectImport + parentRoute: typeof middlewaresInjectOrgDetailsImport + } + '/_authenticate/_inject-org-details/projects/$': { + id: '/_authenticate/_inject-org-details/projects/$' + path: '/projects/$' + fullPath: '/projects/$' + preLoaderRoute: typeof redirectsProjectRedirectImport + parentRoute: typeof middlewaresInjectOrgDetailsImport + } '/_authenticate/_inject-org-details/admin/_admin-layout/': { id: '/_authenticate/_inject-org-details/admin/_admin-layout/' path: '/' @@ -2537,13 +2569,6 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsImport parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdImport } - '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations': { - id: '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations' - path: '/integrations' - fullPath: '/organizations/$orgId/integrations' - preLoaderRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsImport - parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdImport - } '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-sharing': { id: '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-sharing' path: '/secret-sharing' @@ -2607,6 +2632,69 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof organizationRoleByIDPageRouteImport parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdImport } + '/_authenticate/_inject-org-details/_org-layout/integrations/azure-app-configuration/oauth2/callback': { + id: '/_authenticate/_inject-org-details/_org-layout/integrations/azure-app-configuration/oauth2/callback' + path: '/azure-app-configuration/oauth2/callback' + fullPath: '/integrations/azure-app-configuration/oauth2/callback' + preLoaderRoute: typeof secretManagerIntegrationsRouteAzureAppConfigurationsOauthRedirectImport + parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutIntegrationsImport + } + '/_authenticate/_inject-org-details/_org-layout/integrations/azure-key-vault/oauth2/callback': { + id: '/_authenticate/_inject-org-details/_org-layout/integrations/azure-key-vault/oauth2/callback' + path: '/azure-key-vault/oauth2/callback' + fullPath: '/integrations/azure-key-vault/oauth2/callback' + preLoaderRoute: typeof secretManagerIntegrationsRouteAzureKeyVaultOauthRedirectImport + parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutIntegrationsImport + } + '/_authenticate/_inject-org-details/_org-layout/integrations/bitbucket/oauth2/callback': { + id: '/_authenticate/_inject-org-details/_org-layout/integrations/bitbucket/oauth2/callback' + path: '/bitbucket/oauth2/callback' + fullPath: '/integrations/bitbucket/oauth2/callback' + preLoaderRoute: typeof secretManagerIntegrationsRouteBitbucketOauthRedirectImport + parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutIntegrationsImport + } + '/_authenticate/_inject-org-details/_org-layout/integrations/gcp-secret-manager/oauth2/callback': { + id: '/_authenticate/_inject-org-details/_org-layout/integrations/gcp-secret-manager/oauth2/callback' + path: '/gcp-secret-manager/oauth2/callback' + fullPath: '/integrations/gcp-secret-manager/oauth2/callback' + preLoaderRoute: typeof secretManagerIntegrationsRouteGcpOauthRedirectImport + parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutIntegrationsImport + } + '/_authenticate/_inject-org-details/_org-layout/integrations/github/oauth2/callback': { + id: '/_authenticate/_inject-org-details/_org-layout/integrations/github/oauth2/callback' + path: '/github/oauth2/callback' + fullPath: '/integrations/github/oauth2/callback' + preLoaderRoute: typeof secretManagerIntegrationsRouteGithubOauthRedirectImport + parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutIntegrationsImport + } + '/_authenticate/_inject-org-details/_org-layout/integrations/gitlab/oauth2/callback': { + id: '/_authenticate/_inject-org-details/_org-layout/integrations/gitlab/oauth2/callback' + path: '/gitlab/oauth2/callback' + fullPath: '/integrations/gitlab/oauth2/callback' + preLoaderRoute: typeof secretManagerIntegrationsRouteGitlabOauthRedirectImport + parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutIntegrationsImport + } + '/_authenticate/_inject-org-details/_org-layout/integrations/heroku/oauth2/callback': { + id: '/_authenticate/_inject-org-details/_org-layout/integrations/heroku/oauth2/callback' + path: '/heroku/oauth2/callback' + fullPath: '/integrations/heroku/oauth2/callback' + preLoaderRoute: typeof secretManagerIntegrationsRouteHerokuOauthRedirectImport + parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutIntegrationsImport + } + '/_authenticate/_inject-org-details/_org-layout/integrations/netlify/oauth2/callback': { + id: '/_authenticate/_inject-org-details/_org-layout/integrations/netlify/oauth2/callback' + path: '/netlify/oauth2/callback' + fullPath: '/integrations/netlify/oauth2/callback' + preLoaderRoute: typeof secretManagerIntegrationsRouteNetlifyOauthRedirectImport + parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutIntegrationsImport + } + '/_authenticate/_inject-org-details/_org-layout/integrations/vercel/oauth2/callback': { + id: '/_authenticate/_inject-org-details/_org-layout/integrations/vercel/oauth2/callback' + path: '/vercel/oauth2/callback' + fullPath: '/integrations/vercel/oauth2/callback' + preLoaderRoute: typeof secretManagerIntegrationsRouteVercelOauthRedirectImport + parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutIntegrationsImport + } '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-manager/$projectId': { id: '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-manager/$projectId' path: '/secret-manager/$projectId' @@ -2677,69 +2765,6 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof organizationAppConnectionsOauthCallbackPageRouteImport parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsImport } - '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/azure-app-configuration/oauth2/callback': { - id: '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/azure-app-configuration/oauth2/callback' - path: '/azure-app-configuration/oauth2/callback' - fullPath: '/organizations/$orgId/integrations/azure-app-configuration/oauth2/callback' - preLoaderRoute: typeof secretManagerIntegrationsRouteAzureAppConfigurationsOauthRedirectImport - parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsImport - } - '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/azure-key-vault/oauth2/callback': { - id: '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/azure-key-vault/oauth2/callback' - path: '/azure-key-vault/oauth2/callback' - fullPath: '/organizations/$orgId/integrations/azure-key-vault/oauth2/callback' - preLoaderRoute: typeof secretManagerIntegrationsRouteAzureKeyVaultOauthRedirectImport - parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsImport - } - '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/bitbucket/oauth2/callback': { - id: '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/bitbucket/oauth2/callback' - path: '/bitbucket/oauth2/callback' - fullPath: '/organizations/$orgId/integrations/bitbucket/oauth2/callback' - preLoaderRoute: typeof secretManagerIntegrationsRouteBitbucketOauthRedirectImport - parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsImport - } - '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/gcp-secret-manager/oauth2/callback': { - id: '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/gcp-secret-manager/oauth2/callback' - path: '/gcp-secret-manager/oauth2/callback' - fullPath: '/organizations/$orgId/integrations/gcp-secret-manager/oauth2/callback' - preLoaderRoute: typeof secretManagerIntegrationsRouteGcpOauthRedirectImport - parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsImport - } - '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/github/oauth2/callback': { - id: '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/github/oauth2/callback' - path: '/github/oauth2/callback' - fullPath: '/organizations/$orgId/integrations/github/oauth2/callback' - preLoaderRoute: typeof secretManagerIntegrationsRouteGithubOauthRedirectImport - parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsImport - } - '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/gitlab/oauth2/callback': { - id: '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/gitlab/oauth2/callback' - path: '/gitlab/oauth2/callback' - fullPath: '/organizations/$orgId/integrations/gitlab/oauth2/callback' - preLoaderRoute: typeof secretManagerIntegrationsRouteGitlabOauthRedirectImport - parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsImport - } - '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/heroku/oauth2/callback': { - id: '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/heroku/oauth2/callback' - path: '/heroku/oauth2/callback' - fullPath: '/organizations/$orgId/integrations/heroku/oauth2/callback' - preLoaderRoute: typeof secretManagerIntegrationsRouteHerokuOauthRedirectImport - parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsImport - } - '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/netlify/oauth2/callback': { - id: '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/netlify/oauth2/callback' - path: '/netlify/oauth2/callback' - fullPath: '/organizations/$orgId/integrations/netlify/oauth2/callback' - preLoaderRoute: typeof secretManagerIntegrationsRouteNetlifyOauthRedirectImport - parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsImport - } - '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/vercel/oauth2/callback': { - id: '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/vercel/oauth2/callback' - path: '/vercel/oauth2/callback' - fullPath: '/organizations/$orgId/integrations/vercel/oauth2/callback' - preLoaderRoute: typeof secretManagerIntegrationsRouteVercelOauthRedirectImport - parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsImport - } '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/cert-management/$projectId/_cert-manager-layout': { id: '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/cert-management/$projectId/_cert-manager-layout' path: '' @@ -3928,6 +3953,45 @@ declare module '@tanstack/react-router' { // Create and export the route tree +interface AuthenticateInjectOrgDetailsOrgLayoutIntegrationsRouteChildren { + secretManagerIntegrationsRouteAzureAppConfigurationsOauthRedirectRoute: typeof secretManagerIntegrationsRouteAzureAppConfigurationsOauthRedirectRoute + secretManagerIntegrationsRouteAzureKeyVaultOauthRedirectRoute: typeof secretManagerIntegrationsRouteAzureKeyVaultOauthRedirectRoute + secretManagerIntegrationsRouteBitbucketOauthRedirectRoute: typeof secretManagerIntegrationsRouteBitbucketOauthRedirectRoute + secretManagerIntegrationsRouteGcpOauthRedirectRoute: typeof secretManagerIntegrationsRouteGcpOauthRedirectRoute + secretManagerIntegrationsRouteGithubOauthRedirectRoute: typeof secretManagerIntegrationsRouteGithubOauthRedirectRoute + secretManagerIntegrationsRouteGitlabOauthRedirectRoute: typeof secretManagerIntegrationsRouteGitlabOauthRedirectRoute + secretManagerIntegrationsRouteHerokuOauthRedirectRoute: typeof secretManagerIntegrationsRouteHerokuOauthRedirectRoute + secretManagerIntegrationsRouteNetlifyOauthRedirectRoute: typeof secretManagerIntegrationsRouteNetlifyOauthRedirectRoute + secretManagerIntegrationsRouteVercelOauthRedirectRoute: typeof secretManagerIntegrationsRouteVercelOauthRedirectRoute +} + +const AuthenticateInjectOrgDetailsOrgLayoutIntegrationsRouteChildren: AuthenticateInjectOrgDetailsOrgLayoutIntegrationsRouteChildren = + { + secretManagerIntegrationsRouteAzureAppConfigurationsOauthRedirectRoute: + secretManagerIntegrationsRouteAzureAppConfigurationsOauthRedirectRoute, + secretManagerIntegrationsRouteAzureKeyVaultOauthRedirectRoute: + secretManagerIntegrationsRouteAzureKeyVaultOauthRedirectRoute, + secretManagerIntegrationsRouteBitbucketOauthRedirectRoute: + secretManagerIntegrationsRouteBitbucketOauthRedirectRoute, + secretManagerIntegrationsRouteGcpOauthRedirectRoute: + secretManagerIntegrationsRouteGcpOauthRedirectRoute, + secretManagerIntegrationsRouteGithubOauthRedirectRoute: + secretManagerIntegrationsRouteGithubOauthRedirectRoute, + secretManagerIntegrationsRouteGitlabOauthRedirectRoute: + secretManagerIntegrationsRouteGitlabOauthRedirectRoute, + secretManagerIntegrationsRouteHerokuOauthRedirectRoute: + secretManagerIntegrationsRouteHerokuOauthRedirectRoute, + secretManagerIntegrationsRouteNetlifyOauthRedirectRoute: + secretManagerIntegrationsRouteNetlifyOauthRedirectRoute, + secretManagerIntegrationsRouteVercelOauthRedirectRoute: + secretManagerIntegrationsRouteVercelOauthRedirectRoute, + } + +const AuthenticateInjectOrgDetailsOrgLayoutIntegrationsRouteWithChildren = + AuthenticateInjectOrgDetailsOrgLayoutIntegrationsRoute._addFileChildren( + AuthenticateInjectOrgDetailsOrgLayoutIntegrationsRouteChildren, + ) + interface AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsCertManagementProjectIdCertManagerLayoutCertificateTemplatesRouteChildren { certManagerPkiTemplateListPageRouteRoute: typeof certManagerPkiTemplateListPageRouteRoute } @@ -4676,45 +4740,6 @@ const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsRoute AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsRouteChildren, ) -interface AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsRouteChildren { - secretManagerIntegrationsRouteAzureAppConfigurationsOauthRedirectRoute: typeof secretManagerIntegrationsRouteAzureAppConfigurationsOauthRedirectRoute - secretManagerIntegrationsRouteAzureKeyVaultOauthRedirectRoute: typeof secretManagerIntegrationsRouteAzureKeyVaultOauthRedirectRoute - secretManagerIntegrationsRouteBitbucketOauthRedirectRoute: typeof secretManagerIntegrationsRouteBitbucketOauthRedirectRoute - secretManagerIntegrationsRouteGcpOauthRedirectRoute: typeof secretManagerIntegrationsRouteGcpOauthRedirectRoute - secretManagerIntegrationsRouteGithubOauthRedirectRoute: typeof secretManagerIntegrationsRouteGithubOauthRedirectRoute - secretManagerIntegrationsRouteGitlabOauthRedirectRoute: typeof secretManagerIntegrationsRouteGitlabOauthRedirectRoute - secretManagerIntegrationsRouteHerokuOauthRedirectRoute: typeof secretManagerIntegrationsRouteHerokuOauthRedirectRoute - secretManagerIntegrationsRouteNetlifyOauthRedirectRoute: typeof secretManagerIntegrationsRouteNetlifyOauthRedirectRoute - secretManagerIntegrationsRouteVercelOauthRedirectRoute: typeof secretManagerIntegrationsRouteVercelOauthRedirectRoute -} - -const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsRouteChildren: AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsRouteChildren = - { - secretManagerIntegrationsRouteAzureAppConfigurationsOauthRedirectRoute: - secretManagerIntegrationsRouteAzureAppConfigurationsOauthRedirectRoute, - secretManagerIntegrationsRouteAzureKeyVaultOauthRedirectRoute: - secretManagerIntegrationsRouteAzureKeyVaultOauthRedirectRoute, - secretManagerIntegrationsRouteBitbucketOauthRedirectRoute: - secretManagerIntegrationsRouteBitbucketOauthRedirectRoute, - secretManagerIntegrationsRouteGcpOauthRedirectRoute: - secretManagerIntegrationsRouteGcpOauthRedirectRoute, - secretManagerIntegrationsRouteGithubOauthRedirectRoute: - secretManagerIntegrationsRouteGithubOauthRedirectRoute, - secretManagerIntegrationsRouteGitlabOauthRedirectRoute: - secretManagerIntegrationsRouteGitlabOauthRedirectRoute, - secretManagerIntegrationsRouteHerokuOauthRedirectRoute: - secretManagerIntegrationsRouteHerokuOauthRedirectRoute, - secretManagerIntegrationsRouteNetlifyOauthRedirectRoute: - secretManagerIntegrationsRouteNetlifyOauthRedirectRoute, - secretManagerIntegrationsRouteVercelOauthRedirectRoute: - secretManagerIntegrationsRouteVercelOauthRedirectRoute, - } - -const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsRouteWithChildren = - AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsRoute._addFileChildren( - AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsRouteChildren, - ) - interface AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretSharingRouteChildren { organizationSecretSharingPageRouteRoute: typeof organizationSecretSharingPageRouteRoute } @@ -4769,7 +4794,6 @@ interface AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdRouteChildren { organizationNetworkingPageRouteRoute: typeof organizationNetworkingPageRouteRoute organizationProjectsPageRouteRoute: typeof organizationProjectsPageRouteRouteWithChildren AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsRouteWithChildren - AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsRouteWithChildren AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretSharingRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretSharingRouteWithChildren AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSettingsRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSettingsRouteWithChildren organizationGroupDetailsByIDPageRouteRoute: typeof organizationGroupDetailsByIDPageRouteRoute @@ -4790,8 +4814,6 @@ const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdRouteChildren: Auth organizationProjectsPageRouteRouteWithChildren, AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsRoute: AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsRouteWithChildren, - AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsRoute: - AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsRouteWithChildren, AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretSharingRoute: AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretSharingRouteWithChildren, AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSettingsRoute: @@ -4813,10 +4835,13 @@ const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdRouteWithChildren = ) interface organizationLayoutRouteChildren { + AuthenticateInjectOrgDetailsOrgLayoutIntegrationsRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutIntegrationsRouteWithChildren AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdRouteWithChildren } const organizationLayoutRouteChildren: organizationLayoutRouteChildren = { + AuthenticateInjectOrgDetailsOrgLayoutIntegrationsRoute: + AuthenticateInjectOrgDetailsOrgLayoutIntegrationsRouteWithChildren, AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdRoute: AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdRouteWithChildren, } @@ -4867,6 +4892,8 @@ const AuthenticateInjectOrgDetailsAdminRouteWithChildren = interface middlewaresInjectOrgDetailsRouteChildren { organizationLayoutRoute: typeof organizationLayoutRouteWithChildren AuthenticateInjectOrgDetailsAdminRoute: typeof AuthenticateInjectOrgDetailsAdminRouteWithChildren + redirectsOrganizationRedirectRoute: typeof redirectsOrganizationRedirectRoute + redirectsProjectRedirectRoute: typeof redirectsProjectRedirectRoute } const middlewaresInjectOrgDetailsRouteChildren: middlewaresInjectOrgDetailsRouteChildren = @@ -4874,6 +4901,8 @@ const middlewaresInjectOrgDetailsRouteChildren: middlewaresInjectOrgDetailsRoute organizationLayoutRoute: organizationLayoutRouteWithChildren, AuthenticateInjectOrgDetailsAdminRoute: AuthenticateInjectOrgDetailsAdminRouteWithChildren, + redirectsOrganizationRedirectRoute: redirectsOrganizationRedirectRoute, + redirectsProjectRedirectRoute: redirectsProjectRedirectRoute, } const middlewaresInjectOrgDetailsRouteWithChildren = @@ -5016,7 +5045,7 @@ export interface FileRoutesByFullPath { '/signup': typeof RestrictLoginSignupSignupRouteWithChildren '/login/': typeof authLoginPageRouteRoute '/signup/': typeof authSignUpPageRouteRoute - '/organization/none': typeof organizationNoOrgPageRouteRoute + '/organizations/none': typeof organizationNoOrgPageRouteRoute '/admin/signup': typeof adminSignUpPageRouteRoute '/login/admin': typeof authAdminLoginPageRouteRoute '/login/ldap': typeof authLoginLdapPageRouteRoute @@ -5029,6 +5058,9 @@ export interface FileRoutesByFullPath { '/personal-settings/': typeof userPersonalSettingsPageRouteRoute '/login/provider/error': typeof authProviderErrorPageRouteRoute '/login/provider/success': typeof authProviderSuccessPageRouteRoute + '/integrations': typeof AuthenticateInjectOrgDetailsOrgLayoutIntegrationsRouteWithChildren + '/organization/$': typeof redirectsOrganizationRedirectRoute + '/projects/$': typeof redirectsProjectRedirectRoute '/admin/': typeof adminGeneralPageRouteRoute '/admin/access-management': typeof adminAccessManagementPageRouteRoute '/admin/authentication': typeof adminAuthenticationPageRouteRoute @@ -5044,7 +5076,6 @@ export interface FileRoutesByFullPath { '/organizations/$orgId/projects': typeof organizationProjectsPageRouteRouteWithChildren '/admin/resources/overview': typeof adminResourceOverviewPageRouteRoute '/organizations/$orgId/app-connections': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsRouteWithChildren - '/organizations/$orgId/integrations': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsRouteWithChildren '/organizations/$orgId/secret-sharing': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretSharingRouteWithChildren '/organizations/$orgId/settings': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSettingsRouteWithChildren '/organizations/$orgId/app-connections/': typeof organizationAppConnectionsAppConnectionsPageRouteRoute @@ -5054,6 +5085,15 @@ export interface FileRoutesByFullPath { '/organizations/$orgId/identities/$identityId': typeof organizationIdentityDetailsByIDPageRouteRoute '/organizations/$orgId/members/$membershipId': typeof organizationUserDetailsByIDPageRouteRoute '/organizations/$orgId/roles/$roleId': typeof organizationRoleByIDPageRouteRoute + '/integrations/azure-app-configuration/oauth2/callback': typeof secretManagerIntegrationsRouteAzureAppConfigurationsOauthRedirectRoute + '/integrations/azure-key-vault/oauth2/callback': typeof secretManagerIntegrationsRouteAzureKeyVaultOauthRedirectRoute + '/integrations/bitbucket/oauth2/callback': typeof secretManagerIntegrationsRouteBitbucketOauthRedirectRoute + '/integrations/gcp-secret-manager/oauth2/callback': typeof secretManagerIntegrationsRouteGcpOauthRedirectRoute + '/integrations/github/oauth2/callback': typeof secretManagerIntegrationsRouteGithubOauthRedirectRoute + '/integrations/gitlab/oauth2/callback': typeof secretManagerIntegrationsRouteGitlabOauthRedirectRoute + '/integrations/heroku/oauth2/callback': typeof secretManagerIntegrationsRouteHerokuOauthRedirectRoute + '/integrations/netlify/oauth2/callback': typeof secretManagerIntegrationsRouteNetlifyOauthRedirectRoute + '/integrations/vercel/oauth2/callback': typeof secretManagerIntegrationsRouteVercelOauthRedirectRoute '/organizations/$orgId/secret-manager/$projectId': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretManagerProjectIdRouteWithChildren '/organizations/$orgId/settings/oauth/callback': typeof organizationSettingsPageOauthCallbackPageRouteRoute '/organizations/$orgId/projects/cert-management/$projectId': typeof certManagerLayoutRouteWithChildren @@ -5064,15 +5104,6 @@ export interface FileRoutesByFullPath { '/organizations/$orgId/projects/ssh/$projectId': typeof sshLayoutRouteWithChildren '/organizations/$orgId/secret-manager/$projectId/approval': typeof secretManagerRedirectsRedirectApprovalPageRoute '/organizations/$orgId/app-connections/$appConnection/oauth/callback': typeof organizationAppConnectionsOauthCallbackPageRouteRoute - '/organizations/$orgId/integrations/azure-app-configuration/oauth2/callback': typeof secretManagerIntegrationsRouteAzureAppConfigurationsOauthRedirectRoute - '/organizations/$orgId/integrations/azure-key-vault/oauth2/callback': typeof secretManagerIntegrationsRouteAzureKeyVaultOauthRedirectRoute - '/organizations/$orgId/integrations/bitbucket/oauth2/callback': typeof secretManagerIntegrationsRouteBitbucketOauthRedirectRoute - '/organizations/$orgId/integrations/gcp-secret-manager/oauth2/callback': typeof secretManagerIntegrationsRouteGcpOauthRedirectRoute - '/organizations/$orgId/integrations/github/oauth2/callback': typeof secretManagerIntegrationsRouteGithubOauthRedirectRoute - '/organizations/$orgId/integrations/gitlab/oauth2/callback': typeof secretManagerIntegrationsRouteGitlabOauthRedirectRoute - '/organizations/$orgId/integrations/heroku/oauth2/callback': typeof secretManagerIntegrationsRouteHerokuOauthRedirectRoute - '/organizations/$orgId/integrations/netlify/oauth2/callback': typeof secretManagerIntegrationsRouteNetlifyOauthRedirectRoute - '/organizations/$orgId/integrations/vercel/oauth2/callback': typeof secretManagerIntegrationsRouteVercelOauthRedirectRoute '/organizations/$orgId/projects/cert-management/$projectId/alerting': typeof certManagerAlertingPageRouteRoute '/organizations/$orgId/projects/cert-management/$projectId/certificate-authorities': typeof certManagerCertificateAuthoritiesPageRouteRoute '/organizations/$orgId/projects/cert-management/$projectId/policies': typeof certManagerPoliciesPageRouteRoute @@ -5253,7 +5284,7 @@ export interface FileRoutesByTo { '/personal-settings': typeof userPersonalSettingsPageRouteRoute '/login': typeof authLoginPageRouteRoute '/signup': typeof authSignUpPageRouteRoute - '/organization/none': typeof organizationNoOrgPageRouteRoute + '/organizations/none': typeof organizationNoOrgPageRouteRoute '/admin/signup': typeof adminSignUpPageRouteRoute '/login/admin': typeof authAdminLoginPageRouteRoute '/login/ldap': typeof authLoginLdapPageRouteRoute @@ -5265,6 +5296,9 @@ export interface FileRoutesByTo { '/admin': typeof adminGeneralPageRouteRoute '/login/provider/error': typeof authProviderErrorPageRouteRoute '/login/provider/success': typeof authProviderSuccessPageRouteRoute + '/integrations': typeof AuthenticateInjectOrgDetailsOrgLayoutIntegrationsRouteWithChildren + '/organization/$': typeof redirectsOrganizationRedirectRoute + '/projects/$': typeof redirectsProjectRedirectRoute '/admin/access-management': typeof adminAccessManagementPageRouteRoute '/admin/authentication': typeof adminAuthenticationPageRouteRoute '/admin/caching': typeof adminCachingPageRouteRoute @@ -5278,7 +5312,6 @@ export interface FileRoutesByTo { '/organizations/$orgId/networking': typeof organizationNetworkingPageRouteRoute '/organizations/$orgId/projects': typeof organizationProjectsPageRouteRouteWithChildren '/admin/resources/overview': typeof adminResourceOverviewPageRouteRoute - '/organizations/$orgId/integrations': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsRouteWithChildren '/organizations/$orgId/app-connections': typeof organizationAppConnectionsAppConnectionsPageRouteRoute '/organizations/$orgId/secret-sharing': typeof organizationSecretSharingPageRouteRoute '/organizations/$orgId/settings': typeof organizationSettingsPageRouteRoute @@ -5286,6 +5319,15 @@ export interface FileRoutesByTo { '/organizations/$orgId/identities/$identityId': typeof organizationIdentityDetailsByIDPageRouteRoute '/organizations/$orgId/members/$membershipId': typeof organizationUserDetailsByIDPageRouteRoute '/organizations/$orgId/roles/$roleId': typeof organizationRoleByIDPageRouteRoute + '/integrations/azure-app-configuration/oauth2/callback': typeof secretManagerIntegrationsRouteAzureAppConfigurationsOauthRedirectRoute + '/integrations/azure-key-vault/oauth2/callback': typeof secretManagerIntegrationsRouteAzureKeyVaultOauthRedirectRoute + '/integrations/bitbucket/oauth2/callback': typeof secretManagerIntegrationsRouteBitbucketOauthRedirectRoute + '/integrations/gcp-secret-manager/oauth2/callback': typeof secretManagerIntegrationsRouteGcpOauthRedirectRoute + '/integrations/github/oauth2/callback': typeof secretManagerIntegrationsRouteGithubOauthRedirectRoute + '/integrations/gitlab/oauth2/callback': typeof secretManagerIntegrationsRouteGitlabOauthRedirectRoute + '/integrations/heroku/oauth2/callback': typeof secretManagerIntegrationsRouteHerokuOauthRedirectRoute + '/integrations/netlify/oauth2/callback': typeof secretManagerIntegrationsRouteNetlifyOauthRedirectRoute + '/integrations/vercel/oauth2/callback': typeof secretManagerIntegrationsRouteVercelOauthRedirectRoute '/organizations/$orgId/secret-manager/$projectId': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretManagerProjectIdRouteWithChildren '/organizations/$orgId/settings/oauth/callback': typeof organizationSettingsPageOauthCallbackPageRouteRoute '/organizations/$orgId/projects/cert-management/$projectId': typeof certManagerLayoutRouteWithChildren @@ -5296,15 +5338,6 @@ export interface FileRoutesByTo { '/organizations/$orgId/projects/ssh/$projectId': typeof sshLayoutRouteWithChildren '/organizations/$orgId/secret-manager/$projectId/approval': typeof secretManagerRedirectsRedirectApprovalPageRoute '/organizations/$orgId/app-connections/$appConnection/oauth/callback': typeof organizationAppConnectionsOauthCallbackPageRouteRoute - '/organizations/$orgId/integrations/azure-app-configuration/oauth2/callback': typeof secretManagerIntegrationsRouteAzureAppConfigurationsOauthRedirectRoute - '/organizations/$orgId/integrations/azure-key-vault/oauth2/callback': typeof secretManagerIntegrationsRouteAzureKeyVaultOauthRedirectRoute - '/organizations/$orgId/integrations/bitbucket/oauth2/callback': typeof secretManagerIntegrationsRouteBitbucketOauthRedirectRoute - '/organizations/$orgId/integrations/gcp-secret-manager/oauth2/callback': typeof secretManagerIntegrationsRouteGcpOauthRedirectRoute - '/organizations/$orgId/integrations/github/oauth2/callback': typeof secretManagerIntegrationsRouteGithubOauthRedirectRoute - '/organizations/$orgId/integrations/gitlab/oauth2/callback': typeof secretManagerIntegrationsRouteGitlabOauthRedirectRoute - '/organizations/$orgId/integrations/heroku/oauth2/callback': typeof secretManagerIntegrationsRouteHerokuOauthRedirectRoute - '/organizations/$orgId/integrations/netlify/oauth2/callback': typeof secretManagerIntegrationsRouteNetlifyOauthRedirectRoute - '/organizations/$orgId/integrations/vercel/oauth2/callback': typeof secretManagerIntegrationsRouteVercelOauthRedirectRoute '/organizations/$orgId/projects/cert-management/$projectId/alerting': typeof certManagerAlertingPageRouteRoute '/organizations/$orgId/projects/cert-management/$projectId/certificate-authorities': typeof certManagerCertificateAuthoritiesPageRouteRoute '/organizations/$orgId/projects/cert-management/$projectId/policies': typeof certManagerPoliciesPageRouteRoute @@ -5482,7 +5515,7 @@ export interface FileRoutesById { '/_restrict-login-signup/signup': typeof RestrictLoginSignupSignupRouteWithChildren '/_restrict-login-signup/login/': typeof authLoginPageRouteRoute '/_restrict-login-signup/signup/': typeof authSignUpPageRouteRoute - '/_authenticate/organization/none': typeof organizationNoOrgPageRouteRoute + '/_authenticate/organizations/none': typeof organizationNoOrgPageRouteRoute '/_restrict-login-signup/admin/signup': typeof adminSignUpPageRouteRoute '/_restrict-login-signup/login/admin': typeof authAdminLoginPageRouteRoute '/_restrict-login-signup/login/ldap': typeof authLoginLdapPageRouteRoute @@ -5497,7 +5530,10 @@ export interface FileRoutesById { '/_authenticate/personal-settings/_layout/': typeof userPersonalSettingsPageRouteRoute '/_restrict-login-signup/login/provider/error': typeof authProviderErrorPageRouteRoute '/_restrict-login-signup/login/provider/success': typeof authProviderSuccessPageRouteRoute + '/_authenticate/_inject-org-details/_org-layout/integrations': typeof AuthenticateInjectOrgDetailsOrgLayoutIntegrationsRouteWithChildren '/_authenticate/_inject-org-details/admin/_admin-layout': typeof adminLayoutRouteWithChildren + '/_authenticate/_inject-org-details/organization/$': typeof redirectsOrganizationRedirectRoute + '/_authenticate/_inject-org-details/projects/$': typeof redirectsProjectRedirectRoute '/_authenticate/_inject-org-details/admin/_admin-layout/': typeof adminGeneralPageRouteRoute '/_authenticate/_inject-org-details/admin/_admin-layout/access-management': typeof adminAccessManagementPageRouteRoute '/_authenticate/_inject-org-details/admin/_admin-layout/authentication': typeof adminAuthenticationPageRouteRoute @@ -5513,7 +5549,6 @@ export interface FileRoutesById { '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects': typeof organizationProjectsPageRouteRouteWithChildren '/_authenticate/_inject-org-details/admin/_admin-layout/resources/overview': typeof adminResourceOverviewPageRouteRoute '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsRouteWithChildren - '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdIntegrationsRouteWithChildren '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-sharing': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretSharingRouteWithChildren '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/settings': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSettingsRouteWithChildren '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections/': typeof organizationAppConnectionsAppConnectionsPageRouteRoute @@ -5523,6 +5558,15 @@ export interface FileRoutesById { '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/identities/$identityId': typeof organizationIdentityDetailsByIDPageRouteRoute '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/members/$membershipId': typeof organizationUserDetailsByIDPageRouteRoute '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/roles/$roleId': typeof organizationRoleByIDPageRouteRoute + '/_authenticate/_inject-org-details/_org-layout/integrations/azure-app-configuration/oauth2/callback': typeof secretManagerIntegrationsRouteAzureAppConfigurationsOauthRedirectRoute + '/_authenticate/_inject-org-details/_org-layout/integrations/azure-key-vault/oauth2/callback': typeof secretManagerIntegrationsRouteAzureKeyVaultOauthRedirectRoute + '/_authenticate/_inject-org-details/_org-layout/integrations/bitbucket/oauth2/callback': typeof secretManagerIntegrationsRouteBitbucketOauthRedirectRoute + '/_authenticate/_inject-org-details/_org-layout/integrations/gcp-secret-manager/oauth2/callback': typeof secretManagerIntegrationsRouteGcpOauthRedirectRoute + '/_authenticate/_inject-org-details/_org-layout/integrations/github/oauth2/callback': typeof secretManagerIntegrationsRouteGithubOauthRedirectRoute + '/_authenticate/_inject-org-details/_org-layout/integrations/gitlab/oauth2/callback': typeof secretManagerIntegrationsRouteGitlabOauthRedirectRoute + '/_authenticate/_inject-org-details/_org-layout/integrations/heroku/oauth2/callback': typeof secretManagerIntegrationsRouteHerokuOauthRedirectRoute + '/_authenticate/_inject-org-details/_org-layout/integrations/netlify/oauth2/callback': typeof secretManagerIntegrationsRouteNetlifyOauthRedirectRoute + '/_authenticate/_inject-org-details/_org-layout/integrations/vercel/oauth2/callback': typeof secretManagerIntegrationsRouteVercelOauthRedirectRoute '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-manager/$projectId': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretManagerProjectIdRouteWithChildren '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/settings/oauth/callback': typeof organizationSettingsPageOauthCallbackPageRouteRoute '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/cert-management/$projectId': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsCertManagementProjectIdRouteWithChildren @@ -5533,15 +5577,6 @@ export interface FileRoutesById { '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/ssh/$projectId': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSshProjectIdRouteWithChildren '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-manager/$projectId/approval': typeof secretManagerRedirectsRedirectApprovalPageRoute '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections/$appConnection/oauth/callback': typeof organizationAppConnectionsOauthCallbackPageRouteRoute - '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/azure-app-configuration/oauth2/callback': typeof secretManagerIntegrationsRouteAzureAppConfigurationsOauthRedirectRoute - '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/azure-key-vault/oauth2/callback': typeof secretManagerIntegrationsRouteAzureKeyVaultOauthRedirectRoute - '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/bitbucket/oauth2/callback': typeof secretManagerIntegrationsRouteBitbucketOauthRedirectRoute - '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/gcp-secret-manager/oauth2/callback': typeof secretManagerIntegrationsRouteGcpOauthRedirectRoute - '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/github/oauth2/callback': typeof secretManagerIntegrationsRouteGithubOauthRedirectRoute - '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/gitlab/oauth2/callback': typeof secretManagerIntegrationsRouteGitlabOauthRedirectRoute - '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/heroku/oauth2/callback': typeof secretManagerIntegrationsRouteHerokuOauthRedirectRoute - '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/netlify/oauth2/callback': typeof secretManagerIntegrationsRouteNetlifyOauthRedirectRoute - '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/vercel/oauth2/callback': typeof secretManagerIntegrationsRouteVercelOauthRedirectRoute '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/cert-management/$projectId/_cert-manager-layout': typeof certManagerLayoutRouteWithChildren '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/kms/$projectId/_kms-layout': typeof kmsLayoutRouteWithChildren '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/pam/$projectId/_pam-layout': typeof pamLayoutRouteWithChildren @@ -5732,7 +5767,7 @@ export interface FileRouteTypes { | '/signup' | '/login/' | '/signup/' - | '/organization/none' + | '/organizations/none' | '/admin/signup' | '/login/admin' | '/login/ldap' @@ -5745,6 +5780,9 @@ export interface FileRouteTypes { | '/personal-settings/' | '/login/provider/error' | '/login/provider/success' + | '/integrations' + | '/organization/$' + | '/projects/$' | '/admin/' | '/admin/access-management' | '/admin/authentication' @@ -5760,7 +5798,6 @@ export interface FileRouteTypes { | '/organizations/$orgId/projects' | '/admin/resources/overview' | '/organizations/$orgId/app-connections' - | '/organizations/$orgId/integrations' | '/organizations/$orgId/secret-sharing' | '/organizations/$orgId/settings' | '/organizations/$orgId/app-connections/' @@ -5770,6 +5807,15 @@ export interface FileRouteTypes { | '/organizations/$orgId/identities/$identityId' | '/organizations/$orgId/members/$membershipId' | '/organizations/$orgId/roles/$roleId' + | '/integrations/azure-app-configuration/oauth2/callback' + | '/integrations/azure-key-vault/oauth2/callback' + | '/integrations/bitbucket/oauth2/callback' + | '/integrations/gcp-secret-manager/oauth2/callback' + | '/integrations/github/oauth2/callback' + | '/integrations/gitlab/oauth2/callback' + | '/integrations/heroku/oauth2/callback' + | '/integrations/netlify/oauth2/callback' + | '/integrations/vercel/oauth2/callback' | '/organizations/$orgId/secret-manager/$projectId' | '/organizations/$orgId/settings/oauth/callback' | '/organizations/$orgId/projects/cert-management/$projectId' @@ -5780,15 +5826,6 @@ export interface FileRouteTypes { | '/organizations/$orgId/projects/ssh/$projectId' | '/organizations/$orgId/secret-manager/$projectId/approval' | '/organizations/$orgId/app-connections/$appConnection/oauth/callback' - | '/organizations/$orgId/integrations/azure-app-configuration/oauth2/callback' - | '/organizations/$orgId/integrations/azure-key-vault/oauth2/callback' - | '/organizations/$orgId/integrations/bitbucket/oauth2/callback' - | '/organizations/$orgId/integrations/gcp-secret-manager/oauth2/callback' - | '/organizations/$orgId/integrations/github/oauth2/callback' - | '/organizations/$orgId/integrations/gitlab/oauth2/callback' - | '/organizations/$orgId/integrations/heroku/oauth2/callback' - | '/organizations/$orgId/integrations/netlify/oauth2/callback' - | '/organizations/$orgId/integrations/vercel/oauth2/callback' | '/organizations/$orgId/projects/cert-management/$projectId/alerting' | '/organizations/$orgId/projects/cert-management/$projectId/certificate-authorities' | '/organizations/$orgId/projects/cert-management/$projectId/policies' @@ -5968,7 +6005,7 @@ export interface FileRouteTypes { | '/personal-settings' | '/login' | '/signup' - | '/organization/none' + | '/organizations/none' | '/admin/signup' | '/login/admin' | '/login/ldap' @@ -5980,6 +6017,9 @@ export interface FileRouteTypes { | '/admin' | '/login/provider/error' | '/login/provider/success' + | '/integrations' + | '/organization/$' + | '/projects/$' | '/admin/access-management' | '/admin/authentication' | '/admin/caching' @@ -5993,7 +6033,6 @@ export interface FileRouteTypes { | '/organizations/$orgId/networking' | '/organizations/$orgId/projects' | '/admin/resources/overview' - | '/organizations/$orgId/integrations' | '/organizations/$orgId/app-connections' | '/organizations/$orgId/secret-sharing' | '/organizations/$orgId/settings' @@ -6001,6 +6040,15 @@ export interface FileRouteTypes { | '/organizations/$orgId/identities/$identityId' | '/organizations/$orgId/members/$membershipId' | '/organizations/$orgId/roles/$roleId' + | '/integrations/azure-app-configuration/oauth2/callback' + | '/integrations/azure-key-vault/oauth2/callback' + | '/integrations/bitbucket/oauth2/callback' + | '/integrations/gcp-secret-manager/oauth2/callback' + | '/integrations/github/oauth2/callback' + | '/integrations/gitlab/oauth2/callback' + | '/integrations/heroku/oauth2/callback' + | '/integrations/netlify/oauth2/callback' + | '/integrations/vercel/oauth2/callback' | '/organizations/$orgId/secret-manager/$projectId' | '/organizations/$orgId/settings/oauth/callback' | '/organizations/$orgId/projects/cert-management/$projectId' @@ -6011,15 +6059,6 @@ export interface FileRouteTypes { | '/organizations/$orgId/projects/ssh/$projectId' | '/organizations/$orgId/secret-manager/$projectId/approval' | '/organizations/$orgId/app-connections/$appConnection/oauth/callback' - | '/organizations/$orgId/integrations/azure-app-configuration/oauth2/callback' - | '/organizations/$orgId/integrations/azure-key-vault/oauth2/callback' - | '/organizations/$orgId/integrations/bitbucket/oauth2/callback' - | '/organizations/$orgId/integrations/gcp-secret-manager/oauth2/callback' - | '/organizations/$orgId/integrations/github/oauth2/callback' - | '/organizations/$orgId/integrations/gitlab/oauth2/callback' - | '/organizations/$orgId/integrations/heroku/oauth2/callback' - | '/organizations/$orgId/integrations/netlify/oauth2/callback' - | '/organizations/$orgId/integrations/vercel/oauth2/callback' | '/organizations/$orgId/projects/cert-management/$projectId/alerting' | '/organizations/$orgId/projects/cert-management/$projectId/certificate-authorities' | '/organizations/$orgId/projects/cert-management/$projectId/policies' @@ -6195,7 +6234,7 @@ export interface FileRouteTypes { | '/_restrict-login-signup/signup' | '/_restrict-login-signup/login/' | '/_restrict-login-signup/signup/' - | '/_authenticate/organization/none' + | '/_authenticate/organizations/none' | '/_restrict-login-signup/admin/signup' | '/_restrict-login-signup/login/admin' | '/_restrict-login-signup/login/ldap' @@ -6210,7 +6249,10 @@ export interface FileRouteTypes { | '/_authenticate/personal-settings/_layout/' | '/_restrict-login-signup/login/provider/error' | '/_restrict-login-signup/login/provider/success' + | '/_authenticate/_inject-org-details/_org-layout/integrations' | '/_authenticate/_inject-org-details/admin/_admin-layout' + | '/_authenticate/_inject-org-details/organization/$' + | '/_authenticate/_inject-org-details/projects/$' | '/_authenticate/_inject-org-details/admin/_admin-layout/' | '/_authenticate/_inject-org-details/admin/_admin-layout/access-management' | '/_authenticate/_inject-org-details/admin/_admin-layout/authentication' @@ -6226,7 +6268,6 @@ export interface FileRouteTypes { | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects' | '/_authenticate/_inject-org-details/admin/_admin-layout/resources/overview' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections' - | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-sharing' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/settings' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections/' @@ -6236,6 +6277,15 @@ export interface FileRouteTypes { | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/identities/$identityId' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/members/$membershipId' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/roles/$roleId' + | '/_authenticate/_inject-org-details/_org-layout/integrations/azure-app-configuration/oauth2/callback' + | '/_authenticate/_inject-org-details/_org-layout/integrations/azure-key-vault/oauth2/callback' + | '/_authenticate/_inject-org-details/_org-layout/integrations/bitbucket/oauth2/callback' + | '/_authenticate/_inject-org-details/_org-layout/integrations/gcp-secret-manager/oauth2/callback' + | '/_authenticate/_inject-org-details/_org-layout/integrations/github/oauth2/callback' + | '/_authenticate/_inject-org-details/_org-layout/integrations/gitlab/oauth2/callback' + | '/_authenticate/_inject-org-details/_org-layout/integrations/heroku/oauth2/callback' + | '/_authenticate/_inject-org-details/_org-layout/integrations/netlify/oauth2/callback' + | '/_authenticate/_inject-org-details/_org-layout/integrations/vercel/oauth2/callback' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-manager/$projectId' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/settings/oauth/callback' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/cert-management/$projectId' @@ -6246,15 +6296,6 @@ export interface FileRouteTypes { | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/ssh/$projectId' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-manager/$projectId/approval' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections/$appConnection/oauth/callback' - | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/azure-app-configuration/oauth2/callback' - | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/azure-key-vault/oauth2/callback' - | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/bitbucket/oauth2/callback' - | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/gcp-secret-manager/oauth2/callback' - | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/github/oauth2/callback' - | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/gitlab/oauth2/callback' - | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/heroku/oauth2/callback' - | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/netlify/oauth2/callback' - | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/vercel/oauth2/callback' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/cert-management/$projectId/_cert-manager-layout' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/kms/$projectId/_kms-layout' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/pam/$projectId/_pam-layout' @@ -6490,7 +6531,7 @@ export const routeTree = rootRoute "/_authenticate/password-setup", "/_authenticate/_inject-org-details", "/_authenticate/personal-settings", - "/_authenticate/organization/none" + "/_authenticate/organizations/none" ] }, "/_restrict-login-signup": { @@ -6535,7 +6576,9 @@ export const routeTree = rootRoute "parent": "/_authenticate", "children": [ "/_authenticate/_inject-org-details/_org-layout", - "/_authenticate/_inject-org-details/admin" + "/_authenticate/_inject-org-details/admin", + "/_authenticate/_inject-org-details/organization/$", + "/_authenticate/_inject-org-details/projects/$" ] }, "/_authenticate/personal-settings": { @@ -6574,7 +6617,7 @@ export const routeTree = rootRoute "filePath": "auth/SignUpPage/route.tsx", "parent": "/_restrict-login-signup/signup" }, - "/_authenticate/organization/none": { + "/_authenticate/organizations/none": { "filePath": "organization/NoOrgPage/route.tsx", "parent": "/_authenticate" }, @@ -6612,6 +6655,7 @@ export const routeTree = rootRoute "filePath": "organization/layout.tsx", "parent": "/_authenticate/_inject-org-details", "children": [ + "/_authenticate/_inject-org-details/_org-layout/integrations", "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId" ] }, @@ -6641,6 +6685,21 @@ export const routeTree = rootRoute "filePath": "auth/ProviderSuccessPage/route.tsx", "parent": "/_restrict-login-signup/login" }, + "/_authenticate/_inject-org-details/_org-layout/integrations": { + "filePath": "", + "parent": "/_authenticate/_inject-org-details/_org-layout", + "children": [ + "/_authenticate/_inject-org-details/_org-layout/integrations/azure-app-configuration/oauth2/callback", + "/_authenticate/_inject-org-details/_org-layout/integrations/azure-key-vault/oauth2/callback", + "/_authenticate/_inject-org-details/_org-layout/integrations/bitbucket/oauth2/callback", + "/_authenticate/_inject-org-details/_org-layout/integrations/gcp-secret-manager/oauth2/callback", + "/_authenticate/_inject-org-details/_org-layout/integrations/github/oauth2/callback", + "/_authenticate/_inject-org-details/_org-layout/integrations/gitlab/oauth2/callback", + "/_authenticate/_inject-org-details/_org-layout/integrations/heroku/oauth2/callback", + "/_authenticate/_inject-org-details/_org-layout/integrations/netlify/oauth2/callback", + "/_authenticate/_inject-org-details/_org-layout/integrations/vercel/oauth2/callback" + ] + }, "/_authenticate/_inject-org-details/admin/_admin-layout": { "filePath": "admin/layout.tsx", "parent": "/_authenticate/_inject-org-details/admin", @@ -6655,6 +6714,14 @@ export const routeTree = rootRoute "/_authenticate/_inject-org-details/admin/_admin-layout/resources/overview" ] }, + "/_authenticate/_inject-org-details/organization/$": { + "filePath": "redirects/organization-redirect.tsx", + "parent": "/_authenticate/_inject-org-details" + }, + "/_authenticate/_inject-org-details/projects/$": { + "filePath": "redirects/project-redirect.tsx", + "parent": "/_authenticate/_inject-org-details" + }, "/_authenticate/_inject-org-details/admin/_admin-layout/": { "filePath": "admin/GeneralPage/route.tsx", "parent": "/_authenticate/_inject-org-details/admin/_admin-layout" @@ -6693,7 +6760,6 @@ export const routeTree = rootRoute "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/networking", "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects", "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections", - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations", "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-sharing", "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/settings", "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/groups/$groupId", @@ -6743,21 +6809,6 @@ export const routeTree = rootRoute "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections/$appConnection/oauth/callback" ] }, - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations": { - "filePath": "", - "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId", - "children": [ - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/azure-app-configuration/oauth2/callback", - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/azure-key-vault/oauth2/callback", - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/bitbucket/oauth2/callback", - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/gcp-secret-manager/oauth2/callback", - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/github/oauth2/callback", - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/gitlab/oauth2/callback", - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/heroku/oauth2/callback", - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/netlify/oauth2/callback", - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/vercel/oauth2/callback" - ] - }, "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-sharing": { "filePath": "", "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId", @@ -6801,6 +6852,42 @@ export const routeTree = rootRoute "filePath": "organization/RoleByIDPage/route.tsx", "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId" }, + "/_authenticate/_inject-org-details/_org-layout/integrations/azure-app-configuration/oauth2/callback": { + "filePath": "secret-manager/integrations/route-azure-app-configurations-oauth-redirect.tsx", + "parent": "/_authenticate/_inject-org-details/_org-layout/integrations" + }, + "/_authenticate/_inject-org-details/_org-layout/integrations/azure-key-vault/oauth2/callback": { + "filePath": "secret-manager/integrations/route-azure-key-vault-oauth-redirect.tsx", + "parent": "/_authenticate/_inject-org-details/_org-layout/integrations" + }, + "/_authenticate/_inject-org-details/_org-layout/integrations/bitbucket/oauth2/callback": { + "filePath": "secret-manager/integrations/route-bitbucket-oauth-redirect.tsx", + "parent": "/_authenticate/_inject-org-details/_org-layout/integrations" + }, + "/_authenticate/_inject-org-details/_org-layout/integrations/gcp-secret-manager/oauth2/callback": { + "filePath": "secret-manager/integrations/route-gcp-oauth-redirect.tsx", + "parent": "/_authenticate/_inject-org-details/_org-layout/integrations" + }, + "/_authenticate/_inject-org-details/_org-layout/integrations/github/oauth2/callback": { + "filePath": "secret-manager/integrations/route-github-oauth-redirect.tsx", + "parent": "/_authenticate/_inject-org-details/_org-layout/integrations" + }, + "/_authenticate/_inject-org-details/_org-layout/integrations/gitlab/oauth2/callback": { + "filePath": "secret-manager/integrations/route-gitlab-oauth-redirect.tsx", + "parent": "/_authenticate/_inject-org-details/_org-layout/integrations" + }, + "/_authenticate/_inject-org-details/_org-layout/integrations/heroku/oauth2/callback": { + "filePath": "secret-manager/integrations/route-heroku-oauth-redirect.tsx", + "parent": "/_authenticate/_inject-org-details/_org-layout/integrations" + }, + "/_authenticate/_inject-org-details/_org-layout/integrations/netlify/oauth2/callback": { + "filePath": "secret-manager/integrations/route-netlify-oauth-redirect.tsx", + "parent": "/_authenticate/_inject-org-details/_org-layout/integrations" + }, + "/_authenticate/_inject-org-details/_org-layout/integrations/vercel/oauth2/callback": { + "filePath": "secret-manager/integrations/route-vercel-oauth-redirect.tsx", + "parent": "/_authenticate/_inject-org-details/_org-layout/integrations" + }, "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-manager/$projectId": { "filePath": "", "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId", @@ -6862,42 +6949,6 @@ export const routeTree = rootRoute "filePath": "organization/AppConnections/OauthCallbackPage/route.tsx", "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections" }, - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/azure-app-configuration/oauth2/callback": { - "filePath": "secret-manager/integrations/route-azure-app-configurations-oauth-redirect.tsx", - "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations" - }, - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/azure-key-vault/oauth2/callback": { - "filePath": "secret-manager/integrations/route-azure-key-vault-oauth-redirect.tsx", - "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations" - }, - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/bitbucket/oauth2/callback": { - "filePath": "secret-manager/integrations/route-bitbucket-oauth-redirect.tsx", - "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations" - }, - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/gcp-secret-manager/oauth2/callback": { - "filePath": "secret-manager/integrations/route-gcp-oauth-redirect.tsx", - "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations" - }, - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/github/oauth2/callback": { - "filePath": "secret-manager/integrations/route-github-oauth-redirect.tsx", - "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations" - }, - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/gitlab/oauth2/callback": { - "filePath": "secret-manager/integrations/route-gitlab-oauth-redirect.tsx", - "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations" - }, - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/heroku/oauth2/callback": { - "filePath": "secret-manager/integrations/route-heroku-oauth-redirect.tsx", - "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations" - }, - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/netlify/oauth2/callback": { - "filePath": "secret-manager/integrations/route-netlify-oauth-redirect.tsx", - "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations" - }, - "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations/vercel/oauth2/callback": { - "filePath": "secret-manager/integrations/route-vercel-oauth-redirect.tsx", - "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/integrations" - }, "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/cert-management/$projectId/_cert-manager-layout": { "filePath": "cert-manager/layout.tsx", "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/cert-management/$projectId", diff --git a/frontend/src/routes.ts b/frontend/src/routes.ts index 9474900d7..432b85f0d 100644 --- a/frontend/src/routes.ts +++ b/frontend/src/routes.ts @@ -248,7 +248,7 @@ const secretManagerRoutes = route("/organizations/$orgId/projects/secret-managem ]) ]); -const secretManagerIntegrationsRedirect = route("/organizations/$orgId/integrations", [ +const secretManagerIntegrationsRedirect = route("/integrations", [ route("/heroku/oauth2/callback", "secret-manager/integrations/route-heroku-oauth-redirect.tsx"), route( "/gcp-secret-manager/oauth2/callback", @@ -425,8 +425,10 @@ export const routes = rootRoute("root.tsx", [ route("/personal-settings", [ layout("user/layout.tsx", [index("user/PersonalSettingsPage/route.tsx")]) ]), - route("/organization/none", "organization/NoOrgPage/route.tsx"), + route("/organizations/none", "organization/NoOrgPage/route.tsx"), middleware("inject-org-details.tsx", [ + route("/organization/$", "redirects/organization-redirect.tsx"), + route("/projects/$", "redirects/project-redirect.tsx"), adminRoute, layout("org-layout", "organization/layout.tsx", [ organizationRoutes, From 14019b54379592f34c274714fd8b37ee0f86ce66 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Thu, 20 Nov 2025 20:46:25 +0530 Subject: [PATCH 10/13] fix: added routing redirects with splat --- .../pages/redirects/organization-redirect.tsx | 7 +- .../src/pages/redirects/project-redirect.tsx | 14 +--- frontend/src/routeTree.gen.ts | 67 +++++++++++++++++++ frontend/src/routes.ts | 4 +- 4 files changed, 77 insertions(+), 15 deletions(-) diff --git a/frontend/src/pages/redirects/organization-redirect.tsx b/frontend/src/pages/redirects/organization-redirect.tsx index d13cc69b8..ea84c1e70 100644 --- a/frontend/src/pages/redirects/organization-redirect.tsx +++ b/frontend/src/pages/redirects/organization-redirect.tsx @@ -14,8 +14,11 @@ export const Route = createFileRoute("/_authenticate/_inject-org-details/organiz const remainingPath = params._splat || ""; throw redirect({ - to: `/organizations/$orgId/${remainingPath}` as const, - params: { orgId }, + to: "/organizations/$orgId/$", + params: { + orgId, + _splat: remainingPath ?? "" + }, search }); } diff --git a/frontend/src/pages/redirects/project-redirect.tsx b/frontend/src/pages/redirects/project-redirect.tsx index a893dc131..fc2a81db3 100644 --- a/frontend/src/pages/redirects/project-redirect.tsx +++ b/frontend/src/pages/redirects/project-redirect.tsx @@ -1,7 +1,5 @@ import { createFileRoute, redirect } from "@tanstack/react-router"; -import { localStorageService } from "@app/helpers/localStorage"; - export const Route = createFileRoute("/_authenticate/_inject-org-details/projects/$")({ beforeLoad: ({ context, params, search }) => { const orgId = context.organizationId; @@ -14,18 +12,10 @@ export const Route = createFileRoute("/_authenticate/_inject-org-details/project // eslint-disable-next-line no-underscore-dangle const remainingPath = params._splat || ""; - const projectId = localStorageService.getIintegrationProjectId(); - - if (!projectId) { - throw redirect({ - to: "/organizations/$orgId/projects", - params: { orgId } - }); - } throw redirect({ - to: `/organizations/$orgId/projects/${remainingPath}` as const, - params: { orgId, projectId }, + to: "/organizations/$orgId/projects/$" as const, + params: { orgId, _splat: remainingPath }, search }); } diff --git a/frontend/src/routeTree.gen.ts b/frontend/src/routeTree.gen.ts index 1c89619ad..f2954f03c 100644 --- a/frontend/src/routeTree.gen.ts +++ b/frontend/src/routeTree.gen.ts @@ -272,10 +272,18 @@ const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsImpor createFileRoute( '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections', )() +const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSplatImport = + createFileRoute( + '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/$', + )() const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretManagerProjectIdImport = createFileRoute( '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-manager/$projectId', )() +const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSplatImport = + createFileRoute( + '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/$', + )() const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSshProjectIdImport = createFileRoute( '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/ssh/$projectId', @@ -656,6 +664,14 @@ const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsRoute } as any, ) +const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSplatRoute = + AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSplatImport.update({ + id: '/$', + path: '/$', + getParentRoute: () => + AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdRoute, + } as any) + const adminResourceOverviewPageRouteRoute = adminResourceOverviewPageRouteImport.update({ id: '/resources/overview', @@ -713,6 +729,15 @@ const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretManagerProjec } as any, ) +const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSplatRoute = + AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSplatImport.update( + { + id: '/$', + path: '/$', + getParentRoute: () => organizationProjectsPageRouteRoute, + } as any, + ) + const secretManagerIntegrationsRouteVercelOauthRedirectRoute = secretManagerIntegrationsRouteVercelOauthRedirectImport.update({ id: '/vercel/oauth2/callback', @@ -2562,6 +2587,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof adminResourceOverviewPageRouteImport parentRoute: typeof adminLayoutImport } + '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/$': { + id: '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/$' + path: '/$' + fullPath: '/organizations/$orgId/$' + preLoaderRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSplatImport + parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdImport + } '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections': { id: '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections' path: '/app-connections' @@ -2695,6 +2727,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof secretManagerIntegrationsRouteVercelOauthRedirectImport parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutIntegrationsImport } + '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/$': { + id: '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/$' + path: '/$' + fullPath: '/organizations/$orgId/projects/$' + preLoaderRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSplatImport + parentRoute: typeof organizationProjectsPageRouteImport + } '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-manager/$projectId': { id: '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-manager/$projectId' path: '/secret-manager/$projectId' @@ -4693,6 +4732,7 @@ const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSshProjectI ) interface organizationProjectsPageRouteRouteChildren { + AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSplatRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSplatRoute AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsCertManagementProjectIdRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsCertManagementProjectIdRouteWithChildren AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsKmsProjectIdRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsKmsProjectIdRouteWithChildren AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsPamProjectIdRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsPamProjectIdRouteWithChildren @@ -4703,6 +4743,8 @@ interface organizationProjectsPageRouteRouteChildren { const organizationProjectsPageRouteRouteChildren: organizationProjectsPageRouteRouteChildren = { + AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSplatRoute: + AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSplatRoute, AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsCertManagementProjectIdRoute: AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsCertManagementProjectIdRouteWithChildren, AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsKmsProjectIdRoute: @@ -4793,6 +4835,7 @@ interface AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdRouteChildren { organizationBillingPageRouteRoute: typeof organizationBillingPageRouteRoute organizationNetworkingPageRouteRoute: typeof organizationNetworkingPageRouteRoute organizationProjectsPageRouteRoute: typeof organizationProjectsPageRouteRouteWithChildren + AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSplatRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSplatRoute AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsRouteWithChildren AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretSharingRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretSharingRouteWithChildren AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSettingsRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSettingsRouteWithChildren @@ -4812,6 +4855,8 @@ const AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdRouteChildren: Auth organizationNetworkingPageRouteRoute: organizationNetworkingPageRouteRoute, organizationProjectsPageRouteRoute: organizationProjectsPageRouteRouteWithChildren, + AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSplatRoute: + AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSplatRoute, AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsRoute: AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsRouteWithChildren, AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretSharingRoute: @@ -5075,6 +5120,7 @@ export interface FileRoutesByFullPath { '/organizations/$orgId/networking': typeof organizationNetworkingPageRouteRoute '/organizations/$orgId/projects': typeof organizationProjectsPageRouteRouteWithChildren '/admin/resources/overview': typeof adminResourceOverviewPageRouteRoute + '/organizations/$orgId/$': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSplatRoute '/organizations/$orgId/app-connections': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsRouteWithChildren '/organizations/$orgId/secret-sharing': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretSharingRouteWithChildren '/organizations/$orgId/settings': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSettingsRouteWithChildren @@ -5094,6 +5140,7 @@ export interface FileRoutesByFullPath { '/integrations/heroku/oauth2/callback': typeof secretManagerIntegrationsRouteHerokuOauthRedirectRoute '/integrations/netlify/oauth2/callback': typeof secretManagerIntegrationsRouteNetlifyOauthRedirectRoute '/integrations/vercel/oauth2/callback': typeof secretManagerIntegrationsRouteVercelOauthRedirectRoute + '/organizations/$orgId/projects/$': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSplatRoute '/organizations/$orgId/secret-manager/$projectId': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretManagerProjectIdRouteWithChildren '/organizations/$orgId/settings/oauth/callback': typeof organizationSettingsPageOauthCallbackPageRouteRoute '/organizations/$orgId/projects/cert-management/$projectId': typeof certManagerLayoutRouteWithChildren @@ -5312,6 +5359,7 @@ export interface FileRoutesByTo { '/organizations/$orgId/networking': typeof organizationNetworkingPageRouteRoute '/organizations/$orgId/projects': typeof organizationProjectsPageRouteRouteWithChildren '/admin/resources/overview': typeof adminResourceOverviewPageRouteRoute + '/organizations/$orgId/$': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSplatRoute '/organizations/$orgId/app-connections': typeof organizationAppConnectionsAppConnectionsPageRouteRoute '/organizations/$orgId/secret-sharing': typeof organizationSecretSharingPageRouteRoute '/organizations/$orgId/settings': typeof organizationSettingsPageRouteRoute @@ -5328,6 +5376,7 @@ export interface FileRoutesByTo { '/integrations/heroku/oauth2/callback': typeof secretManagerIntegrationsRouteHerokuOauthRedirectRoute '/integrations/netlify/oauth2/callback': typeof secretManagerIntegrationsRouteNetlifyOauthRedirectRoute '/integrations/vercel/oauth2/callback': typeof secretManagerIntegrationsRouteVercelOauthRedirectRoute + '/organizations/$orgId/projects/$': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSplatRoute '/organizations/$orgId/secret-manager/$projectId': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretManagerProjectIdRouteWithChildren '/organizations/$orgId/settings/oauth/callback': typeof organizationSettingsPageOauthCallbackPageRouteRoute '/organizations/$orgId/projects/cert-management/$projectId': typeof certManagerLayoutRouteWithChildren @@ -5548,6 +5597,7 @@ export interface FileRoutesById { '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/networking': typeof organizationNetworkingPageRouteRoute '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects': typeof organizationProjectsPageRouteRouteWithChildren '/_authenticate/_inject-org-details/admin/_admin-layout/resources/overview': typeof adminResourceOverviewPageRouteRoute + '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/$': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSplatRoute '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdAppConnectionsRouteWithChildren '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-sharing': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretSharingRouteWithChildren '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/settings': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSettingsRouteWithChildren @@ -5567,6 +5617,7 @@ export interface FileRoutesById { '/_authenticate/_inject-org-details/_org-layout/integrations/heroku/oauth2/callback': typeof secretManagerIntegrationsRouteHerokuOauthRedirectRoute '/_authenticate/_inject-org-details/_org-layout/integrations/netlify/oauth2/callback': typeof secretManagerIntegrationsRouteNetlifyOauthRedirectRoute '/_authenticate/_inject-org-details/_org-layout/integrations/vercel/oauth2/callback': typeof secretManagerIntegrationsRouteVercelOauthRedirectRoute + '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/$': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsSplatRoute '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-manager/$projectId': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdSecretManagerProjectIdRouteWithChildren '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/settings/oauth/callback': typeof organizationSettingsPageOauthCallbackPageRouteRoute '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/cert-management/$projectId': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationsOrgIdProjectsCertManagementProjectIdRouteWithChildren @@ -5797,6 +5848,7 @@ export interface FileRouteTypes { | '/organizations/$orgId/networking' | '/organizations/$orgId/projects' | '/admin/resources/overview' + | '/organizations/$orgId/$' | '/organizations/$orgId/app-connections' | '/organizations/$orgId/secret-sharing' | '/organizations/$orgId/settings' @@ -5816,6 +5868,7 @@ export interface FileRouteTypes { | '/integrations/heroku/oauth2/callback' | '/integrations/netlify/oauth2/callback' | '/integrations/vercel/oauth2/callback' + | '/organizations/$orgId/projects/$' | '/organizations/$orgId/secret-manager/$projectId' | '/organizations/$orgId/settings/oauth/callback' | '/organizations/$orgId/projects/cert-management/$projectId' @@ -6033,6 +6086,7 @@ export interface FileRouteTypes { | '/organizations/$orgId/networking' | '/organizations/$orgId/projects' | '/admin/resources/overview' + | '/organizations/$orgId/$' | '/organizations/$orgId/app-connections' | '/organizations/$orgId/secret-sharing' | '/organizations/$orgId/settings' @@ -6049,6 +6103,7 @@ export interface FileRouteTypes { | '/integrations/heroku/oauth2/callback' | '/integrations/netlify/oauth2/callback' | '/integrations/vercel/oauth2/callback' + | '/organizations/$orgId/projects/$' | '/organizations/$orgId/secret-manager/$projectId' | '/organizations/$orgId/settings/oauth/callback' | '/organizations/$orgId/projects/cert-management/$projectId' @@ -6267,6 +6322,7 @@ export interface FileRouteTypes { | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/networking' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects' | '/_authenticate/_inject-org-details/admin/_admin-layout/resources/overview' + | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/$' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-sharing' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/settings' @@ -6286,6 +6342,7 @@ export interface FileRouteTypes { | '/_authenticate/_inject-org-details/_org-layout/integrations/heroku/oauth2/callback' | '/_authenticate/_inject-org-details/_org-layout/integrations/netlify/oauth2/callback' | '/_authenticate/_inject-org-details/_org-layout/integrations/vercel/oauth2/callback' + | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/$' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-manager/$projectId' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/settings/oauth/callback' | '/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/cert-management/$projectId' @@ -6759,6 +6816,7 @@ export const routeTree = rootRoute "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/billing", "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/networking", "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects", + "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/$", "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections", "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-sharing", "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/settings", @@ -6789,6 +6847,7 @@ export const routeTree = rootRoute "filePath": "organization/ProjectsPage/route.tsx", "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId", "children": [ + "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/$", "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/cert-management/$projectId", "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/kms/$projectId", "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/pam/$projectId", @@ -6801,6 +6860,10 @@ export const routeTree = rootRoute "filePath": "admin/ResourceOverviewPage/route.tsx", "parent": "/_authenticate/_inject-org-details/admin/_admin-layout" }, + "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/$": { + "filePath": "", + "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId" + }, "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/app-connections": { "filePath": "", "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId", @@ -6888,6 +6951,10 @@ export const routeTree = rootRoute "filePath": "secret-manager/integrations/route-vercel-oauth-redirect.tsx", "parent": "/_authenticate/_inject-org-details/_org-layout/integrations" }, + "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects/$": { + "filePath": "", + "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/projects" + }, "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId/secret-manager/$projectId": { "filePath": "", "parent": "/_authenticate/_inject-org-details/_org-layout/organizations/$orgId", diff --git a/frontend/src/routes.ts b/frontend/src/routes.ts index 432b85f0d..4e1ba0169 100644 --- a/frontend/src/routes.ts +++ b/frontend/src/routes.ts @@ -389,7 +389,9 @@ const organizationRoutes = route("/organizations/$orgId", [ "organization/AppConnections/OauthCallbackPage/route.tsx" ) ]), - route("/networking", "organization/NetworkingPage/route.tsx") + route("/networking", "organization/NetworkingPage/route.tsx"), + route("/projects/$", ""), + route("/$", "") ]); export const routes = rootRoute("root.tsx", [ From 7b00ab1d99e6a1440e045015e375ef491ee4abdc Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Fri, 21 Nov 2025 19:14:04 +0530 Subject: [PATCH 11/13] fix: review comments --- frontend/src/components/auth/TeamInviteStep.tsx | 9 +++++++-- .../AssumePrivilegeModeBanner.tsx | 4 +++- .../components/ProjectSelect/ProjectSelect.tsx | 2 +- .../components/GroupMembersSection/GroupMembersTable.tsx | 4 +++- .../IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx | 4 +++- .../MemberDetailsByIDPage/MemberDetailsByIDPage.tsx | 4 +++- 6 files changed, 20 insertions(+), 7 deletions(-) diff --git a/frontend/src/components/auth/TeamInviteStep.tsx b/frontend/src/components/auth/TeamInviteStep.tsx index 57397d208..c03229a33 100644 --- a/frontend/src/components/auth/TeamInviteStep.tsx +++ b/frontend/src/components/auth/TeamInviteStep.tsx @@ -20,9 +20,14 @@ export default function TeamInviteStep(): JSX.Element { const { mutateAsync } = useAddUsersToOrg(); const { handlePopUpToggle, popUp, handlePopUpOpen } = usePopUp(["setUpEmail"] as const); + const orgId = String(localStorage.getItem("orgData.id")); + // Redirect user to the getting started page const redirectToHome = async () => { - navigate({ to: "/" as const }); + navigate({ + to: orgId ? ("/organizations/$orgId/projects" as const) : "/", + params: { orgId } + }); }; const inviteUsers = async ({ emails: inviteEmails }: { emails: string }) => { @@ -32,7 +37,7 @@ export default function TeamInviteStep(): JSX.Element { .map(async (email) => { mutateAsync({ inviteeEmails: [email], - organizationId: String(localStorage.getItem("orgData.id")), + organizationId: orgId, organizationRoleSlug: "member" }); }); diff --git a/frontend/src/layouts/ProjectLayout/components/AssumePrivilegeModeBanner/AssumePrivilegeModeBanner.tsx b/frontend/src/layouts/ProjectLayout/components/AssumePrivilegeModeBanner/AssumePrivilegeModeBanner.tsx index 6afdc2c98..4c9feccc3 100644 --- a/frontend/src/layouts/ProjectLayout/components/AssumePrivilegeModeBanner/AssumePrivilegeModeBanner.tsx +++ b/frontend/src/layouts/ProjectLayout/components/AssumePrivilegeModeBanner/AssumePrivilegeModeBanner.tsx @@ -38,7 +38,9 @@ export const AssumePrivilegeModeBanner = () => { { onSuccess: () => { const url = `${getProjectHomePage(currentProject.type, currentProject.environments)}${isSubOrganization ? `?subOrganization=${currentOrg.slug}` : ""}`; - window.location.href = url.replace("$projectId", currentProject.id); + window.location.assign( + url.replace("$orgId", currentOrg.id).replace("$projectId", currentProject.id) + ); } } ); diff --git a/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx b/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx index 976bda52a..12df6684a 100644 --- a/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx +++ b/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx @@ -163,7 +163,7 @@ export const ProjectSelect = () => { } }); const urlInstance = new URL( - `${window.location.origin}/${url.to.replaceAll("$projectId", workspace.id)}` + `${window.location.origin}${url.to.replaceAll("$orgId", url.params.orgId).replaceAll("$projectId", url.params.projectId)}` ); if (currentOrg?.subOrganization) { urlInstance.searchParams.set( diff --git a/frontend/src/pages/project/GroupDetailsByIDPage/components/GroupMembersSection/GroupMembersTable.tsx b/frontend/src/pages/project/GroupDetailsByIDPage/components/GroupMembersSection/GroupMembersTable.tsx index e717a5622..aa025ec23 100644 --- a/frontend/src/pages/project/GroupDetailsByIDPage/components/GroupMembersSection/GroupMembersTable.tsx +++ b/frontend/src/pages/project/GroupDetailsByIDPage/components/GroupMembersSection/GroupMembersTable.tsx @@ -155,7 +155,9 @@ export const GroupMembersTable = ({ groupMembership }: Props) => { }); const url = `${getProjectHomePage(currentProject.type, currentProject.environments)}${isSubOrganization ? `?subOrganization=${currentOrg.slug}` : ""}`; - window.location.href = url.replace("$projectId", currentProject.id); + window.location.assign( + url.replace("$orgId", currentOrg.id).replace("$projectId", currentProject.id) + ); } } ); diff --git a/frontend/src/pages/project/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx b/frontend/src/pages/project/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx index d346e8bfb..dbbec5ab5 100644 --- a/frontend/src/pages/project/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx +++ b/frontend/src/pages/project/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx @@ -95,7 +95,9 @@ const Page = () => { text: "Identity privilege assumption has started" }); const url = `${getProjectHomePage(currentProject.type, currentProject.environments)}${isSubOrganization && isNonScopedIdentity ? `?subOrganization=${currentOrg.slug}` : ""}`; - window.location.href = url.replace("$projectId", currentProject.id); + window.location.assign( + url.replace("$orgId", currentOrg.id).replace("$projectId", currentProject.id) + ); } } ); diff --git a/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx b/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx index 8064f070d..cfaf9933c 100644 --- a/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx +++ b/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx @@ -74,7 +74,9 @@ export const Page = () => { }); const url = `${getProjectHomePage(currentProject.type, currentProject.environments)}${isSubOrganization ? `?subOrganization=${currentOrg.slug}` : ""}`; - window.location.href = url.replace("$projectId", currentProject.id); + window.location.assign( + url.replace("$orgId", currentOrg.id).replace("$projectId", currentProject.id) + ); } } ); From ee89b9379080dac690ea5a3bda8c9f52e6352517 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Fri, 21 Nov 2025 19:32:11 +0530 Subject: [PATCH 12/13] chore: added comments for routing redirects --- frontend/src/routes.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frontend/src/routes.ts b/frontend/src/routes.ts index 4e1ba0169..265c64649 100644 --- a/frontend/src/routes.ts +++ b/frontend/src/routes.ts @@ -390,6 +390,8 @@ const organizationRoutes = route("/organizations/$orgId", [ ) ]), route("/networking", "organization/NetworkingPage/route.tsx"), + + // Added these dummy routes to avoid errors when navigating from the organization-redirect and project-redirect route("/projects/$", ""), route("/$", "") ]); From fcb949f4c3d27080a932527d80e6a70648eba375 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Fri, 21 Nov 2025 20:54:42 +0530 Subject: [PATCH 13/13] fix: review changes --- frontend/src/hooks/api/users/queries.tsx | 2 +- .../OrganizationLayout/components/NavBar/Navbar.tsx | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/frontend/src/hooks/api/users/queries.tsx b/frontend/src/hooks/api/users/queries.tsx index 7777712ae..88c52ed05 100644 --- a/frontend/src/hooks/api/users/queries.tsx +++ b/frontend/src/hooks/api/users/queries.tsx @@ -338,7 +338,7 @@ export const clearSession = (keepQueryClient?: boolean) => { sessionStorage.removeItem(SessionStorageKeys.CLI_TERMINAL_TOKEN); if (!keepQueryClient) { - qc.clear(); // Clear React Query cache + qc.invalidateQueries(); } }; diff --git a/frontend/src/layouts/OrganizationLayout/components/NavBar/Navbar.tsx b/frontend/src/layouts/OrganizationLayout/components/NavBar/Navbar.tsx index 36c4e2460..a3875ba49 100644 --- a/frontend/src/layouts/OrganizationLayout/components/NavBar/Navbar.tsx +++ b/frontend/src/layouts/OrganizationLayout/components/NavBar/Navbar.tsx @@ -249,7 +249,7 @@ export const Navbar = () => { const isServerAdminPanel = location.pathname.startsWith("/admin"); - const isOrgScope = location.pathname.startsWith("/organization"); // TODO: scott/akhil is this adequate? + const isProjectScope = location.pathname.startsWith(`/organizations/${currentOrg.id}/projects`); const handleOrgNav = async (org: Organization) => { if (currentOrg?.id === org.id) return; @@ -314,7 +314,7 @@ export const Navbar = () => { // TODO(scott): either add badge size/style variant or create designated component for namespace/org nav bar className={twMerge( "gap-x-1.5 text-sm", - (!isOrgScope || isSubOrganization) && + (isProjectScope || isSubOrganization) && "bg-transparent text-mineshaft-200 hover:!bg-transparent hover:underline [&>svg]:!text-org" )} > @@ -477,7 +477,7 @@ export const Navbar = () => { // TODO(scott): either add badge size/style variant or create designated component for namespace/org nav bar className={twMerge( "gap-x-1.5 text-sm", - !isOrgScope && + isProjectScope && "min-w-6 bg-transparent text-mineshaft-200 hover:!bg-transparent hover:underline [&>svg]:!text-sub-org" )} > @@ -541,7 +541,7 @@ export const Navbar = () => { )} - {!isOrgScope && ( + {isProjectScope && ( <>

/

{breadcrumbs ? (