48 lines
1.7 KiB
Python
48 lines
1.7 KiB
Python
import logging
|
|
|
|
from rest_framework import serializers
|
|
from rest_framework.exceptions import ValidationError
|
|
|
|
from core.validators import ValidateFileExtension
|
|
from devices.fields import DeviceGroupRelatedField
|
|
from devices.models.device import DeviceGroup
|
|
from devices.models.sensor import ArmaSensor
|
|
from devices.services.sensor.service import SensorService
|
|
|
|
_log = logging.getLogger(__name__)
|
|
|
|
|
|
class CreateSensorSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ArmaSensor
|
|
fields = ['name', 'ip', 'port']
|
|
|
|
|
|
class SensorSerializer(serializers.ModelSerializer):
|
|
group = DeviceGroupRelatedField(queryset=DeviceGroup.objects.all(), default=None, allow_null=True)
|
|
status = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = ArmaSensor
|
|
fields = '__all__'
|
|
|
|
def get_status(self, endpoint: ArmaSensor) -> dict:
|
|
return SensorService(endpoint).get_status()
|
|
|
|
def validate_span_interface(self, span_interface):
|
|
actually_interfaces = SensorService(sensor=self.instance).get_interfaces()
|
|
interfaces_names = [interface['interface'] for interface in actually_interfaces['data']]
|
|
|
|
if span_interface in interfaces_names:
|
|
return span_interface
|
|
raise ValidationError('select actually span interface')
|
|
|
|
|
|
class ZeekProtocolsDisableSerializer(serializers.Serializer):
|
|
"""Serializer validate upload protocol list."""
|
|
disable_protocols = serializers.ListField(child=serializers.CharField(), default=[])
|
|
|
|
|
|
class ZeekSettingsUpdateSerializer(serializers.Serializer):
|
|
"""Serializer validate upload local.zeek file."""
|
|
file = serializers.FileField(validators=[ValidateFileExtension(allowed_extensions=[".zeek"])])
|