# Copyright 2014 Budapest University of Technology and Economics (BME IK)
#
# This file is part of CIRCLE Cloud.
#
# CIRCLE is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option)
# any later version.
#
# CIRCLE is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along
# with CIRCLE. If not, see .
from netaddr import EUI
from django.utils.translation import ugettext_lazy as _
from django.utils.html import format_html
from django_tables2 import Table, A
from django_tables2.columns import (LinkColumn, TemplateColumn, Column,
BooleanColumn)
from firewall.models import Host, Vlan, Domain, Group, Record, Rule, SwitchPort
class MACColumn(Column):
def render(self, value):
if isinstance(value, basestring):
try:
value = EUI(value)
except:
return value
try:
return format_html('{1}',
value.oui.registration().org, value)
except:
return value
class BlacklistItemTable(Table):
ipv4 = LinkColumn('network.blacklist', args=[A('pk')])
whitelisted = BooleanColumn()
class Meta:
model = Domain
attrs = {'class': 'table table-striped table-condensed'}
fields = ('ipv4', 'host', 'reason', 'whitelisted', 'expires_at',
'created_at')
order_by = ('-expires_at', )
class DomainTable(Table):
name = LinkColumn('network.domain', args=[A('pk')])
class Meta:
model = Domain
attrs = {'class': 'table table-striped table-condensed'}
fields = ('name', 'owner', 'ttl', )
order_by = ('name', )
class GroupTable(Table):
name = LinkColumn('network.group', args=[A('pk')])
class Meta:
model = Group
attrs = {'class': 'table table-striped table-condensed'}
fields = ('name', 'description', 'owner', )
order_by = ('name', )
class HostTable(Table):
hostname = LinkColumn(
'network.host',
args=[A('pk')],
order_by="normalized_hostname",
)
mac = MACColumn()
class Meta:
model = Host
attrs = {'class': "table table-striped table-condensed",
'id': "network-host-list-table"}
fields = ('hostname', 'vlan', 'mac', 'ipv4', 'ipv6',
'external_ipv4', 'created_at', 'owner', )
order_by = ("hostname", )
class SmallRuleTable(Table):
rule = TemplateColumn(
template_name="network/columns/host-rule.html",
attrs={"th": {"style": "display: none;"}}
)
action = TemplateColumn(
template_name="network/columns/host-rule-action.html",
attrs={
"th": {"style": "display: none;"},
"cell": {"style": "text-align: center; vertical-align: middle;"}
}
)
class Meta:
model = Rule
attrs = {'class': 'table table-striped table-bordered table-condensed',
'id': "small_rule_table"}
fields = ('rule', 'action', )
class SmallGroupRuleTable(Table):
rule = TemplateColumn(
template_name="network/columns/host-rule.html",
attrs={"th": {"style": "display: none;"}}
)
class Meta:
model = Rule
attrs = {'class': 'table table-striped table-bordered table-condensed'}
fields = ('rule', )
# inheritance by copy-paste
class SmallHostTable(Table):
hostname = LinkColumn('network.host', args=[A('pk')])
class Meta:
model = Host
attrs = {'class': 'table table-striped table-condensed'}
fields = ('hostname', 'ipv4')
order_by = ('vlan', 'hostname', )
empty_text = _("No hosts.")
class SmallDhcpTable(Table):
mac = MACColumn(verbose_name=_("MAC address"))
hostname = Column(verbose_name=_("hostname"))
ip = Column(verbose_name=_("requested IP"))
register = TemplateColumn(
template_name="network/columns/host-register.html",
attrs={"th": {"style": "display: none;"}})
class Meta:
attrs = {'class': 'table table-striped table-condensed'}
empty_text = _("No hosts.")
class RecordTable(Table):
fqdn = LinkColumn('network.record', args=[A('pk')], orderable=False)
address = TemplateColumn(
template_name="network/columns/records-address.html"
)
ttl = Column(verbose_name=_("TTL"))
class Meta:
model = Record
attrs = {'class': 'table table-striped table-condensed'}
fields = ('type', 'fqdn', 'host', 'address', 'ttl', 'host',
'owner', )
sequence = ('type', 'fqdn', )
# order_by = 'name'
class SmallRecordTable(Table):
fqdn = LinkColumn('network.record', args=[A('pk')], orderable=False)
class Meta:
model = Record
attrs = {'class': 'table table-striped table-bordered'}
fields = ('type', 'fqdn', 'host', 'address', )
sequence = ('type', 'fqdn', )
# order_by = '-type'
orderable = False
class RuleTable(Table):
r_type = LinkColumn(
'network.rule', args=[A('pk')],
verbose_name=_("type"),
orderable=False,
)
color_desc = TemplateColumn(
template_name="network/columns/rule-short-description.html",
verbose_name=_("Short description"),
orderable=False,
)
nat_external_port = Column(
verbose_name=_("NAT")
)
class Meta:
model = Rule
attrs = {'class': 'table table-striped table-hover table-condensed',
'id': "rule-list-table"}
fields = ('r_type', 'color_desc', 'extra', 'direction',
'action', 'proto', 'dport',
'nat_external_port', )
order_by = 'direction'
class SwitchPortTable(Table):
pk = LinkColumn('network.switch_port', args=[A('pk')],
verbose_name="ID")
class Meta:
model = SwitchPort
attrs = {'class': 'table table-striped table-condensed'}
fields = ('pk', 'untagged_vlan', 'tagged_vlans', 'description', )
order_by = 'pk'
class VlanTable(Table):
name = LinkColumn('network.vlan', args=[A('vid')])
class Meta:
model = Vlan
attrs = {'class': 'table table-striped table-condensed'}
fields = ('vid', 'name', 'network4', 'network6',
'domain', )
order_by = 'vid'
class VlanGroupTable(Table):
name = LinkColumn('network.vlan_group', args=[A('pk')])
vlans = TemplateColumn(template_name="network/columns/vlan-list.html")
class Meta:
model = Vlan
attrs = {'class': 'table table-striped table-condensed'}
fields = ('name', 'vlans', 'description', 'owner', )
order_by = 'name'
class HostRecordsTable(Table):
fqdn = LinkColumn(
"network.record", args=[A("pk")],
order_by=("name", ),
)
class Meta:
model = Record
attrs = {
'class': "table table-striped table-bordered",
'id': "host-detail-records-table",
}
fields = ("type", "fqdn")
order_by = ("name", )
empty_text = _("No records.")
class FirewallTable(Table):
pk = LinkColumn('network.firewall', args=[A('pk')],
verbose_name="ID")
class Meta:
model = SwitchPort
attrs = {'class': 'table table-striped'}
fields = ('pk', 'name', )
order_by = 'pk'
class FirewallRuleTable(Table):
color_desc = TemplateColumn(
template_name="network/columns/rule-short-description.html",
verbose_name=_("Short description"),
orderable=False,
)
actions = TemplateColumn(
template_name="network/columns/firewall-rule-actions.html",
verbose_name=_("Actions"),
orderable=False,
)
class Meta:
model = Rule
template = "django_tables2/table_no_page.html"
attrs = {'class': 'table table-striped table-hover table-condensed',
'id': "rule-list-table"}
fields = ('color_desc', 'extra', 'direction',
'action', 'proto', 'actions')
order_by = '-pk'
empty_text = _("No related rules found.")