# Copyright 2017, Juniper Networks, Inc # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. from django.urls import reverse from django.urls import reverse_lazy from django.utils.translation import ugettext_lazy as _ from horizon import exceptions from horizon import forms from horizon import tabs from horizon.utils import memoized from horizon import workflows from neutron_fwaas_dashboard.api import fwaas_v2 as api_fwaas_v2 from neutron_fwaas_dashboard.dashboards.project.firewalls_v2 \ import forms as fw_forms from neutron_fwaas_dashboard.dashboards.project.firewalls_v2 \ import tabs as fw_tabs from neutron_fwaas_dashboard.dashboards.project.firewalls_v2 \ import workflows as fw_workflows InsertRuleToPolicy = fw_forms.InsertRuleToPolicy RemoveRuleFromPolicy = fw_forms.RemoveRuleFromPolicy UpdateFirewall = fw_forms.UpdateFirewall UpdatePolicy = fw_forms.UpdatePolicy UpdateRule = fw_forms.UpdateRule AddPort = fw_forms.AddPort RemovePort = fw_forms.RemovePort FirewallGroupDetailsTabs = fw_tabs.FirewallGroupDetailsTabs FirewallGroupTabs = fw_tabs.FirewallGroupTabs PolicyDetailsTabs = fw_tabs.PolicyDetailsTabs RuleDetailsTabs = fw_tabs.RuleDetailsTabs AddFirewallGroup = fw_workflows.AddFirewallGroup AddPolicy = fw_workflows.AddPolicy AddRule = fw_workflows.AddRule class IndexView(tabs.TabbedTableView): tab_group_class = FirewallGroupTabs template_name = 'project/firewalls_v2/details_tabs.html' page_title = _("Firewall Groups") class AddRuleView(workflows.WorkflowView): workflow_class = AddRule template_name = "project/firewalls_v2/addrule.html" page_title = _("Add New Rule") class AddPolicyView(workflows.WorkflowView): workflow_class = AddPolicy template_name = "project/firewalls_v2/addpolicy.html" page_title = _("Add New Policy") class AddFirewallGroupView(workflows.WorkflowView): workflow_class = AddFirewallGroup template_name = "project/firewalls_v2/addfirewallgroup.html" page_title = _("Add New Firewall Group") class RuleDetailsView(tabs.TabView): tab_group_class = (RuleDetailsTabs) template_name = 'horizon/common/_detail.html' page_title = "{{ rule.name|default:rule.id }}" failure_url = reverse_lazy('horizon:project:firewalls_v2:index') def get_context_data(self, **kwargs): context = super(RuleDetailsView, self).get_context_data(**kwargs) rule = self.get_data() table = fw_tabs.RulesTable(self.request) breadcrumb = [ (_("Rules"), reverse_lazy('horizon:project:firewalls_v2:rules'))] context["custom_breadcrumb"] = breadcrumb context["rule"] = rule context["url"] = self.failure_url context["actions"] = table.render_row_actions(rule) return context @memoized.memoized_method def get_data(self): try: rule_id = self.kwargs['rule_id'] rule = api_fwaas_v2.rule_get(self.request, rule_id) except Exception: exceptions.handle(self.request, _('Unable to retrieve rule details.'), redirect=self.failure_url) return rule def get_tabs(self, request, *args, **kwargs): rule = self.get_data() return self.tab_group_class(request, rule=rule, **kwargs) class PolicyDetailsView(tabs.TabView): tab_group_class = (PolicyDetailsTabs) template_name = 'horizon/common/_detail.html' page_title = "{{ policy.name|default:policy.id }}" failure_url = reverse_lazy('horizon:project:firewalls_v2:index') def get_context_data(self, **kwargs): context = super(PolicyDetailsView, self).get_context_data(**kwargs) policy = self.get_data() table = fw_tabs.PoliciesTable(self.request) breadcrumb = [ (_("Policies"), reverse_lazy('horizon:project:firewalls_v2:policies'))] context["custom_breadcrumb"] = breadcrumb context["policy"] = policy context["url"] = self.failure_url context["actions"] = table.render_row_actions(policy) return context @memoized.memoized_method def get_data(self): try: policy_id = self.kwargs['policy_id'] policy = api_fwaas_v2.policy_get(self.request, policy_id) except Exception: exceptions.handle(self.request, _('Unable to retrieve policy details.'), redirect=self.failure_url) return policy def get_tabs(self, request, *args, **kwargs): policy = self.get_data() return self.tab_group_class(request, policy=policy, **kwargs) class FirewallGroupDetailsView(tabs.TabView): tab_group_class = (FirewallGroupDetailsTabs) template_name = 'horizon/common/_detail.html' page_title = "{{ firewall_group.name|default:firewall_group.id }}" failure_url = reverse_lazy('horizon:project:firewalls_v2:index') def get_context_data(self, **kwargs): context = super(FirewallGroupDetailsView, self) \ .get_context_data(**kwargs) firewall_group = self.get_data() table = fw_tabs.FirewallGroupsTable(self.request) context["firewall_group"] = firewall_group context["url"] = self.failure_url context["actions"] = table.render_row_actions(firewall_group) return context @memoized.memoized_method def get_data(self): try: firewallgroup_id = self.kwargs['firewallgroup_id'] firewall_group = api_fwaas_v2.firewall_get(self.request, firewallgroup_id) except Exception: exceptions.handle(self.request, _('Unable to retrieve firewall details.'), redirect=self.failure_url) return firewall_group def get_tabs(self, request, *args, **kwargs): firewall_group = self.get_data() return self.tab_group_class(request, firewallgroup=firewall_group, **kwargs) class UpdateRuleView(forms.ModalFormView): form_class = UpdateRule form_id = "update_rule_form" template_name = "project/firewalls_v2/updaterule.html" context_object_name = 'rule' submit_label = _("Save Changes") submit_url = "horizon:project:firewalls_v2:updaterule" success_url = reverse_lazy("horizon:project:firewalls_v2:index") page_title = _("Edit Rule {{ name }}") def get_context_data(self, **kwargs): context = super(UpdateRuleView, self).get_context_data(**kwargs) context['rule_id'] = self.kwargs['rule_id'] args = (self.kwargs['rule_id'],) context['submit_url'] = reverse(self.submit_url, args=args) obj = self._get_object() if obj: context['name'] = obj.name_or_id return context @memoized.memoized_method def _get_object(self, *args, **kwargs): rule_id = self.kwargs['rule_id'] try: rule = api_fwaas_v2.rule_get(self.request, rule_id) return rule except Exception: redirect = self.success_url msg = _('Unable to retrieve rule details.') exceptions.handle(self.request, msg, redirect=redirect) def get_initial(self): rule = self._get_object() initial = rule.to_dict() protocol = initial['protocol'] initial['protocol'] = protocol.upper() if protocol else 'ANY' initial['action'] = initial['action'].upper() return initial class UpdatePolicyView(forms.ModalFormView): form_class = UpdatePolicy form_id = "update_policy_form" template_name = "project/firewalls_v2/updatepolicy.html" context_object_name = 'policy' submit_label = _("Save Changes") submit_url = "horizon:project:firewalls_v2:updatepolicy" success_url = reverse_lazy("horizon:project:firewalls_v2:index") page_title = _("Edit Policy {{ name }}") def get_context_data(self, **kwargs): context = super(UpdatePolicyView, self).get_context_data(**kwargs) context["policy_id"] = self.kwargs['policy_id'] args = (self.kwargs['policy_id'],) context['submit_url'] = reverse(self.submit_url, args=args) obj = self._get_object() if obj: context['name'] = obj.name_or_id return context @memoized.memoized_method def _get_object(self, *args, **kwargs): policy_id = self.kwargs['policy_id'] try: policy = api_fwaas_v2.policy_get(self.request, policy_id) return policy except Exception: redirect = self.success_url msg = _('Unable to retrieve policy details.') exceptions.handle(self.request, msg, redirect=redirect) def get_initial(self): policy = self._get_object() initial = policy.to_dict() return initial class UpdateFirewallView(forms.ModalFormView): form_class = UpdateFirewall form_id = "update_firewall_form" template_name = "project/firewalls_v2/updatefirewall.html" context_object_name = 'firewall' submit_label = _("Save Changes") submit_url = "horizon:project:firewalls_v2:updatefirewall" success_url = reverse_lazy("horizon:project:firewalls_v2:index") page_title = _("Edit FirewallGroup {{ name }}") def get_context_data(self, **kwargs): context = super(UpdateFirewallView, self).get_context_data(**kwargs) context["firewall_id"] = self.kwargs['firewall_id'] args = (self.kwargs['firewall_id'],) context['submit_url'] = reverse(self.submit_url, args=args) obj = self._get_object() if obj: context['name'] = obj.name return context @memoized.memoized_method def _get_object(self, *args, **kwargs): firewall_id = self.kwargs['firewall_id'] try: firewall = api_fwaas_v2.firewall_get(self.request, firewall_id) return firewall except Exception: redirect = self.success_url msg = _('Unable to retrieve firewall details.') exceptions.handle(self.request, msg, redirect=redirect) def get_initial(self): firewall = self._get_object() initial = firewall.to_dict() return initial class AddPortView(forms.ModalFormView): form_class = AddPort form_id = "update_firewall_port_form" template_name = "project/firewalls_v2/addport.html" context_object_name = 'firewallgroup' submit_label = _("Save Changes") submit_url = "horizon:project:firewalls_v2:addport" success_url = reverse_lazy("horizon:project:firewalls_v2:index") page_title = _("Add port to FirewallGroup {{ name }}") def get_context_data(self, **kwargs): context = super(AddPortView, self).get_context_data(**kwargs) context["firewallgroup_id"] = self.kwargs['firewallgroup_id'] args = (self.kwargs['firewallgroup_id'],) context['submit_url'] = reverse(self.submit_url, args=args) obj = self._get_object() if obj: context['name'] = obj.name return context @memoized.memoized_method def _get_object(self, *args, **kwargs): firewallgroup_id = self.kwargs['firewallgroup_id'] try: firewallgroup = api_fwaas_v2.firewall_get(self.request, firewallgroup_id) return firewallgroup except Exception: redirect = self.success_url msg = _('Unable to retrieve firewallgroup details.') exceptions.handle(self.request, msg, redirect=redirect) def get_initial(self): firewallgroup = self._get_object() initial = firewallgroup.to_dict() return initial class RemovePortView(forms.ModalFormView): form_class = RemovePort form_id = "update_firewall_port_form" template_name = "project/firewalls_v2/removeport.html" context_object_name = 'firewallgroup' submit_label = _("Save Changes") submit_url = "horizon:project:firewalls_v2:removeport" success_url = reverse_lazy("horizon:project:firewalls_v2:index") page_title = _("Remove port from FirewallGroup {{ name }}") def get_context_data(self, **kwargs): context = super(RemovePortView, self).get_context_data(**kwargs) context["firewallgroup_id"] = self.kwargs['firewallgroup_id'] args = (self.kwargs['firewallgroup_id'],) context['submit_url'] = reverse(self.submit_url, args=args) obj = self._get_object() if obj: context['name'] = obj.name return context @memoized.memoized_method def _get_object(self, *args, **kwargs): firewallgroup_id = self.kwargs['firewallgroup_id'] try: firewallgroup = api_fwaas_v2.firewall_get(self.request, firewallgroup_id) return firewallgroup except Exception: redirect = self.success_url msg = _('Unable to retrieve firewallgroup details.') exceptions.handle(self.request, msg, redirect=redirect) def get_initial(self): firewallgroup = self._get_object() initial = firewallgroup.to_dict() return initial class InsertRuleToPolicyView(forms.ModalFormView): form_class = InsertRuleToPolicy form_id = "update_policy_form" template_name = "project/firewalls_v2/insert_rule_to_policy.html" context_object_name = 'policy' submit_url = "horizon:project:firewalls_v2:insertrule" submit_label = _("Save Changes") success_url = reverse_lazy("horizon:project:firewalls_v2:index") page_title = _("Insert Rule to Policy") def get_context_data(self, **kwargs): context = super(InsertRuleToPolicyView, self).get_context_data(**kwargs) context["policy_id"] = self.kwargs['policy_id'] args = (self.kwargs['policy_id'],) context['submit_url'] = reverse(self.submit_url, args=args) obj = self._get_object() if obj: context['name'] = obj.name_or_id return context @memoized.memoized_method def _get_object(self, *args, **kwargs): policy_id = self.kwargs['policy_id'] try: policy = api_fwaas_v2.policy_get(self.request, policy_id) return policy except Exception: redirect = self.success_url msg = _('Unable to retrieve policy details.') exceptions.handle(self.request, msg, redirect=redirect) def get_initial(self): policy = self._get_object() initial = policy.to_dict() initial['policy_id'] = initial['id'] return initial class RemoveRuleFromPolicyView(forms.ModalFormView): form_class = RemoveRuleFromPolicy form_id = "update_policy_form" template_name = "project/firewalls_v2/remove_rule_from_policy.html" context_object_name = 'policy' submit_label = _("Save Changes") submit_url = "horizon:project:firewalls_v2:removerule" success_url = reverse_lazy("horizon:project:firewalls_v2:index") page_title = _("Remove Rule from Policy") def get_context_data(self, **kwargs): context = super(RemoveRuleFromPolicyView, self).get_context_data(**kwargs) context["policy_id"] = self.kwargs['policy_id'] args = (self.kwargs['policy_id'],) context['submit_url'] = reverse(self.submit_url, args=args) obj = self._get_object() if obj: context['name'] = obj.name_or_id return context @memoized.memoized_method def _get_object(self, *args, **kwargs): policy_id = self.kwargs['policy_id'] try: policy = api_fwaas_v2.policy_get(self.request, policy_id) return policy except Exception: redirect = self.success_url msg = _('Unable to retrieve policy details.') exceptions.handle(self.request, msg, redirect=redirect) def get_initial(self): policy = self._get_object() initial = policy.to_dict() initial['policy_id'] = initial['id'] return initial