mirror of
https://github.com/prowler-cloud/prowler.git
synced 2026-07-24 04:51:51 +00:00
176 lines
4.9 KiB
Python
176 lines
4.9 KiB
Python
"""Shared helpers for `application` service check tests.
|
|
|
|
Mirrors `signon_fixtures.py`. The four authentication-policy checks
|
|
(MFA + phishing-resistant for Okta Admin Console and Okta Dashboard)
|
|
and the Admin Console idle-timeout check all consume the same client
|
|
shape, so the helpers stay close to the signon equivalents.
|
|
"""
|
|
|
|
from unittest import mock
|
|
|
|
from prowler.providers.okta.services.application.application_service import (
|
|
ADMIN_CONSOLE_APP_NAME,
|
|
DASHBOARD_APP_NAME,
|
|
AdminConsoleAppSettings,
|
|
AuthenticationPolicy,
|
|
AuthenticationPolicyRule,
|
|
OktaBuiltInApp,
|
|
)
|
|
from tests.providers.okta.okta_fixtures import set_mocked_okta_provider
|
|
|
|
|
|
def build_application_client(
|
|
admin_console_settings: AdminConsoleAppSettings = None,
|
|
built_in_apps: dict = None,
|
|
integrated_apps: dict = None,
|
|
audit_config: dict = None,
|
|
missing_scope: dict = None,
|
|
):
|
|
client = mock.MagicMock()
|
|
client.admin_console_app_settings = admin_console_settings
|
|
client.built_in_apps = built_in_apps or {}
|
|
client.integrated_apps = integrated_apps or {}
|
|
client.provider = set_mocked_okta_provider()
|
|
client.audit_config = audit_config or {}
|
|
# Default to "all scopes granted" so existing tests keep working.
|
|
client.missing_scope = missing_scope or {
|
|
"admin_console_app_settings": None,
|
|
"built_in_apps": None,
|
|
"integrated_apps": None,
|
|
"access_policies": None,
|
|
}
|
|
return client
|
|
|
|
|
|
def admin_console_settings(
|
|
idle_timeout: int = None,
|
|
max_lifetime: int = None,
|
|
) -> AdminConsoleAppSettings:
|
|
return AdminConsoleAppSettings(
|
|
session_idle_timeout_minutes=idle_timeout,
|
|
session_max_lifetime_minutes=max_lifetime,
|
|
)
|
|
|
|
|
|
def auth_policy_rule(
|
|
name: str = "Catch-all Rule",
|
|
*,
|
|
priority: int = 1,
|
|
status: str = "ACTIVE",
|
|
is_default: bool = False,
|
|
factor_mode: str = None,
|
|
phishing_resistant: bool = False,
|
|
constraints_count: int = 0,
|
|
verification_method_type: str = "ASSURANCE",
|
|
access: str = "ALLOW",
|
|
network_connection: str = None,
|
|
network_zones_include: list[str] = None,
|
|
network_zones_exclude: list[str] = None,
|
|
):
|
|
return AuthenticationPolicyRule(
|
|
id=f"rule-{name.lower().replace(' ', '-')}",
|
|
name=name,
|
|
priority=priority,
|
|
status=status,
|
|
is_default=is_default,
|
|
factor_mode=factor_mode,
|
|
possession_phishing_resistant_required=phishing_resistant,
|
|
constraints_count=constraints_count,
|
|
verification_method_type=verification_method_type,
|
|
access=access,
|
|
network_connection=network_connection,
|
|
network_zones_include=network_zones_include or [],
|
|
network_zones_exclude=network_zones_exclude or [],
|
|
)
|
|
|
|
|
|
def catch_all_rule(
|
|
priority: int = 2,
|
|
*,
|
|
factor_mode: str = None,
|
|
phishing_resistant: bool = False,
|
|
access: str = "ALLOW",
|
|
network_connection: str = None,
|
|
network_zones_include: list[str] = None,
|
|
network_zones_exclude: list[str] = None,
|
|
):
|
|
return auth_policy_rule(
|
|
name="Catch-all Rule",
|
|
priority=priority,
|
|
is_default=True,
|
|
factor_mode=factor_mode,
|
|
phishing_resistant=phishing_resistant,
|
|
access=access,
|
|
network_connection=network_connection,
|
|
network_zones_include=network_zones_include,
|
|
network_zones_exclude=network_zones_exclude,
|
|
)
|
|
|
|
|
|
def admin_console_app(
|
|
rules: list = None,
|
|
*,
|
|
access_policy_id: str = "rstadminconsole",
|
|
label: str = "Okta Admin Console",
|
|
status: str = "ACTIVE",
|
|
):
|
|
policy = (
|
|
AuthenticationPolicy(id=access_policy_id, rules=rules or [])
|
|
if access_policy_id is not None
|
|
else None
|
|
)
|
|
return OktaBuiltInApp(
|
|
id="0oaadminconsole",
|
|
name=ADMIN_CONSOLE_APP_NAME,
|
|
label=label,
|
|
status=status,
|
|
access_policy_id=access_policy_id,
|
|
access_policy=policy,
|
|
)
|
|
|
|
|
|
def dashboard_app(
|
|
rules: list = None,
|
|
*,
|
|
access_policy_id: str = "rstdashboard",
|
|
label: str = "Okta Dashboard",
|
|
status: str = "ACTIVE",
|
|
):
|
|
policy = (
|
|
AuthenticationPolicy(id=access_policy_id, rules=rules or [])
|
|
if access_policy_id is not None
|
|
else None
|
|
)
|
|
return OktaBuiltInApp(
|
|
id="0oadashboard",
|
|
name=DASHBOARD_APP_NAME,
|
|
label=label,
|
|
status=status,
|
|
access_policy_id=access_policy_id,
|
|
access_policy=policy,
|
|
)
|
|
|
|
|
|
def integrated_app(
|
|
app_id: str,
|
|
name: str,
|
|
*,
|
|
rules: list = None,
|
|
access_policy_id: str = "rstapp",
|
|
label: str = "",
|
|
status: str = "ACTIVE",
|
|
):
|
|
policy = (
|
|
AuthenticationPolicy(id=access_policy_id, rules=rules or [])
|
|
if access_policy_id is not None
|
|
else None
|
|
)
|
|
return OktaBuiltInApp(
|
|
id=app_id,
|
|
name=name,
|
|
label=label or name,
|
|
status=status,
|
|
access_policy_id=access_policy_id,
|
|
access_policy=policy,
|
|
)
|