old_console/devices/models/endpoint_device.py
2024-11-02 14:12:45 +03:00

119 lines
5.6 KiB
Python

from django.core.validators import MinValueValidator, MaxValueValidator
from django.db import models
from django.utils.translation import gettext_lazy
from devices.enums import EndpointRotationType, EndpointRotationTime
from devices.models.device import Device
def _get_default_white_list():
"""Django raise a warning if this list is set as list"""
return [
'%HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SystemRoot%',
'%HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ProgramFilesDir%'
]
class EndpointModel(Device):
"""Endpoint device model"""
# White List
whitelist_enabled = models.BooleanField(gettext_lazy('Enable white list'), default=False)
whitelist_admin = models.BooleanField(gettext_lazy('Local admin ignores white list'), default=True)
white_list_paths = models.JSONField(
gettext_lazy('White List paths'),
max_length=1024,
help_text=gettext_lazy('Paths for white list'),
default=_get_default_white_list, null=True, blank=True
)
# Integrity control
integrity_control_enabled = models.BooleanField(gettext_lazy('Enable integrity control'), default=False)
integrity_control_timeout = models.IntegerField(
gettext_lazy('Event creation timeout'),
help_text=gettext_lazy('How often we can get integrity control events. Value in seconds'),
validators=[MinValueValidator(0), MaxValueValidator(60 * 60 * 24)], # 60*60*24 = 1 day
default=3
)
scan_paths = models.JSONField(
gettext_lazy('Scan paths for integrity control'),
max_length=1024,
help_text=gettext_lazy('Folder for integrity control'),
null=True, blank=True
)
# Antivirus
antivirus_enabled = models.BooleanField(
gettext_lazy('Enable antivirus'),
help_text=gettext_lazy('Detailed Antivirus control should be configured on host machine'),
default=False)
antivirus_remove_infected_files = models.BooleanField(gettext_lazy('Remove infected files'), default=False)
antivirus_paths = models.JSONField(
gettext_lazy('Antivirus paths'),
max_length=1024,
help_text=gettext_lazy('Path for scanning'),
default=list, null=True, blank=True
)
antivirus_start_scan = models.BooleanField(verbose_name=gettext_lazy('Initiate antivirus scan'), default=False)
antivirus_update_db = models.BooleanField(verbose_name=gettext_lazy("Initiate antivirus db update"), default=True)
# Access device USB, CD/DVD
device_control_enabled = models.BooleanField(gettext_lazy('Enable device control'), default=False)
prohibit_cd_access = models.BooleanField(
gettext_lazy('Prohibit CD/DVD access'),
help_text=gettext_lazy('To apply this change you need to restart host machine locally'),
default=False)
usb_control_enabled = models.BooleanField(
verbose_name=gettext_lazy('Enable USB control'),
help_text=gettext_lazy('To apply this change you need to restart host machine locally'),
default=False)
# Service data
settings_changed = models.BooleanField(
gettext_lazy('Flag to mark if Endpoint logs has been changed'),
help_text=gettext_lazy('Check if you want to upload settings to Endpoint'),
default=True,
)
incorrect_settings = models.BooleanField(
gettext_lazy('Flag to mark if config in current console has errors'),
help_text=gettext_lazy('Checked if config in console for Endpoint contains errors'),
default=False,
)
config_errors = models.JSONField(
gettext_lazy('Endpoint config errors'),
help_text=gettext_lazy('Full list of Endpoint config errors'),
null=True,
blank=True
)
request_config = models.BooleanField(
gettext_lazy('Flag to show if user wants to upload config from endpoint'),
help_text=gettext_lazy('If set to True, uploads config from endpoint, saves it'),
default=True,
)
is_requested_config_correct = models.BooleanField(
gettext_lazy('Flag to show if config, downloaded from endpoint, has correct format'),
help_text=gettext_lazy('If set to False, means that last attempt to download and set up config from Endpoint '
'has failed'),
default=True,
)
# Rotation fields
event_rotation_type = models.IntegerField(choices=EndpointRotationType.choices,
verbose_name=gettext_lazy("Event rotation type"),
help_text=gettext_lazy("Select the rotation type"),
default=1)
event_rotation_size = models.IntegerField(verbose_name=gettext_lazy("Event rotation size"),
help_text=gettext_lazy("Select the rotation size in KB"),
default=100,
validators=[MinValueValidator(100)])
event_rotation_period = models.IntegerField(choices=EndpointRotationTime.choices,
verbose_name=gettext_lazy("Event rotation period"),
help_text=gettext_lazy("Select the rotation period"),
default=1)
event_rotation_time = models.CharField(max_length=1024,
verbose_name=gettext_lazy("Event rotation time"),
help_text=gettext_lazy("Select the event rotation time"),
default='00:00:00', null=True, blank=True)