Merge "Classifier to support custom IP protocol numbers"
This commit is contained in:
commit
5d0c13b845
|
@ -12,7 +12,9 @@
|
||||||
|
|
||||||
from django.core import urlresolvers
|
from django.core import urlresolvers
|
||||||
from django.forms import fields
|
from django.forms import fields
|
||||||
|
from django.forms import TextInput
|
||||||
from django.forms import widgets
|
from django.forms import widgets
|
||||||
|
from django.utils.safestring import mark_safe
|
||||||
|
|
||||||
|
|
||||||
class DynamicMultiSelectWidget(widgets.SelectMultiple):
|
class DynamicMultiSelectWidget(widgets.SelectMultiple):
|
||||||
|
@ -65,3 +67,20 @@ class DynamicMultiChoiceField(fields.MultipleChoiceField):
|
||||||
class CustomMultiChoiceField(DynamicMultiChoiceField):
|
class CustomMultiChoiceField(DynamicMultiChoiceField):
|
||||||
def validate(self, *args, **kwargs):
|
def validate(self, *args, **kwargs):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
class DropdownEditWidget(TextInput):
|
||||||
|
def __init__(self, data_list, name, *args, **kwargs):
|
||||||
|
super(DropdownEditWidget, self).__init__(*args, **kwargs)
|
||||||
|
self._name = name
|
||||||
|
self._list = data_list
|
||||||
|
self.attrs.update({'list': 'list__%s' % self._name})
|
||||||
|
|
||||||
|
def render(self, name, value, attrs=None):
|
||||||
|
text_html = super(DropdownEditWidget, self).render(
|
||||||
|
name, value, attrs=attrs)
|
||||||
|
data_list = '<datalist id="list__%s">' % self._name
|
||||||
|
for item in self._list:
|
||||||
|
data_list += '<option value="%s">' % item
|
||||||
|
data_list += '</datalist>'
|
||||||
|
return mark_safe(text_html + data_list)
|
||||||
|
|
|
@ -23,17 +23,10 @@ from horizon import messages
|
||||||
|
|
||||||
from gbpui import client
|
from gbpui import client
|
||||||
from gbpui import column_filters as gfilters
|
from gbpui import column_filters as gfilters
|
||||||
|
from gbpui import fields
|
||||||
|
|
||||||
PROTOCOLS = [('tcp', _('TCP')),
|
PROTOCOLS = ('TCP', 'UDP', 'ICMP', 'HTTP',
|
||||||
('udp', _('UDP')),
|
'HTTPS', 'SMTP', 'DNS', 'FTP', 'ANY')
|
||||||
('icmp', _('ICMP')),
|
|
||||||
('http', _('HTTP')),
|
|
||||||
('https', _('HTTPS')),
|
|
||||||
('smtp', _('SMTP')),
|
|
||||||
('dns', _('DNS')),
|
|
||||||
('ftp', _('FTP')),
|
|
||||||
('any', _('ANY'))
|
|
||||||
]
|
|
||||||
DIRECTIONS = [('in', _('IN')),
|
DIRECTIONS = [('in', _('IN')),
|
||||||
('out', _('OUT')),
|
('out', _('OUT')),
|
||||||
('bi', _('BI'))]
|
('bi', _('BI'))]
|
||||||
|
@ -195,9 +188,7 @@ class UpdatePolicyActionForm(BaseUpdateForm):
|
||||||
|
|
||||||
class AddPolicyClassifierForm(forms.SelfHandlingForm):
|
class AddPolicyClassifierForm(forms.SelfHandlingForm):
|
||||||
name = forms.CharField(max_length=80, label=_("Name"), required=False)
|
name = forms.CharField(max_length=80, label=_("Name"), required=False)
|
||||||
protocol = forms.ChoiceField(label=_("Protocol"), choices=PROTOCOLS,
|
protocol = forms.CharField(required=True)
|
||||||
widget=forms.Select(attrs={'class': 'switchable',
|
|
||||||
'data-slug': 'source'}))
|
|
||||||
port_range = forms.CharField(max_length=80, label=_("Port/Range(min:max)"),
|
port_range = forms.CharField(max_length=80, label=_("Port/Range(min:max)"),
|
||||||
required=False,
|
required=False,
|
||||||
widget=forms.TextInput(attrs={'class': 'switched',
|
widget=forms.TextInput(attrs={'class': 'switched',
|
||||||
|
@ -219,13 +210,16 @@ class AddPolicyClassifierForm(forms.SelfHandlingForm):
|
||||||
|
|
||||||
def __init__(self, request, *args, **kwargs):
|
def __init__(self, request, *args, **kwargs):
|
||||||
super(AddPolicyClassifierForm, self).__init__(request, *args, **kwargs)
|
super(AddPolicyClassifierForm, self).__init__(request, *args, **kwargs)
|
||||||
|
self.fields['protocol'].widget = fields.DropdownEditWidget(
|
||||||
|
data_list=PROTOCOLS, name='list')
|
||||||
|
|
||||||
def handle(self, request, context):
|
def handle(self, request, context):
|
||||||
url = reverse('horizon:project:application_policy:index')
|
url = reverse('horizon:project:application_policy:index')
|
||||||
try:
|
try:
|
||||||
if context.get('protocol') in PROTOCOL_MAP:
|
protocol = context.get('protocol').lower()
|
||||||
context['protocol'] = PROTOCOL_MAP[context['protocol']]
|
if protocol in PROTOCOL_MAP:
|
||||||
elif context.get('protocol') == "any":
|
context['protocol'] = PROTOCOL_MAP[protocol]
|
||||||
|
elif protocol == "any":
|
||||||
del context['protocol']
|
del context['protocol']
|
||||||
if not context.get('port_range'):
|
if not context.get('port_range'):
|
||||||
context['port_range'] = None
|
context['port_range'] = None
|
||||||
|
@ -244,7 +238,7 @@ class AddPolicyClassifierForm(forms.SelfHandlingForm):
|
||||||
class UpdatePolicyClassifierForm(BaseUpdateForm):
|
class UpdatePolicyClassifierForm(BaseUpdateForm):
|
||||||
name = forms.CharField(max_length=80, label=_("Name"), required=False)
|
name = forms.CharField(max_length=80, label=_("Name"), required=False)
|
||||||
description = forms.CharField(label=_("Description"), required=False)
|
description = forms.CharField(label=_("Description"), required=False)
|
||||||
protocol = forms.ChoiceField(label=_("Protocol"), choices=PROTOCOLS)
|
protocol = forms.CharField(required=True)
|
||||||
port_range = forms.CharField(max_length=80, label=_("Port/Range(min:max)"),
|
port_range = forms.CharField(max_length=80, label=_("Port/Range(min:max)"),
|
||||||
required=False)
|
required=False)
|
||||||
direction = forms.ChoiceField(label=_("Direction"), choices=DIRECTIONS)
|
direction = forms.ChoiceField(label=_("Direction"), choices=DIRECTIONS)
|
||||||
|
@ -253,6 +247,8 @@ class UpdatePolicyClassifierForm(BaseUpdateForm):
|
||||||
def __init__(self, request, *args, **kwargs):
|
def __init__(self, request, *args, **kwargs):
|
||||||
super(UpdatePolicyClassifierForm, self).__init__(
|
super(UpdatePolicyClassifierForm, self).__init__(
|
||||||
request, *args, **kwargs)
|
request, *args, **kwargs)
|
||||||
|
self.fields['protocol'].widget = fields.DropdownEditWidget(
|
||||||
|
data_list=PROTOCOLS, name='list')
|
||||||
try:
|
try:
|
||||||
policyclassifier_id = self.initial['policyclassifier_id']
|
policyclassifier_id = self.initial['policyclassifier_id']
|
||||||
classifier = client.policyclassifier_get(
|
classifier = client.policyclassifier_get(
|
||||||
|
@ -274,9 +270,10 @@ class UpdatePolicyClassifierForm(BaseUpdateForm):
|
||||||
url = reverse('horizon:project:application_policy:index')
|
url = reverse('horizon:project:application_policy:index')
|
||||||
try:
|
try:
|
||||||
policyclassifier_id = self.initial['policyclassifier_id']
|
policyclassifier_id = self.initial['policyclassifier_id']
|
||||||
if context.get('protocol') in PROTOCOL_MAP:
|
protocol = context.get('protocol').lower()
|
||||||
context['protocol'] = PROTOCOL_MAP[context['protocol']]
|
if protocol in PROTOCOL_MAP:
|
||||||
elif context.get('protocol') == "any":
|
context['protocol'] = PROTOCOL_MAP[protocol]
|
||||||
|
elif protocol == "any":
|
||||||
context['protocol'] = None
|
context['protocol'] = None
|
||||||
if 'port_range' in context and context['port_range'] == '':
|
if 'port_range' in context and context['port_range'] == '':
|
||||||
context['port_range'] = None
|
context['port_range'] = None
|
||||||
|
|
Loading…
Reference in New Issue