Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
124 changes: 80 additions & 44 deletions src/openhound_jamf/models/policy.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand All @@ -43,15 +24,14 @@ 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
Comment thread
d3vzer0 marked this conversation as resolved.


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):
Expand All @@ -68,52 +48,75 @@ 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)
Comment thread
d3vzer0 marked this conversation as resolved.


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
install_button_text: str | None = None
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)
Comment thread
d3vzer0 marked this conversation as resolved.
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


Expand All @@ -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

Expand Down Expand Up @@ -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"""
Expand All @@ -217,15 +253,15 @@ 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
trigger_network_state_changed: bool | None = None
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
Expand All @@ -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
Expand Down