diff --git a/actions/providers/providers.ts b/actions/providers/providers.ts
index 842dec1f59..f0fe26b0d5 100644
--- a/actions/providers/providers.ts
+++ b/actions/providers/providers.ts
@@ -148,27 +148,38 @@ export const addProvider = async (formData: FormData) => {
};
}
};
+
export const addCredentialsProvider = async (formData: FormData) => {
const session = await auth();
const keyServer = process.env.API_BASE_URL;
const url = new URL(`${keyServer}/providers/secrets`);
- const aws_access_key_id = formData.get("aws_access_key_id");
- const aws_secret_access_key = formData.get("aws_secret_access_key");
- const aws_session_token = formData.get("aws_session_token");
const secretName = formData.get("secretName");
const providerId = formData.get("providerId");
+ const providerType = formData.get("providerType");
+
+ let secret = {};
+
+ if (providerType === "aws") {
+ secret = {
+ aws_access_key_id: formData.get("aws_access_key_id"),
+ aws_secret_access_key: formData.get("aws_secret_access_key"),
+ aws_session_token: formData.get("aws_session_token") || undefined,
+ };
+ } else if (providerType === "azure") {
+ secret = {
+ client_id: formData.get("client_id"),
+ client_secret: formData.get("client_secret"),
+ tenant_id: formData.get("tenant_id"),
+ };
+ }
const bodyData = {
data: {
type: "ProviderSecret",
attributes: {
secret_type: "static",
- secret: {
- aws_access_key_id: aws_access_key_id,
- aws_secret_access_key: aws_secret_access_key,
- aws_session_token: aws_session_token,
- },
+ secret,
name: secretName,
},
relationships: {
diff --git a/app/(prowler)/page.tsx b/app/(prowler)/page.tsx
index 261ca1c00f..335b53b4f4 100644
--- a/app/(prowler)/page.tsx
+++ b/app/(prowler)/page.tsx
@@ -1,17 +1,13 @@
import { Spacer } from "@nextui-org/react";
-import { SeverityChart, StatusChart } from "@/components/charts";
-import { AttackSurface } from "@/components/overview";
import { Header } from "@/components/ui";
-import { CustomBox } from "@/components/ui/custom";
export default function Home() {
return (
<>
-
-
-
*/}
>
);
}
diff --git a/components/providers/workflow/forms/via-credentials-form.tsx b/components/providers/workflow/forms/via-credentials-form.tsx
index cbdf12c760..c406e0574a 100644
--- a/components/providers/workflow/forms/via-credentials-form.tsx
+++ b/components/providers/workflow/forms/via-credentials-form.tsx
@@ -10,17 +10,19 @@ import { addCredentialsProvider } from "@/actions/providers/providers";
import { useToast } from "@/components/ui";
import { CustomButton, CustomInput } from "@/components/ui/custom";
import { Form } from "@/components/ui/form";
+import { addCredentialsFormSchema, ApiError, AzureCredentials } from "@/types";
+import { AWSCredentials } from "@/types";
-import {
- addCredentialsFormSchema,
- ApiError,
- AWSCredentials,
- AzureCredentials,
- CredentialsFormSchema,
-} from "../../../../types";
import { AWScredentialsForm } from "./via-credentials/aws-credentials-form";
import { AzureCredentialsForm } from "./via-credentials/azure-credentials-form";
+type CredentialsFormSchema = z.infer<
+ ReturnType
+>;
+
+// Add this type intersection to include all fields
+type FormType = CredentialsFormSchema & AWSCredentials & AzureCredentials;
+
export const ViaCredentialsForm = ({
searchParams,
}: {
@@ -31,14 +33,14 @@ export const ViaCredentialsForm = ({
const providerType = searchParams.provider;
const providerId = searchParams.id;
-
const formSchema = addCredentialsFormSchema(providerType);
- const form = useForm({
+ const form = useForm({
resolver: zodResolver(formSchema),
defaultValues: {
secretName: "",
providerId,
+ providerType,
...(providerType === "aws"
? {
aws_access_key_id: "",
@@ -63,7 +65,8 @@ export const ViaCredentialsForm = ({
const isLoading = form.formState.isSubmitting;
- const onSubmitClient = async (values: z.infer) => {
+ const onSubmitClient = async (values: FormType) => {
+ console.log("via credentials form", values);
const formData = new FormData();
Object.entries(values).forEach(
@@ -94,6 +97,24 @@ export const ViaCredentialsForm = ({
message: errorMessage,
});
break;
+ case "/data/attributes/secret/client_id":
+ form.setError("client_id", {
+ type: "server",
+ message: errorMessage,
+ });
+ break;
+ case "/data/attributes/secret/client_secret":
+ form.setError("client_secret", {
+ type: "server",
+ message: errorMessage,
+ });
+ break;
+ case "/data/attributes/secret/tenant_id":
+ form.setError("tenant_id", {
+ type: "server",
+ message: errorMessage,
+ });
+ break;
case "/data/attributes/name":
form.setError("secretName", {
type: "server",
@@ -109,7 +130,7 @@ export const ViaCredentialsForm = ({
}
});
} else {
- router.push("/providers/test-connection");
+ router.push(`/providers/test-connection?id=${providerId}`);
}
};
@@ -120,17 +141,19 @@ export const ViaCredentialsForm = ({
className="flex flex-col space-y-4"
>
+
{providerType === "aws" && (
}
+ control={form.control as unknown as Control}
/>
)}
{providerType === "azure" && (
}
+ control={form.control as unknown as Control}
/>
)}
+
Name (Optional)
;
-}
-
-export const AWScredentialsForm = ({ control }: AWScredentialsFormProps) => {
+}) => {
return (
<>
@@ -28,10 +27,7 @@ export const AWScredentialsForm = ({ control }: AWScredentialsFormProps) => {
placeholder="Enter the AWS Access Key ID"
variant="bordered"
isRequired
- isInvalid={
- !!(control._formState.errors as FieldErrors
)
- .aws_access_key_id
- }
+ isInvalid={!!control._formState.errors.aws_access_key_id}
/>
{
placeholder="Enter the AWS Secret Access Key"
variant="bordered"
isRequired
- isInvalid={
- !!(control._formState.errors as FieldErrors)
- .aws_secret_access_key
- }
+ isInvalid={!!control._formState.errors.aws_secret_access_key}
/>
{
labelPlacement="inside"
placeholder="Enter the AWS Session Token"
variant="bordered"
- isRequired
- isInvalid={
- !!(control._formState.errors as FieldErrors)
- .aws_session_token
- }
+ isRequired={false}
+ isInvalid={!!control._formState.errors.aws_session_token}
/>
>
);
diff --git a/components/providers/workflow/forms/via-credentials/azure-credentials-form.tsx b/components/providers/workflow/forms/via-credentials/azure-credentials-form.tsx
index b9d3046635..87b9fb6b66 100644
--- a/components/providers/workflow/forms/via-credentials/azure-credentials-form.tsx
+++ b/components/providers/workflow/forms/via-credentials/azure-credentials-form.tsx
@@ -1,16 +1,13 @@
-import { Control, FieldErrors } from "react-hook-form";
+import { Control } from "react-hook-form";
import { CustomInput } from "@/components/ui/custom";
-
-import { AzureCredentials } from "../../../../../types";
-
-interface AzureCredentialsFormProps {
- control: Control;
-}
+import { AzureCredentials } from "@/types";
export const AzureCredentialsForm = ({
control,
-}: AzureCredentialsFormProps) => {
+}: {
+ control: Control;
+}) => {
return (
<>
@@ -30,10 +27,7 @@ export const AzureCredentialsForm = ({
placeholder="Enter the Client ID"
variant="bordered"
isRequired
- isInvalid={
- !!(control._formState.errors as FieldErrors
)
- .client_id
- }
+ isInvalid={!!control._formState.errors.client_id}
/>
)
- .client_secret
- }
+ isInvalid={!!control._formState.errors.client_secret}
/>
)
- .tenant_id
- }
+ isInvalid={!!control._formState.errors.tenant_id}
/>
>
);
diff --git a/types/formSchemas.ts b/types/formSchemas.ts
index 5297692124..bffffbaf0f 100644
--- a/types/formSchemas.ts
+++ b/types/formSchemas.ts
@@ -72,23 +72,28 @@ export const addCredentialsFormSchema = (providerType: string) =>
z.object({
secretName: z.string().optional(),
providerId: z.string(),
+ providerType: z.string(),
...(providerType === "aws"
? {
- aws_access_key_id: z.string(),
- aws_secret_access_key: z.string(),
- aws_session_token: z.string(),
+ aws_access_key_id: z
+ .string()
+ .nonempty("AWS Access Key ID is required"),
+ aws_secret_access_key: z
+ .string()
+ .nonempty("AWS Secret Access Key is required"),
+ aws_session_token: z.string().optional(),
}
: providerType === "azure"
? {
- client_id: z.string(),
- client_secret: z.string(),
- tenant_id: z.string(),
+ client_id: z.string().nonempty("Client ID is required"),
+ client_secret: z.string().nonempty("Client Secret is required"),
+ tenant_id: z.string().nonempty("Tenant ID is required"),
}
: providerType === "gcp"
? {
- client_id: z.string(),
- client_secret: z.string(),
- refresh_token: z.string(),
+ client_id: z.string().nonempty("Client ID is required"),
+ client_secret: z.string().nonempty("Client Secret is required"),
+ refresh_token: z.string().nonempty("Refresh Token is required"),
}
: {}),
});