old_console/networkmap/serializers.py
2024-11-02 14:12:45 +03:00

147 lines
4 KiB
Python

import logging
from rest_framework import serializers
from assets.models.assets import OperatingSystem, AssetListGroup, Asset
from console.models import Connection
from networkmap.models import NetworkMap, NetworkMapBackgroundImage
class UserMapSerializer(serializers.ModelSerializer):
class Meta:
model = NetworkMap
fields = ('__all__')
class UserMapNamesSerializer(serializers.ModelSerializer):
class Meta:
model = NetworkMap
fields = ['name', 'id']
class NetworkMapBackgroundImagesSerializer(serializers.ModelSerializer):
""" Serializer that are user to provide data for network map background images """
description = serializers.SerializerMethodField()
def get_description(self, obj):
return obj.pk
class Meta:
model = NetworkMapBackgroundImage
fields = ['id', 'name', 'description', 'network_map', 'bounds', 'locked', 'visible']
class NetmapOsSerializer(serializers.ModelSerializer):
class Meta:
model = OperatingSystem
fields = ['name']
class NetmapGroupSerializer(serializers.ModelSerializer):
id = serializers.SerializerMethodField()
in_danger = serializers.IntegerField(default=0)
def get_id(self, obj):
return f'group{obj.id}'
class Meta:
model = AssetListGroup
fields = '__all__'
def to_representation(self, instance):
return dict(data=super().to_representation(instance))
class NetmapElementsSerializer(serializers.ModelSerializer):
id = serializers.SerializerMethodField()
parent = serializers.SerializerMethodField()
in_danger = serializers.SerializerMethodField()
def get_in_danger(self, obj):
if obj.incidents.count() > 0:
return 1
else:
return 0
def get_parent(self, obj):
return f'group{obj.group.id}' if obj.group else None
def get_id(self, obj):
return f'element{obj.id}'
class Meta:
model = Asset
fields = ['id', 'name', 'group', 'parent', 'in_danger', 'asset_type', 'incidents']
def to_representation(self, instance):
return dict(group='nodes', data=super().to_representation(instance))
class FinalSerializer(serializers.Serializer):
elements = NetmapElementsSerializer(many=True)
groups = NetmapGroupSerializer(many=True)
class AssetDangerSerializer(serializers.ModelSerializer):
id = serializers.SerializerMethodField()
def get_id(self, obj):
return f'element{obj.id}'
class Meta:
model = Asset
fields = ['id']
class AutoNetmapElementsSerializer(serializers.ModelSerializer):
parent = serializers.SerializerMethodField()
in_danger = serializers.SerializerMethodField()
id = serializers.SerializerMethodField()
ip = serializers.SerializerMethodField()
def get_id(self, obj):
return f'node{obj.id}'
def get_ip(self, obj):
if obj.name == obj.ip:
return ''
else:
return obj.ip
def get_in_danger(self, obj):
if obj.incidents.count() > 0:
return 1
else:
return 0
def get_parent(self, obj):
return f'group{obj.group.id}' if obj.group else None
class Meta:
model = Asset
fields = ['id', 'name', 'group', 'parent', 'in_danger', 'asset_type', 'incidents', 'ip']
def to_representation(self, instance):
return dict(group='nodes', data=super().to_representation(instance))
class AutoNetmapConnectionsSerializer(serializers.ModelSerializer):
source = serializers.SerializerMethodField()
target = serializers.SerializerMethodField()
id = serializers.SerializerMethodField()
def get_id(self, obj):
return f'edge{obj.id}'
def get_source(self, obj):
return f'node{obj.src_asset.id}'
def get_target(self, obj):
return f'node{obj.dst_asset.id}'
class Meta:
model = Connection
fields = ['source', 'target', 'id']
def to_representation(self, instance):
return dict(group='edges', data=super().to_representation(instance))