|
@@ -3,22 +3,32 @@ from StringIO import StringIO
|
|
|
from zipfile import ZipFile, ZIP_DEFLATED
|
|
|
|
|
|
# Django imports.
|
|
|
from django.contrib.auth.decorators import permission_required
|
|
|
from django.http import HttpResponse
|
|
|
from django.shortcuts import render_to_response, get_object_or_404
|
|
|
from django.views.generic import TemplateView, DetailView
|
|
|
|
|
|
# Third-party application imports.
|
|
|
from braces.views import MultiplePermissionsRequiredMixin
|
|
|
|
|
|
# Application imports.
|
|
|
from .models import Project, Entity, Location
|
|
|
from .utils import generate_entity_iptables
|
|
|
|
|
|
|
|
|
class IndexView(TemplateView):
|
|
|
class IndexView(MultiplePermissionsRequiredMixin, TemplateView):
|
|
|
"""
|
|
|
Custom view used for rendering the index page.
|
|
|
"""
|
|
|
|
|
|
template_name = 'conntrackt/index.html'
|
|
|
|
|
|
# Required permissions.
|
|
|
permissions = {
|
|
|
"all": ("conntrackt.view_project", "conntrackt.view_location",),
|
|
|
}
|
|
|
# Raise authorisation denied exception for unmet permissions.
|
|
|
raise_exception = True
|
|
|
|
|
|
def get_context_data(self, **kwargs):
|
|
|
"""
|
|
|
Returns the context data that should be used for rendering of the
|
|
@@ -31,18 +41,26 @@ class IndexView(TemplateView):
|
|
|
# Set the context using the parent class.
|
|
|
context = super(IndexView, self).get_context_data(**kwargs)
|
|
|
|
|
|
context['projects'] = Project.objects.all().order_by('name')
|
|
|
# Store information about all projcts in context. Optimise database
|
|
|
# access for the view.
|
|
|
context['projects'] = Project.objects.all().prefetch_related('entity_set').order_by('name')
|
|
|
|
|
|
return context
|
|
|
|
|
|
|
|
|
class ProjectView(DetailView):
|
|
|
class ProjectView(MultiplePermissionsRequiredMixin, DetailView):
|
|
|
"""
|
|
|
Custom view for presenting the project information.
|
|
|
"""
|
|
|
|
|
|
model = Project
|
|
|
|
|
|
permissions = {
|
|
|
"all": ("conntrackt.view_project", "conntrackt.view_location",)
|
|
|
}
|
|
|
# Raise authorisation denied exception for unmet permissions.
|
|
|
raise_exception = True
|
|
|
|
|
|
def get_context_data(self, **kwargs):
|
|
|
"""
|
|
|
Returns the context data that should be used for rendering of the
|
|
@@ -73,11 +91,24 @@ class ProjectView(DetailView):
|
|
|
return context
|
|
|
|
|
|
|
|
|
class EntityView(DetailView):
|
|
|
class EntityView(MultiplePermissionsRequiredMixin, DetailView):
|
|
|
"""
|
|
|
Custom view for presenting entity information.
|
|
|
"""
|
|
|
model = Entity
|
|
|
|
|
|
# Optimise the query to fetch the related data from reverse relationships.
|
|
|
queryset = Entity.objects.all()
|
|
|
queryset = queryset.prefetch_related('interface_set__destination_set__source__entity')
|
|
|
queryset = queryset.prefetch_related('interface_set__destination_set__destination__entity')
|
|
|
queryset = queryset.prefetch_related('interface_set__source_set__source__entity')
|
|
|
queryset = queryset.prefetch_related('interface_set__source_set__destination__entity')
|
|
|
|
|
|
# Required permissions.
|
|
|
permissions = {
|
|
|
"all": ("conntrackt.view_entity",)
|
|
|
}
|
|
|
# Raise authorisation denied exception for unmet permissions.
|
|
|
raise_exception = True
|
|
|
|
|
|
def get_context_data(self, **kwargs):
|
|
|
"""
|
|
@@ -97,6 +128,7 @@ class EntityView(DetailView):
|
|
|
return context
|
|
|
|
|
|
|
|
|
@permission_required("conntrackt.view_entity", raise_exception = True)
|
|
|
def entity_iptables(request, pk):
|
|
|
"""
|
|
|
Custom view that returns response containing iptables rules generated for an
|
|
@@ -129,6 +161,7 @@ def entity_iptables(request, pk):
|
|
|
return response
|
|
|
|
|
|
|
|
|
@permission_required("conntrackt.view_entity", raise_exception = True)
|
|
|
def project_iptables(request, project_id, location_id=None):
|
|
|
"""
|
|
|
Custom view for obtaining iptables for all entities of a project or project
|