admin.py 4.25 KB
Newer Older
1 2
# -*- coding: utf8 -*-

Őry Máté committed
3
from django.contrib import admin
4
from firewall.models import *
django committed
5
from django import contrib
Őry Máté committed
6 7


Bach Dániel committed
8 9 10
class RuleInline(contrib.admin.TabularInline):
    model = Rule

11 12 13
class RecordInline(contrib.admin.TabularInline):
    model = Record

Őry Máté committed
14
class HostAdmin(admin.ModelAdmin):
15
    list_display = ('hostname', 'vlan', 'ipv4', 'ipv6', 'pub_ipv4', 'mac',
16
        'shared_ip', 'owner', 'description', 'reverse', 'list_groups')
django committed
17
    ordering = ('hostname', )
18 19
    list_filter = ('owner', 'vlan', 'groups')
    search_fields = ('hostname', 'description', 'ipv4', 'ipv6', 'mac')
Bach Dániel committed
20
    filter_horizontal = ('groups', )
21
    inlines = (RuleInline, RecordInline)
django committed
22

23
    @staticmethod
24
    def list_groups(instance):
Dudás Ádám committed
25
        """Returns instance's groups' names as a comma-separated list."""
26 27
        names = [group.name for group in instance.groups.all()]
        return u', '.join(names)
django committed
28 29 30

class HostInline(contrib.admin.TabularInline):
    model = Host
31 32
    fields = ('hostname', 'ipv4', 'ipv6', 'pub_ipv4', 'mac', 'shared_ip',
        'owner', 'reverse')
Őry Máté committed
33 34

class VlanAdmin(admin.ModelAdmin):
35 36
    list_display = ('vid', 'name', 'ipv4', 'net_ipv4', 'ipv6', 'net_ipv6',
        'description', 'domain', 'snat_ip', )
django committed
37
    ordering = ('vid', )
x committed
38
    inlines = (RuleInline, )
Őry Máté committed
39 40

class RuleAdmin(admin.ModelAdmin):
41 42
    list_display = ('r_type', 'color_desc', 'owner', 'extra', 'direction',
        'accept', 'proto', 'sport', 'dport', 'nat', 'nat_dport', 'used_in')
43 44
    list_filter = ('r_type', 'vlan', 'owner', 'direction', 'accept',
        'proto', 'nat')
Őry Máté committed
45

46
    def color_desc(self, instance):
Dudás Ádám committed
47
        """Returns a colorful description of the instance."""
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
        return (u'<span style="color: #FF0000;">[%(type)s]</span> '
                u'%(src)s<span style="color: #0000FF;"> ▸ </span>%(dst)s '
                u'%(para)s %(desc)s') % {
                     'type': instance.r_type,
                     'src': (instance.foreign_network.name
                         if instance.direction == '1' else instance.r_type),
                     'dst': (instance.r_type if instance.direction == '1'
                         else instance.foreign_network.name),
                     'para': (u'<span style="color: #00FF00;">' +
                             (('proto=%s ' % instance.proto)
                                 if instance.proto else '') +
                             (('sport=%s ' % instance.sport)
                                 if instance.sport else '') +
                             (('dport=%s ' % instance.dport)
                                 if instance.dport else '') +
                               '</span>'),
                     'desc': instance.description}
Bach Dániel committed
65 66
    color_desc.allow_tags = True

67 68
    @staticmethod
    def vlan_l(instance):
Dudás Ádám committed
69
        """Returns instance's VLANs' names as a comma-separated list."""
70 71
        names = [vlan.name for vlan in instance.foreign_network.vlans.all()]
        return u', '.join(names)
Bach Dániel committed
72

73 74
    @staticmethod
    def used_in(instance):
Dudás Ádám committed
75 76
        for field in [instance.vlan, instance.vlangroup, instance.host,
                instance.hostgroup, instance.firewall]:
77
            if field:
Bach Dániel committed
78 79 80
                return unicode(field) + ' ' + field._meta.object_name


81
class AliasAdmin(admin.ModelAdmin):
django committed
82
    list_display = ('alias', 'host')
83

Bach Dániel committed
84 85 86
class GroupAdmin(admin.ModelAdmin):
    list_display = ('name', 'owner', 'description')
    inlines = (RuleInline, )
87

Bach Dániel committed
88 89
class FirewallAdmin(admin.ModelAdmin):
    inlines = (RuleInline, )
90

91 92 93 94 95 96
class DomainAdmin(admin.ModelAdmin):
    list_display = ('name', 'owner')

class RecordAdmin(admin.ModelAdmin):
    list_display = ('name_', 'type', 'address_', 'ttl', 'host', 'owner')

97 98
    @staticmethod
    def address_(instance):
99
        a = instance.get_data()
100
        return a['address'] if a else None
101

102 103
    @staticmethod
    def name_(instance):
104
        a = instance.get_data()
105
        return a['name'] if a else None
106

Bach Dániel committed
107 108 109
class BlacklistAdmin(admin.ModelAdmin):
    list_display = ('ipv4', 'reason', 'created_at', 'modified_at')

Őry Máté committed
110 111 112
admin.site.register(Host, HostAdmin)
admin.site.register(Vlan, VlanAdmin)
admin.site.register(Rule, RuleAdmin)
Bach Dániel committed
113 114 115
admin.site.register(Group, GroupAdmin)
admin.site.register(VlanGroup)
admin.site.register(Firewall, FirewallAdmin)
116 117
admin.site.register(Domain, DomainAdmin)
admin.site.register(Record, RecordAdmin)
Bach Dániel committed
118
admin.site.register(Blacklist, BlacklistAdmin)
119