Fixing policy classifier creation failure with http, https, ftp, smtp & dns
Change-Id: I43ee0a01edfeb519e7c3750a18ade2bf324281f9 Closes-Bug:1479446
This commit is contained in:
parent
2aaacff27d
commit
d93078787d
|
@ -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
|
||||
|
|
|
@ -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'])
|
||||
|
|
|
@ -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.'),
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
});
|
||||
});
|
Loading…
Reference in New Issue