Files
2026-05-27 11:16:18 +02:00

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,
)