IdHub/idhub/admin/views.py

517 lines
15 KiB
Python
Raw Normal View History

2023-10-20 14:50:53 +00:00
import os
2023-10-09 15:59:15 +00:00
import logging
2023-10-20 14:50:53 +00:00
from pathlib import Path
2023-10-18 15:30:11 +00:00
from smtplib import SMTPException
2023-10-09 15:59:15 +00:00
2023-10-20 14:50:53 +00:00
from django.conf import settings
2023-10-09 15:59:15 +00:00
from django.utils.translation import gettext_lazy as _
2023-10-11 07:52:05 +00:00
from django.views.generic.base import TemplateView
2023-10-13 11:37:26 +00:00
from django.views.generic.edit import UpdateView, CreateView
2023-10-11 14:23:45 +00:00
from django.contrib.auth.models import User
2023-10-13 10:35:06 +00:00
from django.shortcuts import get_object_or_404, redirect
2023-10-09 15:59:15 +00:00
from django.urls import reverse_lazy
from django.contrib import messages
2023-10-20 14:50:53 +00:00
from idhub.models import Membership, Rol, Service, UserRol, Schemas
2023-10-09 15:59:15 +00:00
from idhub.mixins import AdminView
2023-10-18 15:30:11 +00:00
from idhub.email.views import NotifyActivateUserByEmail
2023-10-17 15:42:48 +00:00
from idhub.admin.forms import (
ProfileForm,
MembershipForm,
RolForm,
ServiceForm,
UserRolForm
)
2023-10-09 15:59:15 +00:00
2023-10-11 07:52:05 +00:00
class AdminDashboardView(AdminView, TemplateView):
2023-10-17 15:42:48 +00:00
template_name = "idhub/admin/dashboard.html"
2023-10-09 15:59:15 +00:00
title = _('Dashboard')
subtitle = _('Success')
icon = 'bi bi-bell'
section = "Home"
2023-10-13 11:37:26 +00:00
class People(AdminView):
2023-10-09 15:59:15 +00:00
title = _("People Management")
section = "People"
2023-10-11 07:52:05 +00:00
class AccessControl(AdminView, TemplateView):
2023-10-09 15:59:15 +00:00
title = _("Access Control Management")
section = "AccessControl"
2023-10-11 07:52:05 +00:00
class Credentials(AdminView, TemplateView):
2023-10-09 15:59:15 +00:00
title = _("Credentials Management")
section = "Credentials"
2023-10-20 14:50:53 +00:00
class SchemasMix(AdminView, TemplateView):
title = _("Templates Management")
section = "Templates"
2023-10-09 15:59:15 +00:00
2023-10-11 07:52:05 +00:00
class ImportExport(AdminView, TemplateView):
2023-10-09 15:59:15 +00:00
title = _("Massive Data Management")
section = "ImportExport"
2023-10-13 11:37:26 +00:00
class AdminPeopleListView(People, TemplateView):
2023-10-17 15:42:48 +00:00
template_name = "idhub/admin/people.html"
2023-10-09 15:59:15 +00:00
subtitle = _('People list')
icon = 'bi bi-person'
2023-10-11 14:23:45 +00:00
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context.update({
'users': User.objects.filter(),
})
return context
2023-10-09 15:59:15 +00:00
2023-10-11 16:08:20 +00:00
2023-10-13 11:37:26 +00:00
class AdminPeopleView(People, TemplateView):
2023-10-17 15:42:48 +00:00
template_name = "idhub/admin/user.html"
2023-10-11 16:08:20 +00:00
subtitle = _('User Profile')
icon = 'bi bi-person'
model = User
def get(self, request, *args, **kwargs):
self.pk = kwargs['pk']
self.object = get_object_or_404(self.model, pk=self.pk)
return super().get(request, *args, **kwargs)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context.update({
'object': self.object,
})
return context
2023-10-13 10:35:06 +00:00
class AdminPeopleActivateView(AdminPeopleView):
def get(self, request, *args, **kwargs):
self.pk = kwargs['pk']
self.object = get_object_or_404(self.model, pk=self.pk)
2023-10-13 19:04:44 +00:00
if self.object == self.request.user:
messages.error(self.request, _('Is not possible deactivate your account!'))
return redirect('idhub:admin_people', self.object.id)
2023-10-13 10:35:06 +00:00
if self.object.is_active:
self.object.is_active = False
else:
self.object.is_active = True
self.object.save()
return redirect('idhub:admin_people', self.object.id)
class AdminPeopleDeleteView(AdminPeopleView):
def get(self, request, *args, **kwargs):
self.pk = kwargs['pk']
self.object = get_object_or_404(self.model, pk=self.pk)
2023-10-13 19:04:44 +00:00
if self.object != self.request.user:
self.object.delete()
else:
messages.error(self.request, _('Is not possible delete your account!'))
2023-10-13 10:35:06 +00:00
return redirect('idhub:admin_people_list')
2023-10-13 11:37:26 +00:00
class AdminPeopleEditView(AdminPeopleView, UpdateView):
2023-10-17 15:42:48 +00:00
template_name = "idhub/admin/user_edit.html"
2023-10-13 11:37:26 +00:00
from_class = ProfileForm
2023-10-13 19:04:44 +00:00
fields = ('first_name', 'last_name', 'email', 'username')
2023-10-13 11:37:26 +00:00
success_url = reverse_lazy('idhub:admin_people_list')
2023-10-13 10:35:06 +00:00
2023-10-13 11:37:26 +00:00
2023-10-18 15:30:11 +00:00
class AdminPeopleRegisterView(NotifyActivateUserByEmail, People, CreateView):
2023-10-17 15:42:48 +00:00
template_name = "idhub/admin/people_register.html"
2023-10-09 15:59:15 +00:00
subtitle = _('People Register')
icon = 'bi bi-person'
2023-10-13 11:37:26 +00:00
model = User
from_class = ProfileForm
2023-10-13 19:04:44 +00:00
fields = ('first_name', 'last_name', 'email', 'username')
2023-10-13 11:37:26 +00:00
success_url = reverse_lazy('idhub:admin_people_list')
2023-10-09 15:59:15 +00:00
2023-10-16 17:08:18 +00:00
def get_success_url(self):
self.success_url = reverse_lazy(
'idhub:admin_people_membership_new',
kwargs={"pk": self.object.id}
)
return self.success_url
2023-10-18 15:30:11 +00:00
def form_valid(self, form):
user = form.save()
messages.success(self.request, _('The account is created successfully'))
if user.is_active:
try:
self.send_email(user)
except SMTPException as e:
messages.error(self.request, e)
return super().form_valid(form)
2023-10-16 17:08:18 +00:00
class AdminPeopleMembershipRegisterView(People, CreateView):
2023-10-17 15:42:48 +00:00
template_name = "idhub/admin/people_membership_register.html"
2023-10-16 17:08:18 +00:00
subtitle = _('People add membership')
icon = 'bi bi-person'
model = Membership
from_class = MembershipForm
fields = ('type', 'start_date', 'end_date')
success_url = reverse_lazy('idhub:admin_people_list')
def get(self, request, *args, **kwargs):
self.pk = kwargs['pk']
self.user = get_object_or_404(User, pk=self.pk)
return super().get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
self.pk = kwargs['pk']
self.user = get_object_or_404(User, pk=self.pk)
return super().post(request, *args, **kwargs)
def get_form(self):
form = super().get_form()
form.fields['start_date'].widget.input_type = 'date'
form.fields['end_date'].widget.input_type = 'date'
return form
def get_form_kwargs(self):
self.object = self.model(user=self.user)
kwargs = super().get_form_kwargs()
return kwargs
2023-10-17 08:53:03 +00:00
def get_success_url(self):
self.success_url = reverse_lazy(
2023-10-17 15:42:48 +00:00
'idhub:admin_people_rol_new',
2023-10-17 08:53:03 +00:00
kwargs={"pk": self.user.id}
)
return self.success_url
class AdminPeopleMembershipEditView(People, CreateView):
2023-10-17 15:42:48 +00:00
template_name = "idhub/admin/people_membership_register.html"
2023-10-17 08:53:03 +00:00
subtitle = _('People add membership')
icon = 'bi bi-person'
model = Membership
from_class = MembershipForm
fields = ('type', 'start_date', 'end_date')
success_url = reverse_lazy('idhub:admin_people_list')
def get_form(self):
form = super().get_form()
form.fields['start_date'].widget.input_type = 'date'
form.fields['end_date'].widget.input_type = 'date'
return form
def get_form_kwargs(self):
pk = self.kwargs.get('pk')
if pk:
self.object = get_object_or_404(self.model, pk=pk)
kwargs = super().get_form_kwargs()
return kwargs
class AdminPeopleMembershipDeleteView(AdminPeopleView):
model = Membership
def get(self, request, *args, **kwargs):
self.pk = kwargs['pk']
self.object = get_object_or_404(self.model, pk=self.pk)
if self.object != self.request.user:
user = self.object.user
self.object.delete()
else:
messages.error(self.request, _('Is not possible delete your account!'))
return redirect('idhub:admin_people_edit', user.id)
2023-10-17 15:42:48 +00:00
class AdminPeopleRolRegisterView(People, CreateView):
template_name = "idhub/admin/people_rol_register.html"
subtitle = _('Add Rol to User')
icon = 'bi bi-person'
model = UserRol
from_class = UserRolForm
fields = ('service',)
def get(self, request, *args, **kwargs):
self.pk = kwargs['pk']
self.user = get_object_or_404(User, pk=self.pk)
return super().get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
self.pk = kwargs['pk']
self.user = get_object_or_404(User, pk=self.pk)
return super().post(request, *args, **kwargs)
def get_form_kwargs(self):
self.object = self.model(user=self.user)
kwargs = super().get_form_kwargs()
return kwargs
def get_success_url(self):
self.success_url = reverse_lazy(
'idhub:admin_people_edit',
kwargs={"pk": self.user.id}
)
return self.success_url
class AdminPeopleRolEditView(People, CreateView):
template_name = "idhub/admin/people_rol_register.html"
subtitle = _('Edit Rol to User')
icon = 'bi bi-person'
model = UserRol
from_class = UserRolForm
fields = ('service',)
def get_form_kwargs(self):
pk = self.kwargs.get('pk')
if pk:
self.object = get_object_or_404(self.model, pk=pk)
kwargs = super().get_form_kwargs()
return kwargs
def get_success_url(self):
self.success_url = reverse_lazy(
'idhub:admin_people_edit',
kwargs={"pk": self.object.user.id}
)
return self.success_url
class AdminPeopleRolDeleteView(AdminPeopleView):
model = UserRol
def get(self, request, *args, **kwargs):
self.pk = kwargs['pk']
self.object = get_object_or_404(self.model, pk=self.pk)
user = self.object.user
self.object.delete()
return redirect('idhub:admin_people_edit', user.id)
2023-10-09 15:59:15 +00:00
class AdminRolesView(AccessControl):
2023-10-17 15:42:48 +00:00
template_name = "idhub/admin/roles.html"
2023-10-09 15:59:15 +00:00
subtitle = _('Roles Management')
2023-10-09 16:12:18 +00:00
icon = ''
2023-10-09 15:59:15 +00:00
2023-10-17 11:40:34 +00:00
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context.update({
'roles': Rol.objects,
})
return context
class AdminRolRegisterView(AccessControl, CreateView):
2023-10-17 15:42:48 +00:00
template_name = "idhub/admin/rol_register.html"
2023-10-17 11:40:34 +00:00
subtitle = _('Add Rol')
2023-10-17 13:49:56 +00:00
icon = ''
2023-10-17 11:40:34 +00:00
model = Rol
from_class = RolForm
fields = ('name',)
success_url = reverse_lazy('idhub:admin_roles')
object = None
class AdminRolEditView(AccessControl, CreateView):
2023-10-17 15:42:48 +00:00
template_name = "idhub/admin/rol_register.html"
2023-10-17 13:49:56 +00:00
subtitle = _('Edit Rol')
icon = ''
2023-10-17 11:40:34 +00:00
model = Rol
from_class = RolForm
fields = ('name',)
success_url = reverse_lazy('idhub:admin_roles')
def get_form_kwargs(self):
pk = self.kwargs.get('pk')
if pk:
self.object = get_object_or_404(self.model, pk=pk)
kwargs = super().get_form_kwargs()
return kwargs
class AdminRolDeleteView(AccessControl):
model = Rol
def get(self, request, *args, **kwargs):
self.pk = kwargs['pk']
self.object = get_object_or_404(self.model, pk=self.pk)
self.object.delete()
return redirect('idhub:admin_roles')
2023-10-09 15:59:15 +00:00
class AdminServicesView(AccessControl):
2023-10-17 15:42:48 +00:00
template_name = "idhub/admin/services.html"
2023-10-09 15:59:15 +00:00
subtitle = _('Service Management')
2023-10-09 16:12:18 +00:00
icon = ''
2023-10-09 15:59:15 +00:00
2023-10-17 13:49:56 +00:00
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context.update({
'services': Service.objects,
})
return context
class AdminServiceRegisterView(AccessControl, CreateView):
2023-10-17 15:42:48 +00:00
template_name = "idhub/admin/service_register.html"
2023-10-17 13:49:56 +00:00
subtitle = _('Add Service')
icon = ''
model = Service
from_class = ServiceForm
fields = ('domain', 'description', 'rol')
success_url = reverse_lazy('idhub:admin_services')
object = None
class AdminServiceEditView(AccessControl, CreateView):
2023-10-17 15:42:48 +00:00
template_name = "idhub/admin/service_register.html"
2023-10-17 13:49:56 +00:00
subtitle = _('Edit Service')
icon = ''
model = Service
from_class = ServiceForm
fields = ('domain', 'description', 'rol')
success_url = reverse_lazy('idhub:admin_services')
def get_form_kwargs(self):
pk = self.kwargs.get('pk')
if pk:
self.object = get_object_or_404(self.model, pk=pk)
kwargs = super().get_form_kwargs()
return kwargs
class AdminServiceDeleteView(AccessControl):
model = Service
def get(self, request, *args, **kwargs):
self.pk = kwargs['pk']
self.object = get_object_or_404(self.model, pk=self.pk)
self.object.delete()
return redirect('idhub:admin_services')
2023-10-09 15:59:15 +00:00
class AdminCredentialsView(Credentials):
2023-10-17 15:42:48 +00:00
template_name = "idhub/admin/credentials.html"
2023-10-09 15:59:15 +00:00
subtitle = _('Credentials list')
2023-10-09 16:12:18 +00:00
icon = ''
2023-10-09 15:59:15 +00:00
class AdminIssueCredentialsView(Credentials):
2023-10-17 15:42:48 +00:00
template_name = "idhub/admin/issue_credentials.html"
2023-10-09 15:59:15 +00:00
subtitle = _('Issuance of Credentials')
2023-10-09 16:12:18 +00:00
icon = ''
2023-10-09 15:59:15 +00:00
class AdminRevokeCredentialsView(Credentials):
2023-10-17 15:42:48 +00:00
template_name = "idhub/admin/revoke_credentials.html"
2023-10-09 15:59:15 +00:00
subtitle = _('Revoke Credentials')
2023-10-09 16:12:18 +00:00
icon = ''
2023-10-09 15:59:15 +00:00
class AdminWalletIdentitiesView(Credentials):
2023-10-17 15:42:48 +00:00
template_name = "idhub/admin/wallet_identities.html"
2023-10-09 16:12:18 +00:00
subtitle = _('Organization Identities (DID)')
icon = 'bi bi-patch-check-fill'
2023-10-09 16:38:28 +00:00
wallet = True
2023-10-09 15:59:15 +00:00
class AdminWalletCredentialsView(Credentials):
2023-10-17 15:42:48 +00:00
template_name = "idhub/admin/wallet_credentials.html"
2023-10-09 15:59:15 +00:00
subtitle = _('Credentials')
2023-10-09 16:12:18 +00:00
icon = 'bi bi-patch-check-fill'
2023-10-09 16:38:28 +00:00
wallet = True
2023-10-09 15:59:15 +00:00
class AdminWalletConfigIssuesView(Credentials):
2023-10-17 15:42:48 +00:00
template_name = "idhub/admin/wallet_issues.html"
2023-10-09 15:59:15 +00:00
subtitle = _('Configure Issues')
2023-10-09 16:12:18 +00:00
icon = 'bi bi-patch-check-fill'
2023-10-09 16:38:28 +00:00
wallet = True
2023-10-09 15:59:15 +00:00
2023-10-20 14:50:53 +00:00
class AdminSchemasView(SchemasMix):
template_name = "idhub/admin/schemas.html"
subtitle = _('Template List')
2023-10-09 16:12:18 +00:00
icon = ''
2023-10-09 15:59:15 +00:00
2023-10-20 14:50:53 +00:00
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context.update({
'schemas': Schemas.objects,
})
return context
2023-10-09 15:59:15 +00:00
2023-10-20 14:50:53 +00:00
class AdminSchemasImportView(SchemasMix):
template_name = "idhub/admin/schemas_import.html"
subtitle = _('Import Template')
2023-10-09 16:12:18 +00:00
icon = ''
2023-10-09 15:59:15 +00:00
2023-10-20 14:50:53 +00:00
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context.update({
'schemas': self.get_schemas(),
})
return context
def get_schemas(self):
schemas_files = os.listdir(settings.SCHEMAS_DIR)
schemas = [x for x in schemas_files
if not Schemas.objects.filter(file_schema=x).exists()]
return schemas
2023-10-09 15:59:15 +00:00
2023-10-20 14:50:53 +00:00
class AdminSchemasImportAddView(SchemasMix):
def get(self, request, *args, **kwargs):
file_name = kwargs['file_schema']
schemas_files = os.listdir(settings.SCHEMAS_DIR)
if not file_name in schemas_files:
messages.error(self.request, f"The schema {file_name} not exist!")
return redirect('idhub:admin_schemas_import')
self.create_schema(file_name)
messages.success(self.request, _("The schema add successfully!"))
return redirect('idhub:admin_schemas_import')
def create_schema(self, file_name):
data = self.open_file(file_name)
schema = Schemas.objects.create(file_schema=file_name, data=data)
schema.save()
return schema
def open_file(self, file_name):
data = ''
filename = Path(settings.SCHEMAS_DIR).joinpath(file_name)
with filename.open() as schema_file:
data = schema_file.read()
return data
class AdminSchemasExportView(SchemasMix):
template_name = "idhub/admin/schemas_export.html"
subtitle = _('Export Template')
2023-10-09 16:12:18 +00:00
icon = ''
2023-10-09 15:59:15 +00:00
class AdminImportView(ImportExport):
2023-10-17 15:42:48 +00:00
template_name = "idhub/admin/import.html"
2023-10-09 15:59:15 +00:00
subtitle = _('Import')
2023-10-09 16:12:18 +00:00
icon = ''
2023-10-09 15:59:15 +00:00
class AdminExportView(ImportExport):
2023-10-17 15:42:48 +00:00
template_name = "idhub/admin/export.html"
2023-10-09 15:59:15 +00:00
subtitle = _('Export')
2023-10-09 16:12:18 +00:00
icon = ''