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

Őry Máté committed
3
from django.contrib import admin
4 5
from firewall.models import (Rule, Host, Vlan, Group, VlanGroup, Firewall,
                             Domain, Record, Blacklist)
django committed
6
from django import contrib
Őry Máté committed
7 8


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

12

13 14 15
class RecordInline(contrib.admin.TabularInline):
    model = Record

16

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

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

33

django committed
34 35
class HostInline(contrib.admin.TabularInline):
    model = Host
36
    fields = ('hostname', 'ipv4', 'ipv6', 'pub_ipv4', 'mac', 'shared_ip',
37 38
              'owner', 'reverse')

Őry Máté committed
39 40

class VlanAdmin(admin.ModelAdmin):
41
    list_display = ('vid', 'name', 'ipv4', 'net_ipv4', 'ipv6', 'net_ipv6',
42
                    'description', 'domain', 'snat_ip', )
django committed
43
    ordering = ('vid', )
x committed
44
    inlines = (RuleInline, )
Őry Máté committed
45

46

Őry Máté committed
47
class RuleAdmin(admin.ModelAdmin):
48
    list_display = ('r_type', 'color_desc', 'owner', 'extra', 'direction',
49 50
                    'accept', 'proto', 'sport', 'dport', 'nat',
                    'nat_dport', 'used_in')
51
    list_filter = ('r_type', 'vlan', 'owner', 'direction', 'accept',
52
                   'proto', 'nat')
Őry Máté committed
53

54
    def color_desc(self, instance):
Dudás Ádám committed
55
        """Returns a colorful description of the instance."""
56 57 58
        return (u'<span style="color: #FF0000;">[%(type)s]</span> '
                u'%(src)s<span style="color: #0000FF;"> ▸ </span>%(dst)s '
                u'%(para)s %(desc)s') % {
59 60 61 62 63 64
                    '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;">' +
65 66 67 68 69 70
                             (('proto=%s ' % instance.proto)
                                 if instance.proto else '') +
                             (('sport=%s ' % instance.sport)
                                 if instance.sport else '') +
                             (('dport=%s ' % instance.dport)
                                 if instance.dport else '') +
71 72
                             '</span>'),
                    'desc': instance.description}
Bach Dániel committed
73 74
    color_desc.allow_tags = True

75 76
    @staticmethod
    def vlan_l(instance):
Dudás Ádám committed
77
        """Returns instance's VLANs' names as a comma-separated list."""
78 79
        names = [vlan.name for vlan in instance.foreign_network.vlans.all()]
        return u', '.join(names)
Bach Dániel committed
80

81 82
    @staticmethod
    def used_in(instance):
Dudás Ádám committed
83
        for field in [instance.vlan, instance.vlangroup, instance.host,
84
                      instance.hostgroup, instance.firewall]:
85
            if field:
Bach Dániel committed
86 87 88
                return unicode(field) + ' ' + field._meta.object_name


89
class AliasAdmin(admin.ModelAdmin):
django committed
90
    list_display = ('alias', 'host')
91

92

Bach Dániel committed
93 94 95
class GroupAdmin(admin.ModelAdmin):
    list_display = ('name', 'owner', 'description')
    inlines = (RuleInline, )
96

97

Bach Dániel committed
98 99
class FirewallAdmin(admin.ModelAdmin):
    inlines = (RuleInline, )
100

101

102 103 104
class DomainAdmin(admin.ModelAdmin):
    list_display = ('name', 'owner')

105

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

109 110
    @staticmethod
    def address_(instance):
111
        a = instance.get_data()
112
        return a['address'] if a else None
113

114 115
    @staticmethod
    def name_(instance):
116
        a = instance.get_data()
117
        return a['name'] if a else None
118

119

Bach Dániel committed
120 121 122
class BlacklistAdmin(admin.ModelAdmin):
    list_display = ('ipv4', 'reason', 'created_at', 'modified_at')

Őry Máté committed
123 124 125
admin.site.register(Host, HostAdmin)
admin.site.register(Vlan, VlanAdmin)
admin.site.register(Rule, RuleAdmin)
Bach Dániel committed
126 127 128
admin.site.register(Group, GroupAdmin)
admin.site.register(VlanGroup)
admin.site.register(Firewall, FirewallAdmin)
129 130
admin.site.register(Domain, DomainAdmin)
admin.site.register(Record, RecordAdmin)
Bach Dániel committed
131
admin.site.register(Blacklist, BlacklistAdmin)