69 lines
3.7 KiB
Python
69 lines
3.7 KiB
Python
from django.core.validators import RegexValidator
|
|
from django.utils.translation import gettext_lazy
|
|
|
|
from django.db import models
|
|
from core.fields import IntegerField
|
|
from core.validators import domain_or_ip_validator
|
|
from incident_export.enums import ReceiverType, SeverityLevel, SysLogSendProtocol
|
|
|
|
|
|
class Receiver(models.Model):
|
|
""" Model for storing export receiver """
|
|
|
|
type = models.CharField(max_length=64,
|
|
choices=ReceiverType.choices,
|
|
verbose_name=gettext_lazy("Type"),
|
|
help_text=gettext_lazy("Type of receiver"),
|
|
default=ReceiverType.SYSLOG)
|
|
cef_format = models.BooleanField(default=True,
|
|
verbose_name=gettext_lazy("CEF formatting"),
|
|
help_text=gettext_lazy("Format using CEF standard"))
|
|
message_filter = models.CharField(max_length=255,
|
|
validators=[RegexValidator],
|
|
verbose_name=gettext_lazy("Message filter"),
|
|
blank=True,
|
|
help_text=gettext_lazy("Regular expression for message filtering"))
|
|
message_min_severity = models.IntegerField(verbose_name=gettext_lazy("Message minimum severity level"),
|
|
choices=SeverityLevel.choices,
|
|
default=SeverityLevel.MINIMAL,
|
|
help_text=gettext_lazy("Minimum event severity level to send"))
|
|
export_status = models.BooleanField(verbose_name=gettext_lazy("Event receiver export status. Could be on or off"),
|
|
default=True,
|
|
help_text=gettext_lazy("Set the event receiver status - on or off"))
|
|
|
|
|
|
class SyslogReceiver(models.Model):
|
|
""" Model for receiver if type = SYSLOG """
|
|
|
|
receiver = models.OneToOneField(Receiver, on_delete=models.CASCADE)
|
|
protocol = models.CharField(max_length=32,
|
|
choices=SysLogSendProtocol.choices,
|
|
verbose_name=gettext_lazy("Send protocol"),
|
|
help_text=gettext_lazy("Select send protocol"))
|
|
host = models.CharField(verbose_name=gettext_lazy("Recipient's IP address"),
|
|
max_length=100,
|
|
help_text=gettext_lazy("Enter the recipient's IP address"),
|
|
validators=[domain_or_ip_validator])
|
|
port = IntegerField(min_value=0,
|
|
max_value=65535,
|
|
verbose_name=gettext_lazy("Destination port"),
|
|
help_text=gettext_lazy("Enter destination port"))
|
|
|
|
|
|
class OpcuaReceiver(models.Model):
|
|
""" Model for receiver if type = OPCUA """
|
|
|
|
receiver = models.OneToOneField(Receiver, on_delete=models.CASCADE)
|
|
host = models.CharField(verbose_name=gettext_lazy("Recipient's IP address"),
|
|
max_length=100,
|
|
help_text=gettext_lazy("Enter the recipient's IP address"),
|
|
validators=[domain_or_ip_validator])
|
|
port = IntegerField(min_value=0,
|
|
max_value=65535,
|
|
verbose_name=gettext_lazy("Destination port"),
|
|
help_text=gettext_lazy("Enter destination port"))
|
|
# TODO Examine how to handle node number, as it can vary on different servers
|
|
node_number = IntegerField(min_value=1,
|
|
max_value=254,
|
|
verbose_name=gettext_lazy("OPC UA node number"),
|
|
help_text=gettext_lazy("Enter OPC UA node number"))
|