Fixing policy classifier creation failure with http, https, ftp, smtp & dns

Change-Id: I43ee0a01edfeb519e7c3750a18ade2bf324281f9
Closes-Bug:1479446
This commit is contained in:
sriharshabarkuru 2015-08-14 18:03:48 +05:30 committed by ank
parent 2aaacff27d
commit d93078787d
6 changed files with 54 additions and 5 deletions

View File

@ -194,3 +194,19 @@ def update_sc_instance_attributes(request, scinstance):
atag = "<a href='%s'>%s</a>" % (u, sc.name)
setattr(scinstance, 'servicechain_spec', mark_safe(atag))
return scinstance
def update_classifier_attributes(classifiers):
port_protocol_map = {'21': 'ftp', '25': 'smtp', '53': 'dns',
'80': 'http', '443': 'https'}
if type(classifiers) == list:
for classifier in classifiers:
classifier.set_id_as_name_if_empty()
if classifier.protocol in ['tcp', 'udp'] and classifier.port_range \
in port_protocol_map:
classifier.protocol = port_protocol_map[classifier.port_range]
else:
if classifiers.protocol in ['tcp', 'udp'] and classifiers.port_range \
in port_protocol_map:
classifiers.protocol = port_protocol_map[classifiers.port_range]
return classifiers

View File

@ -22,6 +22,7 @@ from horizon import forms
from horizon import messages
from gbpui import client
from gbpui import column_filters as gfilters
PROTOCOLS = [('tcp', _('TCP')),
('udp', _('UDP')),
@ -41,6 +42,12 @@ POLICY_ACTION_TYPES = [('allow', _('ALLOW')),
('copy', _('COPY')),
('log', _('LOG')),
('qos', _('QoS'))]
PROTOCOL_MAP = {'http': 'tcp',
'https': 'tcp',
'smtp': 'tcp',
'ftp': 'tcp',
'dns': 'udp'
}
class BaseUpdateForm(forms.SelfHandlingForm):
@ -216,6 +223,8 @@ class AddPolicyClassifierForm(forms.SelfHandlingForm):
def handle(self, request, context):
url = reverse('horizon:project:application_policy:index')
try:
if context.get('protocol') in PROTOCOL_MAP:
context['protocol'] = PROTOCOL_MAP[context['protocol']]
if not context.get('port_range'):
context['port_range'] = None
if context.get('name'):
@ -246,6 +255,7 @@ class UpdatePolicyClassifierForm(BaseUpdateForm):
policyclassifier_id = self.initial['policyclassifier_id']
classifier = client.policyclassifier_get(
request, policyclassifier_id)
classifier = gfilters.update_classifier_attributes(classifier)
for item in ['name', 'description',
'protocol', 'port_range', 'direction', 'shared']:
self.fields[item].initial = getattr(classifier, item)
@ -257,7 +267,9 @@ class UpdatePolicyClassifierForm(BaseUpdateForm):
url = reverse('horizon:project:application_policy:index')
try:
policyclassifier_id = self.initial['policyclassifier_id']
if not context.get('port_range'):
if context.get('protocol') in PROTOCOL_MAP:
context['protocol'] = PROTOCOL_MAP[context['protocol']]
if 'port_range' in context and context['port_range'] == '':
context['port_range'] = None
if context.get('name'):
context['name'] = html.escape(context['name'])

View File

@ -59,10 +59,8 @@ class PolicyClassifiersTab(tabs.TableTab):
classifiers = []
exceptions.handle(self.tab_group.request,
_('Unable to retrieve classifier list.'))
for classifier in classifiers:
classifier.set_id_as_name_if_empty()
else:
classifiers = gfilters.update_classifier_attributes(classifiers)
return classifiers
@ -223,6 +221,8 @@ class PolicyClassifierDetailsTab(tabs.Tab):
pcid = self.tab_group.kwargs['policyclassifier_id']
try:
policyclassifier = client.policyclassifier_get(request, pcid)
policyclassifier = gfilters.update_classifier_attributes(
policyclassifier)
except Exception:
exceptions.handle(request,
_('Unable to retrieve policy_rule_set details.'),

View File

@ -23,3 +23,8 @@
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Create Policy Classifier" %}" />
<a href="{% url "horizon:project:application_policy:index" %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %}
{% block modal-js %}
<script src='/static/dashboard/js/horizon.protocolmap.js' type="text/javascript"></script>
{% endblock %}

View File

@ -23,3 +23,7 @@
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Update Policy Classifier" %}" />
<a href="{% url "horizon:project:application_policy:index" %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %}
{% block modal-js %}
<script src='/static/dashboard/js/horizon.protocolmap.js' type="text/javascript"></script>
{% endblock %}

View File

@ -0,0 +1,12 @@
$(function(){
protocol_port_map = {'HTTP':80,'HTTPS':443,'SMTP':25,'DNS':53,'FTP':21 };
$('#id_protocol').on('change',function(){
if(protocol_port_map[$('#id_protocol>option:selected').text()] != undefined){
port = protocol_port_map[$('#id_protocol>option:selected').text()]
$('#id_port_range').val(port).attr('readonly', true)
}
else{
$('#id_port_range').val('').attr('readonly', false);
}
});
});