fix(m365): admincenter service unnecessary msgraph calls and repeated resource_id (#9067)

Co-authored-by: Hugo Pereira Brito <101209179+HugoPBrito@users.noreply.github.com>
Co-authored-by: César Arroba <cesar@prowler.com>
This commit is contained in:
Prowler Bot
2025-10-30 11:15:33 +01:00
committed by GitHub
parent 64efd09918
commit ee78bc6c01
15 changed files with 99 additions and 81 deletions

View File

@@ -21,6 +21,7 @@ All notable changes to the **Prowler SDK** are documented in this file.
- Add `resource_name` for checks under `logging` for the GCP provider [(#9023)](https://github.com/prowler-cloud/prowler/pull/9023)
- Fix `ec2_instance_with_outdated_ami` check to handle None AMIs [(#9046)](https://github.com/prowler-cloud/prowler/pull/9046)
- Handle timestamp when transforming compliance findings in CCC [(#9042)](https://github.com/prowler-cloud/prowler/pull/9042)
- Update `resource_id` for admincenter service and avoid unnecessary msgraph requests [(#9019)](https://github.com/prowler-cloud/prowler/pull/9019)
---

View File

@@ -45,13 +45,13 @@ class AdminCenter(M365Service):
asyncio.gather(
self._get_directory_roles(),
self._get_groups(),
self._get_domains(),
self._get_password_policy(),
)
)
self.directory_roles = attributes[0]
self.groups = attributes[1]
self.domains = attributes[2]
self.password_policy = attributes[2]
if created_loop:
asyncio.set_event_loop(None)
@@ -192,34 +192,31 @@ class AdminCenter(M365Service):
)
return groups
async def _get_domains(self):
logger.info("M365 - Getting domains...")
domains = {}
async def _get_password_policy(self):
logger.info("M365 - Getting password policy...")
password_policy = None
try:
logger.info("M365 - Getting domains...")
domains_list = await self.client.domains.get()
domains.update({})
for domain in domains_list.value:
if domain:
password_validity_period = getattr(
domain, "password_validity_period_in_days", None
)
if password_validity_period is None:
password_validity_period = 0
for domain in getattr(domains_list, "value", []) or []:
if not domain:
continue
password_validity_period = getattr(
domain, "password_validity_period_in_days", None
)
if password_validity_period is None:
password_validity_period = 0
domains.update(
{
domain.id: Domain(
id=domain.id,
password_validity_period=password_validity_period,
)
}
)
password_policy = PasswordPolicy(
password_validity_period=password_validity_period,
)
break
except Exception as error:
logger.error(
f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
)
return domains
return password_policy
class User(BaseModel):
@@ -242,8 +239,7 @@ class Group(BaseModel):
visibility: Optional[str]
class Domain(BaseModel):
id: str
class PasswordPolicy(BaseModel):
password_validity_period: int

View File

@@ -7,11 +7,11 @@ from prowler.providers.m365.services.admincenter.admincenter_client import (
class admincenter_settings_password_never_expire(Check):
"""Check if domains have a 'Password never expires' policy.
"""Check if the tenant enforces a 'Password never expires' policy.
This check verifies whether the password policy for each domain is set to never expire.
If the domain password validity period is set to `2147483647`, the policy is considered to
have 'password never expires'.
This check verifies whether the tenant-wide password policy (surfaced through the first
domain returned by Microsoft 365) is set to never expire. If the password validity period
is set to `2147483647`, the policy is considered to have 'password never expires'.
Attributes:
metadata: Metadata associated with the check (inherited from Check).
@@ -20,30 +20,32 @@ class admincenter_settings_password_never_expire(Check):
def execute(self) -> List[CheckReportM365]:
"""Execute the check for password never expires policy.
This method iterates over all domains and checks if the password validity period is set
to `2147483647`, indicating that passwords for users in the domain never expire.
This method inspects the tenant-level password validity configuration (exposed through
the first available domain) and checks if the password validity period is set to
`2147483647`, indicating that passwords for users in the domain never expire.
Returns:
List[CheckReportM365]: A list of reports indicating whether the domain's password
policy is set to never expire.
"""
findings = []
for domain in admincenter_client.domains.values():
password_policy = getattr(admincenter_client, "password_policy", None)
if password_policy:
report = CheckReportM365(
self.metadata(),
resource=domain,
resource_name=domain.id,
resource_id=domain.id,
resource=password_policy,
resource_name="Password Policy",
resource_id="passwordPolicy",
)
report.status = "FAIL"
report.status_extended = (
f"Domain {domain.id} does not have a Password never expires policy."
"Tenant Password policy does not have a Password never expires policy."
)
if domain.password_validity_period == 2147483647:
if password_policy.password_validity_period == 2147483647:
report.status = "PASS"
report.status_extended = (
f"Domain {domain.id} Password policy is set to never expire."
"Tenant Password policy is set to never expire."
)
findings.append(report)

View File

@@ -36,7 +36,7 @@ class sharepoint_external_sharing_managed(Check):
self.metadata(),
resource=settings if settings else {},
resource_name="SharePoint Settings",
resource_id=sharepoint_client.tenant_domain,
resource_id="sharepointSettings",
)
report.status = "FAIL"
report.status_extended = "SharePoint external sharing is not managed through domain restrictions."

View File

@@ -32,7 +32,7 @@ class sharepoint_external_sharing_restricted(Check):
self.metadata(),
resource=settings if settings else {},
resource_name="SharePoint Settings",
resource_id=sharepoint_client.tenant_domain,
resource_id="sharepointSettings",
)
report.status = "FAIL"
report.status_extended = (

View File

@@ -33,7 +33,7 @@ class sharepoint_guest_sharing_restricted(Check):
self.metadata(),
resource=settings if settings else {},
resource_name="SharePoint Settings",
resource_id=sharepoint_client.tenant_domain,
resource_id="sharepointSettings",
)
report.status = "FAIL"
report.status_extended = "Guest sharing is not restricted; guest users can share items they do not own."

View File

@@ -35,7 +35,7 @@ class sharepoint_modern_authentication_required(Check):
self.metadata(),
resource=settings if settings else {},
resource_name="SharePoint Settings",
resource_id=sharepoint_client.tenant_domain,
resource_id="sharepointSettings",
)
report.status = "PASS"
report.status_extended = "Microsoft 365 SharePoint does not allow access to apps that don't use modern authentication."

View File

@@ -34,7 +34,7 @@ class sharepoint_onedrive_sync_restricted_unmanaged_devices(Check):
self.metadata(),
resource=settings if settings else {},
resource_name="SharePoint Settings",
resource_id=sharepoint_client.tenant_domain,
resource_id="sharepointSettings",
)
report.status = "PASS"
report.status_extended = "Microsoft 365 SharePoint does not allow OneDrive sync to unmanaged devices."

View File

@@ -1,5 +1,4 @@
from unittest import mock
from uuid import uuid4
from tests.providers.m365.m365_fixtures import DOMAIN, set_mocked_m365_provider
@@ -15,6 +14,7 @@ class Test_admincenter_settings_password_never_expire:
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_m365_provider(),
),
mock.patch("prowler.providers.m365.lib.service.service.M365PowerShell"),
mock.patch(
"prowler.providers.m365.lib.powershell.m365_powershell.M365PowerShell.connect_exchange_online"
),
@@ -27,7 +27,7 @@ class Test_admincenter_settings_password_never_expire:
admincenter_settings_password_never_expire,
)
admincenter_client.domains = {}
admincenter_client.password_policy = None
check = admincenter_settings_password_never_expire()
result = check.execute()
@@ -43,6 +43,7 @@ class Test_admincenter_settings_password_never_expire:
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_m365_provider(),
),
mock.patch("prowler.providers.m365.lib.service.service.M365PowerShell"),
mock.patch(
"prowler.providers.m365.lib.powershell.m365_powershell.M365PowerShell.connect_exchange_online"
),
@@ -52,17 +53,15 @@ class Test_admincenter_settings_password_never_expire:
),
):
from prowler.providers.m365.services.admincenter.admincenter_service import (
Domain,
PasswordPolicy,
)
from prowler.providers.m365.services.admincenter.admincenter_settings_password_never_expire.admincenter_settings_password_never_expire import (
admincenter_settings_password_never_expire,
)
id_domain = str(uuid4())
admincenter_client.domains = {
id_domain: Domain(id=id_domain, password_validity_period=5),
}
admincenter_client.password_policy = PasswordPolicy(
password_validity_period=5
)
check = admincenter_settings_password_never_expire()
result = check.execute()
@@ -70,11 +69,11 @@ class Test_admincenter_settings_password_never_expire:
assert result[0].status == "FAIL"
assert (
result[0].status_extended
== f"Domain {id_domain} does not have a Password never expires policy."
== "Tenant Password policy does not have a Password never expires policy."
)
assert result[0].resource == admincenter_client.domains[id_domain].dict()
assert result[0].resource_name == id_domain
assert result[0].resource_id == id_domain
assert result[0].resource == admincenter_client.password_policy.dict()
assert result[0].resource_name == "Password Policy"
assert result[0].resource_id == "passwordPolicy"
assert result[0].location == "global"
def test_admincenter_password_not_expire(self):
@@ -87,6 +86,7 @@ class Test_admincenter_settings_password_never_expire:
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_m365_provider(),
),
mock.patch("prowler.providers.m365.lib.service.service.M365PowerShell"),
mock.patch(
"prowler.providers.m365.lib.powershell.m365_powershell.M365PowerShell.connect_exchange_online"
),
@@ -96,17 +96,15 @@ class Test_admincenter_settings_password_never_expire:
),
):
from prowler.providers.m365.services.admincenter.admincenter_service import (
Domain,
PasswordPolicy,
)
from prowler.providers.m365.services.admincenter.admincenter_settings_password_never_expire.admincenter_settings_password_never_expire import (
admincenter_settings_password_never_expire,
)
id_domain = str(uuid4())
admincenter_client.domains = {
id_domain: Domain(id=id_domain, password_validity_period=2147483647),
}
admincenter_client.password_policy = PasswordPolicy(
password_validity_period=2147483647
)
check = admincenter_settings_password_never_expire()
result = check.execute()
@@ -114,9 +112,9 @@ class Test_admincenter_settings_password_never_expire:
assert result[0].status == "PASS"
assert (
result[0].status_extended
== f"Domain {id_domain} Password policy is set to never expire."
== "Tenant Password policy is set to never expire."
)
assert result[0].resource == admincenter_client.domains[id_domain].dict()
assert result[0].resource_name == id_domain
assert result[0].resource_id == id_domain
assert result[0].resource == admincenter_client.password_policy.dict()
assert result[0].resource_name == "Password Policy"
assert result[0].resource_id == "passwordPolicy"
assert result[0].location == "global"

View File

@@ -20,6 +20,7 @@ class Test_sharepoint_external_sharing_managed:
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_m365_provider(),
),
mock.patch("prowler.providers.m365.lib.service.service.M365PowerShell"),
mock.patch(
"prowler.providers.m365.services.sharepoint.sharepoint_external_sharing_managed.sharepoint_external_sharing_managed.sharepoint_client",
new=sharepoint_client,
@@ -49,7 +50,7 @@ class Test_sharepoint_external_sharing_managed:
result[0].status_extended
== "SharePoint external sharing is not managed through domain restrictions."
)
assert result[0].resource_id == DOMAIN
assert result[0].resource_id == "sharepointSettings"
assert result[0].location == "global"
assert result[0].resource_name == "SharePoint Settings"
assert result[0].resource == sharepoint_client.settings.dict()
@@ -66,6 +67,7 @@ class Test_sharepoint_external_sharing_managed:
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_m365_provider(),
),
mock.patch("prowler.providers.m365.lib.service.service.M365PowerShell"),
mock.patch(
"prowler.providers.m365.services.sharepoint.sharepoint_external_sharing_managed.sharepoint_external_sharing_managed.sharepoint_client",
new=sharepoint_client,
@@ -95,7 +97,7 @@ class Test_sharepoint_external_sharing_managed:
result[0].status_extended
== "SharePoint external sharing is managed through domain restrictions with mode 'allowList' but the list is empty."
)
assert result[0].resource_id == DOMAIN
assert result[0].resource_id == "sharepointSettings"
assert result[0].location == "global"
assert result[0].resource_name == "SharePoint Settings"
assert result[0].resource == sharepoint_client.settings.dict()
@@ -112,6 +114,7 @@ class Test_sharepoint_external_sharing_managed:
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_m365_provider(),
),
mock.patch("prowler.providers.m365.lib.service.service.M365PowerShell"),
mock.patch(
"prowler.providers.m365.services.sharepoint.sharepoint_external_sharing_managed.sharepoint_external_sharing_managed.sharepoint_client",
new=sharepoint_client,
@@ -141,7 +144,7 @@ class Test_sharepoint_external_sharing_managed:
result[0].status_extended
== "SharePoint external sharing is managed through domain restrictions with mode 'blockList' but the list is empty."
)
assert result[0].resource_id == DOMAIN
assert result[0].resource_id == "sharepointSettings"
assert result[0].location == "global"
assert result[0].resource_name == "SharePoint Settings"
assert result[0].resource == sharepoint_client.settings.dict()
@@ -158,6 +161,7 @@ class Test_sharepoint_external_sharing_managed:
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_m365_provider(),
),
mock.patch("prowler.providers.m365.lib.service.service.M365PowerShell"),
mock.patch(
"prowler.providers.m365.services.sharepoint.sharepoint_external_sharing_managed.sharepoint_external_sharing_managed.sharepoint_client",
new=sharepoint_client,
@@ -187,7 +191,7 @@ class Test_sharepoint_external_sharing_managed:
result[0].status_extended
== "SharePoint external sharing is managed through domain restrictions with mode 'allowList'."
)
assert result[0].resource_id == DOMAIN
assert result[0].resource_id == "sharepointSettings"
assert result[0].location == "global"
assert result[0].resource_name == "SharePoint Settings"
assert result[0].resource == sharepoint_client.settings.dict()
@@ -233,7 +237,7 @@ class Test_sharepoint_external_sharing_managed:
result[0].status_extended
== "SharePoint external sharing is managed through domain restrictions with mode 'blockList'."
)
assert result[0].resource_id == DOMAIN
assert result[0].resource_id == "sharepointSettings"
assert result[0].location == "global"
assert result[0].resource_name == "SharePoint Settings"
assert result[0].resource == sharepoint_client.settings.dict()
@@ -252,6 +256,7 @@ class Test_sharepoint_external_sharing_managed:
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_m365_provider(),
),
mock.patch("prowler.providers.m365.lib.service.service.M365PowerShell"),
mock.patch(
"prowler.providers.m365.services.sharepoint.sharepoint_external_sharing_managed.sharepoint_external_sharing_managed.sharepoint_client",
new=sharepoint_client,

View File

@@ -20,6 +20,7 @@ class Test_sharepoint_external_sharing_restricted:
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_m365_provider(),
),
mock.patch("prowler.providers.m365.lib.service.service.M365PowerShell"),
mock.patch(
"prowler.providers.m365.services.sharepoint.sharepoint_external_sharing_restricted.sharepoint_external_sharing_restricted.sharepoint_client",
new=sharepoint_client,
@@ -47,7 +48,7 @@ class Test_sharepoint_external_sharing_restricted:
assert result[0].status_extended == (
"External sharing is restricted to external user sharing or more restrictive."
)
assert result[0].resource_id == DOMAIN
assert result[0].resource_id == "sharepointSettings"
assert result[0].location == "global"
assert result[0].resource_name == "SharePoint Settings"
assert result[0].resource == sharepoint_client.settings.dict()
@@ -64,6 +65,7 @@ class Test_sharepoint_external_sharing_restricted:
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_m365_provider(),
),
mock.patch("prowler.providers.m365.lib.service.service.M365PowerShell"),
mock.patch(
"prowler.providers.m365.services.sharepoint.sharepoint_external_sharing_restricted.sharepoint_external_sharing_restricted.sharepoint_client",
new=sharepoint_client,
@@ -91,7 +93,7 @@ class Test_sharepoint_external_sharing_restricted:
assert result[0].status_extended == (
"External sharing is not restricted and guests users can access."
)
assert result[0].resource_id == DOMAIN
assert result[0].resource_id == "sharepointSettings"
assert result[0].location == "global"
assert result[0].resource_name == "SharePoint Settings"
assert result[0].resource == sharepoint_client.settings.dict()
@@ -110,6 +112,7 @@ class Test_sharepoint_external_sharing_restricted:
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_m365_provider(),
),
mock.patch("prowler.providers.m365.lib.service.service.M365PowerShell"),
mock.patch(
"prowler.providers.m365.services.sharepoint.sharepoint_external_sharing_restricted.sharepoint_external_sharing_restricted.sharepoint_client",
new=sharepoint_client,

View File

@@ -20,6 +20,7 @@ class Test_sharepoint_guest_sharing_restricted:
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_m365_provider(),
),
mock.patch("prowler.providers.m365.lib.service.service.M365PowerShell"),
mock.patch(
"prowler.providers.m365.services.sharepoint.sharepoint_guest_sharing_restricted.sharepoint_guest_sharing_restricted.sharepoint_client",
new=sharepoint_client,
@@ -48,7 +49,7 @@ class Test_sharepoint_guest_sharing_restricted:
assert result[0].status_extended == (
"Guest sharing is restricted; guest users cannot share items they do not own."
)
assert result[0].resource_id == DOMAIN
assert result[0].resource_id == "sharepointSettings"
assert result[0].location == "global"
assert result[0].resource_name == "SharePoint Settings"
assert result[0].resource == sharepoint_client.settings.dict()
@@ -65,6 +66,7 @@ class Test_sharepoint_guest_sharing_restricted:
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_m365_provider(),
),
mock.patch("prowler.providers.m365.lib.service.service.M365PowerShell"),
mock.patch(
"prowler.providers.m365.services.sharepoint.sharepoint_guest_sharing_restricted.sharepoint_guest_sharing_restricted.sharepoint_client",
new=sharepoint_client,
@@ -93,7 +95,7 @@ class Test_sharepoint_guest_sharing_restricted:
assert result[0].status_extended == (
"Guest sharing is not restricted; guest users can share items they do not own."
)
assert result[0].resource_id == DOMAIN
assert result[0].resource_id == "sharepointSettings"
assert result[0].location == "global"
assert result[0].resource_name == "SharePoint Settings"
assert result[0].resource == sharepoint_client.settings.dict()
@@ -112,6 +114,7 @@ class Test_sharepoint_guest_sharing_restricted:
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_m365_provider(),
),
mock.patch("prowler.providers.m365.lib.service.service.M365PowerShell"),
mock.patch(
"prowler.providers.m365.services.sharepoint.sharepoint_guest_sharing_restricted.sharepoint_guest_sharing_restricted.sharepoint_client",
new=sharepoint_client,

View File

@@ -17,6 +17,7 @@ class Test_sharepoint_modern_authentication_required:
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_m365_provider(),
),
mock.patch("prowler.providers.m365.lib.service.service.M365PowerShell"),
mock.patch(
"prowler.providers.m365.services.sharepoint.sharepoint_modern_authentication_required.sharepoint_modern_authentication_required.sharepoint_client",
new=sharepoint_client,
@@ -47,7 +48,7 @@ class Test_sharepoint_modern_authentication_required:
assert result[0].status_extended == (
"Microsoft 365 SharePoint does not allow access to apps that don't use modern authentication."
)
assert result[0].resource_id == DOMAIN
assert result[0].resource_id == "sharepointSettings"
assert result[0].location == "global"
assert result[0].resource_name == "SharePoint Settings"
assert result[0].resource == sharepoint_client.settings.dict()
@@ -64,6 +65,7 @@ class Test_sharepoint_modern_authentication_required:
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_m365_provider(),
),
mock.patch("prowler.providers.m365.lib.service.service.M365PowerShell"),
mock.patch(
"prowler.providers.m365.services.sharepoint.sharepoint_modern_authentication_required.sharepoint_modern_authentication_required.sharepoint_client",
new=sharepoint_client,
@@ -94,7 +96,7 @@ class Test_sharepoint_modern_authentication_required:
assert result[0].status_extended == (
"Microsoft 365 SharePoint allows access to apps that don't use modern authentication."
)
assert result[0].resource_id == DOMAIN
assert result[0].resource_id == "sharepointSettings"
assert result[0].location == "global"
assert result[0].resource_name == "SharePoint Settings"
assert result[0].resource == sharepoint_client.settings.dict()
@@ -113,6 +115,7 @@ class Test_sharepoint_modern_authentication_required:
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_m365_provider(),
),
mock.patch("prowler.providers.m365.lib.service.service.M365PowerShell"),
mock.patch(
"prowler.providers.m365.services.sharepoint.sharepoint_modern_authentication_required.sharepoint_modern_authentication_required.sharepoint_client",
new=sharepoint_client,

View File

@@ -21,6 +21,7 @@ class Test_sharepoint_onedrive_sync_restricted_unmanaged_devices:
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_m365_provider(),
),
mock.patch("prowler.providers.m365.lib.service.service.M365PowerShell"),
mock.patch(
"prowler.providers.m365.services.sharepoint.sharepoint_onedrive_sync_restricted_unmanaged_devices.sharepoint_onedrive_sync_restricted_unmanaged_devices.sharepoint_client",
new=sharepoint_client,
@@ -50,7 +51,7 @@ class Test_sharepoint_onedrive_sync_restricted_unmanaged_devices:
result[0].status_extended
== "Microsoft 365 SharePoint allows OneDrive sync to unmanaged devices."
)
assert result[0].resource_id == DOMAIN
assert result[0].resource_id == "sharepointSettings"
assert result[0].location == "global"
assert result[0].resource_name == "SharePoint Settings"
assert result[0].resource == sharepoint_client.settings.dict()
@@ -66,6 +67,7 @@ class Test_sharepoint_onedrive_sync_restricted_unmanaged_devices:
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_m365_provider(),
),
mock.patch("prowler.providers.m365.lib.service.service.M365PowerShell"),
mock.patch(
"prowler.providers.m365.services.sharepoint.sharepoint_onedrive_sync_restricted_unmanaged_devices.sharepoint_onedrive_sync_restricted_unmanaged_devices.sharepoint_client",
new=sharepoint_client,
@@ -95,7 +97,7 @@ class Test_sharepoint_onedrive_sync_restricted_unmanaged_devices:
result[0].status_extended
== "Microsoft 365 SharePoint does not allow OneDrive sync to unmanaged devices."
)
assert result[0].resource_id == DOMAIN
assert result[0].resource_id == "sharepointSettings"
assert result[0].location == "global"
assert result[0].resource_name == "SharePoint Settings"
assert result[0].resource == sharepoint_client.settings.dict()
@@ -114,6 +116,7 @@ class Test_sharepoint_onedrive_sync_restricted_unmanaged_devices:
"prowler.providers.common.provider.Provider.get_global_provider",
return_value=set_mocked_m365_provider(),
),
mock.patch("prowler.providers.m365.lib.service.service.M365PowerShell"),
mock.patch(
"prowler.providers.m365.services.sharepoint.sharepoint_onedrive_sync_restricted_unmanaged_devices.sharepoint_onedrive_sync_restricted_unmanaged_devices.sharepoint_client",
new=sharepoint_client,

View File

@@ -29,13 +29,17 @@ async def mock_sharepoint_get_settings(_):
)
class Test_SharePoint_Service:
def test_get_client(self):
sharepoint_client = SharePoint(
set_mocked_m365_provider(identity=M365IdentityInfo(tenant_domain=DOMAIN))
)
with patch("prowler.providers.m365.lib.service.service.M365PowerShell"):
sharepoint_client = SharePoint(
set_mocked_m365_provider(
identity=M365IdentityInfo(tenant_domain=DOMAIN)
)
)
assert sharepoint_client.client.__class__.__name__ == "GraphServiceClient"
def test_get_settings(self):
sharepoint_client = SharePoint(set_mocked_m365_provider())
with patch("prowler.providers.m365.lib.service.service.M365PowerShell"):
sharepoint_client = SharePoint(set_mocked_m365_provider())
settings = sharepoint_client.settings
assert settings.sharingCapability == "ExternalUserAndGuestSharing"
assert settings.sharingAllowedDomainList == ["allowed-domain.com"]