mirror of
https://github.com/prowler-cloud/prowler.git
synced 2026-10-31 15:54:24 +00:00
feat(ui): migrate from HeroUI to shadcn/ui (#11532)
This commit is contained in:
1 parent
c665005790
commit
52875b5c7c
519 files changed
+4798
-6997
No files matched your search
@@ -5,8 +5,8 @@ import { useEffect } from "react";
|
||||
import { Control, UseFormSetValue } from "react-hook-form";
|
||||
|
||||
import { Button } from "@/components/shadcn";
|
||||
import { Form } from "@/components/shadcn/form";
|
||||
import { Separator } from "@/components/shadcn/separator/separator";
|
||||
import { Form } from "@/components/ui/form";
|
||||
import { useCredentialsForm } from "@/hooks/use-credentials-form";
|
||||
import { getAWSCredentialsTemplateLinks } from "@/lib";
|
||||
import { ProviderCredentialFields } from "@/lib/provider-credentials/provider-credential-fields";
|
||||
|
||||
@@ -12,8 +12,8 @@ import { AwsMethodSelector } from "@/components/providers/organizations/aws-meth
|
||||
import { WizardInputField } from "@/components/providers/workflow/forms/fields";
|
||||
import { ProviderTitleDocs } from "@/components/providers/workflow/provider-title-docs";
|
||||
import { Button } from "@/components/shadcn";
|
||||
import { useToast } from "@/components/ui";
|
||||
import { Form } from "@/components/ui/form";
|
||||
import { useToast } from "@/components/shadcn";
|
||||
import { Form } from "@/components/shadcn/form";
|
||||
import { addProviderFormSchema, ApiError, ProviderType } from "@/types";
|
||||
|
||||
import { RadioGroupProvider } from "../../radio-group-provider";
|
||||
|
||||
@@ -4,8 +4,8 @@ import { Icon } from "@iconify/react";
|
||||
import { InputHTMLAttributes, useState } from "react";
|
||||
import { Control, FieldPath, FieldValues } from "react-hook-form";
|
||||
|
||||
import { FormControl, FormField, FormMessage } from "@/components/shadcn/form";
|
||||
import { Input } from "@/components/shadcn/input/input";
|
||||
import { FormControl, FormField, FormMessage } from "@/components/ui/form";
|
||||
import { cn } from "@/lib/utils";
|
||||
|
||||
interface WizardInputFieldProps<T extends FieldValues> {
|
||||
@@ -142,7 +142,7 @@ export const WizardInputField = <T extends FieldValues>({
|
||||
<button
|
||||
type="button"
|
||||
onClick={toggleVisibility}
|
||||
className="text-default-400 hover:text-default-500 absolute top-1/2 right-3 -translate-y-1/2"
|
||||
className="text-text-neutral-tertiary hover:text-text-neutral-secondary absolute top-1/2 right-3 -translate-y-1/2"
|
||||
aria-label={
|
||||
inputType === "password"
|
||||
? "Show password"
|
||||
|
||||
@@ -18,7 +18,7 @@ export const WizardRadioCard = ({
|
||||
<div
|
||||
className={cn(
|
||||
"group inline-flex w-full cursor-pointer items-center justify-between gap-4 rounded-lg border-2 p-4",
|
||||
"border-default hover:border-button-primary",
|
||||
"border-border-input-primary hover:border-button-primary",
|
||||
"has-[[data-state=checked]]:border-button-primary",
|
||||
isInvalid && "border-bg-fail",
|
||||
)}
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
import { Control, FieldPath, FieldValues } from "react-hook-form";
|
||||
|
||||
import { FormControl, FormField, FormMessage } from "@/components/shadcn/form";
|
||||
import { Textarea } from "@/components/shadcn/textarea/textarea";
|
||||
import { FormControl, FormField, FormMessage } from "@/components/ui/form";
|
||||
import { cn } from "@/lib/utils";
|
||||
|
||||
interface WizardTextareaFieldProps<T extends FieldValues> {
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { getProviderLogo } from "@/components/shadcn/entities/get-provider-logo";
|
||||
import { ProviderType } from "@/types";
|
||||
|
||||
import {
|
||||
@@ -5,7 +6,6 @@ import {
|
||||
ConnectionPending,
|
||||
ConnectionTrue,
|
||||
} from "../../../icons";
|
||||
import { getProviderLogo } from "../../../ui/entities/get-provider-logo";
|
||||
|
||||
interface ProviderConnectionInfoProps {
|
||||
connected: boolean | null;
|
||||
@@ -24,19 +24,19 @@ export const ProviderConnectionInfo = ({
|
||||
switch (connected) {
|
||||
case true:
|
||||
return (
|
||||
<div className="rounded-medium border-system-success bg-system-success-lighter flex items-center justify-center border-2 p-1">
|
||||
<ConnectionTrue className="text-system-success" size={24} />
|
||||
<div className="border-bg-pass bg-bg-pass-secondary flex items-center justify-center rounded-xl border-2 p-1">
|
||||
<ConnectionTrue className="text-text-success-primary" size={24} />
|
||||
</div>
|
||||
);
|
||||
case false:
|
||||
return (
|
||||
<div className="rounded-medium border-border-error flex items-center justify-center border-2 p-1">
|
||||
<div className="border-border-error flex items-center justify-center rounded-xl border-2 p-1">
|
||||
<ConnectionFalse className="text-text-error-primary" size={24} />
|
||||
</div>
|
||||
);
|
||||
case null:
|
||||
return (
|
||||
<div className="bg-info-lighter border-info-lighter rounded-medium flex items-center justify-center border p-1">
|
||||
<div className="bg-info-lighter border-info-lighter flex items-center justify-center rounded-xl border p-1">
|
||||
<ConnectionPending className="text-info" size={24} />
|
||||
</div>
|
||||
);
|
||||
|
||||
+8
-6
@@ -13,16 +13,16 @@ export const AlibabaCloudRoleCredentialsForm = ({
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
Connect assuming RAM Role
|
||||
</div>
|
||||
<div className="text-default-500 text-sm">
|
||||
<div className="text-text-neutral-tertiary text-sm">
|
||||
Provide the RAM Role ARN to assume, along with the Access Keys of a
|
||||
RAM user that has permission to assume the role.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<span className="text-default-500 text-xs font-bold">
|
||||
<span className="text-text-neutral-tertiary text-xs font-bold">
|
||||
RAM Role to Assume
|
||||
</span>
|
||||
|
||||
@@ -39,7 +39,7 @@ export const AlibabaCloudRoleCredentialsForm = ({
|
||||
|
||||
<Separator />
|
||||
|
||||
<span className="text-default-500 text-xs font-bold">
|
||||
<span className="text-text-neutral-tertiary text-xs font-bold">
|
||||
Credentials for Role Assumption
|
||||
</span>
|
||||
|
||||
@@ -64,7 +64,9 @@ export const AlibabaCloudRoleCredentialsForm = ({
|
||||
isRequired
|
||||
/>
|
||||
|
||||
<span className="text-default-500 text-xs">Optional fields</span>
|
||||
<span className="text-text-neutral-tertiary text-xs">
|
||||
Optional fields
|
||||
</span>
|
||||
|
||||
<WizardInputField
|
||||
control={control}
|
||||
@@ -77,7 +79,7 @@ export const AlibabaCloudRoleCredentialsForm = ({
|
||||
isRequired={false}
|
||||
/>
|
||||
|
||||
<div className="text-default-400 text-xs">
|
||||
<div className="text-text-neutral-tertiary text-xs">
|
||||
Keys never leave your browser unencrypted and are stored as secrets in
|
||||
the backend. The role will be assumed using STS to obtain temporary
|
||||
credentials.
|
||||
|
||||
+3
-3
@@ -12,10 +12,10 @@ export const AlibabaCloudStaticCredentialsForm = ({
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
Connect via Access Keys
|
||||
</div>
|
||||
<div className="text-default-500 text-sm">
|
||||
<div className="text-text-neutral-tertiary text-sm">
|
||||
Provide a RAM user Access Key ID and Access Key Secret with read
|
||||
access to the resources you want Prowler to assess.
|
||||
</div>
|
||||
@@ -40,7 +40,7 @@ export const AlibabaCloudStaticCredentialsForm = ({
|
||||
variant="bordered"
|
||||
isRequired
|
||||
/>
|
||||
<div className="text-default-400 text-xs">
|
||||
<div className="text-text-neutral-tertiary text-xs">
|
||||
Keys never leave your browser unencrypted and are stored as secrets in
|
||||
the backend. Rotate the key from Alibaba Cloud RAM console anytime if
|
||||
needed.
|
||||
|
||||
+5
-3
@@ -3,8 +3,8 @@
|
||||
import { Control, Controller, FieldValues, Path } from "react-hook-form";
|
||||
|
||||
import { WizardRadioCard } from "@/components/providers/workflow/forms/fields";
|
||||
import { FormMessage } from "@/components/shadcn/form";
|
||||
import { RadioGroup } from "@/components/shadcn/radio-group/radio-group";
|
||||
import { FormMessage } from "@/components/ui/form";
|
||||
|
||||
type RadioGroupAlibabaCloudViaCredentialsFormProps<T extends FieldValues> = {
|
||||
control: Control<T>;
|
||||
@@ -38,11 +38,13 @@ export const RadioGroupAlibabaCloudViaCredentialsTypeForm = <
|
||||
onChange?.(value);
|
||||
}}
|
||||
>
|
||||
<span className="text-default-500 text-sm">Using RAM Role</span>
|
||||
<span className="text-text-neutral-tertiary text-sm">
|
||||
Using RAM Role
|
||||
</span>
|
||||
<WizardRadioCard value="role" isInvalid={isInvalid}>
|
||||
Connect assuming RAM Role
|
||||
</WizardRadioCard>
|
||||
<span className="text-default-500 text-sm">
|
||||
<span className="text-text-neutral-tertiary text-sm">
|
||||
Using Credentials
|
||||
</span>
|
||||
<WizardRadioCard value="credentials" isInvalid={isInvalid}>
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useForm } from "react-hook-form";
|
||||
|
||||
import { Form } from "@/components/ui/form";
|
||||
import { Form } from "@/components/shadcn/form";
|
||||
|
||||
import { RadioGroupAlibabaCloudViaCredentialsTypeForm } from "./radio-group-alibabacloud-via-credentials-type-form";
|
||||
|
||||
|
||||
+9
-5
@@ -73,13 +73,13 @@ export const AWSRoleCredentialsForm = ({
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
{type === "providers" && (
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
Connect assuming IAM Role
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<span className="text-default-500 text-xs font-bold">
|
||||
<span className="text-text-neutral-tertiary text-xs font-bold">
|
||||
Specify which AWS credentials to use
|
||||
</span>
|
||||
|
||||
@@ -157,10 +157,12 @@ export const AWSRoleCredentialsForm = ({
|
||||
<Separator />
|
||||
|
||||
{type === "providers" ? (
|
||||
<span className="text-default-500 text-xs font-bold">Assume Role</span>
|
||||
<span className="text-text-neutral-tertiary text-xs font-bold">
|
||||
Assume Role
|
||||
</span>
|
||||
) : (
|
||||
<div className="flex items-center justify-between">
|
||||
<span className="text-default-500 text-xs font-bold">
|
||||
<span className="text-text-neutral-tertiary text-xs font-bold">
|
||||
{isCloudEnv && credentialsType === "aws-sdk-default"
|
||||
? "Adding a role is required"
|
||||
: "Optionally add a role"}
|
||||
@@ -207,7 +209,9 @@ export const AWSRoleCredentialsForm = ({
|
||||
isRequired
|
||||
/>
|
||||
|
||||
<span className="text-default-500 text-xs">Optional fields</span>
|
||||
<span className="text-text-neutral-tertiary text-xs">
|
||||
Optional fields
|
||||
</span>
|
||||
<div className="mt-4 grid grid-cols-1 gap-4 md:grid-cols-2">
|
||||
<WizardInputField
|
||||
control={control}
|
||||
|
||||
+2
-2
@@ -12,10 +12,10 @@ export const AWSStaticCredentialsForm = ({
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
Connect via Credentials
|
||||
</div>
|
||||
<div className="text-default-500 text-sm">
|
||||
<div className="text-text-neutral-tertiary text-sm">
|
||||
Please provide the information for your AWS credentials.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+7
-3
@@ -3,8 +3,8 @@
|
||||
import { Control, Controller } from "react-hook-form";
|
||||
|
||||
import { WizardRadioCard } from "@/components/providers/workflow/forms/fields";
|
||||
import { FormMessage } from "@/components/shadcn/form";
|
||||
import { RadioGroup } from "@/components/shadcn/radio-group/radio-group";
|
||||
import { FormMessage } from "@/components/ui/form";
|
||||
|
||||
type RadioGroupAWSViaCredentialsFormProps = {
|
||||
control: Control<any>;
|
||||
@@ -33,11 +33,15 @@ export const RadioGroupAWSViaCredentialsTypeForm = ({
|
||||
onChange?.(value);
|
||||
}}
|
||||
>
|
||||
<span className="text-default-500 text-sm">Using IAM Role</span>
|
||||
<span className="text-text-neutral-tertiary text-sm">
|
||||
Using IAM Role
|
||||
</span>
|
||||
<WizardRadioCard value="role" isInvalid={isInvalid}>
|
||||
Connect assuming IAM Role
|
||||
</WizardRadioCard>
|
||||
<span className="text-default-500 text-sm">Using Credentials</span>
|
||||
<span className="text-text-neutral-tertiary text-sm">
|
||||
Using Credentials
|
||||
</span>
|
||||
<WizardRadioCard value="credentials" isInvalid={isInvalid}>
|
||||
Connect via Credentials
|
||||
</WizardRadioCard>
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useForm } from "react-hook-form";
|
||||
|
||||
import { Form } from "@/components/ui/form";
|
||||
import { Form } from "@/components/shadcn/form";
|
||||
|
||||
import { RadioGroupAWSViaCredentialsTypeForm } from "./radio-group-aws-via-credentials-type-form";
|
||||
|
||||
|
||||
+3
-3
@@ -14,10 +14,10 @@ export const CloudflareApiKeyCredentialsForm = ({
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
Connect via API Key + Email
|
||||
</div>
|
||||
<div className="text-default-500 text-sm">
|
||||
<div className="text-text-neutral-tertiary text-sm">
|
||||
Provide your Cloudflare Global API Key and the email address
|
||||
associated with your Cloudflare account.
|
||||
</div>
|
||||
@@ -42,7 +42,7 @@ export const CloudflareApiKeyCredentialsForm = ({
|
||||
variant="bordered"
|
||||
isRequired
|
||||
/>
|
||||
<div className="text-default-400 text-xs">
|
||||
<div className="text-text-neutral-tertiary text-xs">
|
||||
Credentials never leave your browser unencrypted and are stored as
|
||||
secrets in the backend. You can regenerate your API Key from the
|
||||
Cloudflare dashboard anytime if needed.
|
||||
|
||||
+3
-3
@@ -14,10 +14,10 @@ export const CloudflareApiTokenCredentialsForm = ({
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
Connect via API Token
|
||||
</div>
|
||||
<div className="text-default-500 text-sm">
|
||||
<div className="text-text-neutral-tertiary text-sm">
|
||||
Provide a Cloudflare API Token with read permissions to the resources
|
||||
you want Prowler to assess. This is the recommended authentication
|
||||
method.
|
||||
@@ -33,7 +33,7 @@ export const CloudflareApiTokenCredentialsForm = ({
|
||||
variant="bordered"
|
||||
isRequired
|
||||
/>
|
||||
<div className="text-default-400 text-xs">
|
||||
<div className="text-text-neutral-tertiary text-xs">
|
||||
Tokens never leave your browser unencrypted and are stored as secrets in
|
||||
the backend. You can revoke the token from the Cloudflare dashboard
|
||||
anytime if needed.
|
||||
|
||||
+2
-2
@@ -3,8 +3,8 @@
|
||||
import { Control, Controller } from "react-hook-form";
|
||||
|
||||
import { WizardRadioCard } from "@/components/providers/workflow/forms/fields";
|
||||
import { FormMessage } from "@/components/shadcn/form";
|
||||
import { RadioGroup } from "@/components/shadcn/radio-group/radio-group";
|
||||
import { FormMessage } from "@/components/ui/form";
|
||||
|
||||
type RadioGroupCloudflareViaCredentialsFormProps = {
|
||||
control: Control<any>;
|
||||
@@ -33,7 +33,7 @@ export const RadioGroupCloudflareViaCredentialsTypeForm = ({
|
||||
onChange?.(value);
|
||||
}}
|
||||
>
|
||||
<span className="text-default-500 text-sm">
|
||||
<span className="text-text-neutral-tertiary text-sm">
|
||||
Select Authentication Method
|
||||
</span>
|
||||
<WizardRadioCard value="api_token" isInvalid={isInvalid}>
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useForm } from "react-hook-form";
|
||||
|
||||
import { Form } from "@/components/ui/form";
|
||||
import { Form } from "@/components/shadcn/form";
|
||||
|
||||
import { RadioGroupCloudflareViaCredentialsTypeForm } from "./radio-group-cloudflare-via-credentials-type-form";
|
||||
|
||||
|
||||
+2
-2
@@ -11,10 +11,10 @@ export const GCPDefaultCredentialsForm = ({
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
Connect via Credentials
|
||||
</div>
|
||||
<div className="text-default-500 text-sm">
|
||||
<div className="text-text-neutral-tertiary text-sm">
|
||||
Please provide the information for your GCP credentials.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+2
-2
@@ -11,10 +11,10 @@ export const GCPServiceAccountKeyForm = ({
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
Connect via Service Account Key
|
||||
</div>
|
||||
<div className="text-default-500 text-sm">
|
||||
<div className="text-text-neutral-tertiary text-sm">
|
||||
Please provide the service account key for your GCP credentials.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+3
-3
@@ -3,8 +3,8 @@
|
||||
import { Control, Controller } from "react-hook-form";
|
||||
|
||||
import { WizardRadioCard } from "@/components/providers/workflow/forms/fields";
|
||||
import { FormMessage } from "@/components/shadcn/form";
|
||||
import { RadioGroup } from "@/components/shadcn/radio-group/radio-group";
|
||||
import { FormMessage } from "@/components/ui/form";
|
||||
|
||||
type RadioGroupGCPViaCredentialsFormProps = {
|
||||
control: Control<any>;
|
||||
@@ -33,13 +33,13 @@ export const RadioGroupGCPViaCredentialsTypeForm = ({
|
||||
onChange?.(value);
|
||||
}}
|
||||
>
|
||||
<span className="text-default-500 text-sm">
|
||||
<span className="text-text-neutral-tertiary text-sm">
|
||||
Using Service Account
|
||||
</span>
|
||||
<WizardRadioCard value="service-account" isInvalid={isInvalid}>
|
||||
Connect via Service Account Key
|
||||
</WizardRadioCard>
|
||||
<span className="text-default-500 text-sm">
|
||||
<span className="text-text-neutral-tertiary text-sm">
|
||||
Using Application Default Credentials
|
||||
</span>
|
||||
<WizardRadioCard value="credentials" isInvalid={isInvalid}>
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useForm } from "react-hook-form";
|
||||
|
||||
import { Form } from "@/components/ui/form";
|
||||
import { Form } from "@/components/shadcn/form";
|
||||
|
||||
import { RadioGroupGCPViaCredentialsTypeForm } from "./radio-group-gcp-via-credentials-type-form";
|
||||
|
||||
|
||||
+2
-2
@@ -12,10 +12,10 @@ export const GitHubAppForm = ({ control }: { control: Control<any> }) => {
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
Connect via GitHub App
|
||||
</div>
|
||||
<div className="text-default-500 text-sm">
|
||||
<div className="text-text-neutral-tertiary text-sm">
|
||||
Please provide your GitHub App ID and private key.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+2
-2
@@ -9,10 +9,10 @@ export const GitHubOAuthAppForm = ({ control }: { control: Control<any> }) => {
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
Connect via OAuth App
|
||||
</div>
|
||||
<div className="text-default-500 text-sm">
|
||||
<div className="text-text-neutral-tertiary text-sm">
|
||||
Please provide your GitHub OAuth App token.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+2
-2
@@ -13,10 +13,10 @@ export const GitHubPersonalAccessTokenForm = ({
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
Connect via Personal Access Token
|
||||
</div>
|
||||
<div className="text-default-500 text-sm">
|
||||
<div className="text-text-neutral-tertiary text-sm">
|
||||
Please provide your GitHub personal access token.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+8
-4
@@ -3,8 +3,8 @@
|
||||
import { Control, Controller } from "react-hook-form";
|
||||
|
||||
import { WizardRadioCard } from "@/components/providers/workflow/forms/fields";
|
||||
import { FormMessage } from "@/components/shadcn/form";
|
||||
import { RadioGroup } from "@/components/shadcn/radio-group/radio-group";
|
||||
import { FormMessage } from "@/components/ui/form";
|
||||
|
||||
type RadioGroupGitHubViaCredentialsFormProps = {
|
||||
control: Control<any>;
|
||||
@@ -33,7 +33,7 @@ export const RadioGroupGitHubViaCredentialsTypeForm = ({
|
||||
onChange?.(value);
|
||||
}}
|
||||
>
|
||||
<span className="text-default-500 text-sm">
|
||||
<span className="text-text-neutral-tertiary text-sm">
|
||||
Personal Access Token
|
||||
</span>
|
||||
<WizardRadioCard
|
||||
@@ -43,12 +43,16 @@ export const RadioGroupGitHubViaCredentialsTypeForm = ({
|
||||
Personal Access Token
|
||||
</WizardRadioCard>
|
||||
|
||||
<span className="text-default-500 text-sm">OAuth App</span>
|
||||
<span className="text-text-neutral-tertiary text-sm">
|
||||
OAuth App
|
||||
</span>
|
||||
<WizardRadioCard value="oauth_app" isInvalid={isInvalid}>
|
||||
OAuth App Token
|
||||
</WizardRadioCard>
|
||||
|
||||
<span className="text-default-500 text-sm">GitHub App</span>
|
||||
<span className="text-text-neutral-tertiary text-sm">
|
||||
GitHub App
|
||||
</span>
|
||||
<WizardRadioCard value="github_app" isInvalid={isInvalid}>
|
||||
GitHub App
|
||||
</WizardRadioCard>
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useForm } from "react-hook-form";
|
||||
|
||||
import { Form } from "@/components/ui/form";
|
||||
import { Form } from "@/components/shadcn/form";
|
||||
|
||||
import { RadioGroupGitHubViaCredentialsTypeForm } from "./radio-group-github-via-credentials-type-form";
|
||||
|
||||
|
||||
+3
-3
@@ -17,10 +17,10 @@ export const M365CertificateCredentialsForm = ({
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
App Certificate Credentials
|
||||
</div>
|
||||
<div className="text-default-500 text-sm">
|
||||
<div className="text-text-neutral-tertiary text-sm">
|
||||
Please provide your Microsoft 365 application credentials with
|
||||
certificate authentication.
|
||||
</div>
|
||||
@@ -55,7 +55,7 @@ export const M365CertificateCredentialsForm = ({
|
||||
isRequired
|
||||
minRows={4}
|
||||
/>
|
||||
<p className="text-default-500 text-sm">
|
||||
<p className="text-text-neutral-tertiary text-sm">
|
||||
The certificate content must be base64 encoded from an unsigned
|
||||
certificate. For detailed instructions on how to generate and encode
|
||||
your certificate, please refer to the{" "}
|
||||
|
||||
+2
-2
@@ -13,10 +13,10 @@ export const M365ClientSecretCredentialsForm = ({
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
App Client Secret Credentials
|
||||
</div>
|
||||
<div className="text-default-500 text-sm">
|
||||
<div className="text-text-neutral-tertiary text-sm">
|
||||
Please provide your Microsoft 365 application credentials.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+2
-2
@@ -3,8 +3,8 @@
|
||||
import { Control, Controller } from "react-hook-form";
|
||||
|
||||
import { WizardRadioCard } from "@/components/providers/workflow/forms/fields";
|
||||
import { FormMessage } from "@/components/shadcn/form";
|
||||
import { RadioGroup } from "@/components/shadcn/radio-group/radio-group";
|
||||
import { FormMessage } from "@/components/ui/form";
|
||||
|
||||
type RadioGroupM365ViaCredentialsFormProps = {
|
||||
control: Control<any>;
|
||||
@@ -33,7 +33,7 @@ export const RadioGroupM365ViaCredentialsTypeForm = ({
|
||||
onChange?.(value);
|
||||
}}
|
||||
>
|
||||
<span className="text-default-500 text-sm">
|
||||
<span className="text-text-neutral-tertiary text-sm">
|
||||
Select Authentication Method
|
||||
</span>
|
||||
<WizardRadioCard value="app_client_secret" isInvalid={isInvalid}>
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useForm } from "react-hook-form";
|
||||
|
||||
import { Form } from "@/components/ui/form";
|
||||
import { Form } from "@/components/shadcn/form";
|
||||
|
||||
import { RadioGroupM365ViaCredentialsTypeForm } from "./radio-group-m365-via-credentials-type-form";
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ import { z } from "zod";
|
||||
import { deleteCredentials } from "@/actions/providers";
|
||||
import { CheckIcon } from "@/components/icons";
|
||||
import { Button } from "@/components/shadcn";
|
||||
import { Form } from "@/components/ui/form";
|
||||
import { Form } from "@/components/shadcn/form";
|
||||
import { testProviderConnection } from "@/lib/provider-helpers";
|
||||
import { ProviderType } from "@/types";
|
||||
import { testConnectionFormSchema } from "@/types";
|
||||
@@ -155,7 +155,7 @@ export const TestConnectionForm = ({
|
||||
>
|
||||
<div className="text-left">
|
||||
<div className="mb-2 text-xl font-medium">Check connection</div>
|
||||
<p className="text-small text-default-500 py-2">
|
||||
<p className="text-text-neutral-tertiary py-2 text-sm">
|
||||
{!isUpdated
|
||||
? "After a successful connection, continue to the launch step to configure and start your scan."
|
||||
: "A successful connection will redirect you to the providers page."}
|
||||
@@ -178,12 +178,12 @@ export const TestConnectionForm = ({
|
||||
/>
|
||||
</div>
|
||||
<div className="min-w-0 flex-1">
|
||||
<p className="text-small text-text-error-primary break-words">
|
||||
<p className="text-text-error-primary text-sm break-words">
|
||||
{connectionStatus.error || "Unknown error"}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<p className="text-small text-text-error-primary">
|
||||
<p className="text-text-error-primary text-sm">
|
||||
It seems there was an issue with your credentials. Please review
|
||||
your credentials and try again.
|
||||
</p>
|
||||
@@ -198,7 +198,7 @@ export const TestConnectionForm = ({
|
||||
/>
|
||||
|
||||
{isUpdated && !connectionStatus?.error && (
|
||||
<p className="text-small text-default-500 py-2">
|
||||
<p className="text-text-neutral-tertiary py-2 text-sm">
|
||||
Check the new credentials and test the connection.
|
||||
</p>
|
||||
)}
|
||||
|
||||
@@ -11,10 +11,10 @@ export const AzureCredentialsForm = ({
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
Connect via Credentials
|
||||
</div>
|
||||
<div className="text-default-500 text-sm">
|
||||
<div className="text-text-neutral-tertiary text-sm">
|
||||
Please provide the information for your Azure credentials.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+3
-3
@@ -15,10 +15,10 @@ export const GoogleWorkspaceCredentialsForm = ({
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
Connect via Service Account
|
||||
</div>
|
||||
<div className="text-default-500 text-sm">
|
||||
<div className="text-text-neutral-tertiary text-sm">
|
||||
Provide your Service Account JSON and the admin email to impersonate.
|
||||
</div>
|
||||
</div>
|
||||
@@ -48,7 +48,7 @@ export const GoogleWorkspaceCredentialsForm = ({
|
||||
variant="bordered"
|
||||
isRequired
|
||||
/>
|
||||
<div className="text-default-400 text-xs">
|
||||
<div className="text-text-neutral-tertiary text-xs">
|
||||
Credentials never leave your browser unencrypted and are stored as
|
||||
secrets in the backend. You can revoke the Service Account from the
|
||||
Google Cloud Console anytime if needed.
|
||||
|
||||
@@ -11,10 +11,10 @@ export const IacCredentialsForm = ({
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
Connect via Repository
|
||||
</div>
|
||||
<div className="text-default-500 text-sm">
|
||||
<div className="text-text-neutral-tertiary text-sm">
|
||||
Provide an access token if the repository is private (optional).
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -12,10 +12,10 @@ export const ImageCredentialsForm = ({
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
Connect via Registry Credentials
|
||||
</div>
|
||||
<div className="text-default-500 text-sm">
|
||||
<div className="text-text-neutral-tertiary text-sm">
|
||||
Provide registry credentials to authenticate with your container
|
||||
registry (all fields are optional).
|
||||
</div>
|
||||
@@ -52,10 +52,10 @@ export const ImageCredentialsForm = ({
|
||||
/>
|
||||
|
||||
<div className="flex flex-col pt-2">
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
Scan Scope
|
||||
</div>
|
||||
<div className="text-default-500 text-sm">
|
||||
<div className="text-text-neutral-tertiary text-sm">
|
||||
Limit which repositories and tags are scanned using regex patterns.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -26,10 +26,10 @@ export const KubernetesCredentialsForm = ({
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
Connect via Credentials
|
||||
</div>
|
||||
<div className="text-default-500 text-sm">
|
||||
<div className="text-text-neutral-tertiary text-sm">
|
||||
Please provide the kubeconfig content for your Kubernetes credentials.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+3
-3
@@ -12,10 +12,10 @@ export const MongoDBAtlasCredentialsForm = ({
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
Connect via API Keys
|
||||
</div>
|
||||
<div className="text-default-500 text-sm">
|
||||
<div className="text-text-neutral-tertiary text-sm">
|
||||
Provide an organization-level MongoDB Atlas API public and private key
|
||||
with read access to the resources you want Prowler to assess.
|
||||
</div>
|
||||
@@ -40,7 +40,7 @@ export const MongoDBAtlasCredentialsForm = ({
|
||||
variant="bordered"
|
||||
isRequired
|
||||
/>
|
||||
<div className="text-default-400 text-xs">
|
||||
<div className="text-text-neutral-tertiary text-xs">
|
||||
Keys never leave your browser unencrypted and are stored as secrets in
|
||||
the backend. Rotate the key from MongoDB Atlas anytime if needed.
|
||||
</div>
|
||||
|
||||
@@ -15,10 +15,10 @@ export const OktaCredentialsForm = ({
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
Connect via OAuth 2.0 Private Key JWT
|
||||
</div>
|
||||
<div className="text-default-500 text-sm">
|
||||
<div className="text-text-neutral-tertiary text-sm">
|
||||
Provide the Client ID and PEM-encoded private key of an Okta API
|
||||
Services app whose matching public key (JWK) is registered on the
|
||||
service app.
|
||||
@@ -43,7 +43,7 @@ export const OktaCredentialsForm = ({
|
||||
variant="bordered"
|
||||
isRequired
|
||||
/>
|
||||
<div className="text-default-400 text-xs">
|
||||
<div className="text-text-neutral-tertiary text-xs">
|
||||
The private key is sent over TLS and stored as a secret in the backend.
|
||||
You can rotate or revoke the public key from the Okta admin console at
|
||||
any time.
|
||||
|
||||
+2
-2
@@ -14,10 +14,10 @@ export const OpenStackCredentialsForm = ({
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
Connect via Clouds YAML
|
||||
</div>
|
||||
<div className="text-default-500 text-sm">
|
||||
<div className="text-text-neutral-tertiary text-sm">
|
||||
Please provide your OpenStack clouds.yaml content and the cloud name.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+3
-3
@@ -15,10 +15,10 @@ export const OracleCloudCredentialsForm = ({
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
Connect via API Key
|
||||
</div>
|
||||
<div className="text-default-500 text-sm">
|
||||
<div className="text-text-neutral-tertiary text-sm">
|
||||
Please provide your Oracle Cloud Infrastructure API key credentials.
|
||||
</div>
|
||||
</div>
|
||||
@@ -78,7 +78,7 @@ export const OracleCloudCredentialsForm = ({
|
||||
variant="bordered"
|
||||
isRequired={false}
|
||||
/>
|
||||
<div className="text-default-400 text-xs">
|
||||
<div className="text-text-neutral-tertiary text-xs">
|
||||
Paste the raw content of your OCI private key file (PEM format). The key
|
||||
will be automatically encoded for secure transmission.
|
||||
</div>
|
||||
|
||||
@@ -12,10 +12,10 @@ export const VercelCredentialsForm = ({
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
<div className="text-md text-default-foreground leading-9 font-bold">
|
||||
<div className="text-md text-text-neutral-primary leading-9 font-bold">
|
||||
Connect via API Token
|
||||
</div>
|
||||
<div className="text-default-500 text-sm">
|
||||
<div className="text-text-neutral-tertiary text-sm">
|
||||
Provide a Vercel API Token with read permissions to the resources you
|
||||
want Prowler to assess.
|
||||
</div>
|
||||
@@ -30,7 +30,7 @@ export const VercelCredentialsForm = ({
|
||||
variant="bordered"
|
||||
isRequired
|
||||
/>
|
||||
<div className="text-default-400 text-xs">
|
||||
<div className="text-text-neutral-tertiary text-xs">
|
||||
Tokens never leave your browser unencrypted and are stored as secrets in
|
||||
the backend. You can revoke the token from the Vercel dashboard anytime
|
||||
at vercel.com/account/tokens.
|
||||
|
||||
Reference in new issue
Block a user