Merge pull request #4859 from Infisical/ENG-4144
PAM: add more resource type previews
@@ -21,7 +21,7 @@ The content captured during a session depends on the type of resource being acce
|
|||||||
For database connections, Infisical captures all queries executed and their corresponding responses.
|
For database connections, Infisical captures all queries executed and their corresponding responses.
|
||||||
|
|
||||||
<Note>
|
<Note>
|
||||||
Support for additional resource types like SSH and RDP is coming soon.
|
Support for additional resource types like SSH, RDP, Kubernetes, and MCP is coming soon.
|
||||||
</Note>
|
</Note>
|
||||||
|
|
||||||
## Viewing Recordings
|
## Viewing Recordings
|
||||||
|
|||||||
BIN
frontend/public/images/integrations/Cassandra.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
frontend/public/images/integrations/CockroachDB.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
frontend/public/images/integrations/DynamoDB.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
frontend/public/images/integrations/Elastic.png
Normal file
|
After Width: | Height: | Size: 187 KiB |
BIN
frontend/public/images/integrations/MongoDB.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
frontend/public/images/integrations/SQLite.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
frontend/public/images/integrations/Snowflake.png
Normal file
|
After Width: | Height: | Size: 179 KiB |
BIN
frontend/public/images/integrations/Web.png
Normal file
|
After Width: | Height: | Size: 86 KiB |
@@ -4,7 +4,18 @@ export enum PamResourceType {
|
|||||||
RDP = "rdp",
|
RDP = "rdp",
|
||||||
SSH = "ssh",
|
SSH = "ssh",
|
||||||
Kubernetes = "kubernetes",
|
Kubernetes = "kubernetes",
|
||||||
MCP = "mcp"
|
OracleDB = "oracledb",
|
||||||
|
SQLite = "sqlite",
|
||||||
|
MsSQL = "mssql",
|
||||||
|
MCP = "mcp",
|
||||||
|
Redis = "redis",
|
||||||
|
MongoDB = "mongodb",
|
||||||
|
WebApp = "webapp",
|
||||||
|
Cassandra = "cassandra",
|
||||||
|
CockroachDB = "cockroachdb",
|
||||||
|
Elasticsearch = "elasticsearch",
|
||||||
|
Snowflake = "snowflake",
|
||||||
|
DynamoDB = "dynamodb"
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum PamSessionStatus {
|
export enum PamSessionStatus {
|
||||||
|
|||||||
@@ -9,5 +9,16 @@ export const PAM_RESOURCE_TYPE_MAP: Record<
|
|||||||
[PamResourceType.RDP]: { name: "RDP", image: "RDP.png" },
|
[PamResourceType.RDP]: { name: "RDP", image: "RDP.png" },
|
||||||
[PamResourceType.SSH]: { name: "SSH", image: "SSH.png" },
|
[PamResourceType.SSH]: { name: "SSH", image: "SSH.png" },
|
||||||
[PamResourceType.Kubernetes]: { name: "Kubernetes", image: "Kubernetes.png" },
|
[PamResourceType.Kubernetes]: { name: "Kubernetes", image: "Kubernetes.png" },
|
||||||
[PamResourceType.MCP]: { name: "MCP", image: "MCP.png" }
|
[PamResourceType.OracleDB]: { name: "OracleDB", image: "Oracle.png", size: 55 },
|
||||||
|
[PamResourceType.SQLite]: { name: "SQLite", image: "SQLite.png" },
|
||||||
|
[PamResourceType.MsSQL]: { name: "Microsoft SQL Server", image: "MsSql.png" },
|
||||||
|
[PamResourceType.MCP]: { name: "MCP", image: "MCP.png" },
|
||||||
|
[PamResourceType.Redis]: { name: "Redis", image: "Redis.png" },
|
||||||
|
[PamResourceType.MongoDB]: { name: "MongoDB", image: "MongoDB.png" },
|
||||||
|
[PamResourceType.WebApp]: { name: "Web Application", image: "Web.png" },
|
||||||
|
[PamResourceType.Cassandra]: { name: "Cassandra", image: "Cassandra.png", size: 55 },
|
||||||
|
[PamResourceType.CockroachDB]: { name: "CockroachDB", image: "CockroachDB.png" },
|
||||||
|
[PamResourceType.Elasticsearch]: { name: "Elasticsearch", image: "Elastic.png" },
|
||||||
|
[PamResourceType.Snowflake]: { name: "Snowflake", image: "Snowflake.png" },
|
||||||
|
[PamResourceType.DynamoDB]: { name: "DynamoDB", image: "DynamoDB.png", size: 55 }
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -26,10 +26,21 @@ export const ResourceTypeSelect = ({ onSelect }: Props) => {
|
|||||||
return [
|
return [
|
||||||
...resourceOptions,
|
...resourceOptions,
|
||||||
// We are temporarily showing these resources so that we can gauge interest before committing
|
// We are temporarily showing these resources so that we can gauge interest before committing
|
||||||
|
{ name: "OracleDB", resource: PamResourceType.OracleDB },
|
||||||
|
{ name: "SQLite", resource: PamResourceType.SQLite },
|
||||||
|
{ name: "Microsoft SQL Server", resource: PamResourceType.MsSQL },
|
||||||
|
{ name: "MongoDB", resource: PamResourceType.MongoDB },
|
||||||
|
{ name: "Cassandra", resource: PamResourceType.Cassandra },
|
||||||
|
{ name: "CockroachDB", resource: PamResourceType.CockroachDB },
|
||||||
|
{ name: "DynamoDB", resource: PamResourceType.DynamoDB },
|
||||||
|
{ name: "Snowflake", resource: PamResourceType.Snowflake },
|
||||||
|
{ name: "Elasticsearch", resource: PamResourceType.Elasticsearch },
|
||||||
|
{ name: "Redis", resource: PamResourceType.Redis },
|
||||||
{ name: "RDP", resource: PamResourceType.RDP },
|
{ name: "RDP", resource: PamResourceType.RDP },
|
||||||
{ name: "SSH", resource: PamResourceType.SSH },
|
{ name: "SSH", resource: PamResourceType.SSH },
|
||||||
{ name: "Kubernetes", resource: PamResourceType.Kubernetes },
|
{ name: "Kubernetes", resource: PamResourceType.Kubernetes },
|
||||||
{ name: "MCP", resource: PamResourceType.MCP }
|
{ name: "MCP", resource: PamResourceType.MCP },
|
||||||
|
{ name: "Web Application", resource: PamResourceType.WebApp }
|
||||||
];
|
];
|
||||||
}, [resourceOptions]);
|
}, [resourceOptions]);
|
||||||
|
|
||||||
@@ -39,11 +50,13 @@ export const ResourceTypeSelect = ({ onSelect }: Props) => {
|
|||||||
|
|
||||||
const filteredOptions = useMemo(
|
const filteredOptions = useMemo(
|
||||||
() =>
|
() =>
|
||||||
appendedResourceOptions?.filter(
|
appendedResourceOptions
|
||||||
({ name, resource }) =>
|
?.filter(
|
||||||
name.toLowerCase().includes(search.trim().toLowerCase()) ||
|
({ name, resource }) =>
|
||||||
resource.toLowerCase().includes(search.trim().toLowerCase())
|
name.toLowerCase().includes(search.trim().toLowerCase()) ||
|
||||||
) ?? [],
|
resource.toLowerCase().includes(search.trim().toLowerCase())
|
||||||
|
)
|
||||||
|
.sort((a, b) => a.name.localeCompare(b.name)) ?? [],
|
||||||
[appendedResourceOptions, search]
|
[appendedResourceOptions, search]
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -67,7 +80,15 @@ export const ResourceTypeSelect = ({ onSelect }: Props) => {
|
|||||||
resource === PamResourceType.RDP ||
|
resource === PamResourceType.RDP ||
|
||||||
resource === PamResourceType.SSH ||
|
resource === PamResourceType.SSH ||
|
||||||
resource === PamResourceType.Kubernetes ||
|
resource === PamResourceType.Kubernetes ||
|
||||||
resource === PamResourceType.MCP
|
resource === PamResourceType.MCP ||
|
||||||
|
resource === PamResourceType.Redis ||
|
||||||
|
resource === PamResourceType.MongoDB ||
|
||||||
|
resource === PamResourceType.WebApp ||
|
||||||
|
resource === PamResourceType.Cassandra ||
|
||||||
|
resource === PamResourceType.CockroachDB ||
|
||||||
|
resource === PamResourceType.Elasticsearch ||
|
||||||
|
resource === PamResourceType.Snowflake ||
|
||||||
|
resource === PamResourceType.DynamoDB
|
||||||
) {
|
) {
|
||||||
handlePopUpOpen("upgradePlan", {
|
handlePopUpOpen("upgradePlan", {
|
||||||
text: "Your current plan does not include access to this resource type. To unlock this feature, please upgrade to Infisical Enterprise plan.",
|
text: "Your current plan does not include access to this resource type. To unlock this feature, please upgrade to Infisical Enterprise plan.",
|
||||||
@@ -107,17 +128,16 @@ export const ResourceTypeSelect = ({ onSelect }: Props) => {
|
|||||||
onClick={() => handleResourceSelect(option.resource)}
|
onClick={() => handleResourceSelect(option.resource)}
|
||||||
className="group relative flex h-28 cursor-pointer flex-col items-center justify-center rounded-md border border-mineshaft-600 bg-mineshaft-700 p-4 duration-200 hover:bg-mineshaft-600"
|
className="group relative flex h-28 cursor-pointer flex-col items-center justify-center rounded-md border border-mineshaft-600 bg-mineshaft-700 p-4 duration-200 hover:bg-mineshaft-600"
|
||||||
>
|
>
|
||||||
<div className="relative">
|
<div className="relative my-auto">
|
||||||
<img
|
<img
|
||||||
src={`/images/integrations/${image}`}
|
src={`/images/integrations/${image}`}
|
||||||
style={{
|
style={{
|
||||||
width: `${size}px`
|
width: `${size}px`
|
||||||
}}
|
}}
|
||||||
className="mt-auto"
|
|
||||||
alt={`${name} logo`}
|
alt={`${name} logo`}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="mt-auto max-w-xs text-center text-xs font-medium text-gray-300 duration-200 group-hover:text-gray-200">
|
<div className="max-w-xs text-center text-xs font-medium text-gray-300 duration-200 group-hover:text-gray-200">
|
||||||
{name}
|
{name}
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||