Skip to content

Commit 40f6a71

Browse files
feat(ui): add OpenStack provider support (#10046)
Co-authored-by: alejandrobailo <alejandrobailo94@gmail.com>
1 parent ea60f2d commit 40f6a71

File tree

21 files changed

+187
-2
lines changed

21 files changed

+187
-2
lines changed

ui/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ All notable changes to the **Prowler UI** are documented in this file.
66

77
### 🚀 Added
88

9+
- OpenStack provider support in the UI [(#10046)](https://github.com/prowler-cloud/prowler/pull/10046)
910
- PDF report available for the CSA CCM compliance framework [(#10088)](https://github.com/prowler-cloud/prowler/pull/10088)
1011
- CSV and PDF download buttons in compliance views [(#10093)](https://github.com/prowler-cloud/prowler/pull/10093)
1112

ui/app/(prowler)/_overview/_components/accounts-selector.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
KS8ProviderBadge,
1414
M365ProviderBadge,
1515
MongoDBAtlasProviderBadge,
16+
OpenStackProviderBadge,
1617
OracleCloudProviderBadge,
1718
} from "@/components/icons/providers-badge";
1819
import {
@@ -36,6 +37,7 @@ const PROVIDER_ICON: Record<ProviderType, ReactNode> = {
3637
oraclecloud: <OracleCloudProviderBadge width={18} height={18} />,
3738
mongodbatlas: <MongoDBAtlasProviderBadge width={18} height={18} />,
3839
alibabacloud: <AlibabaCloudProviderBadge width={18} height={18} />,
40+
openstack: <OpenStackProviderBadge width={18} height={18} />,
3941
};
4042

4143
interface AccountsSelectorProps {

ui/app/(prowler)/_overview/_components/provider-type-selector.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,11 @@ const AlibabaCloudProviderBadge = lazy(() =>
6363
default: m.AlibabaCloudProviderBadge,
6464
})),
6565
);
66+
const OpenStackProviderBadge = lazy(() =>
67+
import("@/components/icons/providers-badge").then((m) => ({
68+
default: m.OpenStackProviderBadge,
69+
})),
70+
);
6671

6772
type IconProps = { width: number; height: number };
6873

@@ -114,6 +119,10 @@ const PROVIDER_DATA: Record<
114119
label: "Alibaba Cloud",
115120
icon: AlibabaCloudProviderBadge,
116121
},
122+
openstack: {
123+
label: "OpenStack",
124+
icon: OpenStackProviderBadge,
125+
},
117126
};
118127

119128
type ProviderTypeSelectorProps = {

ui/components/filters/custom-provider-inputs.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
KS8ProviderBadge,
99
M365ProviderBadge,
1010
MongoDBAtlasProviderBadge,
11+
OpenStackProviderBadge,
1112
OracleCloudProviderBadge,
1213
} from "../icons/providers-badge";
1314

@@ -100,3 +101,12 @@ export const CustomProviderInputAlibabaCloud = () => {
100101
</div>
101102
);
102103
};
104+
105+
export const CustomProviderInputOpenStack = () => {
106+
return (
107+
<div className="flex items-center gap-x-2">
108+
<OpenStackProviderBadge width={25} height={25} />
109+
<p className="text-sm">OpenStack</p>
110+
</div>
111+
);
112+
};

ui/components/findings/table/provider-icon-cell.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
KS8ProviderBadge,
99
M365ProviderBadge,
1010
MongoDBAtlasProviderBadge,
11+
OpenStackProviderBadge,
1112
OracleCloudProviderBadge,
1213
} from "@/components/icons/providers-badge";
1314
import { ProviderType } from "@/types";
@@ -23,6 +24,7 @@ export const PROVIDER_ICONS = {
2324
oraclecloud: OracleCloudProviderBadge,
2425
mongodbatlas: MongoDBAtlasProviderBadge,
2526
alibabacloud: AlibabaCloudProviderBadge,
27+
openstack: OpenStackProviderBadge,
2628
} as const;
2729

2830
interface ProviderIconCellProps {

ui/components/icons/providers-badge/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { IacProviderBadge } from "./iac-provider-badge";
1111
import { KS8ProviderBadge } from "./ks8-provider-badge";
1212
import { M365ProviderBadge } from "./m365-provider-badge";
1313
import { MongoDBAtlasProviderBadge } from "./mongodbatlas-provider-badge";
14+
import { OpenStackProviderBadge } from "./openstack-provider-badge";
1415
import { OracleCloudProviderBadge } from "./oraclecloud-provider-badge";
1516

1617
export {
@@ -23,6 +24,7 @@ export {
2324
KS8ProviderBadge,
2425
M365ProviderBadge,
2526
MongoDBAtlasProviderBadge,
27+
OpenStackProviderBadge,
2628
OracleCloudProviderBadge,
2729
};
2830

@@ -38,4 +40,5 @@ export const PROVIDER_ICONS: Record<string, FC<IconSvgProps>> = {
3840
"Oracle Cloud Infrastructure": OracleCloudProviderBadge,
3941
"MongoDB Atlas": MongoDBAtlasProviderBadge,
4042
"Alibaba Cloud": AlibabaCloudProviderBadge,
43+
OpenStack: OpenStackProviderBadge,
4144
};
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import * as React from "react";
2+
3+
import { IconSvgProps } from "@/types";
4+
5+
export const OpenStackProviderBadge: React.FC<IconSvgProps> = ({
6+
size,
7+
width,
8+
height,
9+
...props
10+
}) => (
11+
<svg
12+
xmlns="http://www.w3.org/2000/svg"
13+
aria-hidden="true"
14+
fill="none"
15+
focusable="false"
16+
height={size || height}
17+
role="presentation"
18+
viewBox="0 0 256 256"
19+
width={size || width}
20+
{...props}
21+
>
22+
<g fill="none">
23+
<rect width="256" height="256" fill="#f4f2ed" rx="60" />
24+
<g transform="translate(48 48) scale(2.5)" fill="#da1a32">
25+
<path d="M58.054.68H5.946C2.676.68 0 3.356 0 6.626V20.64h14.452v-2.3c0-1.776 1.44-3.215 3.215-3.215h28.665c1.776 0 3.215 1.44 3.215 3.215v2.3H64v-14A5.97 5.97 0 0 0 58.054.68zm-8.506 44.97c0 1.776-1.44 3.215-3.215 3.215H17.67c-1.776 0-3.215-1.44-3.215-3.215v-2.3H0v14.013c0 3.27 2.676 5.946 5.946 5.946h52.108c3.27 0 5.946-2.676 5.946-5.946V43.36H49.548zM0 24.773h14.452v14.452H0zm49.548 0H64v14.452H49.548z" />
26+
</g>
27+
</g>
28+
</svg>
29+
);

ui/components/providers/radio-group-provider.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
KS8ProviderBadge,
1919
M365ProviderBadge,
2020
MongoDBAtlasProviderBadge,
21+
OpenStackProviderBadge,
2122
OracleCloudProviderBadge,
2223
} from "../icons/providers-badge";
2324
import { FormMessage } from "../ui/form";
@@ -73,6 +74,11 @@ const PROVIDERS = [
7374
label: "Alibaba Cloud",
7475
badge: AlibabaCloudProviderBadge,
7576
},
77+
{
78+
value: "openstack",
79+
label: "OpenStack",
80+
badge: OpenStackProviderBadge,
81+
},
7682
] as const;
7783

7884
interface RadioGroupProviderProps {

ui/components/providers/workflow/forms/base-credentials-form.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import {
2525
M365ClientSecretCredentials,
2626
MongoDBAtlasCredentials,
2727
OCICredentials,
28+
OpenStackCredentials,
2829
ProviderType,
2930
} from "@/types";
3031

@@ -46,6 +47,7 @@ import { GitHubCredentialsForm } from "./via-credentials/github-credentials-form
4647
import { IacCredentialsForm } from "./via-credentials/iac-credentials-form";
4748
import { KubernetesCredentialsForm } from "./via-credentials/k8s-credentials-form";
4849
import { MongoDBAtlasCredentialsForm } from "./via-credentials/mongodbatlas-credentials-form";
50+
import { OpenStackCredentialsForm } from "./via-credentials/openstack-credentials-form";
4951
import { OracleCloudCredentialsForm } from "./via-credentials/oraclecloud-credentials-form";
5052

5153
type BaseCredentialsFormProps = {
@@ -206,6 +208,11 @@ export const BaseCredentialsForm = ({
206208
}
207209
/>
208210
)}
211+
{providerType === "openstack" && (
212+
<OpenStackCredentialsForm
213+
control={form.control as unknown as Control<OpenStackCredentials>}
214+
/>
215+
)}
209216

210217
<div className="flex w-full justify-end gap-4">
211218
{showBackButton && requiresBackButton(searchParamsObj.get("via")) && (

ui/components/providers/workflow/forms/connect-account-form.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ const getProviderFieldDetails = (providerType?: ProviderType) => {
7272
label: "Account ID",
7373
placeholder: "e.g. 1234567890123456",
7474
};
75+
case "openstack":
76+
return {
77+
label: "Project ID",
78+
placeholder: "e.g. a1b2c3d4-e5f6-7890-abcd-ef1234567890",
79+
};
7580
default:
7681
return {
7782
label: "Provider UID",

0 commit comments

Comments
 (0)