mirror of
https://github.com/Infisical/infisical.git
synced 2026-01-09 23:48:05 -05:00
Merge pull request #3221 from Infisical/feat/allowShareToAnyoneEdition
Feat/allow share to anyone edition
This commit is contained in:
@@ -0,0 +1,32 @@
|
|||||||
|
import { Knex } from "knex";
|
||||||
|
|
||||||
|
import { TableName } from "../schemas";
|
||||||
|
|
||||||
|
export async function up(knex: Knex): Promise<void> {
|
||||||
|
if (await knex.schema.hasTable(TableName.Organization)) {
|
||||||
|
const hasSecretShareToAnyoneCol = await knex.schema.hasColumn(
|
||||||
|
TableName.Organization,
|
||||||
|
"allowSecretSharingOutsideOrganization"
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!hasSecretShareToAnyoneCol) {
|
||||||
|
await knex.schema.alterTable(TableName.Organization, (t) => {
|
||||||
|
t.boolean("allowSecretSharingOutsideOrganization").defaultTo(true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function down(knex: Knex): Promise<void> {
|
||||||
|
if (await knex.schema.hasTable(TableName.Organization)) {
|
||||||
|
const hasSecretShareToAnyoneCol = await knex.schema.hasColumn(
|
||||||
|
TableName.Organization,
|
||||||
|
"allowSecretSharingOutsideOrganization"
|
||||||
|
);
|
||||||
|
if (hasSecretShareToAnyoneCol) {
|
||||||
|
await knex.schema.alterTable(TableName.Organization, (t) => {
|
||||||
|
t.dropColumn("allowSecretSharingOutsideOrganization");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -22,7 +22,8 @@ export const OrganizationsSchema = z.object({
|
|||||||
kmsEncryptedDataKey: zodBuffer.nullable().optional(),
|
kmsEncryptedDataKey: zodBuffer.nullable().optional(),
|
||||||
defaultMembershipRole: z.string().default("member"),
|
defaultMembershipRole: z.string().default("member"),
|
||||||
enforceMfa: z.boolean().default(false),
|
enforceMfa: z.boolean().default(false),
|
||||||
selectedMfaMethod: z.string().nullable().optional()
|
selectedMfaMethod: z.string().nullable().optional(),
|
||||||
|
allowSecretSharingOutsideOrganization: z.boolean().default(true).nullable().optional()
|
||||||
});
|
});
|
||||||
|
|
||||||
export type TOrganizations = z.infer<typeof OrganizationsSchema>;
|
export type TOrganizations = z.infer<typeof OrganizationsSchema>;
|
||||||
|
|||||||
@@ -32,6 +32,10 @@ export enum OrgPermissionAdminConsoleAction {
|
|||||||
AccessAllProjects = "access-all-projects"
|
AccessAllProjects = "access-all-projects"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export enum OrgPermissionSecretShareAction {
|
||||||
|
ManageSettings = "manage-settings"
|
||||||
|
}
|
||||||
|
|
||||||
export enum OrgPermissionGatewayActions {
|
export enum OrgPermissionGatewayActions {
|
||||||
// is there a better word for this. This mean can an identity be a gateway
|
// is there a better word for this. This mean can an identity be a gateway
|
||||||
CreateGateways = "create-gateways",
|
CreateGateways = "create-gateways",
|
||||||
@@ -59,7 +63,8 @@ export enum OrgPermissionSubjects {
|
|||||||
ProjectTemplates = "project-templates",
|
ProjectTemplates = "project-templates",
|
||||||
AppConnections = "app-connections",
|
AppConnections = "app-connections",
|
||||||
Kmip = "kmip",
|
Kmip = "kmip",
|
||||||
Gateway = "gateway"
|
Gateway = "gateway",
|
||||||
|
SecretShare = "secret-share"
|
||||||
}
|
}
|
||||||
|
|
||||||
export type AppConnectionSubjectFields = {
|
export type AppConnectionSubjectFields = {
|
||||||
@@ -91,7 +96,8 @@ export type OrgPermissionSet =
|
|||||||
)
|
)
|
||||||
]
|
]
|
||||||
| [OrgPermissionAdminConsoleAction, OrgPermissionSubjects.AdminConsole]
|
| [OrgPermissionAdminConsoleAction, OrgPermissionSubjects.AdminConsole]
|
||||||
| [OrgPermissionKmipActions, OrgPermissionSubjects.Kmip];
|
| [OrgPermissionKmipActions, OrgPermissionSubjects.Kmip]
|
||||||
|
| [OrgPermissionSecretShareAction, OrgPermissionSubjects.SecretShare];
|
||||||
|
|
||||||
const AppConnectionConditionSchema = z
|
const AppConnectionConditionSchema = z
|
||||||
.object({
|
.object({
|
||||||
@@ -185,6 +191,12 @@ export const OrgPermissionSchema = z.discriminatedUnion("subject", [
|
|||||||
"Describe what action an entity can take."
|
"Describe what action an entity can take."
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
|
z.object({
|
||||||
|
subject: z.literal(OrgPermissionSubjects.SecretShare).describe("The entity this permission pertains to."),
|
||||||
|
action: CASL_ACTION_SCHEMA_NATIVE_ENUM(OrgPermissionSecretShareAction).describe(
|
||||||
|
"Describe what action an entity can take."
|
||||||
|
)
|
||||||
|
}),
|
||||||
z.object({
|
z.object({
|
||||||
subject: z.literal(OrgPermissionSubjects.Kmip).describe("The entity this permission pertains to."),
|
subject: z.literal(OrgPermissionSubjects.Kmip).describe("The entity this permission pertains to."),
|
||||||
action: CASL_ACTION_SCHEMA_NATIVE_ENUM(OrgPermissionKmipActions).describe(
|
action: CASL_ACTION_SCHEMA_NATIVE_ENUM(OrgPermissionKmipActions).describe(
|
||||||
@@ -292,6 +304,8 @@ const buildAdminPermission = () => {
|
|||||||
// the proxy assignment is temporary in order to prevent "more privilege" error during role assignment to MI
|
// the proxy assignment is temporary in order to prevent "more privilege" error during role assignment to MI
|
||||||
can(OrgPermissionKmipActions.Proxy, OrgPermissionSubjects.Kmip);
|
can(OrgPermissionKmipActions.Proxy, OrgPermissionSubjects.Kmip);
|
||||||
|
|
||||||
|
can(OrgPermissionSecretShareAction.ManageSettings, OrgPermissionSubjects.SecretShare);
|
||||||
|
|
||||||
return rules;
|
return rules;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -257,7 +257,8 @@ export const registerOrgRouter = async (server: FastifyZodProvider) => {
|
|||||||
scimEnabled: z.boolean().optional(),
|
scimEnabled: z.boolean().optional(),
|
||||||
defaultMembershipRoleSlug: slugSchema({ max: 64, field: "Default Membership Role" }).optional(),
|
defaultMembershipRoleSlug: slugSchema({ max: 64, field: "Default Membership Role" }).optional(),
|
||||||
enforceMfa: z.boolean().optional(),
|
enforceMfa: z.boolean().optional(),
|
||||||
selectedMfaMethod: z.nativeEnum(MfaMethod).optional()
|
selectedMfaMethod: z.nativeEnum(MfaMethod).optional(),
|
||||||
|
allowSecretSharingOutsideOrganization: z.boolean().optional()
|
||||||
}),
|
}),
|
||||||
response: {
|
response: {
|
||||||
200: z.object({
|
200: z.object({
|
||||||
|
|||||||
@@ -19,7 +19,11 @@ import {
|
|||||||
import { TGroupDALFactory } from "@app/ee/services/group/group-dal";
|
import { TGroupDALFactory } from "@app/ee/services/group/group-dal";
|
||||||
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
||||||
import { TOidcConfigDALFactory } from "@app/ee/services/oidc/oidc-config-dal";
|
import { TOidcConfigDALFactory } from "@app/ee/services/oidc/oidc-config-dal";
|
||||||
import { OrgPermissionActions, OrgPermissionSubjects } from "@app/ee/services/permission/org-permission";
|
import {
|
||||||
|
OrgPermissionActions,
|
||||||
|
OrgPermissionSecretShareAction,
|
||||||
|
OrgPermissionSubjects
|
||||||
|
} from "@app/ee/services/permission/org-permission";
|
||||||
import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service";
|
import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service";
|
||||||
import { ProjectPermissionActions, ProjectPermissionSub } from "@app/ee/services/permission/project-permission";
|
import { ProjectPermissionActions, ProjectPermissionSub } from "@app/ee/services/permission/project-permission";
|
||||||
import { TProjectUserAdditionalPrivilegeDALFactory } from "@app/ee/services/project-user-additional-privilege/project-user-additional-privilege-dal";
|
import { TProjectUserAdditionalPrivilegeDALFactory } from "@app/ee/services/project-user-additional-privilege/project-user-additional-privilege-dal";
|
||||||
@@ -286,12 +290,27 @@ export const orgServiceFactory = ({
|
|||||||
actorOrgId,
|
actorOrgId,
|
||||||
actorAuthMethod,
|
actorAuthMethod,
|
||||||
orgId,
|
orgId,
|
||||||
data: { name, slug, authEnforced, scimEnabled, defaultMembershipRoleSlug, enforceMfa, selectedMfaMethod }
|
data: {
|
||||||
|
name,
|
||||||
|
slug,
|
||||||
|
authEnforced,
|
||||||
|
scimEnabled,
|
||||||
|
defaultMembershipRoleSlug,
|
||||||
|
enforceMfa,
|
||||||
|
selectedMfaMethod,
|
||||||
|
allowSecretSharingOutsideOrganization
|
||||||
|
}
|
||||||
}: TUpdateOrgDTO) => {
|
}: TUpdateOrgDTO) => {
|
||||||
const appCfg = getConfig();
|
const appCfg = getConfig();
|
||||||
const { permission } = await permissionService.getOrgPermission(actor, actorId, orgId, actorAuthMethod, actorOrgId);
|
const { permission } = await permissionService.getOrgPermission(actor, actorId, orgId, actorAuthMethod, actorOrgId);
|
||||||
ForbiddenError.from(permission).throwUnlessCan(OrgPermissionActions.Edit, OrgPermissionSubjects.Settings);
|
ForbiddenError.from(permission).throwUnlessCan(OrgPermissionActions.Edit, OrgPermissionSubjects.Settings);
|
||||||
|
|
||||||
|
if (allowSecretSharingOutsideOrganization !== undefined) {
|
||||||
|
ForbiddenError.from(permission).throwUnlessCan(
|
||||||
|
OrgPermissionSecretShareAction.ManageSettings,
|
||||||
|
OrgPermissionSubjects.SecretShare
|
||||||
|
);
|
||||||
|
}
|
||||||
const plan = await licenseService.getPlan(orgId);
|
const plan = await licenseService.getPlan(orgId);
|
||||||
const currentOrg = await orgDAL.findOrgById(actorOrgId);
|
const currentOrg = await orgDAL.findOrgById(actorOrgId);
|
||||||
|
|
||||||
@@ -358,7 +377,8 @@ export const orgServiceFactory = ({
|
|||||||
scimEnabled,
|
scimEnabled,
|
||||||
defaultMembershipRole,
|
defaultMembershipRole,
|
||||||
enforceMfa,
|
enforceMfa,
|
||||||
selectedMfaMethod
|
selectedMfaMethod,
|
||||||
|
allowSecretSharingOutsideOrganization
|
||||||
});
|
});
|
||||||
if (!org) throw new NotFoundError({ message: `Organization with ID '${orgId}' not found` });
|
if (!org) throw new NotFoundError({ message: `Organization with ID '${orgId}' not found` });
|
||||||
return org;
|
return org;
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ export type TUpdateOrgDTO = {
|
|||||||
defaultMembershipRoleSlug: string;
|
defaultMembershipRoleSlug: string;
|
||||||
enforceMfa: boolean;
|
enforceMfa: boolean;
|
||||||
selectedMfaMethod: MfaMethod;
|
selectedMfaMethod: MfaMethod;
|
||||||
|
allowSecretSharingOutsideOrganization: boolean;
|
||||||
}>;
|
}>;
|
||||||
} & TOrgPermission;
|
} & TOrgPermission;
|
||||||
|
|
||||||
|
|||||||
@@ -82,6 +82,13 @@ export const secretSharingServiceFactory = ({
|
|||||||
if (!permission) throw new ForbiddenRequestError({ name: "User is not a part of the specified organization" });
|
if (!permission) throw new ForbiddenRequestError({ name: "User is not a part of the specified organization" });
|
||||||
$validateSharedSecretExpiry(expiresAt);
|
$validateSharedSecretExpiry(expiresAt);
|
||||||
|
|
||||||
|
const org = await orgDAL.findOrgById(orgId);
|
||||||
|
if (!org.allowSecretSharingOutsideOrganization && accessType === SecretSharingAccessType.Anyone) {
|
||||||
|
throw new BadRequestError({
|
||||||
|
message: "Organization does not allow sharing secrets to members outside of this organization"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (secretValue.length > 10_000) {
|
if (secretValue.length > 10_000) {
|
||||||
throw new BadRequestError({ message: "Shared secret value too long" });
|
throw new BadRequestError({ message: "Shared secret value too long" });
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,11 @@ export const ROUTE_PATHS = Object.freeze({
|
|||||||
),
|
),
|
||||||
SecretSharing: setRoute(
|
SecretSharing: setRoute(
|
||||||
"/organization/secret-sharing",
|
"/organization/secret-sharing",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing"
|
"/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing/"
|
||||||
|
),
|
||||||
|
SecretSharingSettings: setRoute(
|
||||||
|
"/organization/secret-sharing/settings",
|
||||||
|
"/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing/settings"
|
||||||
),
|
),
|
||||||
SettingsPage: setRoute(
|
SettingsPage: setRoute(
|
||||||
"/organization/settings",
|
"/organization/settings",
|
||||||
|
|||||||
@@ -34,13 +34,18 @@ export enum OrgPermissionSubjects {
|
|||||||
ProjectTemplates = "project-templates",
|
ProjectTemplates = "project-templates",
|
||||||
AppConnections = "app-connections",
|
AppConnections = "app-connections",
|
||||||
Kmip = "kmip",
|
Kmip = "kmip",
|
||||||
Gateway = "gateway"
|
Gateway = "gateway",
|
||||||
|
SecretShare = "secret-share"
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum OrgPermissionAdminConsoleAction {
|
export enum OrgPermissionAdminConsoleAction {
|
||||||
AccessAllProjects = "access-all-projects"
|
AccessAllProjects = "access-all-projects"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export enum OrgPermissionSecretShareAction {
|
||||||
|
ManageSettings = "manage-settings"
|
||||||
|
}
|
||||||
|
|
||||||
export enum OrgPermissionAppConnectionActions {
|
export enum OrgPermissionAppConnectionActions {
|
||||||
Read = "read",
|
Read = "read",
|
||||||
Create = "create",
|
Create = "create",
|
||||||
@@ -78,7 +83,8 @@ export type OrgPermissionSet =
|
|||||||
| [OrgPermissionActions, OrgPermissionSubjects.ProjectTemplates]
|
| [OrgPermissionActions, OrgPermissionSubjects.ProjectTemplates]
|
||||||
| [OrgPermissionAppConnectionActions, OrgPermissionSubjects.AppConnections]
|
| [OrgPermissionAppConnectionActions, OrgPermissionSubjects.AppConnections]
|
||||||
| [OrgPermissionKmipActions, OrgPermissionSubjects.Kmip]
|
| [OrgPermissionKmipActions, OrgPermissionSubjects.Kmip]
|
||||||
| [OrgGatewayPermissionActions, OrgPermissionSubjects.Gateway];
|
| [OrgGatewayPermissionActions, OrgPermissionSubjects.Gateway]
|
||||||
|
| [OrgPermissionSecretShareAction, OrgPermissionSubjects.SecretShare];
|
||||||
// TODO(scott): add back once org UI refactored
|
// TODO(scott): add back once org UI refactored
|
||||||
// | [
|
// | [
|
||||||
// OrgPermissionAppConnectionActions,
|
// OrgPermissionAppConnectionActions,
|
||||||
|
|||||||
@@ -109,7 +109,8 @@ export const useUpdateOrg = () => {
|
|||||||
orgId,
|
orgId,
|
||||||
defaultMembershipRoleSlug,
|
defaultMembershipRoleSlug,
|
||||||
enforceMfa,
|
enforceMfa,
|
||||||
selectedMfaMethod
|
selectedMfaMethod,
|
||||||
|
allowSecretSharingOutsideOrganization
|
||||||
}) => {
|
}) => {
|
||||||
return apiRequest.patch(`/api/v1/organization/${orgId}`, {
|
return apiRequest.patch(`/api/v1/organization/${orgId}`, {
|
||||||
name,
|
name,
|
||||||
@@ -118,7 +119,8 @@ export const useUpdateOrg = () => {
|
|||||||
slug,
|
slug,
|
||||||
defaultMembershipRoleSlug,
|
defaultMembershipRoleSlug,
|
||||||
enforceMfa,
|
enforceMfa,
|
||||||
selectedMfaMethod
|
selectedMfaMethod,
|
||||||
|
allowSecretSharingOutsideOrganization
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ export type Organization = {
|
|||||||
defaultMembershipRole: string;
|
defaultMembershipRole: string;
|
||||||
enforceMfa: boolean;
|
enforceMfa: boolean;
|
||||||
selectedMfaMethod?: MfaMethod;
|
selectedMfaMethod?: MfaMethod;
|
||||||
|
allowSecretSharingOutsideOrganization?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type UpdateOrgDTO = {
|
export type UpdateOrgDTO = {
|
||||||
@@ -26,6 +27,7 @@ export type UpdateOrgDTO = {
|
|||||||
defaultMembershipRoleSlug?: string;
|
defaultMembershipRoleSlug?: string;
|
||||||
enforceMfa?: boolean;
|
enforceMfa?: boolean;
|
||||||
selectedMfaMethod?: MfaMethod;
|
selectedMfaMethod?: MfaMethod;
|
||||||
|
allowSecretSharingOutsideOrganization?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type BillingDetails = {
|
export type BillingDetails = {
|
||||||
|
|||||||
@@ -1,30 +1,33 @@
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { faMobile } from "@fortawesome/free-solid-svg-icons";
|
import { faMobile } from "@fortawesome/free-solid-svg-icons";
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
import { Link, linkOptions, Outlet, useLocation, useRouterState } from "@tanstack/react-router";
|
import { linkOptions, Outlet, useLocation, useRouterState } from "@tanstack/react-router";
|
||||||
import { AnimatePresence, motion } from "framer-motion";
|
import { AnimatePresence, motion } from "framer-motion";
|
||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
|
|
||||||
import { CreateOrgModal } from "@app/components/organization/CreateOrgModal";
|
import { CreateOrgModal } from "@app/components/organization/CreateOrgModal";
|
||||||
import { Banner } from "@app/components/page-frames/Banner";
|
import { Banner } from "@app/components/page-frames/Banner";
|
||||||
import {
|
import { BreadcrumbContainer, TBreadcrumbFormat } from "@app/components/v2";
|
||||||
BreadcrumbContainer,
|
import { OrgPermissionSubjects, useOrgPermission, useServerConfig } from "@app/context";
|
||||||
Menu,
|
import { OrgPermissionSecretShareAction } from "@app/context/OrgPermissionContext/types";
|
||||||
MenuGroup,
|
|
||||||
MenuItem,
|
|
||||||
TBreadcrumbFormat
|
|
||||||
} from "@app/components/v2";
|
|
||||||
import { useServerConfig } from "@app/context";
|
|
||||||
import { usePopUp } from "@app/hooks";
|
import { usePopUp } from "@app/hooks";
|
||||||
|
|
||||||
import { InsecureConnectionBanner } from "./components/InsecureConnectionBanner";
|
import { InsecureConnectionBanner } from "./components/InsecureConnectionBanner";
|
||||||
import { MinimizedOrgSidebar } from "./components/MinimizedOrgSidebar";
|
import { MinimizedOrgSidebar } from "./components/MinimizedOrgSidebar";
|
||||||
import { SidebarHeader } from "./components/SidebarHeader";
|
import { SidebarHeader } from "./components/SidebarHeader";
|
||||||
|
import { DefaultSideBar, SecretSharingSideBar } from "./ProductsSideBar";
|
||||||
|
|
||||||
export const OrganizationLayout = () => {
|
export const OrganizationLayout = () => {
|
||||||
const matches = useRouterState({ select: (s) => s.matches.at(-1)?.context });
|
const matches = useRouterState({ select: (s) => s.matches.at(-1)?.context });
|
||||||
const location = useLocation();
|
const location = useLocation();
|
||||||
const { config } = useServerConfig();
|
const { config } = useServerConfig();
|
||||||
|
const { permission } = useOrgPermission();
|
||||||
|
|
||||||
|
const shouldShowProductsSidebar = permission.can(
|
||||||
|
OrgPermissionSecretShareAction.ManageSettings,
|
||||||
|
OrgPermissionSubjects.SecretShare
|
||||||
|
);
|
||||||
|
|
||||||
const isOrganizationSpecificPage = location.pathname.startsWith("/organization");
|
const isOrganizationSpecificPage = location.pathname.startsWith("/organization");
|
||||||
const breadcrumbs =
|
const breadcrumbs =
|
||||||
isOrganizationSpecificPage && matches && "breadcrumbs" in matches
|
isOrganizationSpecificPage && matches && "breadcrumbs" in matches
|
||||||
@@ -35,16 +38,23 @@ export const OrganizationLayout = () => {
|
|||||||
|
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
const isSecretSharingPage = (
|
||||||
|
[
|
||||||
|
linkOptions({ to: "/organization/secret-sharing" }).to,
|
||||||
|
linkOptions({ to: "/organization/secret-sharing/settings" }).to
|
||||||
|
] as string[]
|
||||||
|
).includes(location.pathname);
|
||||||
|
|
||||||
const shouldShowOrgSidebar =
|
const shouldShowOrgSidebar =
|
||||||
location.pathname.startsWith("/organization") &&
|
location.pathname.startsWith("/organization") &&
|
||||||
|
(!isSecretSharingPage || shouldShowProductsSidebar) &&
|
||||||
!(
|
!(
|
||||||
[
|
[
|
||||||
linkOptions({ to: "/organization/secret-manager/overview" }).to,
|
linkOptions({ to: "/organization/secret-manager/overview" }).to,
|
||||||
linkOptions({ to: "/organization/cert-manager/overview" }).to,
|
linkOptions({ to: "/organization/cert-manager/overview" }).to,
|
||||||
linkOptions({ to: "/organization/ssh/overview" }).to,
|
linkOptions({ to: "/organization/ssh/overview" }).to,
|
||||||
linkOptions({ to: "/organization/kms/overview" }).to,
|
linkOptions({ to: "/organization/kms/overview" }).to,
|
||||||
linkOptions({ to: "/organization/secret-scanning" }).to,
|
linkOptions({ to: "/organization/secret-scanning" }).to
|
||||||
linkOptions({ to: "/organization/secret-sharing" }).to
|
|
||||||
] as string[]
|
] as string[]
|
||||||
).includes(location.pathname);
|
).includes(location.pathname);
|
||||||
|
|
||||||
@@ -73,58 +83,7 @@ export const OrganizationLayout = () => {
|
|||||||
<div className="p-2 pt-3">
|
<div className="p-2 pt-3">
|
||||||
<SidebarHeader />
|
<SidebarHeader />
|
||||||
</div>
|
</div>
|
||||||
<Menu>
|
{isSecretSharingPage ? <SecretSharingSideBar /> : <DefaultSideBar />}
|
||||||
<MenuGroup title="Organization Control">
|
|
||||||
<Link to="/organization/audit-logs">
|
|
||||||
{({ isActive }) => (
|
|
||||||
<MenuItem isSelected={isActive} icon="moving-block">
|
|
||||||
Audit Logs
|
|
||||||
</MenuItem>
|
|
||||||
)}
|
|
||||||
</Link>
|
|
||||||
{(window.location.origin.includes("https://app.infisical.com") ||
|
|
||||||
window.location.origin.includes("https://eu.infisical.com") ||
|
|
||||||
window.location.origin.includes("https://gamma.infisical.com")) && (
|
|
||||||
<Link to="/organization/billing">
|
|
||||||
{({ isActive }) => (
|
|
||||||
<MenuItem isSelected={isActive} icon="spinning-coin">
|
|
||||||
Usage & Billing
|
|
||||||
</MenuItem>
|
|
||||||
)}
|
|
||||||
</Link>
|
|
||||||
)}
|
|
||||||
</MenuGroup>
|
|
||||||
<MenuGroup title="Other">
|
|
||||||
<Link to="/organization/access-management">
|
|
||||||
{({ isActive }) => (
|
|
||||||
<MenuItem isSelected={isActive} icon="groups">
|
|
||||||
Access Control
|
|
||||||
</MenuItem>
|
|
||||||
)}
|
|
||||||
</Link>
|
|
||||||
<Link to="/organization/app-connections">
|
|
||||||
{({ isActive }) => (
|
|
||||||
<MenuItem isSelected={isActive} icon="jigsaw-puzzle">
|
|
||||||
App Connections
|
|
||||||
</MenuItem>
|
|
||||||
)}
|
|
||||||
</Link>
|
|
||||||
<Link to="/organization/gateways">
|
|
||||||
{({ isActive }) => (
|
|
||||||
<MenuItem isSelected={isActive} icon="gateway" iconMode="reverse">
|
|
||||||
Gateways
|
|
||||||
</MenuItem>
|
|
||||||
)}
|
|
||||||
</Link>
|
|
||||||
<Link to="/organization/settings">
|
|
||||||
{({ isActive }) => (
|
|
||||||
<MenuItem isSelected={isActive} icon="toggle-settings">
|
|
||||||
Organization Settings
|
|
||||||
</MenuItem>
|
|
||||||
)}
|
|
||||||
</Link>
|
|
||||||
</MenuGroup>
|
|
||||||
</Menu>
|
|
||||||
</nav>
|
</nav>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
import { Link } from "@tanstack/react-router";
|
||||||
|
|
||||||
|
import { Menu, MenuGroup, MenuItem } from "@app/components/v2";
|
||||||
|
|
||||||
|
export const DefaultSideBar = () => (
|
||||||
|
<Menu>
|
||||||
|
<MenuGroup title="Organization Control">
|
||||||
|
<Link to="/organization/audit-logs">
|
||||||
|
{({ isActive }) => (
|
||||||
|
<MenuItem isSelected={isActive} icon="moving-block">
|
||||||
|
Audit Logs
|
||||||
|
</MenuItem>
|
||||||
|
)}
|
||||||
|
</Link>
|
||||||
|
{(window.location.origin.includes("https://app.infisical.com") ||
|
||||||
|
window.location.origin.includes("https://eu.infisical.com") ||
|
||||||
|
window.location.origin.includes("https://gamma.infisical.com")) && (
|
||||||
|
<Link to="/organization/billing">
|
||||||
|
{({ isActive }) => (
|
||||||
|
<MenuItem isSelected={isActive} icon="spinning-coin">
|
||||||
|
Usage & Billing
|
||||||
|
</MenuItem>
|
||||||
|
)}
|
||||||
|
</Link>
|
||||||
|
)}
|
||||||
|
</MenuGroup>
|
||||||
|
<MenuGroup title="Other">
|
||||||
|
<Link to="/organization/access-management">
|
||||||
|
{({ isActive }) => (
|
||||||
|
<MenuItem isSelected={isActive} icon="groups">
|
||||||
|
Access Control
|
||||||
|
</MenuItem>
|
||||||
|
)}
|
||||||
|
</Link>
|
||||||
|
<Link to="/organization/app-connections">
|
||||||
|
{({ isActive }) => (
|
||||||
|
<MenuItem isSelected={isActive} icon="jigsaw-puzzle">
|
||||||
|
App Connections
|
||||||
|
</MenuItem>
|
||||||
|
)}
|
||||||
|
</Link>
|
||||||
|
<Link to="/organization/gateways">
|
||||||
|
{({ isActive }) => (
|
||||||
|
<MenuItem isSelected={isActive} icon="gateway" iconMode="reverse">
|
||||||
|
Gateways
|
||||||
|
</MenuItem>
|
||||||
|
)}
|
||||||
|
</Link>
|
||||||
|
<Link to="/organization/settings">
|
||||||
|
{({ isActive }) => (
|
||||||
|
<MenuItem isSelected={isActive} icon="toggle-settings">
|
||||||
|
Organization Settings
|
||||||
|
</MenuItem>
|
||||||
|
)}
|
||||||
|
</Link>
|
||||||
|
</MenuGroup>
|
||||||
|
</Menu>
|
||||||
|
);
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
import { Link, useMatchRoute } from "@tanstack/react-router";
|
||||||
|
|
||||||
|
import { Menu, MenuGroup, MenuItem } from "@app/components/v2";
|
||||||
|
|
||||||
|
export const SecretSharingSideBar = () => {
|
||||||
|
const matchRoute = useMatchRoute();
|
||||||
|
const isOverviewActive = !!matchRoute({
|
||||||
|
to: "/organization/secret-sharing",
|
||||||
|
fuzzy: false
|
||||||
|
});
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Menu>
|
||||||
|
<MenuGroup title="Overview">
|
||||||
|
<Link to="/organization/secret-sharing">
|
||||||
|
{() => (
|
||||||
|
<MenuItem isSelected={isOverviewActive} icon="lock-closed">
|
||||||
|
Secret Sharing
|
||||||
|
</MenuItem>
|
||||||
|
)}
|
||||||
|
</Link>
|
||||||
|
</MenuGroup>
|
||||||
|
<MenuGroup title="Other">
|
||||||
|
<Link to="/organization/secret-sharing/settings">
|
||||||
|
{({ isActive }) => (
|
||||||
|
<MenuItem isSelected={isActive} icon="toggle-settings">
|
||||||
|
Settings
|
||||||
|
</MenuItem>
|
||||||
|
)}
|
||||||
|
</Link>
|
||||||
|
</MenuGroup>
|
||||||
|
</Menu>
|
||||||
|
);
|
||||||
|
};
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
export * from "./DefaultSideBar";
|
||||||
|
export * from "./SecretSharingSideBar";
|
||||||
@@ -5,7 +5,8 @@ import { OrgPermissionSubjects } from "@app/context";
|
|||||||
import {
|
import {
|
||||||
OrgGatewayPermissionActions,
|
OrgGatewayPermissionActions,
|
||||||
OrgPermissionAppConnectionActions,
|
OrgPermissionAppConnectionActions,
|
||||||
OrgPermissionKmipActions
|
OrgPermissionKmipActions,
|
||||||
|
OrgPermissionSecretShareAction
|
||||||
} from "@app/context/OrgPermissionContext/types";
|
} from "@app/context/OrgPermissionContext/types";
|
||||||
import { TPermission } from "@app/hooks/api/roles/types";
|
import { TPermission } from "@app/hooks/api/roles/types";
|
||||||
|
|
||||||
@@ -50,6 +51,12 @@ const adminConsolePermissionSchmea = z
|
|||||||
})
|
})
|
||||||
.optional();
|
.optional();
|
||||||
|
|
||||||
|
const secretSharingPermissionSchema = z
|
||||||
|
.object({
|
||||||
|
[OrgPermissionSecretShareAction.ManageSettings]: z.boolean().optional()
|
||||||
|
})
|
||||||
|
.optional();
|
||||||
|
|
||||||
export const formSchema = z.object({
|
export const formSchema = z.object({
|
||||||
name: z.string().trim(),
|
name: z.string().trim(),
|
||||||
description: z.string().trim().optional(),
|
description: z.string().trim().optional(),
|
||||||
@@ -83,7 +90,8 @@ export const formSchema = z.object({
|
|||||||
[OrgPermissionSubjects.ProjectTemplates]: generalPermissionSchema,
|
[OrgPermissionSubjects.ProjectTemplates]: generalPermissionSchema,
|
||||||
"app-connections": appConnectionsPermissionSchema,
|
"app-connections": appConnectionsPermissionSchema,
|
||||||
kmip: kmipPermissionSchema,
|
kmip: kmipPermissionSchema,
|
||||||
gateway: orgGatewayPermissionSchema
|
gateway: orgGatewayPermissionSchema,
|
||||||
|
"secret-share": secretSharingPermissionSchema
|
||||||
})
|
})
|
||||||
.optional()
|
.optional()
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -0,0 +1,130 @@
|
|||||||
|
import { useEffect, useMemo } from "react";
|
||||||
|
import { Control, Controller, UseFormSetValue, useWatch } from "react-hook-form";
|
||||||
|
import { faChevronDown, faChevronRight } from "@fortawesome/free-solid-svg-icons";
|
||||||
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
|
|
||||||
|
import { createNotification } from "@app/components/notifications";
|
||||||
|
import { Checkbox, Select, SelectItem, Td, Tr } from "@app/components/v2";
|
||||||
|
import { useToggle } from "@app/hooks";
|
||||||
|
|
||||||
|
import { TFormSchema } from "../OrgRoleModifySection.utils";
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
isEditable: boolean;
|
||||||
|
setValue: UseFormSetValue<TFormSchema>;
|
||||||
|
control: Control<TFormSchema>;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum Permission {
|
||||||
|
NoAccess = "no-access",
|
||||||
|
Custom = "custom"
|
||||||
|
}
|
||||||
|
|
||||||
|
const PERMISSION_ACTIONS = [{ action: "manage-settings", label: "Manage settings" }] as const;
|
||||||
|
|
||||||
|
export const OrgPermissionSecretShareRow = ({ isEditable, control, setValue }: Props) => {
|
||||||
|
const [isRowExpanded, setIsRowExpanded] = useToggle();
|
||||||
|
const [isCustom, setIsCustom] = useToggle();
|
||||||
|
|
||||||
|
const rule = useWatch({
|
||||||
|
control,
|
||||||
|
name: "permissions.secret-share"
|
||||||
|
});
|
||||||
|
|
||||||
|
const selectedPermissionCategory = useMemo(() => {
|
||||||
|
if (rule?.["manage-settings"]) {
|
||||||
|
return Permission.Custom;
|
||||||
|
}
|
||||||
|
return Permission.NoAccess;
|
||||||
|
}, [rule, isCustom]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (selectedPermissionCategory === Permission.Custom) setIsCustom.on();
|
||||||
|
else setIsCustom.off();
|
||||||
|
}, [selectedPermissionCategory]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const isRowCustom = selectedPermissionCategory === Permission.Custom;
|
||||||
|
if (isRowCustom) {
|
||||||
|
setIsRowExpanded.on();
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
const handlePermissionChange = (val: Permission) => {
|
||||||
|
if (!val) return;
|
||||||
|
if (val === Permission.Custom) {
|
||||||
|
setIsRowExpanded.on();
|
||||||
|
setIsCustom.on();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
setIsCustom.off();
|
||||||
|
|
||||||
|
if (val === Permission.NoAccess) {
|
||||||
|
setValue("permissions.secret-share", { "manage-settings": false }, { shouldDirty: true });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Tr
|
||||||
|
className="h-10 cursor-pointer transition-colors duration-100 hover:bg-mineshaft-700"
|
||||||
|
onClick={() => setIsRowExpanded.toggle()}
|
||||||
|
>
|
||||||
|
<Td>
|
||||||
|
<FontAwesomeIcon icon={isRowExpanded ? faChevronDown : faChevronRight} />
|
||||||
|
</Td>
|
||||||
|
<Td>Secret Share</Td>
|
||||||
|
<Td>
|
||||||
|
<Select
|
||||||
|
value={selectedPermissionCategory}
|
||||||
|
className="w-40 bg-mineshaft-600"
|
||||||
|
dropdownContainerClassName="border border-mineshaft-600 bg-mineshaft-800"
|
||||||
|
onValueChange={handlePermissionChange}
|
||||||
|
isDisabled={!isEditable}
|
||||||
|
>
|
||||||
|
<SelectItem value={Permission.NoAccess}>No Access</SelectItem>
|
||||||
|
<SelectItem value={Permission.Custom}>Custom</SelectItem>
|
||||||
|
</Select>
|
||||||
|
</Td>
|
||||||
|
</Tr>
|
||||||
|
{isRowExpanded && (
|
||||||
|
<Tr>
|
||||||
|
<Td
|
||||||
|
colSpan={3}
|
||||||
|
className={`bg-bunker-600 px-0 py-0 ${isRowExpanded && "border-mineshaft-500 p-8"}`}
|
||||||
|
>
|
||||||
|
<div className="grid grid-cols-3 gap-4">
|
||||||
|
{PERMISSION_ACTIONS.map(({ action, label }) => {
|
||||||
|
return (
|
||||||
|
<Controller
|
||||||
|
name={`permissions.secret-share.${action}`}
|
||||||
|
key={`permissions.secret-share.${action}`}
|
||||||
|
control={control}
|
||||||
|
render={({ field }) => (
|
||||||
|
<Checkbox
|
||||||
|
isChecked={field.value}
|
||||||
|
onCheckedChange={(e) => {
|
||||||
|
if (!isEditable) {
|
||||||
|
createNotification({
|
||||||
|
type: "error",
|
||||||
|
text: "Failed to update default role"
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
field.onChange(e);
|
||||||
|
}}
|
||||||
|
id={`permissions.secret-share.${action}`}
|
||||||
|
>
|
||||||
|
{label}
|
||||||
|
</Checkbox>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
</Td>
|
||||||
|
</Tr>
|
||||||
|
)}
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
@@ -74,7 +74,7 @@ type Props = {
|
|||||||
title: string;
|
title: string;
|
||||||
formName: keyof Omit<
|
formName: keyof Omit<
|
||||||
Exclude<TFormSchema["permissions"], undefined>,
|
Exclude<TFormSchema["permissions"], undefined>,
|
||||||
"workspace" | "organization-admin-console" | "kmip" | "gateway"
|
"workspace" | "organization-admin-console" | "kmip" | "gateway" | "secret-share"
|
||||||
>;
|
>;
|
||||||
setValue: UseFormSetValue<TFormSchema>;
|
setValue: UseFormSetValue<TFormSchema>;
|
||||||
control: Control<TFormSchema>;
|
control: Control<TFormSchema>;
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import {
|
|||||||
import { OrgPermissionAdminConsoleRow } from "./OrgPermissionAdminConsoleRow";
|
import { OrgPermissionAdminConsoleRow } from "./OrgPermissionAdminConsoleRow";
|
||||||
import { OrgGatewayPermissionRow } from "./OrgPermissionGatewayRow";
|
import { OrgGatewayPermissionRow } from "./OrgPermissionGatewayRow";
|
||||||
import { OrgPermissionKmipRow } from "./OrgPermissionKmipRow";
|
import { OrgPermissionKmipRow } from "./OrgPermissionKmipRow";
|
||||||
|
import { OrgPermissionSecretShareRow } from "./OrgPermissionSecretShareRow";
|
||||||
import { OrgRoleWorkspaceRow } from "./OrgRoleWorkspaceRow";
|
import { OrgRoleWorkspaceRow } from "./OrgRoleWorkspaceRow";
|
||||||
import { RolePermissionRow } from "./RolePermissionRow";
|
import { RolePermissionRow } from "./RolePermissionRow";
|
||||||
|
|
||||||
@@ -177,6 +178,11 @@ export const RolePermissionsSection = ({ roleId }: Props) => {
|
|||||||
setValue={setValue}
|
setValue={setValue}
|
||||||
isEditable={isCustomRole}
|
isEditable={isCustomRole}
|
||||||
/>
|
/>
|
||||||
|
<OrgPermissionSecretShareRow
|
||||||
|
control={control}
|
||||||
|
setValue={setValue}
|
||||||
|
isEditable={isCustomRole}
|
||||||
|
/>
|
||||||
<OrgRoleWorkspaceRow
|
<OrgRoleWorkspaceRow
|
||||||
control={control}
|
control={control}
|
||||||
setValue={setValue}
|
setValue={setValue}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import { Modal, ModalContent } from "@app/components/v2";
|
import { Modal, ModalContent } from "@app/components/v2";
|
||||||
|
import { useOrganization } from "@app/context";
|
||||||
import { UsePopUpState } from "@app/hooks/usePopUp";
|
import { UsePopUpState } from "@app/hooks/usePopUp";
|
||||||
import { ShareSecretForm } from "@app/pages/public/ShareSecretPage/components";
|
import { ShareSecretForm } from "@app/pages/public/ShareSecretPage/components";
|
||||||
|
|
||||||
@@ -11,6 +12,7 @@ type Props = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const AddShareSecretModal = ({ popUp, handlePopUpToggle }: Props) => {
|
export const AddShareSecretModal = ({ popUp, handlePopUpToggle }: Props) => {
|
||||||
|
const { currentOrg } = useOrganization();
|
||||||
return (
|
return (
|
||||||
<Modal
|
<Modal
|
||||||
isOpen={popUp?.createSharedSecret?.isOpen}
|
isOpen={popUp?.createSharedSecret?.isOpen}
|
||||||
@@ -25,6 +27,9 @@ export const AddShareSecretModal = ({ popUp, handlePopUpToggle }: Props) => {
|
|||||||
<ShareSecretForm
|
<ShareSecretForm
|
||||||
isPublic={false}
|
isPublic={false}
|
||||||
value={(popUp.createSharedSecret.data as { value?: string })?.value}
|
value={(popUp.createSharedSecret.data as { value?: string })?.value}
|
||||||
|
allowSecretSharingOutsideOrganization={
|
||||||
|
currentOrg?.allowSecretSharingOutsideOrganization ?? true
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
</ModalContent>
|
</ModalContent>
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const SecretSharingQueryParams = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing"
|
"/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing/"
|
||||||
)({
|
)({
|
||||||
component: SecretSharingPage,
|
component: SecretSharingPage,
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
import { Helmet } from "react-helmet";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
|
import { PageHeader } from "@app/components/v2";
|
||||||
|
import {
|
||||||
|
OrgPermissionSecretShareAction,
|
||||||
|
OrgPermissionSubjects
|
||||||
|
} from "@app/context/OrgPermissionContext/types";
|
||||||
|
import { withPermission } from "@app/hoc";
|
||||||
|
|
||||||
|
import { SecretSharingSettingsTabGroup } from "./components";
|
||||||
|
|
||||||
|
export const SecretSharingSettingsPage = withPermission(
|
||||||
|
() => {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Helmet>
|
||||||
|
<title>{t("common.head-title", { title: t("settings.org.title") })}</title>
|
||||||
|
</Helmet>
|
||||||
|
<div className="flex w-full justify-center bg-bunker-800 text-white">
|
||||||
|
<div className="w-full max-w-7xl">
|
||||||
|
<PageHeader title={t("settings.org.title")} />
|
||||||
|
<SecretSharingSettingsTabGroup />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
{
|
||||||
|
action: OrgPermissionSecretShareAction.ManageSettings,
|
||||||
|
subject: OrgPermissionSubjects.SecretShare
|
||||||
|
}
|
||||||
|
);
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
import { createNotification } from "@app/components/notifications";
|
||||||
|
import { OrgPermissionCan } from "@app/components/permissions";
|
||||||
|
import { Switch } from "@app/components/v2";
|
||||||
|
import { OrgPermissionActions, OrgPermissionSubjects, useOrganization } from "@app/context";
|
||||||
|
import { useUpdateOrg } from "@app/hooks/api";
|
||||||
|
|
||||||
|
export const SecretSharingAllowShareToAnyone = () => {
|
||||||
|
const { currentOrg } = useOrganization();
|
||||||
|
const { mutateAsync } = useUpdateOrg();
|
||||||
|
|
||||||
|
const handleSecretSharingToggle = async (value: boolean) => {
|
||||||
|
try {
|
||||||
|
if (!currentOrg?.id) return;
|
||||||
|
|
||||||
|
await mutateAsync({
|
||||||
|
orgId: currentOrg.id,
|
||||||
|
allowSecretSharingOutsideOrganization: value
|
||||||
|
});
|
||||||
|
|
||||||
|
createNotification({
|
||||||
|
text: `Successfully ${value ? "enabled" : "disabled"} secret sharing to members outside of this organization`,
|
||||||
|
type: "success"
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
createNotification({
|
||||||
|
text: (err as { response: { data: { message: string } } }).response.data.message,
|
||||||
|
type: "error"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="mb-4 rounded-lg border border-mineshaft-600 bg-mineshaft-900 p-6">
|
||||||
|
<div className="py-4">
|
||||||
|
<div className="mb-2 flex justify-between">
|
||||||
|
<h3 className="text-md text-mineshaft-100">
|
||||||
|
Allow sharing secrets to members outside of this organization
|
||||||
|
</h3>
|
||||||
|
<OrgPermissionCan I={OrgPermissionActions.Edit} a={OrgPermissionSubjects.Settings}>
|
||||||
|
{(isAllowed) => (
|
||||||
|
<Switch
|
||||||
|
id="enable-secret-sharing-outside-org"
|
||||||
|
onCheckedChange={(value) => handleSecretSharingToggle(value)}
|
||||||
|
isChecked={currentOrg?.allowSecretSharingOutsideOrganization ?? false}
|
||||||
|
isDisabled={!isAllowed}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</OrgPermissionCan>
|
||||||
|
</div>
|
||||||
|
<p className="text-sm text-mineshaft-300">
|
||||||
|
If enabled, team members will be able to share secrets to members outside of this
|
||||||
|
organization
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
export { SecretSharingAllowShareToAnyone } from "./SecretSharingAllowShareToAnyone";
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
import { SecretSharingAllowShareToAnyone } from "../SecretSharingAllowShareToAnyone";
|
||||||
|
|
||||||
|
export const SecretSharingSettingsGeneralTab = () => {
|
||||||
|
return (
|
||||||
|
<div className="w-full">
|
||||||
|
<SecretSharingAllowShareToAnyone />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
export { SecretSharingSettingsGeneralTab } from "./SecretSharingSettingsGeneralTab";
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
import { useState } from "react";
|
||||||
|
import { useSearch } from "@tanstack/react-router";
|
||||||
|
|
||||||
|
import { Tab, TabList, TabPanel, Tabs } from "@app/components/v2";
|
||||||
|
import { ROUTE_PATHS } from "@app/const/routes";
|
||||||
|
|
||||||
|
import { SecretSharingSettingsGeneralTab } from "../SecretSharingSettingsGeneralTab";
|
||||||
|
|
||||||
|
export const SecretSharingSettingsTabGroup = () => {
|
||||||
|
const search = useSearch({
|
||||||
|
from: ROUTE_PATHS.Organization.SecretSharingSettings.id
|
||||||
|
});
|
||||||
|
const tabs = [
|
||||||
|
{
|
||||||
|
name: "General",
|
||||||
|
key: "tab-secret-sharing-general",
|
||||||
|
component: SecretSharingSettingsGeneralTab
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
const [selectedTab, setSelectedTab] = useState(search.selectedTab || tabs[0].key);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Tabs value={selectedTab} onValueChange={setSelectedTab}>
|
||||||
|
<TabList>
|
||||||
|
{tabs.map((tab) => (
|
||||||
|
<Tab value={tab.key} key={tab.key}>
|
||||||
|
{tab.name}
|
||||||
|
</Tab>
|
||||||
|
))}
|
||||||
|
</TabList>
|
||||||
|
{tabs.map(({ key, component: Component }) => (
|
||||||
|
<TabPanel value={key} key={`tab-panel-${key}`}>
|
||||||
|
<Component />
|
||||||
|
</TabPanel>
|
||||||
|
))}
|
||||||
|
</Tabs>
|
||||||
|
);
|
||||||
|
};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
export { SecretSharingSettingsTabGroup } from "./SecretSharingSettingsTabGroup";
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
export { SecretSharingSettingsTabGroup } from "./SecretSharingSettingsTabGroup";
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
import { faHome } from "@fortawesome/free-solid-svg-icons";
|
||||||
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
|
import { createFileRoute, linkOptions, stripSearchParams } from "@tanstack/react-router";
|
||||||
|
import { zodValidator } from "@tanstack/zod-adapter";
|
||||||
|
import { z } from "zod";
|
||||||
|
|
||||||
|
import { SecretSharingSettingsPage } from "./SecretSharingSettingsPage";
|
||||||
|
|
||||||
|
const SettingsPageQueryParams = z.object({
|
||||||
|
selectedTab: z.string().catch("")
|
||||||
|
});
|
||||||
|
|
||||||
|
export const Route = createFileRoute(
|
||||||
|
"/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing/settings"
|
||||||
|
)({
|
||||||
|
component: SecretSharingSettingsPage,
|
||||||
|
validateSearch: zodValidator(SettingsPageQueryParams),
|
||||||
|
search: {
|
||||||
|
middlewares: [stripSearchParams({ selectedTab: "" })]
|
||||||
|
},
|
||||||
|
context: () => ({
|
||||||
|
breadcrumbs: [
|
||||||
|
{
|
||||||
|
label: "Home",
|
||||||
|
icon: () => <FontAwesomeIcon icon={faHome} />,
|
||||||
|
link: linkOptions({ to: "/" })
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Secret Sharing",
|
||||||
|
link: linkOptions({ to: "/organization/secret-sharing" })
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Settings"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
});
|
||||||
@@ -41,9 +41,14 @@ export type FormData = z.infer<typeof schema>;
|
|||||||
type Props = {
|
type Props = {
|
||||||
isPublic: boolean; // whether or not this is a public (non-authenticated) secret sharing form
|
isPublic: boolean; // whether or not this is a public (non-authenticated) secret sharing form
|
||||||
value?: string;
|
value?: string;
|
||||||
|
allowSecretSharingOutsideOrganization?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const ShareSecretForm = ({ isPublic, value }: Props) => {
|
export const ShareSecretForm = ({
|
||||||
|
isPublic,
|
||||||
|
value,
|
||||||
|
allowSecretSharingOutsideOrganization = true
|
||||||
|
}: Props) => {
|
||||||
const [secretLink, setSecretLink] = useState("");
|
const [secretLink, setSecretLink] = useState("");
|
||||||
const [, isCopyingSecret, setCopyTextSecret] = useTimedReset<string>({
|
const [, isCopyingSecret, setCopyTextSecret] = useTimedReset<string>({
|
||||||
initialState: "Copy to clipboard"
|
initialState: "Copy to clipboard"
|
||||||
@@ -230,7 +235,9 @@ export const ShareSecretForm = ({ isPublic, value }: Props) => {
|
|||||||
onValueChange={(e) => onChange(e)}
|
onValueChange={(e) => onChange(e)}
|
||||||
className="w-full"
|
className="w-full"
|
||||||
>
|
>
|
||||||
<SelectItem value={SecretSharingAccessType.Anyone}>Anyone</SelectItem>
|
{allowSecretSharingOutsideOrganization && (
|
||||||
|
<SelectItem value={SecretSharingAccessType.Anyone}>Anyone</SelectItem>
|
||||||
|
)}
|
||||||
<SelectItem value={SecretSharingAccessType.Organization}>
|
<SelectItem value={SecretSharingAccessType.Organization}>
|
||||||
People within your organization
|
People within your organization
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
|
|||||||
@@ -42,7 +42,6 @@ import { Route as authProviderSuccessPageRouteImport } from './pages/auth/Provid
|
|||||||
import { Route as authProviderErrorPageRouteImport } from './pages/auth/ProviderErrorPage/route'
|
import { Route as authProviderErrorPageRouteImport } from './pages/auth/ProviderErrorPage/route'
|
||||||
import { Route as userPersonalSettingsPageRouteImport } from './pages/user/PersonalSettingsPage/route'
|
import { Route as userPersonalSettingsPageRouteImport } from './pages/user/PersonalSettingsPage/route'
|
||||||
import { Route as organizationSettingsPageRouteImport } from './pages/organization/SettingsPage/route'
|
import { Route as organizationSettingsPageRouteImport } from './pages/organization/SettingsPage/route'
|
||||||
import { Route as organizationSecretSharingPageRouteImport } from './pages/organization/SecretSharingPage/route'
|
|
||||||
import { Route as organizationSecretScanningPageRouteImport } from './pages/organization/SecretScanningPage/route'
|
import { Route as organizationSecretScanningPageRouteImport } from './pages/organization/SecretScanningPage/route'
|
||||||
import { Route as organizationBillingPageRouteImport } from './pages/organization/BillingPage/route'
|
import { Route as organizationBillingPageRouteImport } from './pages/organization/BillingPage/route'
|
||||||
import { Route as organizationAuditLogsPageRouteImport } from './pages/organization/AuditLogsPage/route'
|
import { Route as organizationAuditLogsPageRouteImport } from './pages/organization/AuditLogsPage/route'
|
||||||
@@ -54,6 +53,7 @@ import { Route as secretManagerLayoutImport } from './pages/secret-manager/layou
|
|||||||
import { Route as kmsLayoutImport } from './pages/kms/layout'
|
import { Route as kmsLayoutImport } from './pages/kms/layout'
|
||||||
import { Route as certManagerLayoutImport } from './pages/cert-manager/layout'
|
import { Route as certManagerLayoutImport } from './pages/cert-manager/layout'
|
||||||
import { Route as organizationSshOverviewPageRouteImport } from './pages/organization/SshOverviewPage/route'
|
import { Route as organizationSshOverviewPageRouteImport } from './pages/organization/SshOverviewPage/route'
|
||||||
|
import { Route as organizationSecretSharingSettingsPageRouteImport } from './pages/organization/SecretSharingSettingsPage/route'
|
||||||
import { Route as organizationSecretManagerOverviewPageRouteImport } from './pages/organization/SecretManagerOverviewPage/route'
|
import { Route as organizationSecretManagerOverviewPageRouteImport } from './pages/organization/SecretManagerOverviewPage/route'
|
||||||
import { Route as organizationRoleByIDPageRouteImport } from './pages/organization/RoleByIDPage/route'
|
import { Route as organizationRoleByIDPageRouteImport } from './pages/organization/RoleByIDPage/route'
|
||||||
import { Route as organizationUserDetailsByIDPageRouteImport } from './pages/organization/UserDetailsByIDPage/route'
|
import { Route as organizationUserDetailsByIDPageRouteImport } from './pages/organization/UserDetailsByIDPage/route'
|
||||||
@@ -61,6 +61,7 @@ import { Route as organizationKmsOverviewPageRouteImport } from './pages/organiz
|
|||||||
import { Route as organizationIdentityDetailsByIDPageRouteImport } from './pages/organization/IdentityDetailsByIDPage/route'
|
import { Route as organizationIdentityDetailsByIDPageRouteImport } from './pages/organization/IdentityDetailsByIDPage/route'
|
||||||
import { Route as organizationGroupDetailsByIDPageRouteImport } from './pages/organization/GroupDetailsByIDPage/route'
|
import { Route as organizationGroupDetailsByIDPageRouteImport } from './pages/organization/GroupDetailsByIDPage/route'
|
||||||
import { Route as organizationCertManagerOverviewPageRouteImport } from './pages/organization/CertManagerOverviewPage/route'
|
import { Route as organizationCertManagerOverviewPageRouteImport } from './pages/organization/CertManagerOverviewPage/route'
|
||||||
|
import { Route as organizationSecretSharingPageRouteImport } from './pages/organization/SecretSharingPage/route'
|
||||||
import { Route as organizationGatewaysGatewayListPageRouteImport } from './pages/organization/Gateways/GatewayListPage/route'
|
import { Route as organizationGatewaysGatewayListPageRouteImport } from './pages/organization/Gateways/GatewayListPage/route'
|
||||||
import { Route as organizationAppConnectionsAppConnectionsPageRouteImport } from './pages/organization/AppConnections/AppConnectionsPage/route'
|
import { Route as organizationAppConnectionsAppConnectionsPageRouteImport } from './pages/organization/AppConnections/AppConnectionsPage/route'
|
||||||
import { Route as projectAccessControlPageRouteSshImport } from './pages/project/AccessControlPage/route-ssh'
|
import { Route as projectAccessControlPageRouteSshImport } from './pages/project/AccessControlPage/route-ssh'
|
||||||
@@ -211,6 +212,10 @@ const AuthenticateInjectOrgDetailsOrgLayoutSecretManagerProjectIdImport =
|
|||||||
createFileRoute(
|
createFileRoute(
|
||||||
'/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId',
|
'/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId',
|
||||||
)()
|
)()
|
||||||
|
const AuthenticateInjectOrgDetailsOrgLayoutOrganizationSecretSharingImport =
|
||||||
|
createFileRoute(
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing',
|
||||||
|
)()
|
||||||
const AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysImport =
|
const AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysImport =
|
||||||
createFileRoute(
|
createFileRoute(
|
||||||
'/_authenticate/_inject-org-details/_org-layout/organization/gateways',
|
'/_authenticate/_inject-org-details/_org-layout/organization/gateways',
|
||||||
@@ -467,6 +472,14 @@ const AuthenticateInjectOrgDetailsOrgLayoutSecretManagerProjectIdRoute =
|
|||||||
getParentRoute: () => organizationLayoutRoute,
|
getParentRoute: () => organizationLayoutRoute,
|
||||||
} as any)
|
} as any)
|
||||||
|
|
||||||
|
const AuthenticateInjectOrgDetailsOrgLayoutOrganizationSecretSharingRoute =
|
||||||
|
AuthenticateInjectOrgDetailsOrgLayoutOrganizationSecretSharingImport.update({
|
||||||
|
id: '/secret-sharing',
|
||||||
|
path: '/secret-sharing',
|
||||||
|
getParentRoute: () =>
|
||||||
|
AuthenticateInjectOrgDetailsOrgLayoutOrganizationRoute,
|
||||||
|
} as any)
|
||||||
|
|
||||||
const AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysRoute =
|
const AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysRoute =
|
||||||
AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysImport.update({
|
AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysImport.update({
|
||||||
id: '/gateways',
|
id: '/gateways',
|
||||||
@@ -505,14 +518,6 @@ const organizationSettingsPageRouteRoute =
|
|||||||
AuthenticateInjectOrgDetailsOrgLayoutOrganizationRoute,
|
AuthenticateInjectOrgDetailsOrgLayoutOrganizationRoute,
|
||||||
} as any)
|
} as any)
|
||||||
|
|
||||||
const organizationSecretSharingPageRouteRoute =
|
|
||||||
organizationSecretSharingPageRouteImport.update({
|
|
||||||
id: '/secret-sharing',
|
|
||||||
path: '/secret-sharing',
|
|
||||||
getParentRoute: () =>
|
|
||||||
AuthenticateInjectOrgDetailsOrgLayoutOrganizationRoute,
|
|
||||||
} as any)
|
|
||||||
|
|
||||||
const organizationSecretScanningPageRouteRoute =
|
const organizationSecretScanningPageRouteRoute =
|
||||||
organizationSecretScanningPageRouteImport.update({
|
organizationSecretScanningPageRouteImport.update({
|
||||||
id: '/secret-scanning',
|
id: '/secret-scanning',
|
||||||
@@ -590,6 +595,14 @@ const organizationSshOverviewPageRouteRoute =
|
|||||||
AuthenticateInjectOrgDetailsOrgLayoutOrganizationRoute,
|
AuthenticateInjectOrgDetailsOrgLayoutOrganizationRoute,
|
||||||
} as any)
|
} as any)
|
||||||
|
|
||||||
|
const organizationSecretSharingSettingsPageRouteRoute =
|
||||||
|
organizationSecretSharingSettingsPageRouteImport.update({
|
||||||
|
id: '/settings',
|
||||||
|
path: '/settings',
|
||||||
|
getParentRoute: () =>
|
||||||
|
AuthenticateInjectOrgDetailsOrgLayoutOrganizationSecretSharingRoute,
|
||||||
|
} as any)
|
||||||
|
|
||||||
const organizationSecretManagerOverviewPageRouteRoute =
|
const organizationSecretManagerOverviewPageRouteRoute =
|
||||||
organizationSecretManagerOverviewPageRouteImport.update({
|
organizationSecretManagerOverviewPageRouteImport.update({
|
||||||
id: '/secret-manager/overview',
|
id: '/secret-manager/overview',
|
||||||
@@ -646,6 +659,14 @@ const organizationCertManagerOverviewPageRouteRoute =
|
|||||||
AuthenticateInjectOrgDetailsOrgLayoutOrganizationRoute,
|
AuthenticateInjectOrgDetailsOrgLayoutOrganizationRoute,
|
||||||
} as any)
|
} as any)
|
||||||
|
|
||||||
|
const organizationSecretSharingPageRouteRoute =
|
||||||
|
organizationSecretSharingPageRouteImport.update({
|
||||||
|
id: '/',
|
||||||
|
path: '/',
|
||||||
|
getParentRoute: () =>
|
||||||
|
AuthenticateInjectOrgDetailsOrgLayoutOrganizationSecretSharingRoute,
|
||||||
|
} as any)
|
||||||
|
|
||||||
const organizationGatewaysGatewayListPageRouteRoute =
|
const organizationGatewaysGatewayListPageRouteRoute =
|
||||||
organizationGatewaysGatewayListPageRouteImport.update({
|
organizationGatewaysGatewayListPageRouteImport.update({
|
||||||
id: '/',
|
id: '/',
|
||||||
@@ -1887,13 +1908,6 @@ declare module '@tanstack/react-router' {
|
|||||||
preLoaderRoute: typeof organizationSecretScanningPageRouteImport
|
preLoaderRoute: typeof organizationSecretScanningPageRouteImport
|
||||||
parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationImport
|
parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationImport
|
||||||
}
|
}
|
||||||
'/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing': {
|
|
||||||
id: '/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing'
|
|
||||||
path: '/secret-sharing'
|
|
||||||
fullPath: '/organization/secret-sharing'
|
|
||||||
preLoaderRoute: typeof organizationSecretSharingPageRouteImport
|
|
||||||
parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationImport
|
|
||||||
}
|
|
||||||
'/_authenticate/_inject-org-details/_org-layout/organization/settings': {
|
'/_authenticate/_inject-org-details/_org-layout/organization/settings': {
|
||||||
id: '/_authenticate/_inject-org-details/_org-layout/organization/settings'
|
id: '/_authenticate/_inject-org-details/_org-layout/organization/settings'
|
||||||
path: '/settings'
|
path: '/settings'
|
||||||
@@ -1929,6 +1943,13 @@ declare module '@tanstack/react-router' {
|
|||||||
preLoaderRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysImport
|
preLoaderRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysImport
|
||||||
parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationImport
|
parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationImport
|
||||||
}
|
}
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing': {
|
||||||
|
id: '/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing'
|
||||||
|
path: '/secret-sharing'
|
||||||
|
fullPath: '/organization/secret-sharing'
|
||||||
|
preLoaderRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationSecretSharingImport
|
||||||
|
parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationImport
|
||||||
|
}
|
||||||
'/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId': {
|
'/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId': {
|
||||||
id: '/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId'
|
id: '/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId'
|
||||||
path: '/secret-manager/$projectId'
|
path: '/secret-manager/$projectId'
|
||||||
@@ -1957,6 +1978,13 @@ declare module '@tanstack/react-router' {
|
|||||||
preLoaderRoute: typeof organizationGatewaysGatewayListPageRouteImport
|
preLoaderRoute: typeof organizationGatewaysGatewayListPageRouteImport
|
||||||
parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysImport
|
parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysImport
|
||||||
}
|
}
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing/': {
|
||||||
|
id: '/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing/'
|
||||||
|
path: '/'
|
||||||
|
fullPath: '/organization/secret-sharing/'
|
||||||
|
preLoaderRoute: typeof organizationSecretSharingPageRouteImport
|
||||||
|
parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationSecretSharingImport
|
||||||
|
}
|
||||||
'/_authenticate/_inject-org-details/_org-layout/organization/cert-manager/overview': {
|
'/_authenticate/_inject-org-details/_org-layout/organization/cert-manager/overview': {
|
||||||
id: '/_authenticate/_inject-org-details/_org-layout/organization/cert-manager/overview'
|
id: '/_authenticate/_inject-org-details/_org-layout/organization/cert-manager/overview'
|
||||||
path: '/cert-manager/overview'
|
path: '/cert-manager/overview'
|
||||||
@@ -2006,6 +2034,13 @@ declare module '@tanstack/react-router' {
|
|||||||
preLoaderRoute: typeof organizationSecretManagerOverviewPageRouteImport
|
preLoaderRoute: typeof organizationSecretManagerOverviewPageRouteImport
|
||||||
parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationImport
|
parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationImport
|
||||||
}
|
}
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing/settings': {
|
||||||
|
id: '/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing/settings'
|
||||||
|
path: '/settings'
|
||||||
|
fullPath: '/organization/secret-sharing/settings'
|
||||||
|
preLoaderRoute: typeof organizationSecretSharingSettingsPageRouteImport
|
||||||
|
parentRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationSecretSharingImport
|
||||||
|
}
|
||||||
'/_authenticate/_inject-org-details/_org-layout/organization/ssh/overview': {
|
'/_authenticate/_inject-org-details/_org-layout/organization/ssh/overview': {
|
||||||
id: '/_authenticate/_inject-org-details/_org-layout/organization/ssh/overview'
|
id: '/_authenticate/_inject-org-details/_org-layout/organization/ssh/overview'
|
||||||
path: '/ssh/overview'
|
path: '/ssh/overview'
|
||||||
@@ -2965,16 +3000,34 @@ const AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysRouteWithChildren
|
|||||||
AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysRouteChildren,
|
AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysRouteChildren,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
interface AuthenticateInjectOrgDetailsOrgLayoutOrganizationSecretSharingRouteChildren {
|
||||||
|
organizationSecretSharingPageRouteRoute: typeof organizationSecretSharingPageRouteRoute
|
||||||
|
organizationSecretSharingSettingsPageRouteRoute: typeof organizationSecretSharingSettingsPageRouteRoute
|
||||||
|
}
|
||||||
|
|
||||||
|
const AuthenticateInjectOrgDetailsOrgLayoutOrganizationSecretSharingRouteChildren: AuthenticateInjectOrgDetailsOrgLayoutOrganizationSecretSharingRouteChildren =
|
||||||
|
{
|
||||||
|
organizationSecretSharingPageRouteRoute:
|
||||||
|
organizationSecretSharingPageRouteRoute,
|
||||||
|
organizationSecretSharingSettingsPageRouteRoute:
|
||||||
|
organizationSecretSharingSettingsPageRouteRoute,
|
||||||
|
}
|
||||||
|
|
||||||
|
const AuthenticateInjectOrgDetailsOrgLayoutOrganizationSecretSharingRouteWithChildren =
|
||||||
|
AuthenticateInjectOrgDetailsOrgLayoutOrganizationSecretSharingRoute._addFileChildren(
|
||||||
|
AuthenticateInjectOrgDetailsOrgLayoutOrganizationSecretSharingRouteChildren,
|
||||||
|
)
|
||||||
|
|
||||||
interface AuthenticateInjectOrgDetailsOrgLayoutOrganizationRouteChildren {
|
interface AuthenticateInjectOrgDetailsOrgLayoutOrganizationRouteChildren {
|
||||||
organizationAccessManagementPageRouteRoute: typeof organizationAccessManagementPageRouteRoute
|
organizationAccessManagementPageRouteRoute: typeof organizationAccessManagementPageRouteRoute
|
||||||
organizationAdminPageRouteRoute: typeof organizationAdminPageRouteRoute
|
organizationAdminPageRouteRoute: typeof organizationAdminPageRouteRoute
|
||||||
organizationAuditLogsPageRouteRoute: typeof organizationAuditLogsPageRouteRoute
|
organizationAuditLogsPageRouteRoute: typeof organizationAuditLogsPageRouteRoute
|
||||||
organizationBillingPageRouteRoute: typeof organizationBillingPageRouteRoute
|
organizationBillingPageRouteRoute: typeof organizationBillingPageRouteRoute
|
||||||
organizationSecretScanningPageRouteRoute: typeof organizationSecretScanningPageRouteRoute
|
organizationSecretScanningPageRouteRoute: typeof organizationSecretScanningPageRouteRoute
|
||||||
organizationSecretSharingPageRouteRoute: typeof organizationSecretSharingPageRouteRoute
|
|
||||||
organizationSettingsPageRouteRoute: typeof organizationSettingsPageRouteRoute
|
organizationSettingsPageRouteRoute: typeof organizationSettingsPageRouteRoute
|
||||||
AuthenticateInjectOrgDetailsOrgLayoutOrganizationAppConnectionsRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationAppConnectionsRouteWithChildren
|
AuthenticateInjectOrgDetailsOrgLayoutOrganizationAppConnectionsRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationAppConnectionsRouteWithChildren
|
||||||
AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysRouteWithChildren
|
AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysRouteWithChildren
|
||||||
|
AuthenticateInjectOrgDetailsOrgLayoutOrganizationSecretSharingRoute: typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationSecretSharingRouteWithChildren
|
||||||
organizationCertManagerOverviewPageRouteRoute: typeof organizationCertManagerOverviewPageRouteRoute
|
organizationCertManagerOverviewPageRouteRoute: typeof organizationCertManagerOverviewPageRouteRoute
|
||||||
organizationGroupDetailsByIDPageRouteRoute: typeof organizationGroupDetailsByIDPageRouteRoute
|
organizationGroupDetailsByIDPageRouteRoute: typeof organizationGroupDetailsByIDPageRouteRoute
|
||||||
organizationIdentityDetailsByIDPageRouteRoute: typeof organizationIdentityDetailsByIDPageRouteRoute
|
organizationIdentityDetailsByIDPageRouteRoute: typeof organizationIdentityDetailsByIDPageRouteRoute
|
||||||
@@ -2994,13 +3047,13 @@ const AuthenticateInjectOrgDetailsOrgLayoutOrganizationRouteChildren: Authentica
|
|||||||
organizationBillingPageRouteRoute: organizationBillingPageRouteRoute,
|
organizationBillingPageRouteRoute: organizationBillingPageRouteRoute,
|
||||||
organizationSecretScanningPageRouteRoute:
|
organizationSecretScanningPageRouteRoute:
|
||||||
organizationSecretScanningPageRouteRoute,
|
organizationSecretScanningPageRouteRoute,
|
||||||
organizationSecretSharingPageRouteRoute:
|
|
||||||
organizationSecretSharingPageRouteRoute,
|
|
||||||
organizationSettingsPageRouteRoute: organizationSettingsPageRouteRoute,
|
organizationSettingsPageRouteRoute: organizationSettingsPageRouteRoute,
|
||||||
AuthenticateInjectOrgDetailsOrgLayoutOrganizationAppConnectionsRoute:
|
AuthenticateInjectOrgDetailsOrgLayoutOrganizationAppConnectionsRoute:
|
||||||
AuthenticateInjectOrgDetailsOrgLayoutOrganizationAppConnectionsRouteWithChildren,
|
AuthenticateInjectOrgDetailsOrgLayoutOrganizationAppConnectionsRouteWithChildren,
|
||||||
AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysRoute:
|
AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysRoute:
|
||||||
AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysRouteWithChildren,
|
AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysRouteWithChildren,
|
||||||
|
AuthenticateInjectOrgDetailsOrgLayoutOrganizationSecretSharingRoute:
|
||||||
|
AuthenticateInjectOrgDetailsOrgLayoutOrganizationSecretSharingRouteWithChildren,
|
||||||
organizationCertManagerOverviewPageRouteRoute:
|
organizationCertManagerOverviewPageRouteRoute:
|
||||||
organizationCertManagerOverviewPageRouteRoute,
|
organizationCertManagerOverviewPageRouteRoute,
|
||||||
organizationGroupDetailsByIDPageRouteRoute:
|
organizationGroupDetailsByIDPageRouteRoute:
|
||||||
@@ -3672,16 +3725,17 @@ export interface FileRoutesByFullPath {
|
|||||||
'/organization/audit-logs': typeof organizationAuditLogsPageRouteRoute
|
'/organization/audit-logs': typeof organizationAuditLogsPageRouteRoute
|
||||||
'/organization/billing': typeof organizationBillingPageRouteRoute
|
'/organization/billing': typeof organizationBillingPageRouteRoute
|
||||||
'/organization/secret-scanning': typeof organizationSecretScanningPageRouteRoute
|
'/organization/secret-scanning': typeof organizationSecretScanningPageRouteRoute
|
||||||
'/organization/secret-sharing': typeof organizationSecretSharingPageRouteRoute
|
|
||||||
'/organization/settings': typeof organizationSettingsPageRouteRoute
|
'/organization/settings': typeof organizationSettingsPageRouteRoute
|
||||||
'/cert-manager/$projectId': typeof certManagerLayoutRouteWithChildren
|
'/cert-manager/$projectId': typeof certManagerLayoutRouteWithChildren
|
||||||
'/kms/$projectId': typeof kmsLayoutRouteWithChildren
|
'/kms/$projectId': typeof kmsLayoutRouteWithChildren
|
||||||
'/organization/app-connections': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationAppConnectionsRouteWithChildren
|
'/organization/app-connections': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationAppConnectionsRouteWithChildren
|
||||||
'/organization/gateways': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysRouteWithChildren
|
'/organization/gateways': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysRouteWithChildren
|
||||||
|
'/organization/secret-sharing': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationSecretSharingRouteWithChildren
|
||||||
'/secret-manager/$projectId': typeof secretManagerLayoutRouteWithChildren
|
'/secret-manager/$projectId': typeof secretManagerLayoutRouteWithChildren
|
||||||
'/ssh/$projectId': typeof sshLayoutRouteWithChildren
|
'/ssh/$projectId': typeof sshLayoutRouteWithChildren
|
||||||
'/organization/app-connections/': typeof organizationAppConnectionsAppConnectionsPageRouteRoute
|
'/organization/app-connections/': typeof organizationAppConnectionsAppConnectionsPageRouteRoute
|
||||||
'/organization/gateways/': typeof organizationGatewaysGatewayListPageRouteRoute
|
'/organization/gateways/': typeof organizationGatewaysGatewayListPageRouteRoute
|
||||||
|
'/organization/secret-sharing/': typeof organizationSecretSharingPageRouteRoute
|
||||||
'/organization/cert-manager/overview': typeof organizationCertManagerOverviewPageRouteRoute
|
'/organization/cert-manager/overview': typeof organizationCertManagerOverviewPageRouteRoute
|
||||||
'/organization/groups/$groupId': typeof organizationGroupDetailsByIDPageRouteRoute
|
'/organization/groups/$groupId': typeof organizationGroupDetailsByIDPageRouteRoute
|
||||||
'/organization/identities/$identityId': typeof organizationIdentityDetailsByIDPageRouteRoute
|
'/organization/identities/$identityId': typeof organizationIdentityDetailsByIDPageRouteRoute
|
||||||
@@ -3689,6 +3743,7 @@ export interface FileRoutesByFullPath {
|
|||||||
'/organization/members/$membershipId': typeof organizationUserDetailsByIDPageRouteRoute
|
'/organization/members/$membershipId': typeof organizationUserDetailsByIDPageRouteRoute
|
||||||
'/organization/roles/$roleId': typeof organizationRoleByIDPageRouteRoute
|
'/organization/roles/$roleId': typeof organizationRoleByIDPageRouteRoute
|
||||||
'/organization/secret-manager/overview': typeof organizationSecretManagerOverviewPageRouteRoute
|
'/organization/secret-manager/overview': typeof organizationSecretManagerOverviewPageRouteRoute
|
||||||
|
'/organization/secret-sharing/settings': typeof organizationSecretSharingSettingsPageRouteRoute
|
||||||
'/organization/ssh/overview': typeof organizationSshOverviewPageRouteRoute
|
'/organization/ssh/overview': typeof organizationSshOverviewPageRouteRoute
|
||||||
'/cert-manager/$projectId/overview': typeof certManagerCertificatesPageRouteRoute
|
'/cert-manager/$projectId/overview': typeof certManagerCertificatesPageRouteRoute
|
||||||
'/cert-manager/$projectId/settings': typeof certManagerSettingsPageRouteRoute
|
'/cert-manager/$projectId/settings': typeof certManagerSettingsPageRouteRoute
|
||||||
@@ -3845,7 +3900,6 @@ export interface FileRoutesByTo {
|
|||||||
'/organization/audit-logs': typeof organizationAuditLogsPageRouteRoute
|
'/organization/audit-logs': typeof organizationAuditLogsPageRouteRoute
|
||||||
'/organization/billing': typeof organizationBillingPageRouteRoute
|
'/organization/billing': typeof organizationBillingPageRouteRoute
|
||||||
'/organization/secret-scanning': typeof organizationSecretScanningPageRouteRoute
|
'/organization/secret-scanning': typeof organizationSecretScanningPageRouteRoute
|
||||||
'/organization/secret-sharing': typeof organizationSecretSharingPageRouteRoute
|
|
||||||
'/organization/settings': typeof organizationSettingsPageRouteRoute
|
'/organization/settings': typeof organizationSettingsPageRouteRoute
|
||||||
'/cert-manager/$projectId': typeof certManagerLayoutRouteWithChildren
|
'/cert-manager/$projectId': typeof certManagerLayoutRouteWithChildren
|
||||||
'/kms/$projectId': typeof kmsLayoutRouteWithChildren
|
'/kms/$projectId': typeof kmsLayoutRouteWithChildren
|
||||||
@@ -3853,6 +3907,7 @@ export interface FileRoutesByTo {
|
|||||||
'/ssh/$projectId': typeof sshLayoutRouteWithChildren
|
'/ssh/$projectId': typeof sshLayoutRouteWithChildren
|
||||||
'/organization/app-connections': typeof organizationAppConnectionsAppConnectionsPageRouteRoute
|
'/organization/app-connections': typeof organizationAppConnectionsAppConnectionsPageRouteRoute
|
||||||
'/organization/gateways': typeof organizationGatewaysGatewayListPageRouteRoute
|
'/organization/gateways': typeof organizationGatewaysGatewayListPageRouteRoute
|
||||||
|
'/organization/secret-sharing': typeof organizationSecretSharingPageRouteRoute
|
||||||
'/organization/cert-manager/overview': typeof organizationCertManagerOverviewPageRouteRoute
|
'/organization/cert-manager/overview': typeof organizationCertManagerOverviewPageRouteRoute
|
||||||
'/organization/groups/$groupId': typeof organizationGroupDetailsByIDPageRouteRoute
|
'/organization/groups/$groupId': typeof organizationGroupDetailsByIDPageRouteRoute
|
||||||
'/organization/identities/$identityId': typeof organizationIdentityDetailsByIDPageRouteRoute
|
'/organization/identities/$identityId': typeof organizationIdentityDetailsByIDPageRouteRoute
|
||||||
@@ -3860,6 +3915,7 @@ export interface FileRoutesByTo {
|
|||||||
'/organization/members/$membershipId': typeof organizationUserDetailsByIDPageRouteRoute
|
'/organization/members/$membershipId': typeof organizationUserDetailsByIDPageRouteRoute
|
||||||
'/organization/roles/$roleId': typeof organizationRoleByIDPageRouteRoute
|
'/organization/roles/$roleId': typeof organizationRoleByIDPageRouteRoute
|
||||||
'/organization/secret-manager/overview': typeof organizationSecretManagerOverviewPageRouteRoute
|
'/organization/secret-manager/overview': typeof organizationSecretManagerOverviewPageRouteRoute
|
||||||
|
'/organization/secret-sharing/settings': typeof organizationSecretSharingSettingsPageRouteRoute
|
||||||
'/organization/ssh/overview': typeof organizationSshOverviewPageRouteRoute
|
'/organization/ssh/overview': typeof organizationSshOverviewPageRouteRoute
|
||||||
'/cert-manager/$projectId/overview': typeof certManagerCertificatesPageRouteRoute
|
'/cert-manager/$projectId/overview': typeof certManagerCertificatesPageRouteRoute
|
||||||
'/cert-manager/$projectId/settings': typeof certManagerSettingsPageRouteRoute
|
'/cert-manager/$projectId/settings': typeof certManagerSettingsPageRouteRoute
|
||||||
@@ -4025,16 +4081,17 @@ export interface FileRoutesById {
|
|||||||
'/_authenticate/_inject-org-details/_org-layout/organization/audit-logs': typeof organizationAuditLogsPageRouteRoute
|
'/_authenticate/_inject-org-details/_org-layout/organization/audit-logs': typeof organizationAuditLogsPageRouteRoute
|
||||||
'/_authenticate/_inject-org-details/_org-layout/organization/billing': typeof organizationBillingPageRouteRoute
|
'/_authenticate/_inject-org-details/_org-layout/organization/billing': typeof organizationBillingPageRouteRoute
|
||||||
'/_authenticate/_inject-org-details/_org-layout/organization/secret-scanning': typeof organizationSecretScanningPageRouteRoute
|
'/_authenticate/_inject-org-details/_org-layout/organization/secret-scanning': typeof organizationSecretScanningPageRouteRoute
|
||||||
'/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing': typeof organizationSecretSharingPageRouteRoute
|
|
||||||
'/_authenticate/_inject-org-details/_org-layout/organization/settings': typeof organizationSettingsPageRouteRoute
|
'/_authenticate/_inject-org-details/_org-layout/organization/settings': typeof organizationSettingsPageRouteRoute
|
||||||
'/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId': typeof AuthenticateInjectOrgDetailsOrgLayoutCertManagerProjectIdRouteWithChildren
|
'/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId': typeof AuthenticateInjectOrgDetailsOrgLayoutCertManagerProjectIdRouteWithChildren
|
||||||
'/_authenticate/_inject-org-details/_org-layout/kms/$projectId': typeof AuthenticateInjectOrgDetailsOrgLayoutKmsProjectIdRouteWithChildren
|
'/_authenticate/_inject-org-details/_org-layout/kms/$projectId': typeof AuthenticateInjectOrgDetailsOrgLayoutKmsProjectIdRouteWithChildren
|
||||||
'/_authenticate/_inject-org-details/_org-layout/organization/app-connections': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationAppConnectionsRouteWithChildren
|
'/_authenticate/_inject-org-details/_org-layout/organization/app-connections': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationAppConnectionsRouteWithChildren
|
||||||
'/_authenticate/_inject-org-details/_org-layout/organization/gateways': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysRouteWithChildren
|
'/_authenticate/_inject-org-details/_org-layout/organization/gateways': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationGatewaysRouteWithChildren
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing': typeof AuthenticateInjectOrgDetailsOrgLayoutOrganizationSecretSharingRouteWithChildren
|
||||||
'/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId': typeof AuthenticateInjectOrgDetailsOrgLayoutSecretManagerProjectIdRouteWithChildren
|
'/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId': typeof AuthenticateInjectOrgDetailsOrgLayoutSecretManagerProjectIdRouteWithChildren
|
||||||
'/_authenticate/_inject-org-details/_org-layout/ssh/$projectId': typeof AuthenticateInjectOrgDetailsOrgLayoutSshProjectIdRouteWithChildren
|
'/_authenticate/_inject-org-details/_org-layout/ssh/$projectId': typeof AuthenticateInjectOrgDetailsOrgLayoutSshProjectIdRouteWithChildren
|
||||||
'/_authenticate/_inject-org-details/_org-layout/organization/app-connections/': typeof organizationAppConnectionsAppConnectionsPageRouteRoute
|
'/_authenticate/_inject-org-details/_org-layout/organization/app-connections/': typeof organizationAppConnectionsAppConnectionsPageRouteRoute
|
||||||
'/_authenticate/_inject-org-details/_org-layout/organization/gateways/': typeof organizationGatewaysGatewayListPageRouteRoute
|
'/_authenticate/_inject-org-details/_org-layout/organization/gateways/': typeof organizationGatewaysGatewayListPageRouteRoute
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing/': typeof organizationSecretSharingPageRouteRoute
|
||||||
'/_authenticate/_inject-org-details/_org-layout/organization/cert-manager/overview': typeof organizationCertManagerOverviewPageRouteRoute
|
'/_authenticate/_inject-org-details/_org-layout/organization/cert-manager/overview': typeof organizationCertManagerOverviewPageRouteRoute
|
||||||
'/_authenticate/_inject-org-details/_org-layout/organization/groups/$groupId': typeof organizationGroupDetailsByIDPageRouteRoute
|
'/_authenticate/_inject-org-details/_org-layout/organization/groups/$groupId': typeof organizationGroupDetailsByIDPageRouteRoute
|
||||||
'/_authenticate/_inject-org-details/_org-layout/organization/identities/$identityId': typeof organizationIdentityDetailsByIDPageRouteRoute
|
'/_authenticate/_inject-org-details/_org-layout/organization/identities/$identityId': typeof organizationIdentityDetailsByIDPageRouteRoute
|
||||||
@@ -4042,6 +4099,7 @@ export interface FileRoutesById {
|
|||||||
'/_authenticate/_inject-org-details/_org-layout/organization/members/$membershipId': typeof organizationUserDetailsByIDPageRouteRoute
|
'/_authenticate/_inject-org-details/_org-layout/organization/members/$membershipId': typeof organizationUserDetailsByIDPageRouteRoute
|
||||||
'/_authenticate/_inject-org-details/_org-layout/organization/roles/$roleId': typeof organizationRoleByIDPageRouteRoute
|
'/_authenticate/_inject-org-details/_org-layout/organization/roles/$roleId': typeof organizationRoleByIDPageRouteRoute
|
||||||
'/_authenticate/_inject-org-details/_org-layout/organization/secret-manager/overview': typeof organizationSecretManagerOverviewPageRouteRoute
|
'/_authenticate/_inject-org-details/_org-layout/organization/secret-manager/overview': typeof organizationSecretManagerOverviewPageRouteRoute
|
||||||
|
'/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing/settings': typeof organizationSecretSharingSettingsPageRouteRoute
|
||||||
'/_authenticate/_inject-org-details/_org-layout/organization/ssh/overview': typeof organizationSshOverviewPageRouteRoute
|
'/_authenticate/_inject-org-details/_org-layout/organization/ssh/overview': typeof organizationSshOverviewPageRouteRoute
|
||||||
'/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout': typeof certManagerLayoutRouteWithChildren
|
'/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout': typeof certManagerLayoutRouteWithChildren
|
||||||
'/_authenticate/_inject-org-details/_org-layout/kms/$projectId/_kms-layout': typeof kmsLayoutRouteWithChildren
|
'/_authenticate/_inject-org-details/_org-layout/kms/$projectId/_kms-layout': typeof kmsLayoutRouteWithChildren
|
||||||
@@ -4208,16 +4266,17 @@ export interface FileRouteTypes {
|
|||||||
| '/organization/audit-logs'
|
| '/organization/audit-logs'
|
||||||
| '/organization/billing'
|
| '/organization/billing'
|
||||||
| '/organization/secret-scanning'
|
| '/organization/secret-scanning'
|
||||||
| '/organization/secret-sharing'
|
|
||||||
| '/organization/settings'
|
| '/organization/settings'
|
||||||
| '/cert-manager/$projectId'
|
| '/cert-manager/$projectId'
|
||||||
| '/kms/$projectId'
|
| '/kms/$projectId'
|
||||||
| '/organization/app-connections'
|
| '/organization/app-connections'
|
||||||
| '/organization/gateways'
|
| '/organization/gateways'
|
||||||
|
| '/organization/secret-sharing'
|
||||||
| '/secret-manager/$projectId'
|
| '/secret-manager/$projectId'
|
||||||
| '/ssh/$projectId'
|
| '/ssh/$projectId'
|
||||||
| '/organization/app-connections/'
|
| '/organization/app-connections/'
|
||||||
| '/organization/gateways/'
|
| '/organization/gateways/'
|
||||||
|
| '/organization/secret-sharing/'
|
||||||
| '/organization/cert-manager/overview'
|
| '/organization/cert-manager/overview'
|
||||||
| '/organization/groups/$groupId'
|
| '/organization/groups/$groupId'
|
||||||
| '/organization/identities/$identityId'
|
| '/organization/identities/$identityId'
|
||||||
@@ -4225,6 +4284,7 @@ export interface FileRouteTypes {
|
|||||||
| '/organization/members/$membershipId'
|
| '/organization/members/$membershipId'
|
||||||
| '/organization/roles/$roleId'
|
| '/organization/roles/$roleId'
|
||||||
| '/organization/secret-manager/overview'
|
| '/organization/secret-manager/overview'
|
||||||
|
| '/organization/secret-sharing/settings'
|
||||||
| '/organization/ssh/overview'
|
| '/organization/ssh/overview'
|
||||||
| '/cert-manager/$projectId/overview'
|
| '/cert-manager/$projectId/overview'
|
||||||
| '/cert-manager/$projectId/settings'
|
| '/cert-manager/$projectId/settings'
|
||||||
@@ -4380,7 +4440,6 @@ export interface FileRouteTypes {
|
|||||||
| '/organization/audit-logs'
|
| '/organization/audit-logs'
|
||||||
| '/organization/billing'
|
| '/organization/billing'
|
||||||
| '/organization/secret-scanning'
|
| '/organization/secret-scanning'
|
||||||
| '/organization/secret-sharing'
|
|
||||||
| '/organization/settings'
|
| '/organization/settings'
|
||||||
| '/cert-manager/$projectId'
|
| '/cert-manager/$projectId'
|
||||||
| '/kms/$projectId'
|
| '/kms/$projectId'
|
||||||
@@ -4388,6 +4447,7 @@ export interface FileRouteTypes {
|
|||||||
| '/ssh/$projectId'
|
| '/ssh/$projectId'
|
||||||
| '/organization/app-connections'
|
| '/organization/app-connections'
|
||||||
| '/organization/gateways'
|
| '/organization/gateways'
|
||||||
|
| '/organization/secret-sharing'
|
||||||
| '/organization/cert-manager/overview'
|
| '/organization/cert-manager/overview'
|
||||||
| '/organization/groups/$groupId'
|
| '/organization/groups/$groupId'
|
||||||
| '/organization/identities/$identityId'
|
| '/organization/identities/$identityId'
|
||||||
@@ -4395,6 +4455,7 @@ export interface FileRouteTypes {
|
|||||||
| '/organization/members/$membershipId'
|
| '/organization/members/$membershipId'
|
||||||
| '/organization/roles/$roleId'
|
| '/organization/roles/$roleId'
|
||||||
| '/organization/secret-manager/overview'
|
| '/organization/secret-manager/overview'
|
||||||
|
| '/organization/secret-sharing/settings'
|
||||||
| '/organization/ssh/overview'
|
| '/organization/ssh/overview'
|
||||||
| '/cert-manager/$projectId/overview'
|
| '/cert-manager/$projectId/overview'
|
||||||
| '/cert-manager/$projectId/settings'
|
| '/cert-manager/$projectId/settings'
|
||||||
@@ -4558,16 +4619,17 @@ export interface FileRouteTypes {
|
|||||||
| '/_authenticate/_inject-org-details/_org-layout/organization/audit-logs'
|
| '/_authenticate/_inject-org-details/_org-layout/organization/audit-logs'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/organization/billing'
|
| '/_authenticate/_inject-org-details/_org-layout/organization/billing'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/organization/secret-scanning'
|
| '/_authenticate/_inject-org-details/_org-layout/organization/secret-scanning'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing'
|
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/organization/settings'
|
| '/_authenticate/_inject-org-details/_org-layout/organization/settings'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId'
|
| '/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/kms/$projectId'
|
| '/_authenticate/_inject-org-details/_org-layout/kms/$projectId'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/organization/app-connections'
|
| '/_authenticate/_inject-org-details/_org-layout/organization/app-connections'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/organization/gateways'
|
| '/_authenticate/_inject-org-details/_org-layout/organization/gateways'
|
||||||
|
| '/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId'
|
| '/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/ssh/$projectId'
|
| '/_authenticate/_inject-org-details/_org-layout/ssh/$projectId'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/organization/app-connections/'
|
| '/_authenticate/_inject-org-details/_org-layout/organization/app-connections/'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/organization/gateways/'
|
| '/_authenticate/_inject-org-details/_org-layout/organization/gateways/'
|
||||||
|
| '/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing/'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/organization/cert-manager/overview'
|
| '/_authenticate/_inject-org-details/_org-layout/organization/cert-manager/overview'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/organization/groups/$groupId'
|
| '/_authenticate/_inject-org-details/_org-layout/organization/groups/$groupId'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/organization/identities/$identityId'
|
| '/_authenticate/_inject-org-details/_org-layout/organization/identities/$identityId'
|
||||||
@@ -4575,6 +4637,7 @@ export interface FileRouteTypes {
|
|||||||
| '/_authenticate/_inject-org-details/_org-layout/organization/members/$membershipId'
|
| '/_authenticate/_inject-org-details/_org-layout/organization/members/$membershipId'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/organization/roles/$roleId'
|
| '/_authenticate/_inject-org-details/_org-layout/organization/roles/$roleId'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/organization/secret-manager/overview'
|
| '/_authenticate/_inject-org-details/_org-layout/organization/secret-manager/overview'
|
||||||
|
| '/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing/settings'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/organization/ssh/overview'
|
| '/_authenticate/_inject-org-details/_org-layout/organization/ssh/overview'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout'
|
| '/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout'
|
||||||
| '/_authenticate/_inject-org-details/_org-layout/kms/$projectId/_kms-layout'
|
| '/_authenticate/_inject-org-details/_org-layout/kms/$projectId/_kms-layout'
|
||||||
@@ -4936,10 +4999,10 @@ export const routeTree = rootRoute
|
|||||||
"/_authenticate/_inject-org-details/_org-layout/organization/audit-logs",
|
"/_authenticate/_inject-org-details/_org-layout/organization/audit-logs",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/organization/billing",
|
"/_authenticate/_inject-org-details/_org-layout/organization/billing",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/organization/secret-scanning",
|
"/_authenticate/_inject-org-details/_org-layout/organization/secret-scanning",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing",
|
|
||||||
"/_authenticate/_inject-org-details/_org-layout/organization/settings",
|
"/_authenticate/_inject-org-details/_org-layout/organization/settings",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/organization/app-connections",
|
"/_authenticate/_inject-org-details/_org-layout/organization/app-connections",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/organization/gateways",
|
"/_authenticate/_inject-org-details/_org-layout/organization/gateways",
|
||||||
|
"/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/organization/cert-manager/overview",
|
"/_authenticate/_inject-org-details/_org-layout/organization/cert-manager/overview",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/organization/groups/$groupId",
|
"/_authenticate/_inject-org-details/_org-layout/organization/groups/$groupId",
|
||||||
"/_authenticate/_inject-org-details/_org-layout/organization/identities/$identityId",
|
"/_authenticate/_inject-org-details/_org-layout/organization/identities/$identityId",
|
||||||
@@ -4981,10 +5044,6 @@ export const routeTree = rootRoute
|
|||||||
"filePath": "organization/SecretScanningPage/route.tsx",
|
"filePath": "organization/SecretScanningPage/route.tsx",
|
||||||
"parent": "/_authenticate/_inject-org-details/_org-layout/organization"
|
"parent": "/_authenticate/_inject-org-details/_org-layout/organization"
|
||||||
},
|
},
|
||||||
"/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing": {
|
|
||||||
"filePath": "organization/SecretSharingPage/route.tsx",
|
|
||||||
"parent": "/_authenticate/_inject-org-details/_org-layout/organization"
|
|
||||||
},
|
|
||||||
"/_authenticate/_inject-org-details/_org-layout/organization/settings": {
|
"/_authenticate/_inject-org-details/_org-layout/organization/settings": {
|
||||||
"filePath": "organization/SettingsPage/route.tsx",
|
"filePath": "organization/SettingsPage/route.tsx",
|
||||||
"parent": "/_authenticate/_inject-org-details/_org-layout/organization"
|
"parent": "/_authenticate/_inject-org-details/_org-layout/organization"
|
||||||
@@ -5018,6 +5077,14 @@ export const routeTree = rootRoute
|
|||||||
"/_authenticate/_inject-org-details/_org-layout/organization/gateways/"
|
"/_authenticate/_inject-org-details/_org-layout/organization/gateways/"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing": {
|
||||||
|
"filePath": "",
|
||||||
|
"parent": "/_authenticate/_inject-org-details/_org-layout/organization",
|
||||||
|
"children": [
|
||||||
|
"/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing/",
|
||||||
|
"/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing/settings"
|
||||||
|
]
|
||||||
|
},
|
||||||
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId": {
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId": {
|
||||||
"filePath": "",
|
"filePath": "",
|
||||||
"parent": "/_authenticate/_inject-org-details/_org-layout",
|
"parent": "/_authenticate/_inject-org-details/_org-layout",
|
||||||
@@ -5040,6 +5107,10 @@ export const routeTree = rootRoute
|
|||||||
"filePath": "organization/Gateways/GatewayListPage/route.tsx",
|
"filePath": "organization/Gateways/GatewayListPage/route.tsx",
|
||||||
"parent": "/_authenticate/_inject-org-details/_org-layout/organization/gateways"
|
"parent": "/_authenticate/_inject-org-details/_org-layout/organization/gateways"
|
||||||
},
|
},
|
||||||
|
"/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing/": {
|
||||||
|
"filePath": "organization/SecretSharingPage/route.tsx",
|
||||||
|
"parent": "/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing"
|
||||||
|
},
|
||||||
"/_authenticate/_inject-org-details/_org-layout/organization/cert-manager/overview": {
|
"/_authenticate/_inject-org-details/_org-layout/organization/cert-manager/overview": {
|
||||||
"filePath": "organization/CertManagerOverviewPage/route.tsx",
|
"filePath": "organization/CertManagerOverviewPage/route.tsx",
|
||||||
"parent": "/_authenticate/_inject-org-details/_org-layout/organization"
|
"parent": "/_authenticate/_inject-org-details/_org-layout/organization"
|
||||||
@@ -5068,6 +5139,10 @@ export const routeTree = rootRoute
|
|||||||
"filePath": "organization/SecretManagerOverviewPage/route.tsx",
|
"filePath": "organization/SecretManagerOverviewPage/route.tsx",
|
||||||
"parent": "/_authenticate/_inject-org-details/_org-layout/organization"
|
"parent": "/_authenticate/_inject-org-details/_org-layout/organization"
|
||||||
},
|
},
|
||||||
|
"/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing/settings": {
|
||||||
|
"filePath": "organization/SecretSharingSettingsPage/route.tsx",
|
||||||
|
"parent": "/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing"
|
||||||
|
},
|
||||||
"/_authenticate/_inject-org-details/_org-layout/organization/ssh/overview": {
|
"/_authenticate/_inject-org-details/_org-layout/organization/ssh/overview": {
|
||||||
"filePath": "organization/SshOverviewPage/route.tsx",
|
"filePath": "organization/SshOverviewPage/route.tsx",
|
||||||
"parent": "/_authenticate/_inject-org-details/_org-layout/organization"
|
"parent": "/_authenticate/_inject-org-details/_org-layout/organization"
|
||||||
|
|||||||
@@ -16,7 +16,10 @@ const organizationRoutes = route("/organization", [
|
|||||||
route("/admin", "organization/AdminPage/route.tsx"),
|
route("/admin", "organization/AdminPage/route.tsx"),
|
||||||
route("/audit-logs", "organization/AuditLogsPage/route.tsx"),
|
route("/audit-logs", "organization/AuditLogsPage/route.tsx"),
|
||||||
route("/billing", "organization/BillingPage/route.tsx"),
|
route("/billing", "organization/BillingPage/route.tsx"),
|
||||||
route("/secret-sharing", "organization/SecretSharingPage/route.tsx"),
|
route("/secret-sharing", [
|
||||||
|
index("organization/SecretSharingPage/route.tsx"),
|
||||||
|
route("/settings", "organization/SecretSharingSettingsPage/route.tsx")
|
||||||
|
]),
|
||||||
route("/settings", "organization/SettingsPage/route.tsx"),
|
route("/settings", "organization/SettingsPage/route.tsx"),
|
||||||
route("/secret-scanning", "organization/SecretScanningPage/route.tsx"),
|
route("/secret-scanning", "organization/SecretScanningPage/route.tsx"),
|
||||||
route("/groups/$groupId", "organization/GroupDetailsByIDPage/route.tsx"),
|
route("/groups/$groupId", "organization/GroupDetailsByIDPage/route.tsx"),
|
||||||
|
|||||||
Reference in New Issue
Block a user