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

92 lines
3.9 KiB
Python

from django.db import models
from django.utils.translation import gettext_lazy
from console.models import UniqueNameDescriptionModel, UpdatedNameDescriptionModel, SensorConnectedMixin
from core.validators import mac_address_validator
from incident.models import Incident
class OperatingSystem(UniqueNameDescriptionModel):
""" One item in operation systems list """
class Meta:
verbose_name = gettext_lazy('Operating system')
class AssetListGroup(UniqueNameDescriptionModel):
""" Asset list display group """
collapsed = models.BooleanField(default=False)
class AssetManufacturer(UniqueNameDescriptionModel):
""" Asset manufacturer """
class Meta:
verbose_name = gettext_lazy('Asset manufacturer')
class Asset(SensorConnectedMixin, UpdatedNameDescriptionModel):
""" Model for one asset """
class AllowStatus(models.IntegerChoices):
NEW = 0, gettext_lazy('New asset')
ALLOWED = 1, gettext_lazy('Allowed asset')
class AssetType(models.TextChoices):
USER = 'user', gettext_lazy('User')
ARMA = 'arma_industrial_firewall', gettext_lazy('ARMA industrial firewall')
PLC = 'plc', gettext_lazy('PLC')
PC = 'pc', gettext_lazy('PC')
SERVER = 'server', gettext_lazy('Server')
NETWORK_DEVICE = 'network_device', gettext_lazy('Network device')
manufacturer = models.ForeignKey(AssetManufacturer,
verbose_name=gettext_lazy('Manufacturer'),
on_delete=models.SET_NULL,
blank=True,
null=True)
model = models.CharField(blank=True,
null=True,
max_length=150,
verbose_name=gettext_lazy('Model'),
help_text=gettext_lazy('Asset model'))
ip = models.GenericIPAddressField(verbose_name=gettext_lazy('IP'), help_text=gettext_lazy("Asset's IP address"))
mac = models.CharField(blank=True,
null=True,
max_length=17,
verbose_name=gettext_lazy('MAC'),
help_text=gettext_lazy("Asset's MAC address"),
validators=[mac_address_validator])
os = models.ForeignKey(OperatingSystem,
on_delete=models.SET_NULL,
verbose_name=gettext_lazy('OS'),
help_text=gettext_lazy('Operation systems, found on asset'),
blank=True,
null=True)
ports = models.JSONField(verbose_name=gettext_lazy('Ports'),
help_text=gettext_lazy('List of open ports'),
null=True,
blank=True, default="[]")
incidents = models.ManyToManyField(Incident, verbose_name=gettext_lazy('Incidents'), blank=True)
group = models.ForeignKey(AssetListGroup,
on_delete=models.SET_NULL,
blank=True,
null=True,
verbose_name=gettext_lazy('Group'))
asset_type = models.CharField(choices=AssetType.choices,
max_length=128,
verbose_name=gettext_lazy('Asset type'),
blank=True,
null=True)
status = models.IntegerField(choices=AllowStatus.choices,
verbose_name=gettext_lazy('Asset status'),
help_text=gettext_lazy('Asset allow status'),
default=AllowStatus.NEW,
blank=True)
@property
def manufacturer_name(self):
return self.manufacturer.name
def __str__(self):
return self.name