191 lines
6.5 KiB
Python
191 lines
6.5 KiB
Python
from django.contrib.contenttypes.models import ContentType
|
|
from django.core.urlresolvers import reverse
|
|
from django.core.exceptions import ObjectDoesNotExist, PermissionDenied
|
|
from django.forms import models as model_forms
|
|
from django.views.generic import *
|
|
from django.http import Http404
|
|
|
|
from .models import ApiUser, AccessRight, LoggingParameters, AvailabilityParameters, ResourceStatus
|
|
from .forms import ApiUserForm, AccessRightForm
|
|
from ..utils import get_trusted_services
|
|
|
|
|
|
class ResourceView(DetailView):
|
|
template_name = 'passerelle/base/view.html'
|
|
|
|
def get_object(self, queryset=None):
|
|
try:
|
|
obj = self.model.objects.get_subclass(slug=self.kwargs['slug'])
|
|
except ObjectDoesNotExist:
|
|
raise Http404
|
|
if obj.is_accessible_by(self.request):
|
|
return obj
|
|
raise PermissionDenied
|
|
|
|
def get_context_data(self, slug=None, **kwargs):
|
|
context = super(ResourceView, self).get_context_data(**kwargs)
|
|
context['site_base_uri'] = '%s://%s' % (
|
|
'https' if self.request.is_secure() else 'http',
|
|
self.request.get_host())
|
|
context['absolute_uri'] = '%s%s' % (
|
|
context['site_base_uri'],
|
|
self.request.path)
|
|
|
|
return context
|
|
|
|
|
|
class ApiUserCreateView(CreateView):
|
|
model = ApiUser
|
|
form_class = ApiUserForm
|
|
template_name = 'passerelle/manage/apiuser_form.html'
|
|
|
|
def get_success_url(self):
|
|
return reverse('apiuser-list')
|
|
|
|
|
|
class ApiUserUpdateView(UpdateView):
|
|
model = ApiUser
|
|
form_class = ApiUserForm
|
|
template_name = 'passerelle/manage/apiuser_form.html'
|
|
|
|
def get_success_url(self):
|
|
return reverse('apiuser-list')
|
|
|
|
|
|
class ApiUserDeleteView(DeleteView):
|
|
model = ApiUser
|
|
template_name = 'passerelle/manage/apiuser_confirm_delete.html'
|
|
|
|
def get_success_url(self):
|
|
return reverse('apiuser-list')
|
|
|
|
|
|
class ApiUserListView(ListView):
|
|
model = ApiUser
|
|
template_name = 'passerelle/manage/apiuser_list.html'
|
|
paginate_by = 25
|
|
|
|
def get_context_data(self, slug=None, **kwargs):
|
|
context = super(ApiUserListView, self).get_context_data(**kwargs)
|
|
context['trusted_services'] = get_trusted_services()
|
|
return context
|
|
|
|
|
|
class AccessRightDeleteView(DeleteView):
|
|
model = AccessRight
|
|
template_name = 'passerelle/manage/accessright_confirm_delete.html'
|
|
|
|
def get_object(self):
|
|
object = super(AccessRightDeleteView, self).get_object()
|
|
self.resource = object.resource
|
|
return object
|
|
|
|
def get_success_url(self):
|
|
return self.resource.get_absolute_url()
|
|
|
|
|
|
class AccessRightCreateView(CreateView):
|
|
model = AccessRight
|
|
form_class = AccessRightForm
|
|
template_name = 'passerelle/manage/accessright_form.html'
|
|
|
|
def get_initial(self):
|
|
d = self.initial.copy()
|
|
d['codename'] = self.kwargs.get('codename')
|
|
d['resource_type'] = self.kwargs.get('resource_type')
|
|
d['resource_pk'] = self.kwargs.get('resource_pk')
|
|
return d
|
|
|
|
def get_success_url(self):
|
|
return self.object.resource.get_absolute_url()
|
|
|
|
|
|
class LoggingParametersUpdateView(FormView):
|
|
template_name = 'passerelle/manage/logging_parameters_form.html'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(LoggingParametersUpdateView, self).get_context_data(**kwargs)
|
|
context['connector'] = self.get_resource()
|
|
return context
|
|
|
|
def get_form_class(self):
|
|
form_class = model_forms.modelform_factory(
|
|
LoggingParameters,
|
|
fields=['log_level', 'trace_emails'])
|
|
form_class.base_fields['trace_emails'].widget.attrs['rows'] = '3'
|
|
return form_class
|
|
|
|
def get_initial(self):
|
|
d = self.initial.copy()
|
|
d['resource_type'] = self.kwargs['resource_type']
|
|
d['resource_pk'] = self.kwargs['resource_pk']
|
|
parameters = self.get_resource().logging_parameters
|
|
d['log_level'] = parameters.log_level
|
|
d['trace_emails'] = parameters.trace_emails
|
|
return d
|
|
|
|
def get_resource(self):
|
|
content_type = ContentType.objects.get_for_id(self.kwargs['resource_type'])
|
|
return content_type.model_class().objects.get(pk=self.kwargs['resource_pk'])
|
|
|
|
def get_success_url(self):
|
|
return self.get_resource().get_absolute_url()
|
|
|
|
def form_valid(self, form):
|
|
parameters = self.get_resource().logging_parameters
|
|
parameters.log_level = form.cleaned_data['log_level']
|
|
parameters.trace_emails = form.cleaned_data['trace_emails']
|
|
parameters.save()
|
|
return super(LoggingParametersUpdateView, self).form_valid(form)
|
|
|
|
|
|
class ManageAvailabilityView(FormView):
|
|
template_name = 'passerelle/manage/manage_availability_form.html'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(ManageAvailabilityView, self).get_context_data(**kwargs)
|
|
connector = self.get_resource()
|
|
context['connector'] = connector
|
|
context['availability_status'] = connector.get_availability_status()
|
|
return context
|
|
|
|
def get_form_class(self):
|
|
form_class = model_forms.modelform_factory(
|
|
AvailabilityParameters,
|
|
fields=['run_check'])
|
|
return form_class
|
|
|
|
def get_initial(self):
|
|
d = self.initial.copy()
|
|
d['resource_type'] = self.kwargs['resource_type']
|
|
d['resource_pk'] = self.kwargs['resource_pk']
|
|
d['run_check'] = self.get_resource().availability_parameters.run_check
|
|
return d
|
|
|
|
def get_resource(self):
|
|
content_type = ContentType.objects.get_for_id(self.kwargs['resource_type'])
|
|
return content_type.model_class().objects.get(pk=self.kwargs['resource_pk'])
|
|
|
|
def get_success_url(self):
|
|
return self.get_resource().get_absolute_url()
|
|
|
|
def form_valid(self, form):
|
|
resource = self.get_resource()
|
|
parameters = resource.availability_parameters
|
|
run_check = form.cleaned_data['run_check']
|
|
|
|
if not run_check and resource.down():
|
|
resource_type = ContentType.objects.get_for_model(resource)
|
|
ResourceStatus(
|
|
resource_type=resource_type,
|
|
resource_pk=self.kwargs['resource_pk'],
|
|
status='up',
|
|
message='').save()
|
|
|
|
if parameters.run_check != run_check:
|
|
parameters.run_check = run_check
|
|
parameters.save()
|
|
resource.logger.info(u'availability checks %s', 'enabled' if run_check else 'disabled')
|
|
|
|
return super(ManageAvailabilityView, self).form_valid(form)
|