From 7cb7ff345e02ec267da8f5565ed51beb729bf318 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Tue, 18 Dec 2018 12:27:33 +0100 Subject: [PATCH 2/3] manager: add roles export (fixes #29162) --- src/authentic2/manager/role_views.py | 17 ++++++++++++++++- src/authentic2/manager/urls.py | 2 +- src/authentic2/manager/views.py | 3 +++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/authentic2/manager/role_views.py b/src/authentic2/manager/role_views.py index 00996213..44c9f8e8 100644 --- a/src/authentic2/manager/role_views.py +++ b/src/authentic2/manager/role_views.py @@ -1,3 +1,5 @@ +import json + from django.core.exceptions import PermissionDenied from django.utils.translation import ugettext_lazy as _ from django.views.generic import ListView, FormView, TemplateView @@ -15,7 +17,7 @@ from django_rbac.utils import get_role_model, get_permission_model, \ get_role_parenting_model, get_ou_model from authentic2.utils import redirect -from authentic2 import hooks +from authentic2 import hooks, data_transfer from . import tables, views, resources, forms, app_settings @@ -51,6 +53,7 @@ class RolesView(views.HideOUColumnMixin, RolesMixin, views.BaseTableView): search_form_class = forms.RoleSearchForm permissions = ['a2_rbac.search_role'] title = _('Roles') + formats = ['csv', 'json'] def get_queryset(self): qs = super(RolesView, self).get_queryset() @@ -92,6 +95,18 @@ add = RoleAddView.as_view() class RolesExportView(views.ExportMixin, RolesView): resource_class = resources.RoleResource + def get(self, request, *args, **kwargs): + export_format = kwargs['format'].lower() + if export_format == 'json': + export = data_transfer.export_site( + data_transfer.ExportContext( + role_qs=self.get_table_data(), + export_roles=True, + export_ous=False)) + return self.export_response(json.dumps(export), 'application/json', 'json') + return super(RolesExportView, self).get(request, *args, **kwargs) + + export = RolesExportView.as_view() diff --git a/src/authentic2/manager/urls.py b/src/authentic2/manager/urls.py index 6149bc88..0c1df367 100644 --- a/src/authentic2/manager/urls.py +++ b/src/authentic2/manager/urls.py @@ -60,7 +60,7 @@ urlpatterns = required( name='a2-manager-roles'), url(r'^roles/add/$', role_views.add, name='a2-manager-role-add'), - url(r'^roles/export/(?Pcsv)/$', + url(r'^roles/export/(?Pcsv|json)/$', role_views.export, name='a2-manager-roles-export'), url(r'^roles/(?P\d+)/$', role_views.members, name='a2-manager-role-members'), diff --git a/src/authentic2/manager/views.py b/src/authentic2/manager/views.py index 56ef47d9..59567aa9 100644 --- a/src/authentic2/manager/views.py +++ b/src/authentic2/manager/views.py @@ -363,6 +363,9 @@ class ExportMixin(object): raise Http404('unknown format') content = getattr(self.get_dataset(), export_format) content_type = content_types[export_format] + return self.export_response(content, content_type, export_format) + + def export_response(self, content, content_type, export_format): response = HttpResponse(content, content_type=content_type) filename = '%s%s.%s' % (self.get_export_prefix(), now().isoformat(), export_format) -- 2.18.0