240 lines
8.5 KiB
Python
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())
|
|
|