From f63e9e5e773d9f8173c4b05e2f589754e827f8d6 Mon Sep 17 00:00:00 2001
From: Hugo Pereira Brito <101209179+HugoPBrito@users.noreply.github.com>
Date: Mon, 12 May 2025 09:37:13 +0200
Subject: [PATCH 01/23] fix(m365): invalid user credentials exception (#7677)
---
.../providers/m365/exceptions/exceptions.py | 20 ++++-----
prowler/providers/m365/m365_provider.py | 42 +++++++++++--------
tests/providers/m365/m365_provider_test.py | 13 +++---
3 files changed, 40 insertions(+), 35 deletions(-)
diff --git a/prowler/providers/m365/exceptions/exceptions.py b/prowler/providers/m365/exceptions/exceptions.py
index 2b5840dd10..7d599386f9 100644
--- a/prowler/providers/m365/exceptions/exceptions.py
+++ b/prowler/providers/m365/exceptions/exceptions.py
@@ -98,21 +98,21 @@ class M365BaseException(ProwlerException):
"message": "User and Password environment variables are needed to use Credentials authentication method.",
"remediation": "Ensure your environment variables are properly set up.",
},
- (6023, "M365EnvironmentUserCredentialsError"): {
- "message": "User or Password environment variables are not correct.",
- "remediation": "Ensure you are using the right credentials.",
+ (6023, "M365UserCredentialsError"): {
+ "message": "The provided User credentials are not valid.",
+ "remediation": "Check the User credentials and ensure they are valid.",
},
(6024, "M365NotValidUserError"): {
- "message": "The provided M365 User is not valid.",
- "remediation": "Check the M365 User and ensure it is a valid user.",
+ "message": "The provided User is not valid.",
+ "remediation": "Check the User and ensure it is a valid user.",
},
(6025, "M365NotValidEncryptedPasswordError"): {
- "message": "The provided M365 Encrypted Password is not valid.",
- "remediation": "Check the M365 Encrypted Password and ensure it is a valid password.",
+ "message": "The provided Encrypted Password is not valid.",
+ "remediation": "Check the Encrypted Password and ensure it is a valid password.",
},
(6026, "M365UserNotBelongingToTenantError"): {
- "message": "The provided M365 User does not belong to the specified tenant.",
- "remediation": "Check the M365 User email domain and ensure it belongs to the specified tenant.",
+ "message": "The provided User does not belong to the specified tenant.",
+ "remediation": "Check the User email domain and ensure it belongs to the specified tenant.",
},
}
@@ -298,7 +298,7 @@ class M365MissingEnvironmentCredentialsError(M365CredentialsError):
)
-class M365EnvironmentUserCredentialsError(M365CredentialsError):
+class M365UserCredentialsError(M365CredentialsError):
def __init__(self, file=None, original_exception=None, message=None):
super().__init__(
6023, file=file, original_exception=original_exception, message=message
diff --git a/prowler/providers/m365/m365_provider.py b/prowler/providers/m365/m365_provider.py
index a8e4ce4ec2..f5011c9c27 100644
--- a/prowler/providers/m365/m365_provider.py
+++ b/prowler/providers/m365/m365_provider.py
@@ -33,7 +33,6 @@ from prowler.providers.m365.exceptions.exceptions import (
M365ConfigCredentialsError,
M365CredentialsUnavailableError,
M365DefaultAzureCredentialError,
- M365EnvironmentUserCredentialsError,
M365EnvironmentVariableError,
M365GetTokenIdentityError,
M365HTTPResponseError,
@@ -51,6 +50,7 @@ from prowler.providers.m365.exceptions.exceptions import (
M365SetUpSessionError,
M365TenantIdAndClientIdNotBelongingToClientSecretError,
M365TenantIdAndClientSecretNotBelongingToClientIdError,
+ M365UserCredentialsError,
)
from prowler.providers.m365.lib.mutelist.mutelist import M365Mutelist
from prowler.providers.m365.lib.powershell.m365_powershell import (
@@ -434,9 +434,9 @@ class M365Provider(Provider):
if init_modules:
initialize_m365_powershell_modules()
return credentials
- raise M365EnvironmentUserCredentialsError(
+ raise M365UserCredentialsError(
file=os.path.basename(__file__),
- message="M365_USER or M365_ENCRYPTED_PASSWORD environment variables are not correct. Please ensure you are using the right credentials.",
+ message="The provided User credentials are not valid.",
)
finally:
test_session.close()
@@ -994,7 +994,7 @@ class M365Provider(Provider):
except ValueError:
raise M365NotValidTenantIdError(
file=os.path.basename(__file__),
- message="The provided M365 Tenant ID is not valid.",
+ message="The provided Tenant ID is not valid.",
)
# Validate the Client ID
@@ -1003,28 +1003,28 @@ class M365Provider(Provider):
except ValueError:
raise M365NotValidClientIdError(
file=os.path.basename(__file__),
- message="The provided M365 Client ID is not valid.",
+ message="The provided Client ID is not valid.",
)
# Validate the Client Secret
if not client_secret:
raise M365NotValidClientSecretError(
file=os.path.basename(__file__),
- message="The provided M365 Client Secret is not valid.",
+ message="The provided Client Secret is not valid.",
)
# Validate the User
if not user:
raise M365NotValidUserError(
file=os.path.basename(__file__),
- message="The provided M365 User is not valid.",
+ message="The provided User is not valid.",
)
# Validate the Encrypted Password
if not encrypted_password:
raise M365NotValidEncryptedPasswordError(
file=os.path.basename(__file__),
- message="The provided M365 Encrypted Password is not valid.",
+ message="The provided Encrypted Password is not valid.",
)
try:
@@ -1042,7 +1042,7 @@ class M365Provider(Provider):
)
raise M365ClientIdAndClientSecretNotBelongingToTenantIdError(
file=os.path.basename(__file__),
- message="The provided M365 Client ID and Client Secret do not belong to the specified Tenant ID.",
+ message="The provided Client ID and Client Secret do not belong to the specified Tenant ID.",
)
except M365NotValidClientIdError as client_id_error:
logger.error(
@@ -1050,7 +1050,7 @@ class M365Provider(Provider):
)
raise M365TenantIdAndClientSecretNotBelongingToClientIdError(
file=os.path.basename(__file__),
- message="The provided M365 Tenant ID and Client Secret do not belong to the specified Client ID.",
+ message="The provided Tenant ID and Client Secret do not belong to the specified Client ID.",
)
except M365NotValidClientSecretError as client_secret_error:
logger.error(
@@ -1058,7 +1058,7 @@ class M365Provider(Provider):
)
raise M365TenantIdAndClientIdNotBelongingToClientSecretError(
file=os.path.basename(__file__),
- message="The provided M365 Tenant ID and Client ID do not belong to the specified Client Secret.",
+ message="The provided Tenant ID and Client ID do not belong to the specified Client Secret.",
)
@staticmethod
@@ -1100,19 +1100,25 @@ class M365Provider(Provider):
if f"Tenant '{tenant_id}'" in error_description:
raise M365NotValidTenantIdError(
file=os.path.basename(__file__),
- message="The provided Microsoft 365 Tenant ID is not valid for the specified Client ID and Client Secret.",
+ message="The provided Tenant ID is not valid for the specified Client ID and Client Secret.",
)
if f"Application with identifier '{client_id}'" in error_description:
raise M365NotValidClientIdError(
file=os.path.basename(__file__),
- message="The provided Microsoft 365 Client ID is not valid for the specified Tenant ID and Client Secret.",
+ message="The provided Client ID is not valid for the specified Tenant ID and Client Secret.",
)
if "Invalid client secret provided" in error_description:
raise M365NotValidClientSecretError(
file=os.path.basename(__file__),
- message="The provided Microsoft 365 Client Secret is not valid for the specified Tenant ID and Client ID.",
+ message="The provided Client Secret is not valid for the specified Tenant ID and Client ID.",
)
-
- except Exception as e:
- # Generic exception handling (if needed)
- raise RuntimeError(f"An unexpected error occurred: {str(e)}")
+ except (
+ M365NotValidTenantIdError,
+ M365NotValidClientIdError,
+ M365NotValidClientSecretError,
+ ) as m365_error:
+ # M365 specific errors already raised
+ raise RuntimeError(f"{m365_error}")
+ except Exception as error:
+ # Generic exception handling for unexpected errors
+ raise RuntimeError(f"An unexpected error occurred: {str(error)}")
diff --git a/tests/providers/m365/m365_provider_test.py b/tests/providers/m365/m365_provider_test.py
index c891ab2d45..1d8c0759e6 100644
--- a/tests/providers/m365/m365_provider_test.py
+++ b/tests/providers/m365/m365_provider_test.py
@@ -522,7 +522,7 @@ class TestM365Provider:
user="test@example.com",
encrypted_password="test_password",
)
- assert "The provided M365 Tenant ID is not valid." in str(exception.value)
+ assert "The provided Tenant ID is not valid." in str(exception.value)
def test_validate_static_credentials_missing_client_id(self):
with pytest.raises(M365NotValidClientIdError) as exception:
@@ -533,7 +533,7 @@ class TestM365Provider:
user="test@example.com",
encrypted_password="test_password",
)
- assert "The provided M365 Client ID is not valid." in str(exception.value)
+ assert "The provided Client ID is not valid." in str(exception.value)
def test_validate_static_credentials_missing_client_secret(self):
with pytest.raises(M365NotValidClientSecretError) as exception:
@@ -544,7 +544,7 @@ class TestM365Provider:
user="test@example.com",
encrypted_password="test_password",
)
- assert "The provided M365 Client Secret is not valid." in str(exception.value)
+ assert "The provided Client Secret is not valid." in str(exception.value)
def test_validate_static_credentials_missing_user(self):
with pytest.raises(M365NotValidUserError) as exception:
@@ -555,7 +555,7 @@ class TestM365Provider:
user="",
encrypted_password="test_password",
)
- assert "The provided M365 User is not valid." in str(exception.value)
+ assert "The provided User is not valid." in str(exception.value)
def test_validate_static_credentials_missing_encrypted_password(self):
with pytest.raises(M365NotValidEncryptedPasswordError) as exception:
@@ -566,9 +566,7 @@ class TestM365Provider:
user="test@example.com",
encrypted_password="",
)
- assert "The provided M365 Encrypted Password is not valid." in str(
- exception.value
- )
+ assert "The provided Encrypted Password is not valid." in str(exception.value)
def test_validate_arguments_missing_env_credentials(self):
with pytest.raises(M365MissingEnvironmentCredentialsError) as exception:
@@ -583,6 +581,7 @@ class TestM365Provider:
user=None,
encrypted_password=None,
)
+
assert (
"M365 provider requires AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_TENANT_ID, M365_USER and M365_ENCRYPTED_PASSWORD environment variables to be set when using --env-auth"
in str(exception.value)
From 50c5294bc0fd739956419033d0313830a28e3c3b Mon Sep 17 00:00:00 2001
From: Alejandro Bailo <59607668+alejandrobailo@users.noreply.github.com>
Date: Mon, 12 May 2025 10:32:40 +0200
Subject: [PATCH 02/23] feat: accordion component (#7700)
---
ui/CHANGELOG.md | 6 ++
ui/components/ui/accordion/Accordion.tsx | 109 +++++++++++++++++++++++
ui/components/ui/index.ts | 1 +
3 files changed, 116 insertions(+)
create mode 100644 ui/components/ui/accordion/Accordion.tsx
diff --git a/ui/CHANGELOG.md b/ui/CHANGELOG.md
index a3a45bb720..a39cf3f878 100644
--- a/ui/CHANGELOG.md
+++ b/ui/CHANGELOG.md
@@ -2,6 +2,12 @@
All notable changes to the **Prowler UI** are documented in this file.
+## [v1.7.0] (Prowler v5.7.0)
+
+### 🚀 Added
+
+- Added `Accordion` component. [(#7700)](https://github.com/prowler-cloud/prowler/pull/7700)
+
---
## [v1.6.0] (Prowler v5.6.0)
diff --git a/ui/components/ui/accordion/Accordion.tsx b/ui/components/ui/accordion/Accordion.tsx
new file mode 100644
index 0000000000..aa029a121c
--- /dev/null
+++ b/ui/components/ui/accordion/Accordion.tsx
@@ -0,0 +1,109 @@
+"use client";
+
+import {
+ Accordion as NextUIAccordion,
+ AccordionItem,
+ Selection,
+} from "@nextui-org/react";
+import { ChevronDown } from "lucide-react";
+import React, { ReactNode, useCallback, useState } from "react";
+
+import { cn } from "@/lib/utils";
+
+export interface AccordionItemProps {
+ key: string;
+ title: ReactNode;
+ subtitle?: ReactNode;
+ content: ReactNode;
+ items?: AccordionItemProps[];
+ isDisabled?: boolean;
+}
+
+export interface AccordionProps {
+ items: AccordionItemProps[];
+ variant?: "light" | "shadow" | "bordered" | "splitted";
+ className?: string;
+ defaultExpandedKeys?: string[];
+ selectionMode?: "single" | "multiple";
+ isCompact?: boolean;
+ showDivider?: boolean;
+}
+
+const AccordionContent = ({
+ content,
+ items,
+}: {
+ content: ReactNode;
+ items?: AccordionItemProps[];
+}) => {
+ return (
+
+ {content}
+ {items && items.length > 0 && (
+
+ )}
+
+ );
+};
+
+export const Accordion = ({
+ items,
+ variant = "light",
+ className,
+ defaultExpandedKeys = [],
+ selectionMode = "single",
+ isCompact = false,
+ showDivider = true,
+}: AccordionProps) => {
+ const [expandedKeys, setExpandedKeys] = useState(
+ new Set(defaultExpandedKeys),
+ );
+
+ const handleSelectionChange = useCallback((keys: Selection) => {
+ setExpandedKeys(keys);
+ }, []);
+
+ return (
+
+ {items.map((item, index) => (
+ }
+ classNames={{
+ base: index === 0 || index === 1 ? "my-2" : "my-1",
+ title: "text-sm font-medium",
+ subtitle: "text-xs text-gray-500",
+ trigger:
+ "p-2 rounded-lg data-[hover=true]:bg-gray-50 dark:data-[hover=true]:bg-gray-800/50",
+ content: "p-2",
+ }}
+ >
+
+
+ ))}
+
+ );
+};
+
+Accordion.displayName = "Accordion";
diff --git a/ui/components/ui/index.ts b/ui/components/ui/index.ts
index 181ad5e4c1..6fb4555d80 100644
--- a/ui/components/ui/index.ts
+++ b/ui/components/ui/index.ts
@@ -1,3 +1,4 @@
+export * from "./accordion/Accordion";
export * from "./action-card/ActionCard";
export * from "./alert/Alert";
export * from "./alert-dialog/AlertDialog";
From 0737d9e8bb2957d740bf36f876cf189855dd9ce9 Mon Sep 17 00:00:00 2001
From: Prowler Bot
Date: Mon, 12 May 2025 10:56:28 +0200
Subject: [PATCH 03/23] chore(release): Bump version to v5.7.0 (#7697)
Co-authored-by: prowler-bot <179230569+prowler-bot@users.noreply.github.com>
---
prowler/config/config.py | 2 +-
pyproject.toml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/prowler/config/config.py b/prowler/config/config.py
index 52bd2fd742..41d6e3e842 100644
--- a/prowler/config/config.py
+++ b/prowler/config/config.py
@@ -12,7 +12,7 @@ from prowler.lib.logger import logger
timestamp = datetime.today()
timestamp_utc = datetime.now(timezone.utc).replace(tzinfo=timezone.utc)
-prowler_version = "5.6.0"
+prowler_version = "5.7.0"
html_logo_url = "https://github.com/prowler-cloud/prowler/"
square_logo_img = "https://prowler.com/wp-content/uploads/logo-html.png"
aws_logo = "https://user-images.githubusercontent.com/38561120/235953920-3e3fba08-0795-41dc-b480-9bea57db9f2e.png"
diff --git a/pyproject.toml b/pyproject.toml
index ce1f648702..1c1e3a49c7 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -64,7 +64,7 @@ maintainers = [{name = "Prowler Engineering", email = "engineering@prowler.com"}
name = "prowler"
readme = "README.md"
requires-python = ">3.9.1,<3.13"
-version = "5.6.0"
+version = "5.7.0"
[project.scripts]
prowler = "prowler.__main__:prowler"
From 4d84529ba2ade50bab3cf6ff5f988255fb4d1329 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adri=C3=A1n=20Jes=C3=BAs=20Pe=C3=B1a=20Rodr=C3=ADguez?=
Date: Mon, 12 May 2025 11:00:53 +0200
Subject: [PATCH 04/23] docs: update the download export documentation (#7682)
---
docs/img/compliance_download.png | Bin 0 -> 66869 bytes
docs/img/compliance_section.png | Bin 0 -> 9204 bytes
docs/img/download_output.png | Bin 156252 -> 39755 bytes
docs/img/output_folder.png | Bin 27683 -> 55522 bytes
docs/img/scan_jobs_section.png | Bin 0 -> 16068 bytes
docs/tutorials/prowler-app.md | 38 +++++++++++++++++++++++++++----
6 files changed, 34 insertions(+), 4 deletions(-)
create mode 100644 docs/img/compliance_download.png
create mode 100644 docs/img/compliance_section.png
create mode 100644 docs/img/scan_jobs_section.png
diff --git a/docs/img/compliance_download.png b/docs/img/compliance_download.png
new file mode 100644
index 0000000000000000000000000000000000000000..32aed141b3bfffc8e18422bd65f7b7168576928e
GIT binary patch
literal 66869
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