mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-07 01:27:41 +00:00
Merge pull request #4924 from Infisical/machine-identity-labeling
improvement(frontend): text "identity" -> "machine identity"
This commit is contained in:
@@ -29,7 +29,7 @@ export const ResourceOverviewPage = () => {
|
|||||||
Users
|
Users
|
||||||
</Tab>
|
</Tab>
|
||||||
<Tab variant="instance" value="tab-identities">
|
<Tab variant="instance" value="tab-identities">
|
||||||
Identities
|
Machine Identities
|
||||||
</Tab>
|
</Tab>
|
||||||
</TabList>
|
</TabList>
|
||||||
<TabPanel value="tab-organizations">
|
<TabPanel value="tab-organizations">
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ const IdentityPanelTable = ({
|
|||||||
value={searchIdentityFilter}
|
value={searchIdentityFilter}
|
||||||
onChange={(e) => setSearchIdentityFilter(e.target.value)}
|
onChange={(e) => setSearchIdentityFilter(e.target.value)}
|
||||||
leftIcon={<FontAwesomeIcon icon={faMagnifyingGlass} />}
|
leftIcon={<FontAwesomeIcon icon={faMagnifyingGlass} />}
|
||||||
placeholder="Search identities by name..."
|
placeholder="Search machine identities by name..."
|
||||||
className="flex-1"
|
className="flex-1"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ export const AccessManagementPage = () => {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: OrgAccessControlTabSections.Identities,
|
key: OrgAccessControlTabSections.Identities,
|
||||||
label: "Identities",
|
label: "Machine Identities",
|
||||||
isHidden: permission.cannot(
|
isHidden: permission.cannot(
|
||||||
OrgPermissionIdentityActions.Read,
|
OrgPermissionIdentityActions.Read,
|
||||||
OrgPermissionSubjects.Identity
|
OrgPermissionSubjects.Identity
|
||||||
@@ -84,7 +84,7 @@ export const AccessManagementPage = () => {
|
|||||||
<PageHeader
|
<PageHeader
|
||||||
scope={isSubOrganization ? "namespace" : "org"}
|
scope={isSubOrganization ? "namespace" : "org"}
|
||||||
title="Access Control"
|
title="Access Control"
|
||||||
description="Manage fine-grained access for users, groups, roles, and identities within your organization resources."
|
description="Manage fine-grained access for users, groups, roles, and machine identities within your organization resources."
|
||||||
/>
|
/>
|
||||||
{!currentOrg.shouldUseNewPrivilegeSystem && (
|
{!currentOrg.shouldUseNewPrivilegeSystem && (
|
||||||
<div className="mt-4 mb-4 flex flex-col rounded-r border-l-2 border-l-primary bg-mineshaft-300/5 px-4 py-2.5">
|
<div className="mt-4 mb-4 flex flex-col rounded-r border-l-2 border-l-primary bg-mineshaft-300/5 px-4 py-2.5">
|
||||||
|
|||||||
+3
-1
@@ -154,7 +154,9 @@ export const IdentityAuthTemplateModal = ({ popUp, handlePopUpToggle }: Props) =
|
|||||||
onOpenChange={handleClose}
|
onOpenChange={handleClose}
|
||||||
>
|
>
|
||||||
<ModalContent
|
<ModalContent
|
||||||
title={isEdit ? "Edit Identity Auth Template" : "Create Identity Auth Template"}
|
title={
|
||||||
|
isEdit ? "Edit Machine Identity Auth Template" : "Create Machine Identity Auth Template"
|
||||||
|
}
|
||||||
subTitle={
|
subTitle={
|
||||||
isEdit ? "Update the authentication template" : "Create a new authentication template"
|
isEdit ? "Update the authentication template" : "Create a new authentication template"
|
||||||
}
|
}
|
||||||
|
|||||||
+18
-14
@@ -73,7 +73,7 @@ export const IdentitySection = withPermission(
|
|||||||
});
|
});
|
||||||
|
|
||||||
createNotification({
|
createNotification({
|
||||||
text: "Successfully deleted identity",
|
text: "Successfully deleted machine identity",
|
||||||
type: "success"
|
type: "success"
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -99,7 +99,7 @@ export const IdentitySection = withPermission(
|
|||||||
<div className="rounded-lg border border-mineshaft-600 bg-mineshaft-900 p-4">
|
<div className="rounded-lg border border-mineshaft-600 bg-mineshaft-900 p-4">
|
||||||
<div className="mb-4 flex flex-wrap items-center justify-between gap-2">
|
<div className="mb-4 flex flex-wrap items-center justify-between gap-2">
|
||||||
<div className="flex flex-1 items-center gap-x-2">
|
<div className="flex flex-1 items-center gap-x-2">
|
||||||
<p className="text-xl font-medium text-mineshaft-100">Identities</p>
|
<p className="text-xl font-medium text-mineshaft-100">Machine Identities</p>
|
||||||
<DocumentationLinkBadge href="https://infisical.com/docs/documentation/platform/identities/machine-identities" />
|
<DocumentationLinkBadge href="https://infisical.com/docs/documentation/platform/identities/machine-identities" />
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center">
|
<div className="flex items-center">
|
||||||
@@ -116,7 +116,7 @@ export const IdentitySection = withPermission(
|
|||||||
if (!isMoreIdentitiesAllowed && !isEnterprise) {
|
if (!isMoreIdentitiesAllowed && !isEnterprise) {
|
||||||
handlePopUpOpen("upgradePlan", {
|
handlePopUpOpen("upgradePlan", {
|
||||||
description:
|
description:
|
||||||
"You can add more identities if you upgrade your Infisical Pro plan."
|
"You can add more machine identities if you upgrade your Infisical Pro plan."
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -129,7 +129,7 @@ export const IdentitySection = withPermission(
|
|||||||
}}
|
}}
|
||||||
isDisabled={!isAllowed}
|
isDisabled={!isAllowed}
|
||||||
>
|
>
|
||||||
Create Identity
|
Add Machine Identity
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
</OrgPermissionCan>
|
</OrgPermissionCan>
|
||||||
@@ -141,7 +141,9 @@ export const IdentitySection = withPermission(
|
|||||||
<div className="mt-4 rounded-lg border border-mineshaft-600 bg-mineshaft-900 p-4">
|
<div className="mt-4 rounded-lg border border-mineshaft-600 bg-mineshaft-900 p-4">
|
||||||
<div className="mb-4 flex flex-wrap items-center justify-between gap-2">
|
<div className="mb-4 flex flex-wrap items-center justify-between gap-2">
|
||||||
<div className="flex items-center gap-x-2">
|
<div className="flex items-center gap-x-2">
|
||||||
<p className="text-xl font-medium text-mineshaft-100">Identity Auth Templates</p>
|
<p className="text-xl font-medium text-mineshaft-100">
|
||||||
|
Machine Identity Auth Templates
|
||||||
|
</p>
|
||||||
<DocumentationLinkBadge href="https://infisical.com/docs/documentation/platform/identities/auth-templates" />
|
<DocumentationLinkBadge href="https://infisical.com/docs/documentation/platform/identities/auth-templates" />
|
||||||
</div>
|
</div>
|
||||||
<OrgPermissionCan
|
<OrgPermissionCan
|
||||||
@@ -150,14 +152,14 @@ export const IdentitySection = withPermission(
|
|||||||
>
|
>
|
||||||
{(isAllowed) => (
|
{(isAllowed) => (
|
||||||
<Button
|
<Button
|
||||||
colorSchema="secondary"
|
variant="outline_bg"
|
||||||
type="submit"
|
type="submit"
|
||||||
leftIcon={<FontAwesomeIcon icon={faPlus} />}
|
leftIcon={<FontAwesomeIcon icon={faPlus} />}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
if (subscription && !subscription.machineIdentityAuthTemplates) {
|
if (subscription && !subscription.machineIdentityAuthTemplates) {
|
||||||
handlePopUpOpen("upgradePlan", {
|
handlePopUpOpen("upgradePlan", {
|
||||||
isEnterpriseFeature: true,
|
isEnterpriseFeature: true,
|
||||||
text: "Your current plan does not include access to creating Identity Auth Templates. To unlock this feature, please upgrade to Infisical Enterprise plan."
|
text: "Your current plan does not include access to creating Machine Identity Auth Templates. To unlock this feature, please upgrade to Infisical Enterprise plan."
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -197,9 +199,11 @@ export const IdentitySection = withPermission(
|
|||||||
>
|
>
|
||||||
<ModalContent
|
<ModalContent
|
||||||
bodyClassName="overflow-visible"
|
bodyClassName="overflow-visible"
|
||||||
title="Add Identity"
|
title="Add Machine Identity"
|
||||||
subTitle={
|
subTitle={
|
||||||
isSubOrganization ? "Create a new identity or assign an existing identity" : undefined
|
isSubOrganization
|
||||||
|
? "Create a new machine identity or assign an existing one"
|
||||||
|
: undefined
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<AnimatePresence mode="wait">
|
<AnimatePresence mode="wait">
|
||||||
@@ -224,11 +228,11 @@ export const IdentitySection = withPermission(
|
|||||||
>
|
>
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
<PlusIcon size="1rem" />
|
<PlusIcon size="1rem" />
|
||||||
<div>Create New Identity</div>
|
<div>Create Machine Identity</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="mt-2 text-xs text-mineshaft-300">
|
<div className="mt-2 text-xs text-mineshaft-300">
|
||||||
Create a new machine identity specifically for this sub-organization. This
|
Create a new machine identity specifically for this sub-organization. This
|
||||||
identity will be managed at the sub-organization level.
|
machine identity will be managed at the sub-organization level.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
@@ -244,11 +248,11 @@ export const IdentitySection = withPermission(
|
|||||||
>
|
>
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
<LinkIcon size="1rem" />
|
<LinkIcon size="1rem" />
|
||||||
<div>Assign Existing Identity</div>
|
<div>Assign Existing Machine Identity</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="mt-2 text-xs text-mineshaft-300">
|
<div className="mt-2 text-xs text-mineshaft-300">
|
||||||
Assign an existing identity from your parent organization. The identity will
|
Assign an existing machine identity from your parent organization. The machine
|
||||||
continue to be managed at its original scope.
|
identity will continue to be managed at its original scope.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
|
|||||||
+8
-8
@@ -152,7 +152,7 @@ export const IdentityTable = ({ handlePopUpOpen }: Props) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
createNotification({
|
createNotification({
|
||||||
text: "Successfully updated identity role",
|
text: "Successfully updated machine identity role",
|
||||||
type: "success"
|
type: "success"
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -178,7 +178,7 @@ export const IdentityTable = ({ handlePopUpOpen }: Props) => {
|
|||||||
<DropdownMenu>
|
<DropdownMenu>
|
||||||
<DropdownMenuTrigger asChild>
|
<DropdownMenuTrigger asChild>
|
||||||
<IconButton
|
<IconButton
|
||||||
ariaLabel="Filter Identities"
|
ariaLabel="Filter Machine Identities"
|
||||||
variant="plain"
|
variant="plain"
|
||||||
size="sm"
|
size="sm"
|
||||||
className={twMerge(
|
className={twMerge(
|
||||||
@@ -200,7 +200,7 @@ export const IdentityTable = ({ handlePopUpOpen }: Props) => {
|
|||||||
</DropdownSubMenuTrigger>
|
</DropdownSubMenuTrigger>
|
||||||
<DropdownSubMenuContent className="max-h-80 thin-scrollbar overflow-y-auto rounded-l-none">
|
<DropdownSubMenuContent className="max-h-80 thin-scrollbar overflow-y-auto rounded-l-none">
|
||||||
<DropdownMenuLabel className="sticky top-0 bg-mineshaft-900">
|
<DropdownMenuLabel className="sticky top-0 bg-mineshaft-900">
|
||||||
Apply Roles to Filter Identities
|
Filter Machine Identities by Role
|
||||||
</DropdownMenuLabel>
|
</DropdownMenuLabel>
|
||||||
{roles?.map(({ id, slug, name }) => (
|
{roles?.map(({ id, slug, name }) => (
|
||||||
<DropdownMenuItem
|
<DropdownMenuItem
|
||||||
@@ -229,7 +229,7 @@ export const IdentityTable = ({ handlePopUpOpen }: Props) => {
|
|||||||
value={search}
|
value={search}
|
||||||
onChange={(e) => setSearch(e.target.value)}
|
onChange={(e) => setSearch(e.target.value)}
|
||||||
leftIcon={<FontAwesomeIcon icon={faMagnifyingGlass} />}
|
leftIcon={<FontAwesomeIcon icon={faMagnifyingGlass} />}
|
||||||
placeholder="Search identities by name..."
|
placeholder="Search machine identities by name..."
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<TableContainer>
|
<TableContainer>
|
||||||
@@ -407,7 +407,7 @@ export const IdentityTable = ({ handlePopUpOpen }: Props) => {
|
|||||||
}}
|
}}
|
||||||
isDisabled={!isAllowed}
|
isDisabled={!isAllowed}
|
||||||
>
|
>
|
||||||
Edit Identity {isSubOrgIdentity ? "" : "Membership"}
|
Edit Machine Identity {isSubOrgIdentity ? "" : "Membership"}
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
)}
|
)}
|
||||||
</OrgPermissionCan>
|
</OrgPermissionCan>
|
||||||
@@ -428,7 +428,7 @@ export const IdentityTable = ({ handlePopUpOpen }: Props) => {
|
|||||||
icon={<FontAwesomeIcon icon={faTrash} />}
|
icon={<FontAwesomeIcon icon={faTrash} />}
|
||||||
>
|
>
|
||||||
{isSubOrgIdentity
|
{isSubOrgIdentity
|
||||||
? "Delete Identity"
|
? "Delete Machine Identity"
|
||||||
: "Remove From Sub-Organization"}
|
: "Remove From Sub-Organization"}
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
)}
|
)}
|
||||||
@@ -455,8 +455,8 @@ export const IdentityTable = ({ handlePopUpOpen }: Props) => {
|
|||||||
<EmptyState
|
<EmptyState
|
||||||
title={
|
title={
|
||||||
debouncedSearch.trim().length > 0 || filter.roles?.length > 0
|
debouncedSearch.trim().length > 0 || filter.roles?.length > 0
|
||||||
? "No identities match search filter"
|
? "No machine identities match search filter"
|
||||||
: "No identities have been created in this organization"
|
: "No machine identities have been created in this organization"
|
||||||
}
|
}
|
||||||
icon={faServer}
|
icon={faServer}
|
||||||
/>
|
/>
|
||||||
|
|||||||
+2
-2
@@ -78,11 +78,11 @@ export const OrgIdentityLinkForm = ({ onClose }: Props) => {
|
|||||||
control={control}
|
control={control}
|
||||||
name="identity"
|
name="identity"
|
||||||
render={({ field: { onChange, value }, fieldState: { error } }) => (
|
render={({ field: { onChange, value }, fieldState: { error } }) => (
|
||||||
<FormControl label="Identity" errorText={error?.message} isError={Boolean(error)}>
|
<FormControl label="Machine Identity" errorText={error?.message} isError={Boolean(error)}>
|
||||||
<FilterableSelect
|
<FilterableSelect
|
||||||
value={value}
|
value={value}
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
placeholder="Select identity..."
|
placeholder="Select machine identity..."
|
||||||
// onInputChange={setSearchValue}
|
// onInputChange={setSearchValue}
|
||||||
options={rootOrgIdentities}
|
options={rootOrgIdentities}
|
||||||
getOptionValue={(option) => option.id}
|
getOptionValue={(option) => option.id}
|
||||||
|
|||||||
+1
-1
@@ -164,7 +164,7 @@ export const OrgIdentityModal = ({ popUp, handlePopUpToggle }: Props) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
createNotification({
|
createNotification({
|
||||||
text: `Successfully ${popUp?.identity?.data ? "updated" : "created"} identity`,
|
text: `Successfully ${popUp?.identity?.data ? "updated" : "created"} machine identity`,
|
||||||
type: "success"
|
type: "success"
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ const Page = () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
createNotification({
|
createNotification({
|
||||||
text: "Successfully deleted identity",
|
text: "Successfully deleted machine identity",
|
||||||
type: "success"
|
type: "success"
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -82,11 +82,11 @@ const Page = () => {
|
|||||||
className="mb-4 flex items-center gap-x-2 text-sm text-mineshaft-400"
|
className="mb-4 flex items-center gap-x-2 text-sm text-mineshaft-400"
|
||||||
>
|
>
|
||||||
<FontAwesomeIcon icon={faChevronLeft} />
|
<FontAwesomeIcon icon={faChevronLeft} />
|
||||||
Identities
|
Machine Identities
|
||||||
</Link>
|
</Link>
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope={isSubOrganization ? "namespace" : "org"}
|
scope={isSubOrganization ? "namespace" : "org"}
|
||||||
description={`${isSubOrganization ? "Sub-" : ""}Organization Identity`}
|
description={`${isSubOrganization ? "Sub-" : ""}Organization Machine Identity`}
|
||||||
title={data.identity.name}
|
title={data.identity.name}
|
||||||
>
|
>
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
@@ -111,7 +111,7 @@ const Page = () => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
Unlink Identity
|
Unlink Machine Identity
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
</OrgPermissionCan>
|
</OrgPermissionCan>
|
||||||
@@ -142,7 +142,7 @@ const Page = () => {
|
|||||||
>
|
>
|
||||||
<ModalContent
|
<ModalContent
|
||||||
bodyClassName="overflow-visible"
|
bodyClassName="overflow-visible"
|
||||||
title={`${popUp?.identity?.data ? "Update" : "Create"} Identity`}
|
title={`${popUp?.identity?.data ? "Update" : "Create"} Machine Identity`}
|
||||||
>
|
>
|
||||||
<OrgIdentityModal popUp={popUp} handlePopUpToggle={handlePopUpToggle} />
|
<OrgIdentityModal popUp={popUp} handlePopUpToggle={handlePopUpToggle} />
|
||||||
</ModalContent>
|
</ModalContent>
|
||||||
|
|||||||
+4
-4
@@ -45,7 +45,7 @@ export const IdentityDetailsSection = ({ identityId, handlePopUpOpen, isOrgIdent
|
|||||||
return data ? (
|
return data ? (
|
||||||
<div className="rounded-lg border border-mineshaft-600 bg-mineshaft-900 p-4">
|
<div className="rounded-lg border border-mineshaft-600 bg-mineshaft-900 p-4">
|
||||||
<div className="flex items-center justify-between border-b border-mineshaft-400 pb-4">
|
<div className="flex items-center justify-between border-b border-mineshaft-400 pb-4">
|
||||||
<h3 className="text-lg font-medium text-mineshaft-100">Identity Details</h3>
|
<h3 className="text-lg font-medium text-mineshaft-100">Details</h3>
|
||||||
<DropdownMenu>
|
<DropdownMenu>
|
||||||
<DropdownMenuTrigger asChild>
|
<DropdownMenuTrigger asChild>
|
||||||
<Button
|
<Button
|
||||||
@@ -86,7 +86,7 @@ export const IdentityDetailsSection = ({ identityId, handlePopUpOpen, isOrgIdent
|
|||||||
}}
|
}}
|
||||||
disabled={!isAllowed}
|
disabled={!isAllowed}
|
||||||
>
|
>
|
||||||
{isOrgIdentity ? "Edit Identity" : "Edit Identity Role"}
|
{isOrgIdentity ? "Edit Machine Identity" : "Edit Machine Identity Role"}
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
)}
|
)}
|
||||||
</OrgPermissionCan>
|
</OrgPermissionCan>
|
||||||
@@ -110,7 +110,7 @@ export const IdentityDetailsSection = ({ identityId, handlePopUpOpen, isOrgIdent
|
|||||||
icon={<FontAwesomeIcon icon={faTrash} />}
|
icon={<FontAwesomeIcon icon={faTrash} />}
|
||||||
disabled={!isAllowed}
|
disabled={!isAllowed}
|
||||||
>
|
>
|
||||||
{!isOrgIdentity ? "Remove From Sub-Organization" : "Delete Identity"}
|
{!isOrgIdentity ? "Remove From Sub-Organization" : "Delete Machine Identity"}
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
)}
|
)}
|
||||||
</OrgPermissionCan>
|
</OrgPermissionCan>
|
||||||
@@ -119,7 +119,7 @@ export const IdentityDetailsSection = ({ identityId, handlePopUpOpen, isOrgIdent
|
|||||||
</div>
|
</div>
|
||||||
<div className="pt-4">
|
<div className="pt-4">
|
||||||
<div className="mb-4">
|
<div className="mb-4">
|
||||||
<p className="text-sm font-medium text-mineshaft-300">Identity ID</p>
|
<p className="text-sm font-medium text-mineshaft-300">Machine Identity ID</p>
|
||||||
<div className="group flex align-top">
|
<div className="group flex align-top">
|
||||||
<p className="text-sm text-mineshaft-300">{data.identity.id}</p>
|
<p className="text-sm text-mineshaft-300">{data.identity.id}</p>
|
||||||
<div className="opacity-0 transition-opacity duration-300 group-hover:opacity-100">
|
<div className="opacity-0 transition-opacity duration-300 group-hover:opacity-100">
|
||||||
|
|||||||
+1
-1
@@ -167,7 +167,7 @@ export const IdentityAddToProjectModal = ({ identityId, popUp, handlePopUpToggle
|
|||||||
handlePopUpToggle("addIdentityToProject", isOpen);
|
handlePopUpToggle("addIdentityToProject", isOpen);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<ModalContent bodyClassName="overflow-visible" title="Add Identity to Project">
|
<ModalContent bodyClassName="overflow-visible" title="Add Machine Identity to Project">
|
||||||
<Content identityId={identityId} handlePopUpToggle={handlePopUpToggle} />
|
<Content identityId={identityId} handlePopUpToggle={handlePopUpToggle} />
|
||||||
</ModalContent>
|
</ModalContent>
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|||||||
+1
-1
@@ -151,7 +151,7 @@ export const IdentityProjectsTable = ({ identityId, handlePopUpOpen }: Props) =>
|
|||||||
title={
|
title={
|
||||||
projectMemberships.length
|
projectMemberships.length
|
||||||
? "No projects match search..."
|
? "No projects match search..."
|
||||||
: "This identity has not been assigned to any projects"
|
: "This machine identity has not been assigned to any projects"
|
||||||
}
|
}
|
||||||
icon={projectMemberships.length ? faSearch : faFolder}
|
icon={projectMemberships.length ? faSearch : faFolder}
|
||||||
/>
|
/>
|
||||||
|
|||||||
+13
-13
@@ -55,10 +55,10 @@ const formSchemaWithIdentity = baseFormSchema.extend({
|
|||||||
id: z.string(),
|
id: z.string(),
|
||||||
name: z.string()
|
name: z.string()
|
||||||
},
|
},
|
||||||
{ required_error: "Identity is required" }
|
{ required_error: "Machine identity is required" }
|
||||||
)
|
)
|
||||||
.nullable()
|
.nullable()
|
||||||
.refine((val) => val !== null, { message: "Identity is required" })
|
.refine((val) => val !== null, { message: "Machine identity is required" })
|
||||||
});
|
});
|
||||||
|
|
||||||
const formSchemaWithToken = baseFormSchema.extend({
|
const formSchemaWithToken = baseFormSchema.extend({
|
||||||
@@ -275,8 +275,8 @@ export const GatewayCliDeploymentMethod = () => {
|
|||||||
{canCreateToken && autogenerateToken ? (
|
{canCreateToken && autogenerateToken ? (
|
||||||
<>
|
<>
|
||||||
<FormLabel
|
<FormLabel
|
||||||
label="Identity"
|
label="Machine Identity"
|
||||||
tooltipText="The identity that your gateway will use for authentication."
|
tooltipText="The machine identity that your gateway will use for authentication."
|
||||||
className="mt-4"
|
className="mt-4"
|
||||||
/>
|
/>
|
||||||
<FilterableSelect
|
<FilterableSelect
|
||||||
@@ -290,7 +290,7 @@ export const GatewayCliDeploymentMethod = () => {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
isLoading={isIdentitiesLoading}
|
isLoading={isIdentitiesLoading}
|
||||||
placeholder="Select identity..."
|
placeholder="Select machine identity..."
|
||||||
options={identityMembershipOrgs.map((membership) => membership.identity)}
|
options={identityMembershipOrgs.map((membership) => membership.identity)}
|
||||||
getOptionValue={(option) => option.id}
|
getOptionValue={(option) => option.id}
|
||||||
getOptionLabel={(option) => option.name}
|
getOptionLabel={(option) => option.name}
|
||||||
@@ -300,14 +300,14 @@ export const GatewayCliDeploymentMethod = () => {
|
|||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
<FormLabel
|
<FormLabel
|
||||||
label="Identity Token"
|
label="Machine Identity Token"
|
||||||
tooltipText="The identity token that your gateway will use for authentication."
|
tooltipText="The machine identity token that your gateway will use for authentication."
|
||||||
className="mt-4"
|
className="mt-4"
|
||||||
/>
|
/>
|
||||||
<Input
|
<Input
|
||||||
value={identityToken}
|
value={identityToken}
|
||||||
onChange={(e) => setIdentityToken(e.target.value)}
|
onChange={(e) => setIdentityToken(e.target.value)}
|
||||||
placeholder="Enter identity token..."
|
placeholder="Enter machine identity token..."
|
||||||
isError={Boolean(errors.identityToken)}
|
isError={Boolean(errors.identityToken)}
|
||||||
/>
|
/>
|
||||||
{errors.identityToken && <p className="mt-1 text-sm text-red">{errors.identityToken}</p>}
|
{errors.identityToken && <p className="mt-1 text-sm text-red">{errors.identityToken}</p>}
|
||||||
@@ -325,15 +325,15 @@ export const GatewayCliDeploymentMethod = () => {
|
|||||||
className="mr-2"
|
className="mr-2"
|
||||||
>
|
>
|
||||||
<div className="flex items-center">
|
<div className="flex items-center">
|
||||||
<span>Automatically enable token auth and generate a token for identity</span>
|
<span>Automatically enable token auth and generate a token for machine identity</span>
|
||||||
<Tooltip
|
<Tooltip
|
||||||
className="max-w-md"
|
className="max-w-md"
|
||||||
content={
|
content={
|
||||||
<>
|
<>
|
||||||
Token authentication will be automatically enabled for the selected identity if
|
Token authentication will be automatically enabled for the selected machine
|
||||||
it isn't already configured. By default, it will be configured to allow all
|
identity if it isn't already configured. By default, it will be configured
|
||||||
IP addresses with a token TTL of 30 days. You can manage these settings in
|
to allow all IP addresses with a token TTL of 30 days. You can manage these
|
||||||
Access Control.
|
settings in Access Control.
|
||||||
<br />
|
<br />
|
||||||
<br />A token will automatically be generated to be used with the CLI command.
|
<br />A token will automatically be generated to be used with the CLI command.
|
||||||
</>
|
</>
|
||||||
|
|||||||
+13
-13
@@ -55,10 +55,10 @@ const formSchemaWithIdentity = baseFormSchema.extend({
|
|||||||
id: z.string(),
|
id: z.string(),
|
||||||
name: z.string()
|
name: z.string()
|
||||||
},
|
},
|
||||||
{ required_error: "Identity is required" }
|
{ required_error: "Machine identity is required" }
|
||||||
)
|
)
|
||||||
.nullable()
|
.nullable()
|
||||||
.refine((val) => val !== null, { message: "Identity is required" })
|
.refine((val) => val !== null, { message: "Machine identity is required" })
|
||||||
});
|
});
|
||||||
|
|
||||||
const formSchemaWithToken = baseFormSchema.extend({
|
const formSchemaWithToken = baseFormSchema.extend({
|
||||||
@@ -297,8 +297,8 @@ export const GatewayCliSystemdDeploymentMethod = () => {
|
|||||||
{canCreateToken && autogenerateToken ? (
|
{canCreateToken && autogenerateToken ? (
|
||||||
<>
|
<>
|
||||||
<FormLabel
|
<FormLabel
|
||||||
label="Identity"
|
label="Machine Identity"
|
||||||
tooltipText="The identity that your gateway will use for authentication."
|
tooltipText="The machine identity that your gateway will use for authentication."
|
||||||
className="mt-4"
|
className="mt-4"
|
||||||
/>
|
/>
|
||||||
<FilterableSelect
|
<FilterableSelect
|
||||||
@@ -312,7 +312,7 @@ export const GatewayCliSystemdDeploymentMethod = () => {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
isLoading={isIdentitiesLoading}
|
isLoading={isIdentitiesLoading}
|
||||||
placeholder="Select identity..."
|
placeholder="Select machine identity..."
|
||||||
options={identityMembershipOrgs.map((membership) => membership.identity)}
|
options={identityMembershipOrgs.map((membership) => membership.identity)}
|
||||||
getOptionValue={(option) => option.id}
|
getOptionValue={(option) => option.id}
|
||||||
getOptionLabel={(option) => option.name}
|
getOptionLabel={(option) => option.name}
|
||||||
@@ -322,14 +322,14 @@ export const GatewayCliSystemdDeploymentMethod = () => {
|
|||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
<FormLabel
|
<FormLabel
|
||||||
label="Identity Token"
|
label="Machine Identity Token"
|
||||||
tooltipText="The identity token that your gateway will use for authentication."
|
tooltipText="The machine identity token that your gateway will use for authentication."
|
||||||
className="mt-4"
|
className="mt-4"
|
||||||
/>
|
/>
|
||||||
<Input
|
<Input
|
||||||
value={identityToken}
|
value={identityToken}
|
||||||
onChange={(e) => setIdentityToken(e.target.value)}
|
onChange={(e) => setIdentityToken(e.target.value)}
|
||||||
placeholder="Enter identity token..."
|
placeholder="Enter machine identity token..."
|
||||||
isError={Boolean(errors.identityToken)}
|
isError={Boolean(errors.identityToken)}
|
||||||
/>
|
/>
|
||||||
{errors.identityToken && <p className="mt-1 text-sm text-red">{errors.identityToken}</p>}
|
{errors.identityToken && <p className="mt-1 text-sm text-red">{errors.identityToken}</p>}
|
||||||
@@ -347,15 +347,15 @@ export const GatewayCliSystemdDeploymentMethod = () => {
|
|||||||
className="mr-2"
|
className="mr-2"
|
||||||
>
|
>
|
||||||
<div className="flex items-center">
|
<div className="flex items-center">
|
||||||
<span>Automatically enable token auth and generate a token for identity</span>
|
<span>Automatically enable token auth and generate a token for machine identity</span>
|
||||||
<Tooltip
|
<Tooltip
|
||||||
className="max-w-md"
|
className="max-w-md"
|
||||||
content={
|
content={
|
||||||
<>
|
<>
|
||||||
Token authentication will be automatically enabled for the selected identity if
|
Token authentication will be automatically enabled for the selected machine
|
||||||
it isn't already configured. By default, it will be configured to allow all
|
identity if it isn't already configured. By default, it will be configured
|
||||||
IP addresses with a token TTL of 30 days. You can manage these settings in
|
to allow all IP addresses with a token TTL of 30 days. You can manage these
|
||||||
Access Control.
|
settings in Access Control.
|
||||||
<br />
|
<br />
|
||||||
<br />A token will automatically be generated to be used with the CLI command.
|
<br />A token will automatically be generated to be used with the CLI command.
|
||||||
</>
|
</>
|
||||||
|
|||||||
+13
-13
@@ -41,10 +41,10 @@ const formSchemaWithIdentity = baseFormSchema.extend({
|
|||||||
id: z.string(),
|
id: z.string(),
|
||||||
name: z.string()
|
name: z.string()
|
||||||
},
|
},
|
||||||
{ required_error: "Identity is required" }
|
{ required_error: "Machine identity is required" }
|
||||||
)
|
)
|
||||||
.nullable()
|
.nullable()
|
||||||
.refine((val) => val !== null, { message: "Identity is required" })
|
.refine((val) => val !== null, { message: "Machine identity is required" })
|
||||||
});
|
});
|
||||||
|
|
||||||
const formSchemaWithToken = baseFormSchema.extend({
|
const formSchemaWithToken = baseFormSchema.extend({
|
||||||
@@ -229,8 +229,8 @@ export const RelayCliDeploymentMethod = () => {
|
|||||||
{canCreateToken && autogenerateToken ? (
|
{canCreateToken && autogenerateToken ? (
|
||||||
<>
|
<>
|
||||||
<FormLabel
|
<FormLabel
|
||||||
label="Identity"
|
label="Machine Identity"
|
||||||
tooltipText="The identity that your relay will use for authentication."
|
tooltipText="The machine identity that your relay will use for authentication."
|
||||||
className="mt-4"
|
className="mt-4"
|
||||||
/>
|
/>
|
||||||
<FilterableSelect
|
<FilterableSelect
|
||||||
@@ -244,7 +244,7 @@ export const RelayCliDeploymentMethod = () => {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
isLoading={isIdentitiesLoading}
|
isLoading={isIdentitiesLoading}
|
||||||
placeholder="Select identity..."
|
placeholder="Select machine identity..."
|
||||||
options={identityMembershipOrgs.map((membership) => membership.identity)}
|
options={identityMembershipOrgs.map((membership) => membership.identity)}
|
||||||
getOptionValue={(option) => option.id}
|
getOptionValue={(option) => option.id}
|
||||||
getOptionLabel={(option) => option.name}
|
getOptionLabel={(option) => option.name}
|
||||||
@@ -254,14 +254,14 @@ export const RelayCliDeploymentMethod = () => {
|
|||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
<FormLabel
|
<FormLabel
|
||||||
label="Identity Token"
|
label="Machine Identity Token"
|
||||||
tooltipText="The identity token that your relay will use for authentication."
|
tooltipText="The machine identity token that your relay will use for authentication."
|
||||||
className="mt-4"
|
className="mt-4"
|
||||||
/>
|
/>
|
||||||
<Input
|
<Input
|
||||||
value={identityToken}
|
value={identityToken}
|
||||||
onChange={(e) => setIdentityToken(e.target.value)}
|
onChange={(e) => setIdentityToken(e.target.value)}
|
||||||
placeholder="Enter identity token..."
|
placeholder="Enter machine identity token..."
|
||||||
isError={Boolean(errors.identityToken)}
|
isError={Boolean(errors.identityToken)}
|
||||||
/>
|
/>
|
||||||
{errors.identityToken && <p className="mt-1 text-sm text-red">{errors.identityToken}</p>}
|
{errors.identityToken && <p className="mt-1 text-sm text-red">{errors.identityToken}</p>}
|
||||||
@@ -279,15 +279,15 @@ export const RelayCliDeploymentMethod = () => {
|
|||||||
className="mr-2"
|
className="mr-2"
|
||||||
>
|
>
|
||||||
<div className="flex items-center">
|
<div className="flex items-center">
|
||||||
<span>Automatically enable token auth and generate a token for identity</span>
|
<span>Automatically enable token auth and generate a token for machine identity</span>
|
||||||
<Tooltip
|
<Tooltip
|
||||||
className="max-w-md"
|
className="max-w-md"
|
||||||
content={
|
content={
|
||||||
<>
|
<>
|
||||||
Token authentication will be automatically enabled for the selected identity if
|
Token authentication will be automatically enabled for the selected machine
|
||||||
it isn't already configured. By default, it will be configured to allow all
|
identity if it isn't already configured. By default, it will be configured
|
||||||
IP addresses with a token TTL of 30 days. You can manage these settings in
|
to allow all IP addresses with a token TTL of 30 days. You can manage these
|
||||||
Access Control.
|
settings in Access Control.
|
||||||
<br />
|
<br />
|
||||||
<br />A token will automatically be generated to be used with the CLI command.
|
<br />A token will automatically be generated to be used with the CLI command.
|
||||||
</>
|
</>
|
||||||
|
|||||||
+13
-13
@@ -41,10 +41,10 @@ const formSchemaWithIdentity = baseFormSchema.extend({
|
|||||||
id: z.string(),
|
id: z.string(),
|
||||||
name: z.string()
|
name: z.string()
|
||||||
},
|
},
|
||||||
{ required_error: "Identity is required" }
|
{ required_error: "Machine identity is required" }
|
||||||
)
|
)
|
||||||
.nullable()
|
.nullable()
|
||||||
.refine((val) => val !== null, { message: "Identity is required" })
|
.refine((val) => val !== null, { message: "Machine identity is required" })
|
||||||
});
|
});
|
||||||
|
|
||||||
const formSchemaWithToken = baseFormSchema.extend({
|
const formSchemaWithToken = baseFormSchema.extend({
|
||||||
@@ -270,8 +270,8 @@ export const RelayCliSystemdDeploymentMethod = () => {
|
|||||||
{canCreateToken && autogenerateToken ? (
|
{canCreateToken && autogenerateToken ? (
|
||||||
<>
|
<>
|
||||||
<FormLabel
|
<FormLabel
|
||||||
label="Identity"
|
label="Machine Identity"
|
||||||
tooltipText="The identity that your relay will use for authentication."
|
tooltipText="The machine identity that your relay will use for authentication."
|
||||||
className="mt-4"
|
className="mt-4"
|
||||||
/>
|
/>
|
||||||
<FilterableSelect
|
<FilterableSelect
|
||||||
@@ -285,7 +285,7 @@ export const RelayCliSystemdDeploymentMethod = () => {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
isLoading={isIdentitiesLoading}
|
isLoading={isIdentitiesLoading}
|
||||||
placeholder="Select identity..."
|
placeholder="Select machine identity..."
|
||||||
options={identityMembershipOrgs.map((membership) => membership.identity)}
|
options={identityMembershipOrgs.map((membership) => membership.identity)}
|
||||||
getOptionValue={(option) => option.id}
|
getOptionValue={(option) => option.id}
|
||||||
getOptionLabel={(option) => option.name}
|
getOptionLabel={(option) => option.name}
|
||||||
@@ -295,14 +295,14 @@ export const RelayCliSystemdDeploymentMethod = () => {
|
|||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
<FormLabel
|
<FormLabel
|
||||||
label="Identity Token"
|
label="Machine Identity Token"
|
||||||
tooltipText="The identity token that your relay will use for authentication."
|
tooltipText="The machine identity token that your relay will use for authentication."
|
||||||
className="mt-4"
|
className="mt-4"
|
||||||
/>
|
/>
|
||||||
<Input
|
<Input
|
||||||
value={identityToken}
|
value={identityToken}
|
||||||
onChange={(e) => setIdentityToken(e.target.value)}
|
onChange={(e) => setIdentityToken(e.target.value)}
|
||||||
placeholder="Enter identity token..."
|
placeholder="Enter machine identity token..."
|
||||||
isError={Boolean(errors.identityToken)}
|
isError={Boolean(errors.identityToken)}
|
||||||
/>
|
/>
|
||||||
{errors.identityToken && <p className="mt-1 text-sm text-red">{errors.identityToken}</p>}
|
{errors.identityToken && <p className="mt-1 text-sm text-red">{errors.identityToken}</p>}
|
||||||
@@ -320,15 +320,15 @@ export const RelayCliSystemdDeploymentMethod = () => {
|
|||||||
className="mr-2"
|
className="mr-2"
|
||||||
>
|
>
|
||||||
<div className="flex items-center">
|
<div className="flex items-center">
|
||||||
<span>Automatically enable token auth and generate a token for identity</span>
|
<span>Automatically enable token auth and generate a token for machine identity</span>
|
||||||
<Tooltip
|
<Tooltip
|
||||||
className="max-w-md"
|
className="max-w-md"
|
||||||
content={
|
content={
|
||||||
<>
|
<>
|
||||||
Token authentication will be automatically enabled for the selected identity if
|
Token authentication will be automatically enabled for the selected machine
|
||||||
it isn't already configured. By default, it will be configured to allow all
|
identity if it isn't already configured. By default, it will be configured
|
||||||
IP addresses with a token TTL of 30 days. You can manage these settings in
|
to allow all IP addresses with a token TTL of 30 days. You can manage these
|
||||||
Access Control.
|
settings in Access Control.
|
||||||
<br />
|
<br />
|
||||||
<br />A token will automatically be generated to be used with the CLI command.
|
<br />A token will automatically be generated to be used with the CLI command.
|
||||||
</>
|
</>
|
||||||
|
|||||||
+13
-13
@@ -42,10 +42,10 @@ const formSchemaWithIdentity = baseFormSchema.extend({
|
|||||||
id: z.string(),
|
id: z.string(),
|
||||||
name: z.string()
|
name: z.string()
|
||||||
},
|
},
|
||||||
{ required_error: "Identity is required" }
|
{ required_error: "Machine identity is required" }
|
||||||
)
|
)
|
||||||
.nullable()
|
.nullable()
|
||||||
.refine((val) => val !== null, { message: "Identity is required" })
|
.refine((val) => val !== null, { message: "Machine identity is required" })
|
||||||
});
|
});
|
||||||
|
|
||||||
const formSchemaWithToken = baseFormSchema.extend({
|
const formSchemaWithToken = baseFormSchema.extend({
|
||||||
@@ -349,8 +349,8 @@ resource "aws_eip_association" "eip_assoc" {
|
|||||||
{canCreateToken && autogenerateToken ? (
|
{canCreateToken && autogenerateToken ? (
|
||||||
<>
|
<>
|
||||||
<FormLabel
|
<FormLabel
|
||||||
label="Identity"
|
label="Machine Identity"
|
||||||
tooltipText="The identity that your relay will use for authentication."
|
tooltipText="The machine identity that your relay will use for authentication."
|
||||||
className="mt-4"
|
className="mt-4"
|
||||||
/>
|
/>
|
||||||
<FilterableSelect
|
<FilterableSelect
|
||||||
@@ -364,7 +364,7 @@ resource "aws_eip_association" "eip_assoc" {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
isLoading={isIdentitiesLoading}
|
isLoading={isIdentitiesLoading}
|
||||||
placeholder="Select identity..."
|
placeholder="Select machine identity..."
|
||||||
options={identityMembershipOrgs.map((membership) => membership.identity)}
|
options={identityMembershipOrgs.map((membership) => membership.identity)}
|
||||||
getOptionValue={(option) => option.id}
|
getOptionValue={(option) => option.id}
|
||||||
getOptionLabel={(option) => option.name}
|
getOptionLabel={(option) => option.name}
|
||||||
@@ -374,14 +374,14 @@ resource "aws_eip_association" "eip_assoc" {
|
|||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
<FormLabel
|
<FormLabel
|
||||||
label="Identity Token"
|
label="Machine Identity Token"
|
||||||
tooltipText="The identity token that your relay will use for authentication."
|
tooltipText="The machine identity token that your relay will use for authentication."
|
||||||
className="mt-4"
|
className="mt-4"
|
||||||
/>
|
/>
|
||||||
<Input
|
<Input
|
||||||
value={identityToken}
|
value={identityToken}
|
||||||
onChange={(e) => setIdentityToken(e.target.value)}
|
onChange={(e) => setIdentityToken(e.target.value)}
|
||||||
placeholder="Enter identity token..."
|
placeholder="Enter machine identity token..."
|
||||||
isError={Boolean(errors.identityToken)}
|
isError={Boolean(errors.identityToken)}
|
||||||
/>
|
/>
|
||||||
{errors.identityToken && <p className="mt-1 text-sm text-red">{errors.identityToken}</p>}
|
{errors.identityToken && <p className="mt-1 text-sm text-red">{errors.identityToken}</p>}
|
||||||
@@ -399,15 +399,15 @@ resource "aws_eip_association" "eip_assoc" {
|
|||||||
className="mr-2"
|
className="mr-2"
|
||||||
>
|
>
|
||||||
<div className="flex items-center">
|
<div className="flex items-center">
|
||||||
<span>Automatically enable token auth and generate a token for identity</span>
|
<span>Automatically enable token auth and generate a token for machine identity</span>
|
||||||
<Tooltip
|
<Tooltip
|
||||||
className="max-w-md"
|
className="max-w-md"
|
||||||
content={
|
content={
|
||||||
<>
|
<>
|
||||||
Token authentication will be automatically enabled for the selected identity if
|
Token authentication will be automatically enabled for the selected machine
|
||||||
it isn't already configured. By default, it will be configured to allow all
|
identity if it isn't already configured. By default, it will be configured
|
||||||
IP addresses with a token TTL of 30 days. You can manage these settings in
|
to allow all IP addresses with a token TTL of 30 days. You can manage these
|
||||||
Access Control.
|
settings in Access Control.
|
||||||
<br />
|
<br />
|
||||||
<br />A token will automatically be generated to be used with the CLI command.
|
<br />A token will automatically be generated to be used with the CLI command.
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ const Page = () => {
|
|||||||
<PageHeader
|
<PageHeader
|
||||||
scope={currentProject.type}
|
scope={currentProject.type}
|
||||||
title="Access Control"
|
title="Access Control"
|
||||||
description="Manage fine-grained access for users, groups, roles, and identities within your project resources."
|
description="Manage fine-grained access for users, groups, roles, and machine identities within your project resources."
|
||||||
/>
|
/>
|
||||||
<Tabs orientation="vertical" value={selectedTab} onValueChange={updateSelectedTab}>
|
<Tabs orientation="vertical" value={selectedTab} onValueChange={updateSelectedTab}>
|
||||||
<TabList>
|
<TabList>
|
||||||
@@ -55,7 +55,7 @@ const Page = () => {
|
|||||||
Groups
|
Groups
|
||||||
</Tab>
|
</Tab>
|
||||||
<Tab variant="project" value={ProjectAccessControlTabs.Identities}>
|
<Tab variant="project" value={ProjectAccessControlTabs.Identities}>
|
||||||
Identities
|
Machine Identities
|
||||||
</Tab>
|
</Tab>
|
||||||
{isSecretManager && (
|
{isSecretManager && (
|
||||||
<Tab variant="project" value={ProjectAccessControlTabs.ServiceTokens}>
|
<Tab variant="project" value={ProjectAccessControlTabs.ServiceTokens}>
|
||||||
|
|||||||
+19
-17
@@ -158,7 +158,7 @@ export const IdentityTab = withProjectPermission(
|
|||||||
});
|
});
|
||||||
|
|
||||||
createNotification({
|
createNotification({
|
||||||
text: "Successfully deleted project identity",
|
text: "Successfully deleted project machine identity",
|
||||||
type: "success"
|
type: "success"
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
@@ -168,7 +168,7 @@ export const IdentityTab = withProjectPermission(
|
|||||||
});
|
});
|
||||||
|
|
||||||
createNotification({
|
createNotification({
|
||||||
text: "Successfully removed identity from project",
|
text: "Successfully removed machine identity from project",
|
||||||
type: "success"
|
type: "success"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -197,7 +197,7 @@ export const IdentityTab = withProjectPermission(
|
|||||||
<div className="mb-6 rounded-lg border border-mineshaft-600 bg-mineshaft-900 p-4">
|
<div className="mb-6 rounded-lg border border-mineshaft-600 bg-mineshaft-900 p-4">
|
||||||
<div className="mb-4 flex items-center justify-between">
|
<div className="mb-4 flex items-center justify-between">
|
||||||
<div className="flex items-center gap-x-2">
|
<div className="flex items-center gap-x-2">
|
||||||
<p className="text-xl font-medium text-mineshaft-100">Identities</p>
|
<p className="text-xl font-medium text-mineshaft-100">Machine Identities</p>
|
||||||
<DocumentationLinkBadge href="https://infisical.com/docs/documentation/platform/identities/machine-identities" />
|
<DocumentationLinkBadge href="https://infisical.com/docs/documentation/platform/identities/machine-identities" />
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center">
|
<div className="flex items-center">
|
||||||
@@ -212,7 +212,7 @@ export const IdentityTab = withProjectPermission(
|
|||||||
onClick={() => handlePopUpOpen("createIdentity")}
|
onClick={() => handlePopUpOpen("createIdentity")}
|
||||||
isDisabled={!isAllowed}
|
isDisabled={!isAllowed}
|
||||||
>
|
>
|
||||||
Create Identity
|
Add Machine Identity
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
</ProjectPermissionCan>
|
</ProjectPermissionCan>
|
||||||
@@ -223,7 +223,7 @@ export const IdentityTab = withProjectPermission(
|
|||||||
value={search}
|
value={search}
|
||||||
onChange={(e) => setSearch(e.target.value)}
|
onChange={(e) => setSearch(e.target.value)}
|
||||||
leftIcon={<FontAwesomeIcon icon={faMagnifyingGlass} />}
|
leftIcon={<FontAwesomeIcon icon={faMagnifyingGlass} />}
|
||||||
placeholder="Search identities by name..."
|
placeholder="Search machine identities by name..."
|
||||||
/>
|
/>
|
||||||
<TableContainer>
|
<TableContainer>
|
||||||
<Table>
|
<Table>
|
||||||
@@ -454,7 +454,9 @@ export const IdentityTab = withProjectPermission(
|
|||||||
});
|
});
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{identityProjectId ? "Delete Identity" : "Remove From Project"}
|
{identityProjectId
|
||||||
|
? "Delete Machine Identity"
|
||||||
|
: "Remove From Project"}
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
)}
|
)}
|
||||||
</ProjectPermissionCan>
|
</ProjectPermissionCan>
|
||||||
@@ -474,7 +476,7 @@ export const IdentityTab = withProjectPermission(
|
|||||||
<Td colSpan={3}>
|
<Td colSpan={3}>
|
||||||
<Blur
|
<Blur
|
||||||
className="w-min"
|
className="w-min"
|
||||||
tooltipText="You do not have permission to read this identity."
|
tooltipText="You do not have permission to view this machine identity."
|
||||||
/>
|
/>
|
||||||
</Td>
|
</Td>
|
||||||
</Tr>
|
</Tr>
|
||||||
@@ -497,8 +499,8 @@ export const IdentityTab = withProjectPermission(
|
|||||||
<EmptyState
|
<EmptyState
|
||||||
title={
|
title={
|
||||||
debouncedSearch.trim().length > 0
|
debouncedSearch.trim().length > 0
|
||||||
? "No identities match search filter"
|
? "No machine identities match search filter"
|
||||||
: "No identities have been added to this project"
|
: "No machine identities have been added to this project"
|
||||||
}
|
}
|
||||||
icon={faServer}
|
icon={faServer}
|
||||||
/>
|
/>
|
||||||
@@ -513,8 +515,8 @@ export const IdentityTab = withProjectPermission(
|
|||||||
>
|
>
|
||||||
<ModalContent
|
<ModalContent
|
||||||
bodyClassName="overflow-visible"
|
bodyClassName="overflow-visible"
|
||||||
title="Add Project Identity"
|
title="Add Project Machine Identity"
|
||||||
subTitle="Create a new identity or assign an existing identity"
|
subTitle="Create a new machine identity or assign an existing one"
|
||||||
>
|
>
|
||||||
<AnimatePresence mode="wait">
|
<AnimatePresence mode="wait">
|
||||||
{wizardStep === WizardSteps.SelectAction && (
|
{wizardStep === WizardSteps.SelectAction && (
|
||||||
@@ -538,11 +540,11 @@ export const IdentityTab = withProjectPermission(
|
|||||||
>
|
>
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
<PlusIcon size="1rem" />
|
<PlusIcon size="1rem" />
|
||||||
<div>Create New Identity</div>
|
<div>Create Machine Identity</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="mt-2 text-xs text-mineshaft-300">
|
<div className="mt-2 text-xs text-mineshaft-300">
|
||||||
Create a new machine identity specifically for this project. This identity
|
Create a new machine identity specifically for this project. This machine
|
||||||
will be managed at the project-level.
|
identity will be managed at the project-level.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
@@ -558,11 +560,11 @@ export const IdentityTab = withProjectPermission(
|
|||||||
>
|
>
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
<LinkIcon size="1rem" />
|
<LinkIcon size="1rem" />
|
||||||
<div>Assign Existing Identity</div>
|
<div>Assign Existing Machine Identity</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="mt-2 text-xs text-mineshaft-300">
|
<div className="mt-2 text-xs text-mineshaft-300">
|
||||||
Assign an existing identity from your organization. The identity will continue
|
Assign an existing machine identity from your organization. The machine
|
||||||
to be managed at its original scope.
|
identity will continue to be managed at its original scope.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
|
|||||||
+2
-2
@@ -138,7 +138,7 @@ export const ProjectIdentityModal = ({ onClose, identity }: ContentProps) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
createNotification({
|
createNotification({
|
||||||
text: `Successfully ${isUpdate ? "updated" : "created"} project identity`,
|
text: `Successfully ${isUpdate ? "updated" : "created"} project machine identity`,
|
||||||
type: "success"
|
type: "success"
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -148,7 +148,7 @@ export const ProjectIdentityModal = ({ onClose, identity }: ContentProps) => {
|
|||||||
const error = err as any;
|
const error = err as any;
|
||||||
const text =
|
const text =
|
||||||
error?.response?.data?.message ??
|
error?.response?.data?.message ??
|
||||||
`Failed to ${isUpdate ? "update" : "create"} project identity`;
|
`Failed to ${isUpdate ? "update" : "create"} project machine identity`;
|
||||||
|
|
||||||
createNotification({
|
createNotification({
|
||||||
text,
|
text,
|
||||||
|
|||||||
+3
-3
@@ -83,7 +83,7 @@ export const ProjectLinkIdentityModal = ({ handlePopUpToggle }: Props) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
createNotification({
|
createNotification({
|
||||||
text: "Successfully added identity to project",
|
text: "Successfully added machine identity to project",
|
||||||
type: "success"
|
type: "success"
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -114,11 +114,11 @@ export const ProjectLinkIdentityModal = ({ handlePopUpToggle }: Props) => {
|
|||||||
control={control}
|
control={control}
|
||||||
name="identity"
|
name="identity"
|
||||||
render={({ field: { onChange, value }, fieldState: { error } }) => (
|
render={({ field: { onChange, value }, fieldState: { error } }) => (
|
||||||
<FormControl label="Identity" errorText={error?.message} isError={Boolean(error)}>
|
<FormControl label="Machine Identity" errorText={error?.message} isError={Boolean(error)}>
|
||||||
<FilterableSelect
|
<FilterableSelect
|
||||||
value={value}
|
value={value}
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
placeholder="Select identity..."
|
placeholder="Select machine identity..."
|
||||||
// onInputChange={setSearchValue}
|
// onInputChange={setSearchValue}
|
||||||
options={filteredIdentityMembershipOrgs.map((membership) => ({
|
options={filteredIdentityMembershipOrgs.map((membership) => ({
|
||||||
name: membership.name,
|
name: membership.name,
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ const Page = () => {
|
|||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
createNotification({
|
createNotification({
|
||||||
type: "success",
|
type: "success",
|
||||||
text: "Identity privilege assumption has started"
|
text: "Machine identity privilege assumption has started"
|
||||||
});
|
});
|
||||||
const url = `${getProjectHomePage(currentProject.type, currentProject.environments)}${isSubOrganization && isNonScopedIdentity ? `?subOrganization=${currentOrg.slug}` : ""}`;
|
const url = `${getProjectHomePage(currentProject.type, currentProject.environments)}${isSubOrganization && isNonScopedIdentity ? `?subOrganization=${currentOrg.slug}` : ""}`;
|
||||||
window.location.assign(
|
window.location.assign(
|
||||||
@@ -109,7 +109,7 @@ const Page = () => {
|
|||||||
projectId
|
projectId
|
||||||
});
|
});
|
||||||
createNotification({
|
createNotification({
|
||||||
text: "Successfully removed identity from project",
|
text: "Successfully removed machine identity from project",
|
||||||
type: "success"
|
type: "success"
|
||||||
});
|
});
|
||||||
handlePopUpClose("deleteIdentity");
|
handlePopUpClose("deleteIdentity");
|
||||||
@@ -149,12 +149,12 @@ const Page = () => {
|
|||||||
className="mb-4 flex items-center gap-x-2 text-sm text-mineshaft-400"
|
className="mb-4 flex items-center gap-x-2 text-sm text-mineshaft-400"
|
||||||
>
|
>
|
||||||
<FontAwesomeIcon icon={faChevronLeft} />
|
<FontAwesomeIcon icon={faChevronLeft} />
|
||||||
Identities
|
Machine Identities
|
||||||
</Link>
|
</Link>
|
||||||
<PageHeader
|
<PageHeader
|
||||||
scope={currentProject.type}
|
scope={currentProject.type}
|
||||||
title={identityMembershipDetails?.identity?.name}
|
title={identityMembershipDetails?.identity?.name}
|
||||||
description={`Identity ${isProjectIdentity ? "created" : "added"} on ${identityMembershipDetails?.createdAt && formatRelative(new Date(identityMembershipDetails?.createdAt || ""), new Date())}`}
|
description={`Machine identity ${isProjectIdentity ? "created" : "added"} on ${identityMembershipDetails?.createdAt && formatRelative(new Date(identityMembershipDetails?.createdAt || ""), new Date())}`}
|
||||||
className={!isProjectIdentity ? "mb-4" : undefined}
|
className={!isProjectIdentity ? "mb-4" : undefined}
|
||||||
>
|
>
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
@@ -177,7 +177,7 @@ const Page = () => {
|
|||||||
identityId: identityMembershipDetails?.identity.id
|
identityId: identityMembershipDetails?.identity.id
|
||||||
})}
|
})}
|
||||||
renderTooltip
|
renderTooltip
|
||||||
allowedLabel="Assume privileges of the user"
|
allowedLabel="Assume privileges of the machine identity"
|
||||||
passThrough={false}
|
passThrough={false}
|
||||||
>
|
>
|
||||||
{(isAllowed) => (
|
{(isAllowed) => (
|
||||||
@@ -209,7 +209,7 @@ const Page = () => {
|
|||||||
isLoading={isDeletingIdentity}
|
isLoading={isDeletingIdentity}
|
||||||
onClick={() => handlePopUpOpen("deleteIdentity")}
|
onClick={() => handlePopUpOpen("deleteIdentity")}
|
||||||
>
|
>
|
||||||
Remove Identity
|
Remove Machine Identity
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
</ProjectPermissionCan>
|
</ProjectPermissionCan>
|
||||||
@@ -219,7 +219,7 @@ const Page = () => {
|
|||||||
{!isProjectIdentity && (
|
{!isProjectIdentity && (
|
||||||
<Alert hideTitle iconClassName="text-info" className="mb-4 border-info/50 bg-info/10">
|
<Alert hideTitle iconClassName="text-info" className="mb-4 border-info/50 bg-info/10">
|
||||||
<AlertDescription>
|
<AlertDescription>
|
||||||
This identity is managed by your organization.{" "}
|
This machine identity is managed by your organization.{" "}
|
||||||
<OrgPermissionCan
|
<OrgPermissionCan
|
||||||
I={OrgPermissionIdentityActions.Read}
|
I={OrgPermissionIdentityActions.Read}
|
||||||
an={OrgPermissionSubjects.Identity}
|
an={OrgPermissionSubjects.Identity}
|
||||||
@@ -234,7 +234,7 @@ const Page = () => {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<span className="cursor-pointer text-info underline underline-offset-2">
|
<span className="cursor-pointer text-info underline underline-offset-2">
|
||||||
Click here to manage identity.
|
Click here to manage machine identity.
|
||||||
</span>
|
</span>
|
||||||
</Link>
|
</Link>
|
||||||
) : null
|
) : null
|
||||||
@@ -286,15 +286,15 @@ const Page = () => {
|
|||||||
<ConfirmActionModal
|
<ConfirmActionModal
|
||||||
isOpen={popUp.assumePrivileges.isOpen}
|
isOpen={popUp.assumePrivileges.isOpen}
|
||||||
confirmKey="assume"
|
confirmKey="assume"
|
||||||
title="Do you want to assume privileges of this identity?"
|
title="Do you want to assume privileges of this machine identity?"
|
||||||
subTitle="This will set your privileges to those of the identity for the next hour."
|
subTitle="This will set your privileges to those of the machine identity for the next hour."
|
||||||
onChange={(isOpen) => handlePopUpToggle("assumePrivileges", isOpen)}
|
onChange={(isOpen) => handlePopUpToggle("assumePrivileges", isOpen)}
|
||||||
onConfirmed={handleAssumePrivileges}
|
onConfirmed={handleAssumePrivileges}
|
||||||
buttonText="Confirm"
|
buttonText="Confirm"
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
<EmptyState title="Error: Unable to find the identity." className="py-12" />
|
<EmptyState title="Error: Unable to find the machine identity." className="py-12" />
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
+4
-1
@@ -235,7 +235,10 @@ export const IdentityProjectAdditionalPrivilegeSection = ({ identityMembershipDe
|
|||||||
</TBody>
|
</TBody>
|
||||||
</Table>
|
</Table>
|
||||||
{!isPending && !identityProjectPrivileges?.length && (
|
{!isPending && !identityProjectPrivileges?.length && (
|
||||||
<EmptyState title="This identity has no additional privileges" icon={faFolder} />
|
<EmptyState
|
||||||
|
title="This machine identity has no additional privileges"
|
||||||
|
icon={faFolder}
|
||||||
|
/>
|
||||||
)}
|
)}
|
||||||
</TableContainer>
|
</TableContainer>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+5
-5
@@ -69,7 +69,7 @@ export const ProjectIdentityDetailsSection = ({ identity, isOrgIdentity, members
|
|||||||
} catch {
|
} catch {
|
||||||
createNotification({
|
createNotification({
|
||||||
type: "error",
|
type: "error",
|
||||||
text: "Failed to delete project identity"
|
text: "Failed to delete project machine identity"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -77,7 +77,7 @@ export const ProjectIdentityDetailsSection = ({ identity, isOrgIdentity, members
|
|||||||
return (
|
return (
|
||||||
<div className="rounded-lg border border-mineshaft-600 bg-mineshaft-900 p-4">
|
<div className="rounded-lg border border-mineshaft-600 bg-mineshaft-900 p-4">
|
||||||
<div className="flex items-center justify-between border-b border-mineshaft-400 pb-4">
|
<div className="flex items-center justify-between border-b border-mineshaft-400 pb-4">
|
||||||
<h3 className="text-lg font-medium text-mineshaft-100">Identity Details</h3>
|
<h3 className="text-lg font-medium text-mineshaft-100">Details</h3>
|
||||||
<DropdownMenu>
|
<DropdownMenu>
|
||||||
{!isOrgIdentity && (
|
{!isOrgIdentity && (
|
||||||
<DropdownMenuTrigger asChild>
|
<DropdownMenuTrigger asChild>
|
||||||
@@ -114,7 +114,7 @@ export const ProjectIdentityDetailsSection = ({ identity, isOrgIdentity, members
|
|||||||
}}
|
}}
|
||||||
disabled={!isAllowed}
|
disabled={!isAllowed}
|
||||||
>
|
>
|
||||||
Edit Identity
|
Edit Machine Identity
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
)}
|
)}
|
||||||
</ProjectPermissionCan>
|
</ProjectPermissionCan>
|
||||||
@@ -137,7 +137,7 @@ export const ProjectIdentityDetailsSection = ({ identity, isOrgIdentity, members
|
|||||||
icon={<FontAwesomeIcon icon={faTrash} />}
|
icon={<FontAwesomeIcon icon={faTrash} />}
|
||||||
disabled={!isAllowed}
|
disabled={!isAllowed}
|
||||||
>
|
>
|
||||||
Delete Identity
|
Delete Machine Identity
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
)}
|
)}
|
||||||
</ProjectPermissionCan>
|
</ProjectPermissionCan>
|
||||||
@@ -146,7 +146,7 @@ export const ProjectIdentityDetailsSection = ({ identity, isOrgIdentity, members
|
|||||||
</div>
|
</div>
|
||||||
<div className="pt-4">
|
<div className="pt-4">
|
||||||
<div className="mb-4">
|
<div className="mb-4">
|
||||||
<p className="text-sm font-medium text-mineshaft-300">Identity ID</p>
|
<p className="text-sm font-medium text-mineshaft-300">Machine Identity ID</p>
|
||||||
<div className="group flex align-top">
|
<div className="group flex align-top">
|
||||||
<p className="text-sm break-all text-mineshaft-300">{identity.id}</p>
|
<p className="text-sm break-all text-mineshaft-300">{identity.id}</p>
|
||||||
<div className="opacity-0 transition-opacity duration-300 group-hover:opacity-100">
|
<div className="opacity-0 transition-opacity duration-300 group-hover:opacity-100">
|
||||||
|
|||||||
Reference in New Issue
Block a user