This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
authentic2-pratic/src/authentic2_pratic/views.py

240 lines
8.5 KiB
Python

import logging
from django.contrib.auth.decorators import login_required, user_passes_test
from django.utils.translation import ugettext_lazy as _
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404
from django.contrib import messages
from django.views.generic import (TemplateView, FormView, UpdateView,
CreateView, DeleteView, View, ListView)
from django_tables2 import SingleTableView
from authentic2.manager.views import (AjaxFormViewMixin,
ActionMixin, OtherActionsMixin, TitleMixin, Action, UserEditView)
from . import models, tables, forms
def is_pratic_admin(user):
if user.is_superuser:
return True
return getattr(user, 'is_admin', False)
pratic_admin = user_passes_test(is_pratic_admin)
class DeleteActionMixin(object):
def get_other_actions(self):
yield Action('delete',
_('Delete'),
_(u'Do you really want to delete "%s" ?') % self.object)
def action_delete(self, request, *args, **kwargs):
self.object.delete()
return HttpResponseRedirect('.')
class HomepageView(TemplateView):
template_name = 'authentic2_pratic/homepage.html'
# Services
class ServicesView(SingleTableView):
template_name = 'authentic2_pratic/services.html'
model = models.Service
table_class = tables.ServiceTable
class ServiceAddView(TitleMixin, ActionMixin, AjaxFormViewMixin, CreateView):
model = models.Service
form_class = forms.ServiceForm
title = _('Add service')
template_name = 'authentic2_pratic/form.html'
action = _('Add')
class ServiceView(DeleteActionMixin, TitleMixin, OtherActionsMixin,
AjaxFormViewMixin, UpdateView):
model = models.Service
title = _('Edit service')
template_name = 'authentic2_pratic/form.html'
form_class = forms.ServiceForm
class ServiceDeleteView(TitleMixin, AjaxFormViewMixin, DeleteView):
model = models.Service
template_name = 'authentic2_pratic/delete.html'
title = _('Delete service')
success_url = 'a2-pratic-services'
# Collectivities
class CollectivitiesView(SingleTableView):
template_name = 'authentic2_pratic/collectivities.html'
model = models.Collectivity
table_class = tables.CollectivityTable
class CollectivityAddView(TitleMixin, ActionMixin, AjaxFormViewMixin, CreateView):
model = models.Collectivity
title = _('Add collectivity')
template_name = 'authentic2_pratic/form.html'
action = _('Add')
class CollectivityView(DeleteActionMixin, TitleMixin, OtherActionsMixin,
AjaxFormViewMixin, UpdateView):
model = models.Collectivity
title = _('Edit collectivity')
template_name = 'authentic2_pratic/collectivity_edit.html'
form_class = forms.CollectivityForm
pk_url_kwarg = 'collectivity_pk'
class CollectivityDeleteView(TitleMixin, AjaxFormViewMixin, DeleteView):
model = models.Service
template_name = 'authentic2_pratic/delete.html'
title = _('Delete collectivity')
success_url = 'a2-pratic-collectivities'
pk_url_kwarg = 'collectivity_pk'
class CollectivityMixin(object):
def dispatch(self, request, *args, **kwargs):
self.collectivity = get_object_or_404(models.Collectivity,
pk=kwargs['collectivity_pk'])
return super(CollectivityMixin, self).dispatch(request, *args, **kwargs)
def get_context_data(self, **kwargs):
ctx = super(CollectivityMixin, self).get_context_data(**kwargs)
ctx['collectivity'] = self.collectivity
return ctx
class CollectivityChildMixin(CollectivityMixin):
def get_queryset(self):
qs = super(CollectivityMixin, self).get_queryset()
return qs.filter(collectivity=self.collectivity)
def get_form_kwargs(self):
kwargs = super(CollectivityMixin, self).get_form_kwargs()
if not kwargs.get('instance'):
kwargs['instance'] = self.model(collectivity=self.collectivity)
return kwargs
# users
class UsersView(CollectivityChildMixin, SingleTableView):
template_name = 'authentic2_pratic/users.html'
model = models.User
table_class = tables.UserTable
class UserAddView(CollectivityChildMixin, TitleMixin, ActionMixin,
AjaxFormViewMixin, CreateView):
model = models.User
title = _('Add user')
template_name = 'authentic2_pratic/form.html'
action = _('Add')
form_class = forms.UserForm
class UserView(CollectivityChildMixin, UserEditView):
model = models.User
title = _('Edit user')
template_name = 'authentic2_pratic/form.html'
form_class = forms.UserForm
class UserDeleteView(CollectivityChildMixin, TitleMixin, AjaxFormViewMixin,
DeleteView):
model = models.Service
template_name = 'authentic2_pratic/delete.html'
title = _('Delete user')
success_url = 'a2-pratic-users'
# service instances
class ServiceInstancesView(CollectivityChildMixin, SingleTableView):
template_name = 'authentic2_pratic/service_instances.html'
model = models.ServiceInstance
table_class = tables.ServiceInstanceTable
class ServiceInstanceAddView(CollectivityChildMixin, TitleMixin, ActionMixin,
AjaxFormViewMixin, CreateView):
model = models.ServiceInstance
title = _('Add service instance')
template_name = 'authentic2_pratic/form.html'
action = _('Add')
form_class = forms.ServiceInstanceForm
class ServiceInstanceView(CollectivityChildMixin, DeleteActionMixin, TitleMixin,
OtherActionsMixin, AjaxFormViewMixin, UpdateView):
model = models.ServiceInstance
title = _('Edit service instance')
template_name = 'authentic2_pratic/form.html'
form_class = forms.ServiceInstanceForm
class ServiceInstanceDeleteView(CollectivityChildMixin, TitleMixin,
AjaxFormViewMixin, DeleteView):
model = models.ServiceInstance
template_name = 'authentic2_pratic/delete.html'
title = _('Delete service instance')
success_url = 'a2-pratic-users'
# accesses
class AccessMixin(object):
def get_queryset(self):
qs = self.model.objects.all()
return qs.filter(user__collectivity=self.collectivity,
service_instance__collectivity=self.collectivity)
def get_form_kwargs(self):
kwargs = super(CollectivityMixin, self).get_form_kwargs()
kwargs['collectivity'] = self.collectivity
return kwargs
class AccessesView(AccessMixin, CollectivityMixin, SingleTableView):
template_name = 'authentic2_pratic/accesses.html'
model = models.Access
table_class = tables.AccessTable
class AccessAddView(AccessMixin, CollectivityMixin, TitleMixin, ActionMixin,
AjaxFormViewMixin, CreateView):
model = models.Access
title = _('Add service instance')
template_name = 'authentic2_pratic/form.html'
action = _('Add')
form_class = forms.AccessForm
class AccessView(AccessMixin, CollectivityMixin, DeleteActionMixin, TitleMixin,
OtherActionsMixin, AjaxFormViewMixin, UpdateView):
model = models.Access
title = _('Edit service instance')
template_name = 'authentic2_pratic/form.html'
form_class = forms.AccessForm
class AccessDeleteView(AccessMixin, CollectivityMixin, TitleMixin,
AjaxFormViewMixin, DeleteView):
model = models.Access
template_name = 'authentic2_pratic/delete.html'
title = _('Delete service instance')
success_url = 'a2-pratic-users'
# general views
homepage = pratic_admin(HomepageView.as_view())
# services
services = pratic_admin(ServicesView.as_view())
service_edit = pratic_admin(ServiceView.as_view())
service_add = pratic_admin(ServiceAddView.as_view())
service_delete = pratic_admin(ServiceDeleteView.as_view())
# collectivities
collectivities = pratic_admin(CollectivitiesView.as_view())
collectivity_edit = pratic_admin(CollectivityView.as_view())
collectivity_add = pratic_admin(CollectivityAddView.as_view())
collectivity_delete = pratic_admin(CollectivityDeleteView.as_view())
# collectivity users
collectivity_users = pratic_admin(UsersView.as_view())
user_add = pratic_admin(UserAddView.as_view())
user_edit = pratic_admin(UserView.as_view())
user_delete = pratic_admin(UserDeleteView.as_view())
# service instances
collectivity_service_instances = pratic_admin(ServiceInstancesView.as_view())
service_instance_add = pratic_admin(ServiceInstanceAddView.as_view())
service_instance_edit = pratic_admin(ServiceInstanceView.as_view())
service_instance_delete = pratic_admin(ServiceInstanceDeleteView.as_view())
# accesses
collectivity_accesses = pratic_admin(AccessesView.as_view())
access_add = pratic_admin(AccessAddView.as_view())
access_edit = pratic_admin(AccessView.as_view())
access_delete = pratic_admin(AccessDeleteView.as_view())