diff --git a/src/openhound_jamf/models/policy.py b/src/openhound_jamf/models/policy.py index d78a684..ec1ffb0 100644 --- a/src/openhound_jamf/models/policy.py +++ b/src/openhound_jamf/models/policy.py @@ -1,6 +1,4 @@ from dataclasses import dataclass -from enum import Enum -from typing import Any from openhound.core.asset import BaseAsset from pydantic import BaseModel, Field @@ -9,23 +7,6 @@ from openhound_jamf.main import app -class Trigger(Enum): - CHECKIN = "CHECKIN" - LOGIN = "LOGIN" - OTHER = "OTHER" - STARTUP = "STARTUP" - ENROLLMENT_COMPLETE = "ENROLLMENT_COMPLETE" - NETWORK_STATE_CHANGED = "NETWORK_STATE_CHANGED" - EVENT = "EVENT" - USER_INITIATED = "USER_INITIATED" - - -class Retry(Enum): - none = "none" - immediate = "immediate" - interval = "interval" - - class BasePolicy(BaseModel): id: int name: str | None = None @@ -43,7 +24,6 @@ class DateTimeLimitations(BaseModel): expiration_date: str | None = None expiration_date_epoch: int | None = None expiration_date_utc: str | None = None - no_execute_on: dict[str, Any] = Field(default_factory=dict) no_execute_start: str | None = None no_execute_end: str | None = None @@ -51,7 +31,7 @@ class DateTimeLimitations(BaseModel): class NetworkLimitations(BaseModel): minimum_network_connection: str | None = None any_ip_address: bool | None = None - network_segments: list[dict[str, Any]] = Field(default_factory=list) + network_segments: list[dict[str, IdName]] = Field(default_factory=list) class OverrideDefaultSettings(BaseModel): @@ -68,38 +48,51 @@ class Computer(BaseModel): class LimitToUsers(BaseModel): - user_groups: list[dict[str, Any]] = Field(default_factory=list) + user_groups: list[dict[str, str]] | list[str] = Field(default_factory=list) class Limitations(BaseModel): - users: list[dict[str, Any]] = Field(default_factory=list) - user_groups: list[dict[str, Any]] = Field(default_factory=list) - network_segments: list[dict[str, Any]] = Field(default_factory=list) - ibeacons: list[dict[str, Any]] = Field(default_factory=list) + users: list[dict[str, IdName]] = Field(default_factory=list) + user_groups: list[dict[str, IdName]] = Field(default_factory=list) + network_segments: list[dict[str, IdName]] = Field(default_factory=list) + ibeacons: list[dict[str, IdName]] = Field(default_factory=list) class Exclusions(BaseModel): computers: list[Computer] - computer_groups: list[dict[str, Any]] = Field(default_factory=list) - buildings: list[dict[str, Any]] = Field(default_factory=list) - departments: list[dict[str, Any]] = Field(default_factory=list) - users: list[dict[str, Any]] = Field(default_factory=list) - user_groups: list[dict[str, Any]] = Field(default_factory=list) - network_segments: list[dict[str, Any]] = Field(default_factory=list) - ibeacons: list[dict[str, Any]] = Field(default_factory=list) + computer_groups: list[dict[str, IdName]] = Field(default_factory=list) + buildings: list[dict[str, IdName]] = Field(default_factory=list) + departments: list[dict[str, IdName]] = Field(default_factory=list) + users: list[dict[str, IdName]] = Field(default_factory=list) + user_groups: list[dict[str, IdName]] = Field(default_factory=list) + network_segments: list[dict[str, IdName]] = Field(default_factory=list) + ibeacons: list[dict[str, IdName]] = Field(default_factory=list) class Scope(BaseModel): all_computers: bool computers: list[Computer] - computer_groups: list[dict[str, Any]] = Field(default_factory=list) - buildings: list[dict[str, Any]] = Field(default_factory=list) - departments: list[dict[str, Any]] = Field(default_factory=list) + computer_groups: list[dict[str, IdName]] = Field(default_factory=list) + buildings: list[dict[str, IdName]] = Field(default_factory=list) + departments: list[dict[str, IdName]] = Field(default_factory=list) limit_to_users: LimitToUsers | None = None limitations: Limitations | None = None exclusions: Exclusions +class Category(BaseModel): + id: int | None = None + name: str | None = None + display_in: bool | None = None + feature_in: bool | None = None + + +class SelfServiceIcon(BaseModel): + id: int | None = None + filename: str | None = None + uri: str | None = None + + class SelfService(BaseModel): use_for_self_service: bool | None = None self_service_display_name: str | None = None @@ -107,13 +100,23 @@ class SelfService(BaseModel): reinstall_button_text: str | None = None self_service_description: str | None = None force_users_to_view_description: bool | None = None - self_service_icon: dict[str, Any] = Field(default_factory=dict) + self_service_icon: SelfServiceIcon = Field(default_factory=dict) feature_on_main_page: bool | None = None - self_service_categories: list[dict[str, Any]] = Field(default_factory=list) + self_service_categories: list[Category] = Field(default_factory=list) + + +class Package(BaseModel): + id: int | None = None + name: str | None = None + + +class Packages(BaseModel): + size: int | None = None + package: Package | None = None class PackageConfiguration(BaseModel): - packages: list[dict[str, Any]] = Field(default_factory=list) + packages: list[Packages] = Field(default_factory=list) distribution_point: str | None = None @@ -140,9 +143,31 @@ class OpenFirmwareEfiPassword(BaseModel): of_password_sha256: str | None = None +class DBinding(BaseModel): + id: int | None = None + name: str | None = None + + +class DBindings(BaseModel): + size: int | None = None + binding: DBinding | None = None + + +class MaintenanceAccount(BaseModel): + action: str | None = None + username: str | None = None + admin: bool | None = None + home: str | None = None + + +class MaintenanceAccounts(BaseModel): + size: int | None = None + account: MaintenanceAccount | None = None + + class AccountMaintenance(BaseModel): - accounts: list[dict[str, Any]] = Field(default_factory=list) - directory_bindings: list[dict[str, Any]] = Field(default_factory=list) + accounts: list[MaintenanceAccounts] = Field(default_factory=list) + directory_bindings: list[DBindings] = Field(default_factory=list) management_account: ManagementAccount | None = None open_firmware_efi_password: OpenFirmwareEfiPassword | None = None @@ -194,6 +219,17 @@ class DiskEncryption(BaseModel): action: str | None = None +class DockItem(BaseModel): + id: int | None = None + name: str | None = None + action: str | None = None + + +class DockItems(BaseModel): + size: int | None = None + dock_item: DockItem | None = None + + @dataclass class PolicyProperties(JAMFNodeProperties): """JAMF Policy node properties""" @@ -217,7 +253,7 @@ class Policy(BaseAsset): id: int name: str enabled: bool - trigger: Trigger | None = None + trigger: str | None = None trigger_checkin: bool | None = None trigger_enrollment_complete: bool | None = None trigger_login: bool | None = None @@ -225,7 +261,7 @@ class Policy(BaseAsset): trigger_startup: bool | None = None trigger_other: str | None = None frequency: str - retry_event: Retry | None = None + retry_event: str | None = None retry_attempts: int | None = None notify_on_each_failed_retry: bool | None = None location_user_only: bool | None = None @@ -243,7 +279,7 @@ class Policy(BaseAsset): package_configuration: PackageConfiguration | None = None scripts: list[Script] printers: list | None = Field(default_factory=list) - dock_items: list[dict[str, Any]] = Field(default_factory=list) + dock_items: list[DockItems] = Field(default_factory=list) account_maintenance: AccountMaintenance | None = None reboot: Reboot | None = None maintenance: Maintenance | None = None