147 lines
4 KiB
Python
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))
|