325 lines
11 KiB
Python
325 lines
11 KiB
Python
from django.utils.translation import ugettext_lazy as _
|
|
from django.shortcuts import get_object_or_404, redirect
|
|
from django.contrib import messages
|
|
from django.contrib.auth.views import redirect_to_login
|
|
from django.db.models.query import Q
|
|
from django.core.urlresolvers import reverse
|
|
|
|
from django.views.generic import (TemplateView, UpdateView,
|
|
CreateView, DeleteView)
|
|
from django_tables2 import SingleTableView
|
|
|
|
from authentic2.manager.views import AjaxFormViewMixin, \
|
|
ActionMixin, OtherActionsMixin, TitleMixin, Action
|
|
|
|
from authentic2.manager.user_views import UserEditView, UserAddView
|
|
|
|
from . import models, tables, forms
|
|
|
|
class SearchMixin(object):
|
|
search_filter = []
|
|
|
|
def get_queryset(self):
|
|
qs = super(SearchMixin, self).get_queryset()
|
|
search = self.request.GET.get('search')
|
|
if search:
|
|
filters = []
|
|
for name in self.search_filter:
|
|
filters.append(Q(**{'%s__contains' % name: search}))
|
|
filters = reduce(Q.__or__, filters)
|
|
qs = qs.filter(filters)
|
|
return qs
|
|
|
|
class AdminMixin(object):
|
|
def dispatch(self, request, *args, **kwargs):
|
|
user = request.user
|
|
if not user.is_authenticated:
|
|
return redirect_to_login(request.get_full_path())
|
|
|
|
if not user.is_superuser and (not hasattr(user, 'is_admin') or not user.is_admin):
|
|
messages.warning(request, _('You are not a super-administrator or a collectivity administrator'))
|
|
return redirect('auth_homepage')
|
|
return super(AdminMixin, self).dispatch(request, *args, **kwargs)
|
|
|
|
class SuperAdminMixin(object):
|
|
def dispatch(self, request, *args, **kwargs):
|
|
user = request.user
|
|
if not user.is_authenticated:
|
|
return redirect_to_login(request.get_full_path())
|
|
|
|
if not user.is_superuser:
|
|
messages.warning(request, _('You are not a super-administrator'))
|
|
return redirect('auth_homepage')
|
|
return super(SuperAdminMixin, self).dispatch(request, *args, **kwargs)
|
|
|
|
class HomepageView(AdminMixin, TemplateView):
|
|
template_name = 'authentic2_pratic/homepage.html'
|
|
|
|
# Services
|
|
|
|
class ServicesView(SuperAdminMixin, SingleTableView):
|
|
template_name = 'authentic2_pratic/services.html'
|
|
model = models.Service
|
|
table_class = tables.ServiceTable
|
|
|
|
class ServiceAddView(SuperAdminMixin, TitleMixin, ActionMixin, AjaxFormViewMixin, CreateView):
|
|
model = models.Service
|
|
form_class = forms.ServiceForm
|
|
title = _('Add service')
|
|
template_name = 'authentic2_pratic/form.html'
|
|
action = _('Add')
|
|
success_url = '..'
|
|
|
|
class ServiceView(SuperAdminMixin, TitleMixin, OtherActionsMixin,
|
|
AjaxFormViewMixin, UpdateView):
|
|
model = models.Service
|
|
title = _('Edit service')
|
|
template_name = 'authentic2_pratic/form.html'
|
|
form_class = forms.ServiceForm
|
|
|
|
class ServiceDeleteView(SuperAdminMixin, TitleMixin, AjaxFormViewMixin, DeleteView):
|
|
model = models.Service
|
|
template_name = 'authentic2_pratic/delete.html'
|
|
title = _('Delete service')
|
|
success_url = 'a2-pratic-services'
|
|
|
|
# Collectivities
|
|
class CollectivitiesView(SuperAdminMixin, SearchMixin, SingleTableView):
|
|
search_filter = ('name', 'slug', 'sirh_label', 'postal_code')
|
|
template_name = 'authentic2_pratic/collectivities.html'
|
|
model = models.Collectivity
|
|
table_class = tables.CollectivityTable
|
|
|
|
class CollectivityAddView(SuperAdminMixin, TitleMixin, ActionMixin, AjaxFormViewMixin, CreateView):
|
|
model = models.Collectivity
|
|
title = _('Add collectivity')
|
|
template_name = 'authentic2_pratic/form.html'
|
|
action = _('Add')
|
|
form_class = forms.CollectivityForm
|
|
success_url = '..'
|
|
|
|
class CollectivityView(SuperAdminMixin, 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(SuperAdminMixin, 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'])
|
|
user = request.user
|
|
if not user.is_authenticated:
|
|
return redirect_to_login(request.get_full_path())
|
|
|
|
if not user.is_superuser and \
|
|
(not hasattr(user, 'is_admin') or
|
|
not (user.is_admin and user.ou == self.collectivity)):
|
|
messages.warning(request, _('You are not a super-administrator or an administrator of %s') % self.collectivity)
|
|
return redirect('auth_homepage')
|
|
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, UserAddView):
|
|
model = models.User
|
|
title = _('Add agent')
|
|
action = _('Add')
|
|
form_class = forms.UserAddForm
|
|
template_name = 'authentic2_pratic/form.html'
|
|
success_url = '..'
|
|
fields = (
|
|
'uid',
|
|
'first_name',
|
|
'last_name',
|
|
'email',
|
|
'is_admin',
|
|
'direction',
|
|
'employee_type',
|
|
'postal_address',
|
|
'fax',
|
|
'mobile',
|
|
'phone',
|
|
'certificate_issuer_dn',
|
|
'certificate_subject_dn',
|
|
'certificate',
|
|
)
|
|
|
|
def get_success_url(self):
|
|
return reverse('a2-pratic-user-edit', kwargs={'collectivity_pk': self.object.collectivity.pk, 'pk': self.object.pk})
|
|
|
|
class UserView(CollectivityChildMixin, UserEditView):
|
|
model = models.User
|
|
title = _('Edit agent')
|
|
form_class = forms.UserEditForm
|
|
template_name = 'authentic2_pratic/user_edit.html'
|
|
fields = (
|
|
'uid',
|
|
'first_name',
|
|
'last_name',
|
|
'email',
|
|
'is_admin',
|
|
'direction',
|
|
'employee_type',
|
|
'postal_address',
|
|
'fax',
|
|
'mobile',
|
|
'phone',
|
|
'certificate_issuer_dn',
|
|
'certificate_subject_dn',
|
|
'certificate',
|
|
)
|
|
|
|
def get_other_actions(self):
|
|
actions = list(super(UserView, self).get_other_actions())
|
|
for action in actions:
|
|
if action.url_name == 'a2-manager-user-change-password':
|
|
action.url_name = None
|
|
action.url = reverse('a2-manager-user-change-password',
|
|
kwargs={'collectivity_pk':
|
|
self.object.collectivity.pk,
|
|
'pk': self.object.pk})
|
|
return actions
|
|
|
|
|
|
class UserDeleteView(CollectivityChildMixin, TitleMixin, AjaxFormViewMixin,
|
|
DeleteView):
|
|
model = models.User
|
|
template_name = 'authentic2_pratic/delete.html'
|
|
title = _('Delete agent')
|
|
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
|
|
success_url = '..'
|
|
|
|
|
|
class ServiceInstanceView(CollectivityChildMixin, 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 = '../..'
|
|
|
|
# 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
|
|
success_url = '..'
|
|
|
|
class AccessView(AccessMixin, CollectivityMixin, 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'
|
|
success_url = '../..'
|
|
|
|
# general views
|
|
homepage = HomepageView.as_view()
|
|
|
|
# services
|
|
services = ServicesView.as_view()
|
|
service_edit = ServiceView.as_view()
|
|
service_add = ServiceAddView.as_view()
|
|
service_delete = ServiceDeleteView.as_view()
|
|
|
|
# collectivities
|
|
collectivities = CollectivitiesView.as_view()
|
|
collectivity_edit = CollectivityView.as_view()
|
|
collectivity_add = CollectivityAddView.as_view()
|
|
collectivity_delete = CollectivityDeleteView.as_view()
|
|
|
|
# collectivity users
|
|
collectivity_users = UsersView.as_view()
|
|
user_add = UserAddView.as_view()
|
|
user_edit = UserView.as_view()
|
|
user_delete = UserDeleteView.as_view()
|
|
|
|
# service instances
|
|
collectivity_service_instances = ServiceInstancesView.as_view()
|
|
service_instance_add = ServiceInstanceAddView.as_view()
|
|
service_instance_edit = ServiceInstanceView.as_view()
|
|
service_instance_delete = ServiceInstanceDeleteView.as_view()
|
|
|
|
# accesses
|
|
collectivity_accesses = AccessesView.as_view()
|
|
access_add = AccessAddView.as_view()
|
|
access_edit = AccessView.as_view()
|
|
access_delete = AccessDeleteView.as_view()
|
|
|