diff --git a/idhub/admin/forms.py b/idhub/admin/forms.py
index 83c167c..8ff83b5 100644
--- a/idhub/admin/forms.py
+++ b/idhub/admin/forms.py
@@ -1,15 +1,18 @@
import csv
import json
-import copy
import pandas as pd
from jsonschema import validate
from django import forms
+from django.utils.translation import gettext_lazy as _
from django.core.exceptions import ValidationError
from idhub.models import (
DID,
- File_datas,
+ File_datas,
+ Membership,
Schemas,
+ Service,
+ UserRol,
VerificableCredential,
)
from idhub_auth.models import User
@@ -104,14 +107,14 @@ class ImportForm(forms.Form):
user = User.objects.filter(email=row.get('email'))
if not user:
- txt = _('The user not exist!')
+ txt = _('The user does not exist!')
msg = "line {}: {}".format(line+1, txt)
self.exception(msg)
return user.first()
def create_credential(self, user, row):
- d = copy.copy(self.json_schema)
+ d = self.json_schema.copy()
d['instance'] = row
return VerificableCredential(
verified=False,
@@ -126,3 +129,65 @@ class ImportForm(forms.Form):
class SchemaForm(forms.Form):
file_template = forms.FileField()
+
+
+class MembershipForm(forms.ModelForm):
+
+ class Meta:
+ model = Membership
+ fields = ['type', 'start_date', 'end_date']
+
+ def clean_end_date(self):
+ data = super().clean()
+ start_date = data['start_date']
+ end_date = data.get('end_date')
+ members = Membership.objects.filter(
+ type=data['type'],
+ user=self.instance.user
+ )
+ if self.instance.id:
+ members = members.exclude(id=self.instance.id)
+
+ if (start_date and end_date):
+ if start_date > end_date:
+ msg = _("The end date is less than the start date")
+ raise forms.ValidationError(msg)
+
+ members = members.filter(
+ start_date__lte=end_date,
+ end_date__gte=start_date,
+ )
+
+ if members.exists():
+ msg = _("This membership already exists!")
+ raise forms.ValidationError(msg)
+
+ return end_date
+
+
+class UserRolForm(forms.ModelForm):
+
+ class Meta:
+ model = UserRol
+ fields = ['service']
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ if not self.instance.id:
+ user = self.instance.user
+ choices = self.fields['service'].choices
+ choices.queryset = choices.queryset.exclude(users__user=user)
+ self.fields['service'].choices = choices
+
+ def clean_service(self):
+ data = super().clean()
+ service = UserRol.objects.filter(
+ service=data['service'],
+ user=self.instance.user
+ )
+
+ if service.exists():
+ msg = _("Is not possible to have a duplicate role")
+ raise forms.ValidationError(msg)
+
+ return data['service']
diff --git a/idhub/admin/views.py b/idhub/admin/views.py
index 0492f5d..9b40faa 100644
--- a/idhub/admin/views.py
+++ b/idhub/admin/views.py
@@ -1,6 +1,5 @@
import os
import json
-import copy
import logging
import pandas as pd
from pathlib import Path
@@ -23,11 +22,18 @@ from django.contrib import messages
from utils.apiregiter import iota
from utils import credtools
from idhub_auth.models import User
+from idhub_auth.forms import ProfileForm
from idhub.mixins import AdminView
from idhub.email.views import NotifyActivateUserByEmail
-from idhub.admin.forms import ImportForm, SchemaForm
+from idhub.admin.forms import (
+ ImportForm,
+ MembershipForm,
+ SchemaForm,
+ UserRolForm,
+)
from idhub.models import (
DID,
+ Event,
File_datas,
Membership,
Rol,
@@ -45,34 +51,41 @@ class DashboardView(AdminView, TemplateView):
icon = 'bi bi-bell'
section = "Home"
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+ context.update({
+ 'events': Event.objects.filter(user=None),
+ })
+ return context
+
class People(AdminView):
- title = _("People Management")
+ title = _("User Management")
section = "People"
class AccessControl(AdminView, TemplateView):
- title = _("Access Control Management")
+ title = _("Access control management")
section = "AccessControl"
class Credentials(AdminView, TemplateView):
- title = _("Credentials Management")
- section = "Credentials"
+ title = _("Credential Management")
+ section = "Credential"
class SchemasMix(AdminView, TemplateView):
- title = _("Templates Management")
- section = "Templates"
+ title = _("Template Management")
+ section = "Template"
class ImportExport(AdminView):
- title = _("Massive Data Management")
+ title = _("Data file management")
section = "ImportExport"
class PeopleListView(People, TemplateView):
template_name = "idhub/admin/people.html"
- subtitle = _('People list')
+ subtitle = _('View users')
icon = 'bi bi-person'
def get_context_data(self, **kwargs):
@@ -85,7 +98,7 @@ class PeopleListView(People, TemplateView):
class PeopleView(People, TemplateView):
template_name = "idhub/admin/user.html"
- subtitle = _('User Profile')
+ subtitle = _('User personal information')
icon = 'bi bi-person'
model = User
@@ -114,8 +127,10 @@ class PeopleActivateView(PeopleView):
if self.object.is_active:
self.object.is_active = False
+ Event.set_EV_USR_DEACTIVATED_BY_ADMIN(self.object)
else:
self.object.is_active = True
+ Event.set_EV_USR_ACTIVATED_BY_ADMIN(self.object)
self.object.save()
return redirect('idhub:admin_people', self.object.id)
@@ -128,24 +143,57 @@ class PeopleDeleteView(PeopleView):
self.object = get_object_or_404(self.model, pk=self.pk)
if self.object != self.request.user:
+ Event.set_EV_USR_DELETED_BY_ADMIN(self.object)
self.object.delete()
else:
messages.error(self.request, _('Is not possible delete your account!'))
return redirect('idhub:admin_people_list')
-class PeopleEditView(PeopleView, UpdateView):
+
+class PeopleEditView(People, FormView):
template_name = "idhub/admin/user_edit.html"
- fields = ('first_name', 'last_name', 'email')
+ subtitle = _('Update user')
+ icon = 'bi bi-person'
+ form_class = ProfileForm
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_kwargs(self):
+ kwargs = super().get_form_kwargs()
+ kwargs['instance'] = self.user
+ return kwargs
+
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+ context.update({
+ 'object': self.user,
+ })
+ return context
+
+ def form_valid(self, form):
+ user = form.save()
+ messages.success(self.request, _('The account is updated successfully'))
+ Event.set_EV_USR_UPDATED_BY_ADMIN(user)
+ Event.set_EV_USR_UPDATED(user)
+
+ return super().form_valid(form)
+
class PeopleRegisterView(NotifyActivateUserByEmail, People, CreateView):
template_name = "idhub/admin/people_register.html"
- subtitle = _('People Register')
+ subtitle = _('Add user')
icon = 'bi bi-person'
- model = User
- fields = ('first_name', 'last_name', 'email')
+ form_class = ProfileForm
success_url = reverse_lazy('idhub:admin_people_list')
def get_success_url(self):
@@ -157,7 +205,10 @@ class PeopleRegisterView(NotifyActivateUserByEmail, People, CreateView):
def form_valid(self, form):
user = form.save()
- messages.success(self.request, _('The account is created successfully'))
+ messages.success(self.request, _('The account was created successfully'))
+ Event.set_EV_USR_REGISTERED(user)
+ Event.set_EV_USR_WELCOME(user)
+
if user.is_active:
try:
self.send_email(user)
@@ -166,12 +217,12 @@ class PeopleRegisterView(NotifyActivateUserByEmail, People, CreateView):
return super().form_valid(form)
-class PeopleMembershipRegisterView(People, CreateView):
+class PeopleMembershipRegisterView(People, FormView):
template_name = "idhub/admin/people_membership_register.html"
- subtitle = _('People add membership')
+ subtitle = _('Associate a membership to the user')
icon = 'bi bi-person'
+ form_class = MembershipForm
model = Membership
- fields = ('type', 'start_date', 'end_date')
success_url = reverse_lazy('idhub:admin_people_list')
def get(self, request, *args, **kwargs):
@@ -188,12 +239,19 @@ class PeopleMembershipRegisterView(People, CreateView):
form = super().get_form()
form.fields['start_date'].widget.input_type = 'date'
form.fields['end_date'].widget.input_type = 'date'
+ form.fields['start_date'].required = True
return form
def get_form_kwargs(self):
self.object = self.model(user=self.user)
kwargs = super().get_form_kwargs()
+ kwargs['instance'] = self.object
return kwargs
+
+ def form_valid(self, form):
+ form.save()
+ messages.success(self.request, _('Membership created successfully'))
+ return super().form_valid(form)
def get_success_url(self):
self.success_url = reverse_lazy(
@@ -203,27 +261,43 @@ class PeopleMembershipRegisterView(People, CreateView):
return self.success_url
-class PeopleMembershipEditView(People, CreateView):
+class PeopleMembershipEditView(People, FormView):
template_name = "idhub/admin/people_membership_register.html"
- subtitle = _('People add membership')
+ subtitle = _('Associate a membership to the user')
icon = 'bi bi-person'
+ form_class = MembershipForm
model = Membership
- 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.object = get_object_or_404(self.model, pk=self.pk)
+ self.user = self.object.user
+ return super().get(request, *args, **kwargs)
+
+ def post(self, request, *args, **kwargs):
+ self.pk = kwargs['pk']
+ self.object = get_object_or_404(self.model, pk=self.pk)
+ self.user = self.object.user
+ 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'
+ form.fields['start_date'].required = True
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()
+ kwargs['instance'] = self.object
return kwargs
+ def form_valid(self, form):
+ form.save()
+ messages.success(self.request, _('Membership updated successfully'))
+ return super().form_valid(form)
+
class PeopleMembershipDeleteView(PeopleView):
model = Membership
@@ -241,12 +315,12 @@ class PeopleMembershipDeleteView(PeopleView):
return redirect('idhub:admin_people_edit', user.id)
-class PeopleRolRegisterView(People, CreateView):
+class PeopleRolRegisterView(People, FormView):
template_name = "idhub/admin/people_rol_register.html"
- subtitle = _('Add Rol to User')
+ subtitle = _('Add a user role to access a service')
icon = 'bi bi-person'
+ form_class = UserRolForm
model = UserRol
- fields = ('service',)
def get(self, request, *args, **kwargs):
self.pk = kwargs['pk']
@@ -261,8 +335,14 @@ class PeopleRolRegisterView(People, CreateView):
def get_form_kwargs(self):
self.object = self.model(user=self.user)
kwargs = super().get_form_kwargs()
+ kwargs['instance'] = self.object
return kwargs
+ def form_valid(self, form):
+ form.save()
+ messages.success(self.request, _('Membership created successfully'))
+ return super().form_valid(form)
+
def get_success_url(self):
self.success_url = reverse_lazy(
'idhub:admin_people_edit',
@@ -271,20 +351,33 @@ class PeopleRolRegisterView(People, CreateView):
return self.success_url
-class PeopleRolEditView(People, CreateView):
+class PeopleRolEditView(People, FormView):
template_name = "idhub/admin/people_rol_register.html"
- subtitle = _('Edit Rol to User')
+ subtitle = _('Modify a user role to access a service')
icon = 'bi bi-person'
+ form_class = UserRolForm
model = UserRol
- fields = ('service',)
+
+ 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 post(self, request, *args, **kwargs):
+ self.pk = kwargs['pk']
+ self.object = get_object_or_404(self.model, pk=self.pk)
+ return super().post(request, *args, **kwargs)
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()
+ kwargs['instance'] = self.object
return kwargs
+ def form_valid(self, form):
+ form.save()
+ messages.success(self.request, _('Membership updated successfully'))
+ return super().form_valid(form)
+
def get_success_url(self):
self.success_url = reverse_lazy(
'idhub:admin_people_edit',
@@ -308,7 +401,7 @@ class PeopleRolDeleteView(PeopleView):
class RolesView(AccessControl):
template_name = "idhub/admin/roles.html"
- subtitle = _('Roles Management')
+ subtitle = _('Manage roles')
icon = ''
def get_context_data(self, **kwargs):
@@ -320,20 +413,26 @@ class RolesView(AccessControl):
class RolRegisterView(AccessControl, CreateView):
template_name = "idhub/admin/rol_register.html"
- subtitle = _('Add Rol')
+ subtitle = _('Add Role')
icon = ''
model = Rol
- fields = ('name',)
+ fields = ('name', "description")
success_url = reverse_lazy('idhub:admin_roles')
object = None
+
+ def form_valid(self, form):
+ form.save()
+ messages.success(self.request, _('Role created successfully'))
+ Event.set_EV_ROLE_CREATED_BY_ADMIN()
+ return super().form_valid(form)
-class RolEditView(AccessControl, CreateView):
+class RolEditView(AccessControl, UpdateView):
template_name = "idhub/admin/rol_register.html"
- subtitle = _('Edit Rol')
+ subtitle = _('Edit Role')
icon = ''
model = Rol
- fields = ('name',)
+ fields = ('name', "description")
success_url = reverse_lazy('idhub:admin_roles')
def get_form_kwargs(self):
@@ -342,6 +441,12 @@ class RolEditView(AccessControl, CreateView):
self.object = get_object_or_404(self.model, pk=pk)
kwargs = super().get_form_kwargs()
return kwargs
+
+ def form_valid(self, form):
+ form.save()
+ messages.success(self.request, _('Role updated successfully'))
+ Event.set_EV_ROLE_MODIFIED_BY_ADMIN()
+ return super().form_valid(form)
class RolDeleteView(AccessControl):
@@ -352,12 +457,14 @@ class RolDeleteView(AccessControl):
self.object = get_object_or_404(self.model, pk=self.pk)
self.object.delete()
+ messages.success(self.request, _('Role deleted successfully'))
+ Event.set_EV_ROLE_DELETED_BY_ADMIN()
return redirect('idhub:admin_roles')
class ServicesView(AccessControl):
template_name = "idhub/admin/services.html"
- subtitle = _('Service Management')
+ subtitle = _('Manage services')
icon = ''
def get_context_data(self, **kwargs):
@@ -369,17 +476,28 @@ class ServicesView(AccessControl):
class ServiceRegisterView(AccessControl, CreateView):
template_name = "idhub/admin/service_register.html"
- subtitle = _('Add Service')
+ subtitle = _('Add service')
icon = ''
model = Service
fields = ('domain', 'description', 'rol')
success_url = reverse_lazy('idhub:admin_services')
object = None
+ def get_form(self):
+ form = super().get_form()
+ form.fields['rol'].required = False
+ return form
+
+ def form_valid(self, form):
+ form.save()
+ messages.success(self.request, _('Service created successfully'))
+ Event.set_EV_SERVICE_CREATED_BY_ADMIN()
+ return super().form_valid(form)
+
-class ServiceEditView(AccessControl, CreateView):
+class ServiceEditView(AccessControl, UpdateView):
template_name = "idhub/admin/service_register.html"
- subtitle = _('Edit Service')
+ subtitle = _('Modify service')
icon = ''
model = Service
fields = ('domain', 'description', 'rol')
@@ -392,6 +510,17 @@ class ServiceEditView(AccessControl, CreateView):
kwargs = super().get_form_kwargs()
return kwargs
+ def get_form(self):
+ form = super().get_form()
+ form.fields['rol'].required = False
+ return form
+
+ def form_valid(self, form):
+ form.save()
+ messages.success(self.request, _('Service updated successfully'))
+ Event.set_EV_SERVICE_MODIFIED_BY_ADMIN()
+ return super().form_valid(form)
+
class ServiceDeleteView(AccessControl):
model = Service
@@ -401,12 +530,14 @@ class ServiceDeleteView(AccessControl):
self.object = get_object_or_404(self.model, pk=self.pk)
self.object.delete()
+ messages.success(self.request, _('Service deleted successfully'))
+ Event.set_EV_SERVICE_DELETED_BY_ADMIN()
return redirect('idhub:admin_services')
class CredentialsView(Credentials):
template_name = "idhub/admin/credentials.html"
- subtitle = _('Credentials list')
+ subtitle = _('View credentials')
icon = ''
def get_context_data(self, **kwargs):
@@ -462,6 +593,8 @@ class RevokeCredentialsView(Credentials):
self.object.status = VerificableCredential.Status.REVOKED
self.object.save()
messages.success(self.request, _('Credential revoked successfully'))
+ Event.set_EV_CREDENTIAL_REVOKED_BY_ADMIN(self.object)
+ Event.set_EV_CREDENTIAL_REVOKED(self.object)
return redirect(self.success_url)
@@ -482,13 +615,15 @@ class DeleteCredentialsView(Credentials):
if self.object.status in status:
self.object.delete()
messages.success(self.request, _('Credential deleted successfully'))
+ Event.set_EV_CREDENTIAL_DELETED(self.object)
+ Event.set_EV_CREDENTIAL_DELETED_BY_ADMIN(self.object)
return redirect(self.success_url)
class DidsView(Credentials):
template_name = "idhub/admin/dids.html"
- subtitle = _('Organization Identities (DID)')
+ subtitle = _('Manage Identities (DID)')
icon = 'bi bi-patch-check-fill'
wallet = True
@@ -514,6 +649,7 @@ class DidRegisterView(Credentials, CreateView):
form.instance.did = iota.issue_did()
form.save()
messages.success(self.request, _('DID created successfully'))
+ Event.set_EV_ORG_DID_CREATED_BY_ADMIN(form.instance)
return super().form_valid(form)
@@ -547,29 +683,29 @@ class DidDeleteView(Credentials, DeleteView):
def get(self, request, *args, **kwargs):
self.pk = kwargs['pk']
self.object = get_object_or_404(self.model, pk=self.pk)
+ Event.set_EV_ORG_DID_DELETED_BY_ADMIN(self.object)
self.object.delete()
messages.success(self.request, _('DID delete successfully'))
-
return redirect(self.success_url)
class WalletCredentialsView(Credentials):
template_name = "idhub/admin/wallet_credentials.html"
- subtitle = _('Credentials')
+ subtitle = _('View org. credentials')
icon = 'bi bi-patch-check-fill'
wallet = True
class WalletConfigIssuesView(Credentials):
template_name = "idhub/admin/wallet_issues.html"
- subtitle = _('Configure Issues')
+ subtitle = _('Configure credential issuance')
icon = 'bi bi-patch-check-fill'
wallet = True
class SchemasView(SchemasMix):
template_name = "idhub/admin/schemas.html"
- subtitle = _('Template List')
+ subtitle = _('View credential templates')
icon = ''
def get_context_data(self, **kwargs):
@@ -603,7 +739,7 @@ class SchemasDownloadView(SchemasMix):
class SchemasNewView(SchemasMix):
template_name = "idhub/admin/schemas_new.html"
- subtitle = _('Upload Template')
+ subtitle = _('Upload template')
icon = ''
success_url = reverse_lazy('idhub:admin_schemas')
@@ -648,7 +784,7 @@ class SchemasNewView(SchemasMix):
class SchemasImportView(SchemasMix):
template_name = "idhub/admin/schemas_import.html"
- subtitle = _('Import Template')
+ subtitle = _('Import template')
icon = ''
def get_context_data(self, **kwargs):
@@ -676,7 +812,7 @@ class SchemasImportAddView(SchemasMix):
schema = self.create_schema(file_name)
if schema:
- messages.success(self.request, _("The schema add successfully!"))
+ messages.success(self.request, _("The schema was added sucessfully"))
return redirect('idhub:admin_schemas_import')
def create_schema(self, file_name):
@@ -701,7 +837,7 @@ class SchemasImportAddView(SchemasMix):
class ImportView(ImportExport, TemplateView):
template_name = "idhub/admin/import.html"
- subtitle = _('Import')
+ subtitle = _('Import data')
icon = ''
def get_context_data(self, **kwargs):
@@ -738,9 +874,12 @@ class ImportAddView(ImportExport, FormView):
return kwargs
def form_valid(self, form):
- cred = form.save()
- if cred:
+ creds = form.save()
+ if creds:
messages.success(self.request, _("The file import was successfully!"))
+ for cred in creds:
+ Event.set_EV_CREDENTIAL_ENABLED(cred)
+ Event.set_EV_CREDENTIAL_CAN_BE_REQUESTED(cred)
else:
messages.error(self.request, _("Error importing the file!"))
return super().form_valid(form)
diff --git a/idhub/migrations/0001_initial.py b/idhub/migrations/0001_initial.py
index fe6fc19..bbd5d49 100644
--- a/idhub/migrations/0001_initial.py
+++ b/idhub/migrations/0001_initial.py
@@ -1,4 +1,4 @@
-# Generated by Django 4.2.5 on 2023-11-02 15:08
+# Generated by Django 4.2.5 on 2023-11-14 16:32
from django.conf import settings
from django.db import migrations, models
@@ -63,7 +63,13 @@ class Migration(migrations.Migration):
verbose_name='ID',
),
),
- ('name', models.CharField(max_length=250)),
+ ('name', models.CharField(max_length=250, verbose_name='name')),
+ (
+ 'description',
+ models.CharField(
+ max_length=250, null=True, verbose_name='Description'
+ ),
+ ),
],
),
migrations.CreateModel(
@@ -95,8 +101,11 @@ class Migration(migrations.Migration):
verbose_name='ID',
),
),
- ('domain', models.CharField(max_length=250)),
- ('description', models.CharField(max_length=250)),
+ ('domain', models.CharField(max_length=250, verbose_name='Domain')),
+ (
+ 'description',
+ models.CharField(max_length=250, verbose_name='Description'),
+ ),
('rol', models.ManyToManyField(to='idhub.rol')),
],
),
@@ -131,7 +140,7 @@ class Migration(migrations.Migration):
('id_string', models.CharField(max_length=250)),
('verified', models.BooleanField()),
('created_on', models.DateTimeField(auto_now=True)),
- ('issuer_on', models.DateTimeField(null=True)),
+ ('issued_on', models.DateTimeField(null=True)),
('did_issuer', models.CharField(max_length=250)),
('did_subject', models.CharField(max_length=250)),
('data', models.TextField()),
@@ -157,6 +166,141 @@ class Migration(migrations.Migration):
),
],
),
+ migrations.CreateModel(
+ name='Membership',
+ fields=[
+ (
+ 'id',
+ models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name='ID',
+ ),
+ ),
+ (
+ 'type',
+ models.PositiveSmallIntegerField(
+ choices=[(1, 'Beneficiary'), (2, 'Employee'), (3, 'Member')],
+ verbose_name='Type of membership',
+ ),
+ ),
+ (
+ 'start_date',
+ models.DateField(
+ blank=True,
+ help_text='What date did the membership start?',
+ null=True,
+ verbose_name='Start date',
+ ),
+ ),
+ (
+ 'end_date',
+ models.DateField(
+ blank=True,
+ help_text='What date will the membership end?',
+ null=True,
+ verbose_name='End date',
+ ),
+ ),
+ (
+ 'user',
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name='memberships',
+ to=settings.AUTH_USER_MODEL,
+ ),
+ ),
+ ],
+ ),
+ migrations.CreateModel(
+ name='Event',
+ fields=[
+ (
+ 'id',
+ models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name='ID',
+ ),
+ ),
+ ('created', models.DateTimeField(auto_now=True)),
+ ('message', models.CharField(max_length=350)),
+ (
+ 'type',
+ models.PositiveSmallIntegerField(
+ choices=[
+ (1, 'EV_USR_REGISTERED'),
+ (2, 'EV_USR_WELCOME'),
+ (3, 'EV_DATA_UPDATE_REQUESTED_BY_USER'),
+ (4, 'EV_DATA_UPDATE_REQUESTED'),
+ (5, 'EV_USR_UPDATED_BY_ADMIN'),
+ (6, 'EV_USR_UPDATED'),
+ (7, 'EV_USR_DELETED_BY_ADMIN'),
+ (8, 'EV_DID_CREATED_BY_USER'),
+ (9, 'EV_DID_CREATED'),
+ (10, 'EV_DID_DELETED'),
+ (11, 'EV_CREDENTIAL_DELETED_BY_ADMIN'),
+ (12, 'EV_CREDENTIAL_DELETED'),
+ (13, 'EV_CREDENTIAL_ISSUED_FOR_USER'),
+ (14, 'EV_CREDENTIAL_ISSUED'),
+ (15, 'EV_CREDENTIAL_PRESENTED_BY_USER'),
+ (16, 'EV_CREDENTIAL_PRESENTED'),
+ (17, 'EV_CREDENTIAL_ENABLED'),
+ (18, 'EV_CREDENTIAL_CAN_BE_REQUESTED'),
+ (19, 'EV_CREDENTIAL_REVOKED_BY_ADMIN'),
+ (20, 'EV_CREDENTIAL_REVOKED'),
+ (21, 'EV_ROLE_CREATED_BY_ADMIN'),
+ (22, 'EV_ROLE_MODIFIED_BY_ADMIN'),
+ (23, 'EV_ROLE_DELETED_BY_ADMIN'),
+ (24, 'EV_SERVICE_CREATED_BY_ADMIN'),
+ (25, 'EV_SERVICE_MODIFIED_BY_ADMIN'),
+ (26, 'EV_SERVICE_DELETED_BY_ADMIN'),
+ (27, 'EV_ORG_DID_CREATED_BY_ADMIN'),
+ (28, 'EV_ORG_DID_DELETED_BY_ADMIN'),
+ (29, 'EV_USR_DEACTIVATED_BY_ADMIN'),
+ (30, 'EV_USR_ACTIVATED_BY_ADMIN'),
+ ]
+ ),
+ ),
+ (
+ 'user',
+ models.ForeignKey(
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name='events',
+ to=settings.AUTH_USER_MODEL,
+ ),
+ ),
+ ],
+ ),
+ migrations.CreateModel(
+ name='DID',
+ fields=[
+ (
+ 'id',
+ models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name='ID',
+ ),
+ ),
+ ('created_at', models.DateTimeField(auto_now=True)),
+ ('did', models.CharField(max_length=250, unique=True)),
+ ('label', models.CharField(max_length=50)),
+ (
+ 'user',
+ models.ForeignKey(
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name='dids',
+ to=settings.AUTH_USER_MODEL,
+ ),
+ ),
+ ],
+ ),
migrations.CreateModel(
name='UserRol',
fields=[
@@ -186,78 +330,8 @@ class Migration(migrations.Migration):
),
),
],
- ),
- migrations.CreateModel(
- name='Membership',
- fields=[
- (
- 'id',
- models.BigAutoField(
- auto_created=True,
- primary_key=True,
- serialize=False,
- verbose_name='ID',
- ),
- ),
- (
- 'type',
- models.PositiveSmallIntegerField(
- choices=[(1, 'Beneficiary'), (2, 'Employee'), (3, 'Partner')],
- verbose_name='Type of membership',
- ),
- ),
- (
- 'start_date',
- models.DateField(
- blank=True,
- help_text='What date did the membership start?',
- null=True,
- verbose_name='Start date',
- ),
- ),
- (
- 'end_date',
- models.DateField(
- blank=True,
- help_text='What date did the membership end?',
- null=True,
- verbose_name='End date',
- ),
- ),
- (
- 'user',
- models.ForeignKey(
- on_delete=django.db.models.deletion.CASCADE,
- related_name='memberships',
- to=settings.AUTH_USER_MODEL,
- ),
- ),
- ],
- ),
- migrations.CreateModel(
- name='DID',
- fields=[
- (
- 'id',
- models.BigAutoField(
- auto_created=True,
- primary_key=True,
- serialize=False,
- verbose_name='ID',
- ),
- ),
- ('created_at', models.DateTimeField(auto_now=True)),
- ('did', models.CharField(max_length=250, unique=True)),
- ('label', models.CharField(max_length=50)),
- (
- 'user',
- models.ForeignKey(
- null=True,
- on_delete=django.db.models.deletion.CASCADE,
- related_name='dids',
- to=settings.AUTH_USER_MODEL,
- ),
- ),
- ],
+ options={
+ 'unique_together': {('user', 'service')},
+ },
),
]
diff --git a/idhub/models.py b/idhub/models.py
index 8a805d4..19c42c6 100644
--- a/idhub/models.py
+++ b/idhub/models.py
@@ -1,16 +1,398 @@
import json
import requests
+import datetime
from django.db import models
from django.utils.translation import gettext_lazy as _
from idhub_auth.models import User
-# class Event(models.Model):
- # Para los "audit logs" que se requieren en las pantallas.
- # timestamp = models.DateTimeField()
- # Los eventos no tienen relación con otros objetos a nivel de BBDD.
- # event_data = models.CharField(max_length=250)
+class Event(models.Model):
+ class Types(models.IntegerChoices):
+ EV_USR_REGISTERED = 1, "EV_USR_REGISTERED"
+ EV_USR_WELCOME = 2, "EV_USR_WELCOME"
+ EV_DATA_UPDATE_REQUESTED_BY_USER = 3, "EV_DATA_UPDATE_REQUESTED_BY_USER"
+ EV_DATA_UPDATE_REQUESTED = 4, "EV_DATA_UPDATE_REQUESTED"
+ EV_USR_UPDATED_BY_ADMIN = 5, "EV_USR_UPDATED_BY_ADMIN"
+ EV_USR_UPDATED = 6, "EV_USR_UPDATED"
+ EV_USR_DELETED_BY_ADMIN = 7, "EV_USR_DELETED_BY_ADMIN"
+ EV_DID_CREATED_BY_USER = 8, "EV_DID_CREATED_BY_USER"
+ EV_DID_CREATED = 9, "EV_DID_CREATED"
+ EV_DID_DELETED = 10, "EV_DID_DELETED"
+ EV_CREDENTIAL_DELETED_BY_ADMIN = 11, "EV_CREDENTIAL_DELETED_BY_ADMIN"
+ EV_CREDENTIAL_DELETED = 12, "EV_CREDENTIAL_DELETED"
+ EV_CREDENTIAL_ISSUED_FOR_USER = 13, "EV_CREDENTIAL_ISSUED_FOR_USER"
+ EV_CREDENTIAL_ISSUED = 14, "EV_CREDENTIAL_ISSUED"
+ EV_CREDENTIAL_PRESENTED_BY_USER = 15, "EV_CREDENTIAL_PRESENTED_BY_USER"
+ EV_CREDENTIAL_PRESENTED = 16, "EV_CREDENTIAL_PRESENTED"
+ EV_CREDENTIAL_ENABLED = 17, "EV_CREDENTIAL_ENABLED"
+ EV_CREDENTIAL_CAN_BE_REQUESTED = 18, "EV_CREDENTIAL_CAN_BE_REQUESTED"
+ EV_CREDENTIAL_REVOKED_BY_ADMIN = 19, "EV_CREDENTIAL_REVOKED_BY_ADMIN"
+ EV_CREDENTIAL_REVOKED = 20, "EV_CREDENTIAL_REVOKED"
+ EV_ROLE_CREATED_BY_ADMIN = 21, "EV_ROLE_CREATED_BY_ADMIN"
+ EV_ROLE_MODIFIED_BY_ADMIN = 22, "EV_ROLE_MODIFIED_BY_ADMIN"
+ EV_ROLE_DELETED_BY_ADMIN = 23, "EV_ROLE_DELETED_BY_ADMIN"
+ EV_SERVICE_CREATED_BY_ADMIN = 24, "EV_SERVICE_CREATED_BY_ADMIN"
+ EV_SERVICE_MODIFIED_BY_ADMIN = 25, "EV_SERVICE_MODIFIED_BY_ADMIN"
+ EV_SERVICE_DELETED_BY_ADMIN = 26, "EV_SERVICE_DELETED_BY_ADMIN"
+ EV_ORG_DID_CREATED_BY_ADMIN = 27, "EV_ORG_DID_CREATED_BY_ADMIN"
+ EV_ORG_DID_DELETED_BY_ADMIN = 28, "EV_ORG_DID_DELETED_BY_ADMIN"
+ EV_USR_DEACTIVATED_BY_ADMIN = 29, "EV_USR_DEACTIVATED_BY_ADMIN"
+ EV_USR_ACTIVATED_BY_ADMIN = 30, "EV_USR_ACTIVATED_BY_ADMIN"
+ created = models.DateTimeField(auto_now=True)
+ message = models.CharField(max_length=350)
+ type = models.PositiveSmallIntegerField(
+ choices=Types.choices,
+ )
+ user = models.ForeignKey(
+ User,
+ on_delete=models.CASCADE,
+ related_name='events',
+ null=True,
+ )
+
+ def get_type(self):
+ return self.Types(self.type).label
+
+ @classmethod
+ def set_EV_USR_REGISTERED(cls, user):
+ msg = _("The user {username} was registered: name: {first_name}, last name: {last_name}").format(
+ username=user.username,
+ first_name=user.first_name,
+ last_name=user.last_name
+ )
+ cls.objects.create(
+ type=cls.Types.EV_USR_REGISTERED,
+ message=msg
+ )
+
+ @classmethod
+ def set_EV_USR_WELCOME(cls, user):
+ msg = _("Welcome. You has been registered: name: {first_name}, last name: {last_name}").format(
+ first_name=user.first_name,
+ last_name=user.last_name
+ )
+ cls.objects.create(
+ type=cls.Types.EV_USR_WELCOME,
+ message=msg,
+ user=user
+ )
+
+ # Is required?
+ @classmethod
+ def set_EV_DATA_UPDATE_REQUESTED_BY_USER(cls, user):
+ msg = _("The user '{username}' has request the update of the following information: ")
+ msg += "['field1':'value1', 'field2':'value2'>,...]".format(
+ username=user.username,
+ )
+ cls.objects.create(
+ type=cls.Types.EV_DATA_UPDATE_REQUESTED_BY_USER,
+ message=msg,
+ )
+
+ # Is required?
+ @classmethod
+ def set_EV_DATA_UPDATE_REQUESTED(cls, user):
+ msg = _("You have requested the update of the following information: ")
+ msg += "['field1':'value1', 'field2':'value2'>,...]"
+ cls.objects.create(
+ type=cls.Types.EV_DATA_UPDATE_REQUESTED,
+ message=msg,
+ user=user
+ )
+
+ @classmethod
+ def set_EV_USR_UPDATED_BY_ADMIN(cls, user):
+ msg = "The admin has updated the following user 's information: "
+ msg += "name: {first_name}, last name: {last_name}"
+ msg = _(msg).format(
+ first_name=user.first_name,
+ last_name=user.last_name
+ )
+ cls.objects.create(
+ type=cls.Types.EV_USR_UPDATED_BY_ADMIN,
+ message=msg
+ )
+
+ @classmethod
+ def set_EV_USR_UPDATED(cls, user):
+ msg = "The admin has updated your personal information: "
+ msg += "name: {first_name}, last name: {last_name}"
+ msg = _(msg).format(
+ first_name=user.first_name,
+ last_name=user.last_name
+ )
+ cls.objects.create(
+ type=cls.Types.EV_USR_UPDATED,
+ message=msg,
+ user=user
+ )
+
+ @classmethod
+ def set_EV_USR_DELETED_BY_ADMIN(cls, user):
+ msg = _("The admin has deleted the user: username: {username}").format(
+ username=user.username,
+ )
+ cls.objects.create(
+ type=cls.Types.EV_USR_DELETED_BY_ADMIN,
+ message=msg
+ )
+
+ @classmethod
+ def set_EV_DID_CREATED_BY_USER(cls, did):
+ msg = _("New DID with DID-ID: '{did}' created by user '{username}'").format(
+ did=did.did,
+ username=did.user.username
+ )
+ cls.objects.create(
+ type=cls.Types.EV_DID_CREATED_BY_USER,
+ message=msg,
+ )
+
+ @classmethod
+ def set_EV_DID_CREATED(cls, did):
+ msg = _("New DID with label: '{label}' and DID-ID: '{did}' was created'").format(
+ label=did.label,
+ did=did.did
+ )
+ cls.objects.create(
+ type=cls.Types.EV_DID_CREATED,
+ message=msg,
+ user=did.user
+ )
+
+ @classmethod
+ def set_EV_DID_DELETED(cls, did):
+ msg = _("The DID with label '{label}' and DID-ID: '{did}' was deleted from your wallet").format(
+ label=did.label,
+ did=did.did
+ )
+ cls.objects.create(
+ type=cls.Types.EV_DID_DELETED,
+ message=msg,
+ user=did.user
+ )
+
+ @classmethod
+ def set_EV_CREDENTIAL_DELETED_BY_ADMIN(cls, cred):
+ msg = _("The credential of type '{type}' and ID: '{id}' was deleted").format(
+ type=cred.type(),
+ id=cred.id,
+ )
+ cls.objects.create(
+ type=cls.Types.EV_CREDENTIAL_DELETED_BY_ADMIN,
+ message=msg,
+ )
+
+ @classmethod
+ def set_EV_CREDENTIAL_DELETED(cls, cred):
+ msg = _("The credential of type '{type}' and ID: '{id}' was deleted from your wallet").format(
+ type=cred.type(),
+ id=cred.id
+ )
+ cls.objects.create(
+ type=cls.Types.EV_CREDENTIAL_DELETED,
+ message=msg,
+ user=cred.user
+ )
+
+ @classmethod
+ def set_EV_CREDENTIAL_ISSUED_FOR_USER(cls, cred):
+ msg = _("The credential of type '{type}' and ID: '{id}' was issued for user {username}").format(
+ type=cred.type(),
+ id=cred.id,
+ username=cred.user.username
+ )
+ cls.objects.create(
+ type=cls.Types.EV_CREDENTIAL_ISSUED_FOR_USER,
+ message=msg,
+ )
+
+ @classmethod
+ def set_EV_CREDENTIAL_ISSUED(cls, cred):
+ msg = _("The credential of type '{type}' and ID: '{id}' was issued and stored in your wallet").format(
+ type=cred.type(),
+ id=cred.id
+ )
+ cls.objects.create(
+ type=cls.Types.EV_CREDENTIAL_ISSUED,
+ message=msg,
+ user=cred.user
+ )
+
+ @classmethod
+ def set_EV_CREDENTIAL_PRESENTED_BY_USER(cls, cred, verifier):
+ msg = "The credential of type '{type}' and ID: '{id}' "
+ msg += "was presented by user {username} to verifier '{verifier}"
+ msg = _(msg).format(
+ type=cred.type(),
+ id=cred.id,
+ username=cred.user.username,
+ verifier=verifier
+ )
+ cls.objects.create(
+ type=cls.Types.EV_CREDENTIAL_PRESENTED_BY_USER,
+ message=msg,
+ )
+
+ @classmethod
+ def set_EV_CREDENTIAL_PRESENTED(cls, cred, verifier):
+ msg = "The credential of type '{type}' and ID: '{id}' "
+ msg += "was presented to verifier '{verifier}'"
+ msg = _(msg).format(
+ type=cred.type(),
+ id=cred.id,
+ verifier=verifier
+ )
+ cls.objects.create(
+ type=cls.Types.EV_CREDENTIAL_PRESENTED,
+ message=msg,
+ user=cred.user
+ )
+
+ @classmethod
+ def set_EV_CREDENTIAL_ENABLED(cls, cred):
+ msg = _("The credential of type '{type}' was enabled for user {username}").format(
+ type=cred.type(),
+ username=cred.user.username
+ )
+ cls.objects.create(
+ type=cls.Types.EV_CREDENTIAL_ENABLED,
+ message=msg,
+ )
+
+ @classmethod
+ def set_EV_CREDENTIAL_CAN_BE_REQUESTED(cls, cred):
+ msg = _("You can request the '{type}' credential").format(
+ type=cred.type()
+ )
+ cls.objects.create(
+ type=cls.Types.EV_CREDENTIAL_CAN_BE_REQUESTED,
+ message=msg,
+ user=cred.user
+ )
+
+ @classmethod
+ def set_EV_CREDENTIAL_REVOKED_BY_ADMIN(cls, cred):
+ msg = _("The credential of type '{type}' and ID: '{id}' was revoked for ").format(
+ type=cred.type(),
+ id=cred.id
+ )
+ cls.objects.create(
+ type=cls.Types.EV_CREDENTIAL_REVOKED_BY_ADMIN,
+ message=msg,
+ )
+
+ @classmethod
+ def set_EV_CREDENTIAL_REVOKED(cls, cred):
+ msg = _("The credential of type '{type}' and ID: '{id}' was revoked by admin").format(
+ type=cred.type(),
+ id=cred.id
+ )
+ cls.objects.create(
+ type=cls.Types.EV_CREDENTIAL_REVOKED,
+ message=msg,
+ user=cred.user
+ )
+
+ @classmethod
+ def set_EV_ROLE_CREATED_BY_ADMIN(cls):
+ msg = _('A new role was created by admin')
+ cls.objects.create(
+ type=cls.Types.EV_ROLE_CREATED_BY_ADMIN,
+ message=msg,
+ )
+
+ @classmethod
+ def set_EV_ROLE_MODIFIED_BY_ADMIN(cls):
+ msg = _('The role was modified by admin')
+ cls.objects.create(
+ type=cls.Types.EV_ROLE_MODIFIED_BY_ADMIN,
+ message=msg,
+ )
+
+ @classmethod
+ def set_EV_ROLE_DELETED_BY_ADMIN(cls):
+ msg = _('The role was removed by admin')
+ cls.objects.create(
+ type=cls.Types.EV_ROLE_DELETED_BY_ADMIN,
+ message=msg,
+ )
+
+ @classmethod
+ def set_EV_SERVICE_CREATED_BY_ADMIN(cls):
+ msg = _('A new service was created by admin')
+ cls.objects.create(
+ type=cls.Types.EV_SERVICE_CREATED_BY_ADMIN,
+ message=msg,
+ )
+
+ @classmethod
+ def set_EV_SERVICE_MODIFIED_BY_ADMIN(cls):
+ msg = _('The service was modified by admin')
+ cls.objects.create(
+ type=cls.Types.EV_SERVICE_MODIFIED_BY_ADMIN,
+ message=msg,
+ )
+
+ @classmethod
+ def set_EV_SERVICE_DELETED_BY_ADMIN(cls):
+ msg = _('The service was removed by admin')
+ cls.objects.create(
+ type=cls.Types.EV_SERVICE_DELETED_BY_ADMIN,
+ message=msg,
+ )
+
+ @classmethod
+ def set_EV_ORG_DID_CREATED_BY_ADMIN(cls, did):
+ msg = _("New Organisational DID with label: '{label}' and DID-ID: '{did}' was created").format(
+ label=did.label,
+ did=did.did
+ )
+ cls.objects.create(
+ type=cls.Types.EV_ORG_DID_CREATED_BY_ADMIN,
+ message=msg,
+ )
+
+ @classmethod
+ def set_EV_ORG_DID_DELETED_BY_ADMIN(cls, did):
+ msg = _("Organisational DID with label: '{label}' and DID-ID: '{did}' was removed").format(
+ label=did.label,
+ did=did.did
+ )
+ cls.objects.create(
+ type=cls.Types.EV_ORG_DID_DELETED_BY_ADMIN,
+ message=msg,
+ )
+
+ @classmethod
+ def set_EV_USR_DEACTIVATED_BY_ADMIN(cls, user):
+ msg = "The user '{username}' was temporarily deactivated: "
+ msg += "[name:'{first_name}', last name:'{last_name}']"
+ msg = _(msg).format(
+ username=user.username,
+ first_name=user.first_name,
+ last_name=user.last_name
+ )
+ cls.objects.create(
+ type=cls.Types.EV_USR_DEACTIVATED_BY_ADMIN,
+ message=msg,
+ )
+
+ @classmethod
+ def set_EV_USR_ACTIVATED_BY_ADMIN(cls, user):
+ msg = "The user '{username}' was activated: "
+ msg += "name:'{first_name}', last name:'{last_name}']"
+ msg = _(msg).format(
+ username=user.username,
+ first_name=user.first_name,
+ last_name=user.last_name
+ )
+ cls.objects.create(
+ type=cls.Types.EV_USR_ACTIVATED_BY_ADMIN,
+ message=msg,
+ )
+
class DID(models.Model):
created_at = models.DateTimeField(auto_now=True)
@@ -62,7 +444,7 @@ class VerificableCredential(models.Model):
id_string = models.CharField(max_length=250)
verified = models.BooleanField()
created_on = models.DateTimeField(auto_now=True)
- issuer_on = models.DateTimeField(null=True)
+ issued_on = models.DateTimeField(null=True)
did_issuer = models.CharField(max_length=250)
did_subject = models.CharField(max_length=250)
data = models.TextField()
@@ -95,9 +477,13 @@ class VerificableCredential(models.Model):
data = json.loads(self.data).get('instance').items()
return data
- def get_issued(self, did):
+ def issue(self, did):
self.status = self.Status.ISSUED
self.did_subject = did
+ self.issued_on = datetime.datetime.now()
+
+ def get_issued_on(self):
+ return self.issued_on.strftime("%m/%d/%Y")
class VCTemplate(models.Model):
wkit_template_id = models.CharField(max_length=250)
@@ -117,7 +503,7 @@ class Membership(models.Model):
class Types(models.IntegerChoices):
BENEFICIARY = 1, _('Beneficiary')
EMPLOYEE = 2, _('Employee')
- PARTNER = 3, _('Partner')
+ MEMBER = 3, _('Member')
type = models.PositiveSmallIntegerField(_('Type of membership'), choices=Types.choices)
start_date = models.DateField(
@@ -128,7 +514,7 @@ class Membership(models.Model):
)
end_date = models.DateField(
_('End date'),
- help_text=_('What date did the membership end?'),
+ help_text=_('What date will the membership end?'),
blank=True,
null=True
)
@@ -144,21 +530,24 @@ class Membership(models.Model):
class Rol(models.Model):
- name = models.CharField(max_length=250)
+ name = models.CharField(_("name"), max_length=250)
+ description = models.CharField(_("Description"), max_length=250, null=True)
def __str__(self):
return self.name
class Service(models.Model):
- domain = models.CharField(max_length=250)
- description = models.CharField(max_length=250)
+ domain = models.CharField(_("Domain"), max_length=250)
+ description = models.CharField(_("Description"), max_length=250)
rol = models.ManyToManyField(
Rol,
)
def get_roles(self):
- return ", ".join([x.name for x in self.rol.all()])
+ if self.rol.exists():
+ return ", ".join([x.name for x in self.rol.all()])
+ return _("None")
def __str__(self):
return "{} -> {}".format(self.domain, self.get_roles())
@@ -176,6 +565,9 @@ class UserRol(models.Model):
related_name='users',
)
+ class Meta:
+ unique_together = ('user', 'service',)
+
class Organization(models.Model):
name = models.CharField(max_length=250)
diff --git a/idhub/templates/idhub/admin/credentials.html b/idhub/templates/idhub/admin/credentials.html
index 0d7e84c..06cd110 100644
--- a/idhub/templates/idhub/admin/credentials.html
+++ b/idhub/templates/idhub/admin/credentials.html
@@ -14,8 +14,8 @@
|
|
- |
- |
+ |
+ |
|
|
@@ -25,8 +25,8 @@
{{ f.type }} |
{{ f.description }} |
- {{ f.issue_on }} |
- {{ f.get_status }} |
+ {{ f.get_issued_on }} |
+ {{ f.get_status }} |
{{ f.user.email }} |
{% trans 'View' %} |
diff --git a/idhub/templates/idhub/admin/dashboard.html b/idhub/templates/idhub/admin/dashboard.html
index 90f0050..a94bffb 100644
--- a/idhub/templates/idhub/admin/dashboard.html
+++ b/idhub/templates/idhub/admin/dashboard.html
@@ -10,131 +10,20 @@
- # |
- |
- |
- |
- |
+ |
+ |
+ |
+ {% for ev in events %}
- 1,001 |
- random |
- data |
- placeholder |
- text |
-
-
- 1,002 |
- placeholder |
- irrelevant |
- visual |
- layout |
-
-
- 1,003 |
- data |
- rich |
- dashboard |
- tabular |
-
-
- 1,003 |
- information |
- placeholder |
- illustrative |
- data |
-
-
- 1,004 |
- text |
- random |
- layout |
- dashboard |
-
-
- 1,005 |
- dashboard |
- irrelevant |
- text |
- placeholder |
-
-
- 1,006 |
- dashboard |
- illustrative |
- rich |
- data |
-
-
- 1,007 |
- placeholder |
- tabular |
- information |
- irrelevant |
-
-
- 1,008 |
- random |
- data |
- placeholder |
- text |
-
-
- 1,009 |
- placeholder |
- irrelevant |
- visual |
- layout |
-
-
- 1,010 |
- data |
- rich |
- dashboard |
- tabular |
-
-
- 1,011 |
- information |
- placeholder |
- illustrative |
- data |
-
-
- 1,012 |
- text |
- placeholder |
- layout |
- dashboard |
-
-
- 1,013 |
- dashboard |
- irrelevant |
- text |
- visual |
-
-
- 1,014 |
- dashboard |
- illustrative |
- rich |
- data |
-
-
- 1,015 |
- random |
- tabular |
- information |
- text |
+ {{ ev.get_type }} |
+ {{ ev.message }} |
+ {{ ev.created }} |
+ {% endfor %}
-
-
-
-
{% endblock %}
diff --git a/idhub/templates/idhub/admin/dids.html b/idhub/templates/idhub/admin/dids.html
index 0bac4c5..88cff01 100644
--- a/idhub/templates/idhub/admin/dids.html
+++ b/idhub/templates/idhub/admin/dids.html
@@ -32,7 +32,7 @@
diff --git a/idhub/templates/idhub/admin/import.html b/idhub/templates/idhub/admin/import.html
index 0b74600..288c872 100644
--- a/idhub/templates/idhub/admin/import.html
+++ b/idhub/templates/idhub/admin/import.html
@@ -14,7 +14,7 @@
|
|
- |
+ |
@@ -28,7 +28,7 @@
diff --git a/idhub/templates/idhub/admin/people.html b/idhub/templates/idhub/admin/people.html
index 2df8577..a165bd3 100644
--- a/idhub/templates/idhub/admin/people.html
+++ b/idhub/templates/idhub/admin/people.html
@@ -13,26 +13,22 @@
|
|
|
- |
- |
+ |
+ |
|
{% for user in users %}
- {{ user.last_name }} |
- {{ user.first_name }} |
+ {{ user.last_name|default:'' }} |
+ {{ user.first_name|default:'' }} |
{{ user.email }} |
-
- {% for m in user.memberships.all %}
- {{ m.get_type }}
- {% endfor %}
+ |
+ {{ user.get_memberships }}
|
-
- {% for r in user.roles.all %}
- {{ r.service.get_roles }}
- {% endfor %}
+ |
+ {{ user.get_roles }}
|
{% trans 'View' %} |
diff --git a/idhub/templates/idhub/admin/roles.html b/idhub/templates/idhub/admin/roles.html
index feed044..25bfd93 100644
--- a/idhub/templates/idhub/admin/roles.html
+++ b/idhub/templates/idhub/admin/roles.html
@@ -12,7 +12,8 @@
- |
+ |
+ |
|
|
@@ -21,6 +22,7 @@
{% for rol in roles.all %}
{{ rol.name }} |
+ {{ rol.description|default:""}} |
|
|
@@ -28,7 +30,7 @@
diff --git a/idhub/templates/idhub/admin/schemas.html b/idhub/templates/idhub/admin/schemas.html
index 2aa2e88..2696b01 100644
--- a/idhub/templates/idhub/admin/schemas.html
+++ b/idhub/templates/idhub/admin/schemas.html
@@ -34,7 +34,7 @@
@@ -45,7 +45,7 @@
diff --git a/idhub/templates/idhub/admin/schemas_import.html b/idhub/templates/idhub/admin/schemas_import.html
index b20608b..314530f 100644
--- a/idhub/templates/idhub/admin/schemas_import.html
+++ b/idhub/templates/idhub/admin/schemas_import.html
@@ -12,7 +12,7 @@
- |
+ |
|
diff --git a/idhub/templates/idhub/admin/services.html b/idhub/templates/idhub/admin/services.html
index 92fe5b1..782eee5 100644
--- a/idhub/templates/idhub/admin/services.html
+++ b/idhub/templates/idhub/admin/services.html
@@ -14,7 +14,7 @@
|
|
- |
+ |
|
|
diff --git a/idhub/templates/idhub/admin/user.html b/idhub/templates/idhub/admin/user.html
index 410146f..71b5828 100644
--- a/idhub/templates/idhub/admin/user.html
+++ b/idhub/templates/idhub/admin/user.html
@@ -24,7 +24,7 @@
First Name:
- {{ object.first_name }}
+ {{ object.first_name|default:'' }}
@@ -32,7 +32,7 @@
Last Name:
- {{ object.last_name }}
+ {{ object.last_name|default:'' }}
@@ -84,7 +84,7 @@
- |
+ |
|
|
diff --git a/idhub/templates/idhub/admin/user_edit.html b/idhub/templates/idhub/admin/user_edit.html
index e162723..9bc0a48 100644
--- a/idhub/templates/idhub/admin/user_edit.html
+++ b/idhub/templates/idhub/admin/user_edit.html
@@ -70,7 +70,7 @@
- |
+ |
|
|
|
@@ -90,7 +90,7 @@
diff --git a/idhub/templates/idhub/base.html b/idhub/templates/idhub/base.html
index f279027..6ea7710 100644
--- a/idhub/templates/idhub/base.html
+++ b/idhub/templates/idhub/base.html
@@ -66,29 +66,29 @@
- Home
+ {% trans 'Dashboard' %}
- My datas
+ {% trans 'My information' %}
@@ -96,27 +96,27 @@
- My Wallet
+ {% trans 'My wallet' %}
diff --git a/idhub/templates/idhub/base_admin.html b/idhub/templates/idhub/base_admin.html
index 91715e2..7ae2ec9 100644
--- a/idhub/templates/idhub/base_admin.html
+++ b/idhub/templates/idhub/base_admin.html
@@ -66,24 +66,24 @@
- Home
+ {% trans 'Dashboard' %}
- People
+ {% trans 'User managament' %}
@@ -91,50 +91,50 @@
- Access Control
+ {% trans 'Access control managament' %}
-
+
- Credentials
+ {% trans 'Credential management' %}
-
@@ -24,8 +24,8 @@
{{ f.type }} |
{{ f.description }} |
- {{ f.issue_on }} |
- {{ f.get_status }} |
+ {{ f.get_issued_on }} |
+ {{ f.get_status }} |
diff --git a/idhub/templates/idhub/user/dashboard.html b/idhub/templates/idhub/user/dashboard.html
index 29154f4..4586035 100644
--- a/idhub/templates/idhub/user/dashboard.html
+++ b/idhub/templates/idhub/user/dashboard.html
@@ -10,131 +10,20 @@
- # |
- |
- |
- |
- |
+ |
+ |
+ |
+ {% for ev in user.events.all %}
- 1,001 |
- random |
- data |
- placeholder |
- text |
-
-
- 1,002 |
- placeholder |
- irrelevant |
- visual |
- layout |
-
-
- 1,003 |
- data |
- rich |
- dashboard |
- tabular |
-
-
- 1,003 |
- information |
- placeholder |
- illustrative |
- data |
-
-
- 1,004 |
- text |
- random |
- layout |
- dashboard |
-
-
- 1,005 |
- dashboard |
- irrelevant |
- text |
- placeholder |
-
-
- 1,006 |
- dashboard |
- illustrative |
- rich |
- data |
-
-
- 1,007 |
- placeholder |
- tabular |
- information |
- irrelevant |
-
-
- 1,008 |
- random |
- data |
- placeholder |
- text |
-
-
- 1,009 |
- placeholder |
- irrelevant |
- visual |
- layout |
-
-
- 1,010 |
- data |
- rich |
- dashboard |
- tabular |
-
-
- 1,011 |
- information |
- placeholder |
- illustrative |
- data |
-
-
- 1,012 |
- text |
- placeholder |
- layout |
- dashboard |
-
-
- 1,013 |
- dashboard |
- irrelevant |
- text |
- visual |
-
-
- 1,014 |
- dashboard |
- illustrative |
- rich |
- data |
-
-
- 1,015 |
- random |
- tabular |
- information |
- text |
+ {{ ev.get_type }} |
+ {{ ev.message }} |
+ {{ ev.created }} |
+ {% endfor %}
-
-
-
-
{% endblock %}
diff --git a/idhub/templates/idhub/user/profile.html b/idhub/templates/idhub/user/profile.html
index da1597a..fe5d6e8 100644
--- a/idhub/templates/idhub/user/profile.html
+++ b/idhub/templates/idhub/user/profile.html
@@ -31,11 +31,6 @@
{% endif %}
{% bootstrap_form form %}
-
-
diff --git a/idhub/templates/idhub/user/roles.html b/idhub/templates/idhub/user/roles.html
index 0295b53..2c32e97 100644
--- a/idhub/templates/idhub/user/roles.html
+++ b/idhub/templates/idhub/user/roles.html
@@ -12,7 +12,7 @@
- |
+ |
|
|
diff --git a/idhub/user/forms.py b/idhub/user/forms.py
index a8f6997..173f3a8 100644
--- a/idhub/user/forms.py
+++ b/idhub/user/forms.py
@@ -44,7 +44,7 @@ class RequestCredentialForm(forms.Form):
did = did[0].did
cred = cred[0]
- cred.get_issued(did)
+ cred.issue(did)
if commit:
cred.save()
@@ -72,23 +72,23 @@ class CredentialPresentationForm(forms.Form):
]
def save(self, commit=True):
- org = Organization.objects.filter(
+ self.org = Organization.objects.filter(
id=self.data['organization']
)
- cred = VerificableCredential.objects.filter(
+ self.cred = VerificableCredential.objects.filter(
user=self.user,
id=self.data['credential'],
status=VerificableCredential.Status.ISSUED
)
- if not all([org.exists(), cred.exists()]):
+ if not all([self.org.exists(), self.cred.exists()]):
return
- org =org[0]
- cred = cred[0]
+ self.org = self.org[0]
+ self.cred = self.cred[0]
if commit:
- org.send(cred)
- return cred
+ self.org.send(self.cred)
+ return self.cred
return
diff --git a/idhub/user/views.py b/idhub/user/views.py
index f45f7e6..6c73df3 100644
--- a/idhub/user/views.py
+++ b/idhub/user/views.py
@@ -15,7 +15,7 @@ from django.contrib import messages
from utils.apiregiter import iota
from idhub.user.forms import ProfileForm, RequestCredentialForm, CredentialPresentationForm
from idhub.mixins import UserView
-from idhub.models import DID, VerificableCredential
+from idhub.models import DID, VerificableCredential, Event
class MyProfile(UserView):
@@ -24,7 +24,7 @@ class MyProfile(UserView):
class MyWallet(UserView):
- title = _("My Wallet")
+ title = _("My wallet")
section = "MyWallet"
@@ -38,7 +38,7 @@ class DashboardView(UserView, TemplateView):
class ProfileView(MyProfile, UpdateView):
template_name = "idhub/user/profile.html"
- subtitle = _('My personal Data')
+ subtitle = _('My personal data')
icon = 'bi bi-person'
from_class = ProfileForm
fields = ('first_name', 'last_name', 'email')
@@ -47,6 +47,16 @@ class ProfileView(MyProfile, UpdateView):
def get_object(self):
return self.request.user
+ def get_form(self):
+ form = super().get_form()
+ form.fields['first_name'].disabled = True
+ form.fields['last_name'].disabled = True
+ form.fields['email'].disabled = True
+ return form
+
+ def form_valid(self, form):
+ return super().form_valid(form)
+
class RolesView(MyProfile, TemplateView):
template_name = "idhub/user/roles.html"
@@ -62,7 +72,7 @@ class GDPRView(MyProfile, TemplateView):
class CredentialsView(MyWallet, TemplateView):
template_name = "idhub/user/credentials.html"
- subtitle = _('Credentials')
+ subtitle = _('Credential management')
icon = 'bi bi-patch-check-fill'
def get_context_data(self, **kwargs):
@@ -111,7 +121,7 @@ class CredentialJsonView(MyWallet, TemplateView):
class CredentialsRequestView(MyWallet, FormView):
template_name = "idhub/user/credentials_request.html"
- subtitle = _('Credentials request')
+ subtitle = _('Credential request')
icon = 'bi bi-patch-check-fill'
form_class = RequestCredentialForm
success_url = reverse_lazy('idhub:user_credentials')
@@ -124,15 +134,17 @@ class CredentialsRequestView(MyWallet, FormView):
def form_valid(self, form):
cred = form.save()
if cred:
- messages.success(self.request, _("The credential was required successfully!"))
+ messages.success(self.request, _("The credential was issued successfully!"))
+ Event.set_EV_CREDENTIAL_ISSUED_FOR_USER(cred)
+ Event.set_EV_CREDENTIAL_ISSUED(cred)
else:
- messages.error(self.request, _("Not exists the credential!"))
+ messages.error(self.request, _("The credential does not exist!"))
return super().form_valid(form)
class CredentialsPresentationView(MyWallet, FormView):
template_name = "idhub/user/credentials_presentation.html"
- subtitle = _('Credentials Presentation')
+ subtitle = _('Credential presentation')
icon = 'bi bi-patch-check-fill'
form_class = CredentialPresentationForm
success_url = reverse_lazy('idhub:user_credentials')
@@ -145,6 +157,8 @@ class CredentialsPresentationView(MyWallet, FormView):
def form_valid(self, form):
cred = form.save()
if cred:
+ Event.set_EV_CREDENTIAL_PRESENTED_BY_USER(cred, form.org)
+ Event.set_EV_CREDENTIAL_PRESENTED(cred, form.org)
messages.success(self.request, _("The credential was presented successfully!"))
else:
messages.error(self.request, _("Error sending credential!"))
@@ -153,7 +167,7 @@ class CredentialsPresentationView(MyWallet, FormView):
class DidsView(MyWallet, TemplateView):
template_name = "idhub/user/dids.html"
- subtitle = _('Identities (DID)')
+ subtitle = _('Identities (DIDs)')
icon = 'bi bi-patch-check-fill'
def get_context_data(self, **kwargs):
@@ -166,7 +180,7 @@ class DidsView(MyWallet, TemplateView):
class DidRegisterView(MyWallet, CreateView):
template_name = "idhub/user/did_register.html"
- subtitle = _('Add a new Identities (DID)')
+ subtitle = _('Add a new Identity (DID)')
icon = 'bi bi-patch-check-fill'
wallet = True
model = DID
@@ -174,24 +188,20 @@ class DidRegisterView(MyWallet, CreateView):
success_url = reverse_lazy('idhub:user_dids')
object = None
- # def get_form_kwargs(self):
- # kwargs = super().get_form_kwargs()
- # kwargs['initial'] = {
- # 'user': self.request.user
- # }
- # return kwargs
-
def form_valid(self, form):
form.instance.user = self.request.user
form.instance.did = iota.issue_did()
form.save()
messages.success(self.request, _('DID created successfully'))
+
+ Event.set_EV_DID_CREATED(form.instance)
+ Event.set_EV_DID_CREATED_BY_USER(form.instance)
return super().form_valid(form)
class DidEditView(MyWallet, UpdateView):
template_name = "idhub/user/did_register.html"
- subtitle = _('Identities (DID)')
+ subtitle = _('Identities (DIDs)')
icon = 'bi bi-patch-check-fill'
wallet = True
model = DID
@@ -210,7 +220,7 @@ class DidEditView(MyWallet, UpdateView):
class DidDeleteView(MyWallet, DeleteView):
- subtitle = _('Identities (DID)')
+ subtitle = _('Identities (DIDs)')
icon = 'bi bi-patch-check-fill'
wallet = True
model = DID
@@ -219,7 +229,9 @@ class DidDeleteView(MyWallet, DeleteView):
def get(self, request, *args, **kwargs):
self.pk = kwargs['pk']
self.object = get_object_or_404(self.model, pk=self.pk)
+ Event.set_EV_DID_DELETED(self.object)
self.object.delete()
messages.success(self.request, _('DID delete successfully'))
return redirect(self.success_url)
+
diff --git a/idhub_auth/forms.py b/idhub_auth/forms.py
new file mode 100644
index 0000000..1bc1881
--- /dev/null
+++ b/idhub_auth/forms.py
@@ -0,0 +1,32 @@
+import re
+
+from django import forms
+from django.utils.translation import gettext_lazy as _
+from idhub_auth.models import User
+
+
+class ProfileForm(forms.ModelForm):
+ first_name = forms.CharField(required=True)
+ last_name = forms.CharField(required=True)
+
+ class Meta:
+ model = User
+ fields = ['first_name', 'last_name', 'email']
+
+ def clean_first_name(self):
+ first_name = super().clean()['first_name']
+ if not re.match(r'^[a-zA-Z\s]+$', first_name):
+ txt = _("The string must contain only characters and spaces")
+ raise forms.ValidationError(txt)
+
+ return first_name
+
+ def clean_last_name(self):
+ last_name = super().clean()['last_name']
+ if not re.match(r'^[a-zA-Z\s]+$', last_name):
+ txt = _("The string must contain only characters and spaces")
+ raise forms.ValidationError(txt)
+
+ return last_name
+
+
diff --git a/idhub_auth/migrations/0001_initial.py b/idhub_auth/migrations/0001_initial.py
index 2196067..46412dd 100644
--- a/idhub_auth/migrations/0001_initial.py
+++ b/idhub_auth/migrations/0001_initial.py
@@ -1,4 +1,4 @@
-# Generated by Django 4.2.5 on 2023-11-02 15:08
+# Generated by Django 4.2.5 on 2023-11-14 16:32
from django.db import migrations, models
diff --git a/idhub_auth/models.py b/idhub_auth/models.py
index 64f5491..ccda94c 100644
--- a/idhub_auth/models.py
+++ b/idhub_auth/models.py
@@ -72,3 +72,16 @@ class User(AbstractBaseUser):
def username(self):
"Is the email of the user"
return self.email
+
+ def get_memberships(self):
+ members = set(
+ str(dict(x.Types.choices)[x.type]) for x in self.memberships.all()
+ )
+ return ", ".join(members)
+
+ def get_roles(self):
+ roles = []
+ for s in self.roles.all():
+ for r in s.service.rol.all():
+ roles.append(r.name)
+ return ", ".join(set(roles))
diff --git a/locale/ca_ES/LC_MESSAGES/django.po b/locale/ca_ES/LC_MESSAGES/django.po
index 38735f3..0b94655 100644
--- a/locale/ca_ES/LC_MESSAGES/django.po
+++ b/locale/ca_ES/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-11-07 17:57+0100\n"
+"POT-Creation-Date: 2023-11-13 11:11+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -1533,233 +1533,400 @@ msgstr ""
msgid "show this help message and exit"
msgstr ""
-#: idhub/admin/views.py:39 idhub/user/views.py:33
+#: idhub/admin/forms.py:106
+msgid "The user does not exist!"
+msgstr ""
+
+#: idhub/admin/views.py:43 idhub/templates/idhub/base.html:69
+#: idhub/templates/idhub/base_admin.html:69 idhub/user/views.py:33
msgid "Dashboard"
msgstr ""
-#: idhub/admin/views.py:40 idhub/user/views.py:34
+#: idhub/admin/views.py:44 idhub/templates/idhub/admin/import.html:17
+#: idhub/user/views.py:34
msgid "Success"
msgstr ""
-#: idhub/admin/views.py:45
-msgid "People Management"
+#: idhub/admin/views.py:56
+msgid "User Management"
msgstr ""
-#: idhub/admin/views.py:50
-msgid "Access Control Management"
+#: idhub/admin/views.py:61
+msgid "Access control management"
msgstr ""
-#: idhub/admin/views.py:55
-msgid "Credentials Management"
-msgstr ""
-
-#: idhub/admin/views.py:60
-msgid "Templates Management"
-msgstr ""
-
-#: idhub/admin/views.py:65
-msgid "Massive Data Management"
+#: idhub/admin/views.py:66
+msgid "Credential Management"
msgstr ""
#: idhub/admin/views.py:71
-msgid "People list"
+msgid "Template Management"
msgstr ""
-#: idhub/admin/views.py:84
-msgid "User Profile"
+#: idhub/admin/views.py:76
+msgid "Data file management"
msgstr ""
-#: idhub/admin/views.py:108
+#: idhub/admin/views.py:82 idhub/templates/idhub/base_admin.html:81
+msgid "View users"
+msgstr ""
+
+#: idhub/admin/views.py:95
+msgid "User personal information"
+msgstr ""
+
+#: idhub/admin/views.py:119
msgid "Is not possible deactivate your account!"
msgstr ""
-#: idhub/admin/views.py:129 idhub/admin/views.py:235
+#: idhub/admin/views.py:143 idhub/admin/views.py:261
msgid "Is not possible delete your account!"
msgstr ""
-#: idhub/admin/views.py:141
-msgid "People Register"
+#: idhub/admin/views.py:155
+msgid "The account is updated successfully"
msgstr ""
-#: idhub/admin/views.py:156
-msgid "The account is created successfully"
+#: idhub/admin/views.py:164 idhub/templates/idhub/base_admin.html:86
+msgid "Add user"
msgstr ""
-#: idhub/admin/views.py:167 idhub/admin/views.py:204
+#: idhub/admin/views.py:179
+msgid "The account was created successfully"
+msgstr ""
+
+#: idhub/admin/views.py:193
+msgid "Associate a membership to the user"
+msgstr ""
+
+#: idhub/admin/views.py:230
msgid "People add membership"
msgstr ""
-#: idhub/admin/views.py:242
-msgid "Add Rol to User"
+#: idhub/admin/views.py:268
+msgid "Add a user role to access a service"
msgstr ""
-#: idhub/admin/views.py:272
-msgid "Edit Rol to User"
+#: idhub/admin/views.py:298
+msgid "Modify a user role to access a service"
msgstr ""
-#: idhub/admin/views.py:307
-msgid "Roles Management"
+#: idhub/admin/views.py:333 idhub/templates/idhub/base_admin.html:99
+msgid "Manage roles"
msgstr ""
-#: idhub/admin/views.py:319 idhub/templates/idhub/admin/roles.html:31
+#: idhub/admin/views.py:345 idhub/templates/idhub/admin/roles.html:31
#: idhub/templates/idhub/admin/user_edit.html:93
-msgid "Add Rol"
+msgid "Add Role"
msgstr ""
-#: idhub/admin/views.py:329
-msgid "Edit Rol"
+#: idhub/admin/views.py:354
+msgid "Role created successfully"
msgstr ""
-#: idhub/admin/views.py:356
-msgid "Service Management"
+#: idhub/admin/views.py:361
+msgid "Edit Role"
msgstr ""
-#: idhub/admin/views.py:368 idhub/templates/idhub/admin/services.html:35
-msgid "Add Service"
+#: idhub/admin/views.py:376
+msgid "Role updated successfully"
msgstr ""
-#: idhub/admin/views.py:378
-msgid "Edit Service"
+#: idhub/admin/views.py:389
+msgid "Role deleted successfully"
msgstr ""
-#: idhub/admin/views.py:405
-msgid "Credentials list"
+#: idhub/admin/views.py:396 idhub/templates/idhub/base_admin.html:104
+msgid "Manage services"
msgstr ""
-#: idhub/admin/views.py:418
+#: idhub/admin/views.py:408
+msgid "Add service"
+msgstr ""
+
+#: idhub/admin/views.py:417
+msgid "Service created successfully"
+msgstr ""
+
+#: idhub/admin/views.py:424
+msgid "Modify service"
+msgstr ""
+
+#: idhub/admin/views.py:439
+msgid "Service updated successfully"
+msgstr ""
+
+#: idhub/admin/views.py:452
+msgid "Service deleted successfully"
+msgstr ""
+
+#: idhub/admin/views.py:459 idhub/templates/idhub/base_admin.html:117
+msgid "View credentials"
+msgstr ""
+
+#: idhub/admin/views.py:472
msgid "Change status of Credential"
msgstr ""
-#: idhub/admin/views.py:460
+#: idhub/admin/views.py:514
msgid "Credential revoked successfully"
msgstr ""
-#: idhub/admin/views.py:480
+#: idhub/admin/views.py:536
msgid "Credential deleted successfully"
msgstr ""
-#: idhub/admin/views.py:487 idhub/admin/views.py:518 idhub/admin/views.py:537
-msgid "Organization Identities (DID)"
+#: idhub/admin/views.py:545
+msgid "Manage Identities (DID)"
msgstr ""
-#: idhub/admin/views.py:500
+#: idhub/admin/views.py:558
msgid "Add a new Organization Identities (DID)"
msgstr ""
-#: idhub/admin/views.py:512 idhub/user/views.py:188
+#: idhub/admin/views.py:570 idhub/user/views.py:195
msgid "DID created successfully"
msgstr ""
-#: idhub/admin/views.py:532 idhub/user/views.py:208
+#: idhub/admin/views.py:577 idhub/admin/views.py:596
+msgid "Organization Identities (DID)"
+msgstr ""
+
+#: idhub/admin/views.py:591 idhub/user/views.py:218
msgid "DID updated successfully"
msgstr ""
-#: idhub/admin/views.py:547 idhub/user/views.py:223
+#: idhub/admin/views.py:607 idhub/user/views.py:234
msgid "DID delete successfully"
msgstr ""
-#: idhub/admin/views.py:554 idhub/templates/idhub/user/profile.html:51
-#: idhub/user/views.py:65
-msgid "Credentials"
+#: idhub/admin/views.py:613 idhub/templates/idhub/base_admin.html:132
+msgid "View org. credentials"
msgstr ""
-#: idhub/admin/views.py:561
-msgid "Configure Issues"
+#: idhub/admin/views.py:620 idhub/templates/idhub/base_admin.html:137
+msgid "Configure credential issuance"
msgstr ""
-#: idhub/admin/views.py:568
-msgid "Template List"
+#: idhub/admin/views.py:627
+msgid "View credential templates"
msgstr ""
-#: idhub/admin/views.py:602
-msgid "Upload Template"
+#: idhub/admin/views.py:661
+msgid "Upload template"
msgstr ""
-#: idhub/admin/views.py:618 idhub/admin/views.py:744
+#: idhub/admin/views.py:677
msgid "There are some errors in the file"
msgstr ""
-#: idhub/admin/views.py:632
+#: idhub/admin/views.py:691
msgid "This template already exists!"
msgstr ""
-#: idhub/admin/views.py:638 idhub/admin/views.py:683
+#: idhub/admin/views.py:697 idhub/admin/views.py:742
msgid "This is not a schema valid!"
msgstr ""
-#: idhub/admin/views.py:647
-msgid "Import Template"
+#: idhub/admin/views.py:706
+msgid "Import template"
msgstr ""
-#: idhub/admin/views.py:675
-msgid "The schema add successfully!"
+#: idhub/admin/views.py:734
+msgid "The schema was added sucessfully"
msgstr ""
-#: idhub/admin/views.py:700 idhub/admin/views.py:713 idhub/admin/views.py:726
+#: idhub/admin/views.py:759 idhub/templates/idhub/admin/import.html:31
+#: idhub/templates/idhub/base_admin.html:153
+msgid "Import data"
+msgstr ""
+
+#: idhub/admin/views.py:772 idhub/admin/views.py:785
msgid "Import"
msgstr ""
-#: idhub/admin/views.py:755
-msgid "There aren't file"
+#: idhub/admin/views.py:798
+msgid "The file import was successfully!"
msgstr ""
-#: idhub/admin/views.py:760
-msgid "This file already exists!"
-msgstr ""
-
-#: idhub/admin/views.py:799
-msgid "The user not exist!"
-msgstr ""
-
-#: idhub/models.py:57
-msgid "Enabled"
+#: idhub/admin/views.py:803
+msgid "Error importing the file!"
msgstr ""
#: idhub/models.py:58
+#, python-brace-format
+msgid ""
+"The user {username} was registered: name: {first_name}, last name: "
+"{last_name}"
+msgstr ""
+
+#: idhub/models.py:70
+#, python-brace-format
+msgid ""
+"Welcome. You has been registered: name: {first_name}, last name: {last_name}"
+msgstr ""
+
+#: idhub/models.py:83
+#, python-brace-format
+msgid ""
+"The user '{username}' has request the update of the following information: "
+msgstr ""
+
+#: idhub/models.py:95
+msgid "You have requested the update of the following information: "
+msgstr ""
+
+#: idhub/models.py:132
+#, python-brace-format
+msgid "The admin has deleted the user: username: {username}"
+msgstr ""
+
+#: idhub/models.py:142
+#, python-brace-format
+msgid "New DID with DID-ID: '{did}' created by user '{username}'"
+msgstr ""
+
+#: idhub/models.py:153
+#, python-brace-format
+msgid "New DID with label: '{label}' and DID-ID: '{did}' was created'"
+msgstr ""
+
+#: idhub/models.py:165
+#, python-brace-format
+msgid ""
+"The DID with label '{label}' and DID-ID: '{did}' was deleted from your wallet"
+msgstr ""
+
+#: idhub/models.py:177
+#, python-brace-format
+msgid "The credential of type '{type}' and ID: '{id}' was deleted"
+msgstr ""
+
+#: idhub/models.py:188
+#, python-brace-format
+msgid ""
+"The credential of type '{type}' and ID: '{id}' was deleted from your wallet"
+msgstr ""
+
+#: idhub/models.py:200
+#, python-brace-format
+msgid ""
+"The credential of type '{type}' and ID: '{id}' was issued for user {username}"
+msgstr ""
+
+#: idhub/models.py:212
+#, python-brace-format
+msgid ""
+"The credential of type '{type}' and ID: '{id}' was issued and stored in your "
+"wallet"
+msgstr ""
+
+#: idhub/models.py:254
+#, python-brace-format
+msgid "The credential of type '{type}' was enabled for user {username}"
+msgstr ""
+
+#: idhub/models.py:265
+#, python-brace-format
+msgid "You can request the '{type}' credential"
+msgstr ""
+
+#: idhub/models.py:276
+#, python-brace-format
+msgid "The credential of type '{type}' and ID: '{id}' was revoked for "
+msgstr ""
+
+#: idhub/models.py:287
+#, python-brace-format
+msgid "The credential of type '{type}' and ID: '{id}' was revoked by admin"
+msgstr ""
+
+#: idhub/models.py:299
+msgid "A new role was created by admin"
+msgstr ""
+
+#: idhub/models.py:307
+msgid "The role was modified by admin"
+msgstr ""
+
+#: idhub/models.py:315
+msgid "The role was removed by admin"
+msgstr ""
+
+#: idhub/models.py:323
+msgid "A new service was created by admin"
+msgstr ""
+
+#: idhub/models.py:331
+msgid "The service was modified by admin"
+msgstr ""
+
+#: idhub/models.py:339
+msgid "The service was removed by admin"
+msgstr ""
+
+#: idhub/models.py:347
+#, python-brace-format
+msgid ""
+"New Organisational DID with label: '{label}' and DID-ID: '{did}' was created"
+msgstr ""
+
+#: idhub/models.py:358
+#, python-brace-format
+msgid ""
+"Organisational DID with label: '{label}' and DID-ID: '{did}' was removed"
+msgstr ""
+
+#: idhub/models.py:438
+msgid "Enabled"
+msgstr ""
+
+#: idhub/models.py:439 idhub/templates/idhub/admin/credentials.html:17
+#: idhub/templates/idhub/user/credentials.html:17
msgid "Issued"
msgstr ""
-#: idhub/models.py:59
+#: idhub/models.py:440
msgid "Revoked"
msgstr ""
-#: idhub/models.py:60
+#: idhub/models.py:441
msgid "Expired"
msgstr ""
-#: idhub/models.py:118
+#: idhub/models.py:499
msgid "Beneficiary"
msgstr ""
-#: idhub/models.py:119
+#: idhub/models.py:500
msgid "Employee"
msgstr ""
-#: idhub/models.py:120
-msgid "Partner"
+#: idhub/models.py:501
+msgid "Member"
msgstr ""
-#: idhub/models.py:122
+#: idhub/models.py:503
msgid "Type of membership"
msgstr ""
-#: idhub/models.py:124
+#: idhub/models.py:505
msgid "Start date"
msgstr ""
-#: idhub/models.py:125
+#: idhub/models.py:506
msgid "What date did the membership start?"
msgstr ""
-#: idhub/models.py:130
+#: idhub/models.py:511
msgid "End date"
msgstr ""
-#: idhub/models.py:131
-msgid "What date did the membership end?"
+#: idhub/models.py:512
+msgid "What date will the membership end?"
msgstr ""
-#: idhub/models.py:183
+#: idhub/models.py:564
msgid "Url where to send the presentation"
msgstr ""
@@ -1889,7 +2056,9 @@ msgid "Password reset on %(site_name)s"
msgstr ""
#: idhub/templates/idhub/admin/credentials.html:15
+#: idhub/templates/idhub/admin/dashboard.html:13
#: idhub/templates/idhub/user/credentials.html:15
+#: idhub/templates/idhub/user/dashboard.html:13
#: idhub/templates/templates/musician/billing.html:21
#: idhub/templates/templates/musician/databases.html:17
#: idhub/templates/templates/musician/domain_detail.html:17
@@ -1901,11 +2070,6 @@ msgstr ""
msgid "Details"
msgstr ""
-#: idhub/templates/idhub/admin/credentials.html:17
-#: idhub/templates/idhub/user/credentials.html:17
-msgid "Issue"
-msgstr ""
-
#: idhub/templates/idhub/admin/credentials.html:18
#: idhub/templates/idhub/user/credentials.html:18
msgid "Status"
@@ -1921,8 +2085,25 @@ msgstr ""
msgid "View"
msgstr ""
+#: idhub/templates/idhub/admin/dashboard.html:14
+#: idhub/templates/idhub/admin/schemas.html:18
+#: idhub/templates/idhub/admin/services.html:16
+#: idhub/templates/idhub/admin/user.html:88
+#: idhub/templates/idhub/admin/user_edit.html:74
+#: idhub/templates/idhub/user/dashboard.html:14
+#: idhub/templates/idhub/user/roles.html:16
+msgid "Description"
+msgstr ""
+
+#: idhub/templates/idhub/admin/dashboard.html:15
+#: idhub/templates/idhub/admin/dids.html:15
+#: idhub/templates/idhub/user/dashboard.html:15
+#: idhub/templates/idhub/user/dids.html:15
+msgid "Date"
+msgstr ""
+
#: idhub/templates/idhub/admin/did_register.html:29
-#: idhub/templates/idhub/admin/import_step3.html:27
+#: idhub/templates/idhub/admin/import_add.html:27
#: idhub/templates/idhub/admin/people_membership_register.html:29
#: idhub/templates/idhub/admin/people_register.html:25
#: idhub/templates/idhub/admin/people_rol_register.html:29
@@ -1933,7 +2114,6 @@ msgstr ""
#: idhub/templates/idhub/user/credentials_presentation.html:29
#: idhub/templates/idhub/user/credentials_request.html:29
#: idhub/templates/idhub/user/did_register.html:29
-#: idhub/templates/idhub/user/profile.html:35
#: idhub/templates/templates/musician/address_check_delete.html:10
#: idhub/templates/templates/musician/address_form.html:11
#: idhub/templates/templates/musician/mailbox_change_password.html:11
@@ -1943,7 +2123,7 @@ msgid "Cancel"
msgstr ""
#: idhub/templates/idhub/admin/did_register.html:30
-#: idhub/templates/idhub/admin/import_step3.html:28
+#: idhub/templates/idhub/admin/import_add.html:28
#: idhub/templates/idhub/admin/people_membership_register.html:30
#: idhub/templates/idhub/admin/people_register.html:26
#: idhub/templates/idhub/admin/people_rol_register.html:30
@@ -1952,18 +2132,12 @@ msgstr ""
#: idhub/templates/idhub/admin/service_register.html:30
#: idhub/templates/idhub/admin/user_edit.html:28
#: idhub/templates/idhub/user/did_register.html:30
-#: idhub/templates/idhub/user/profile.html:36
#: idhub/templates/templates/musician/address_form.html:12
#: idhub/templates/templates/musician/mailbox_change_password.html:12
#: idhub/templates/templates/musician/mailbox_form.html:21
msgid "Save"
msgstr ""
-#: idhub/templates/idhub/admin/dids.html:15
-#: idhub/templates/idhub/user/dids.html:15
-msgid "Date"
-msgstr ""
-
#: idhub/templates/idhub/admin/dids.html:16
#: idhub/templates/idhub/user/dids.html:16
msgid "Label"
@@ -1985,8 +2159,7 @@ msgid "Remove"
msgstr ""
#: idhub/templates/idhub/admin/dids.html:35
-#: idhub/templates/idhub/user/dids.html:35
-msgid "Add Identity"
+msgid "Add identity"
msgstr ""
#: idhub/templates/idhub/admin/dids.html:46
@@ -2000,28 +2173,10 @@ msgid "Are you sure that you want delete this DID?"
msgstr ""
#: idhub/templates/idhub/admin/import.html:15
-#: idhub/templates/idhub/admin/import_step2.html:15
#: idhub/templates/idhub/admin/schemas.html:15
msgid "Created at"
msgstr ""
-#: idhub/templates/idhub/admin/import.html:17
-msgid "success"
-msgstr ""
-
-#: idhub/templates/idhub/admin/import.html:31
-msgid "Import Datas"
-msgstr ""
-
-#: idhub/templates/idhub/admin/import_step2.html:16
-#: idhub/templates/idhub/admin/schemas.html:16
-msgid "Template file"
-msgstr ""
-
-#: idhub/templates/idhub/admin/import_step2.html:26
-msgid "Import Dates"
-msgstr ""
-
#: idhub/templates/idhub/admin/issue_credentials.html:14
#: idhub/templates/idhub/admin/issue_credentials.html:72
msgid "Revoke"
@@ -2059,11 +2214,16 @@ msgstr ""
#: idhub/templates/idhub/admin/people.html:16
#: idhub/templates/idhub/admin/user.html:62
#: idhub/templates/idhub/admin/user_edit.html:41
-#: idhub/templates/idhub/user/profile.html:48
+#: idhub/templates/idhub/user/profile.html:43
msgid "Membership"
msgstr ""
#: idhub/templates/idhub/admin/people.html:17
+#: idhub/templates/idhub/admin/roles.html:15
+#: idhub/templates/idhub/admin/services.html:17
+#: idhub/templates/idhub/admin/user.html:87
+#: idhub/templates/idhub/admin/user_edit.html:73
+#: idhub/templates/idhub/user/roles.html:15
msgid "Role"
msgstr ""
@@ -2105,12 +2265,8 @@ msgstr ""
msgid "User activation on %(site)s"
msgstr ""
-#: idhub/templates/idhub/admin/roles.html:15
-#: idhub/templates/idhub/admin/services.html:17
-#: idhub/templates/idhub/admin/user.html:87
-#: idhub/templates/idhub/admin/user_edit.html:73
-#: idhub/templates/idhub/user/roles.html:15
-msgid "Rol"
+#: idhub/templates/idhub/admin/schemas.html:16
+msgid "Template file"
msgstr ""
#: idhub/templates/idhub/admin/schemas.html:17
@@ -2118,20 +2274,13 @@ msgstr ""
msgid "Name"
msgstr ""
-#: idhub/templates/idhub/admin/schemas.html:18
-#: idhub/templates/idhub/admin/services.html:16
-#: idhub/templates/idhub/admin/user.html:88
-#: idhub/templates/idhub/admin/user_edit.html:74
-#: idhub/templates/idhub/user/roles.html:16
-msgid "Description"
-msgstr ""
-
#: idhub/templates/idhub/admin/schemas.html:37
-msgid "Add Template"
+#: idhub/templates/idhub/admin/schemas_import.html:29
+msgid "Add template"
msgstr ""
#: idhub/templates/idhub/admin/schemas.html:48
-msgid "Delete Template"
+msgid "Delete template"
msgstr ""
#: idhub/templates/idhub/admin/schemas.html:52
@@ -2139,17 +2288,13 @@ msgid "Are you sure that you want delete this template?"
msgstr ""
#: idhub/templates/idhub/admin/schemas_import.html:15
-msgid "Template available"
+msgid "Available templates"
msgstr ""
#: idhub/templates/idhub/admin/schemas_import.html:23
msgid "Add"
msgstr ""
-#: idhub/templates/idhub/admin/schemas_import.html:29
-msgid "Add template"
-msgstr ""
-
#: idhub/templates/idhub/admin/services.html:15
#: idhub/templates/idhub/admin/user.html:89
#: idhub/templates/idhub/admin/user_edit.html:75
@@ -2157,6 +2302,10 @@ msgstr ""
msgid "Service"
msgstr ""
+#: idhub/templates/idhub/admin/services.html:35
+msgid "Add Service"
+msgstr ""
+
#: idhub/templates/idhub/admin/user.html:13
msgid "Modify"
msgstr ""
@@ -2171,13 +2320,13 @@ msgstr ""
#: idhub/templates/idhub/admin/user.html:63
#: idhub/templates/idhub/admin/user_edit.html:42
-#: idhub/templates/idhub/user/profile.html:49
+#: idhub/templates/idhub/user/profile.html:44
msgid "From"
msgstr ""
#: idhub/templates/idhub/admin/user.html:64
#: idhub/templates/idhub/admin/user_edit.html:43
-#: idhub/templates/idhub/user/profile.html:50
+#: idhub/templates/idhub/user/profile.html:45
msgid "To"
msgstr ""
@@ -2193,6 +2342,67 @@ msgstr ""
msgid "Add membership"
msgstr ""
+#: idhub/templates/idhub/base.html:76
+msgid "My information"
+msgstr ""
+
+#: idhub/templates/idhub/base.html:81
+msgid "My personal information"
+msgstr ""
+
+#: idhub/templates/idhub/base.html:86 idhub/user/views.py:63
+msgid "My roles"
+msgstr ""
+
+#: idhub/templates/idhub/base.html:91 idhub/user/views.py:69
+msgid "GDPR info"
+msgstr ""
+
+#: idhub/templates/idhub/base.html:99 idhub/user/views.py:27
+msgid "My wallet"
+msgstr ""
+
+#: idhub/templates/idhub/base.html:104 idhub/user/views.py:170
+#: idhub/user/views.py:204 idhub/user/views.py:223
+msgid "Identities (DIDs)"
+msgstr ""
+
+#: idhub/templates/idhub/base.html:109
+msgid "My credentials"
+msgstr ""
+
+#: idhub/templates/idhub/base.html:114
+msgid "Request a credential"
+msgstr ""
+
+#: idhub/templates/idhub/base.html:119
+msgid "Present a credential"
+msgstr ""
+
+#: idhub/templates/idhub/base_admin.html:76
+msgid "User managament"
+msgstr ""
+
+#: idhub/templates/idhub/base_admin.html:94
+msgid "Access control managament"
+msgstr ""
+
+#: idhub/templates/idhub/base_admin.html:112 idhub/user/views.py:75
+msgid "Credential management"
+msgstr ""
+
+#: idhub/templates/idhub/base_admin.html:122
+msgid "Organization's wallet"
+msgstr ""
+
+#: idhub/templates/idhub/base_admin.html:127
+msgid "Manage Identities (DIDs)"
+msgstr ""
+
+#: idhub/templates/idhub/base_admin.html:147
+msgid "Credential template management"
+msgstr ""
+
#: idhub/templates/idhub/user/credentials_presentation.html:30
msgid "Send"
msgstr ""
@@ -2201,6 +2411,10 @@ msgstr ""
msgid "Request"
msgstr ""
+#: idhub/templates/idhub/user/dids.html:35
+msgid "Add Identity"
+msgstr ""
+
#: idhub/templates/idhub/user/profile.html:13
msgid "ARCO Forms"
msgstr ""
@@ -2209,6 +2423,10 @@ msgstr ""
msgid "Notice of Privacy"
msgstr ""
+#: idhub/templates/idhub/user/profile.html:46
+msgid "Credentials"
+msgstr ""
+
#: idhub/templates/templates/musician/address_check_delete.html:7
#, python-format
msgid "Are you sure that you want remove the address: \"%(address_name)s\"?"
@@ -2510,54 +2728,38 @@ msgstr ""
msgid "My profile"
msgstr ""
-#: idhub/user/views.py:27
-msgid "My Wallet"
-msgstr ""
-
#: idhub/user/views.py:41
-msgid "My personal Data"
+msgid "My personal data"
msgstr ""
-#: idhub/user/views.py:53
-msgid "My roles"
-msgstr ""
-
-#: idhub/user/views.py:59
-msgid "GDPR info"
-msgstr ""
-
-#: idhub/user/views.py:78
+#: idhub/user/views.py:88
msgid "Credential"
msgstr ""
-#: idhub/user/views.py:114
-msgid "Credentials request"
+#: idhub/user/views.py:124
+msgid "Credential request"
msgstr ""
-#: idhub/user/views.py:127
-msgid "The credential was required successfully!"
+#: idhub/user/views.py:137
+msgid "The credential was issued successfully!"
msgstr ""
-#: idhub/user/views.py:129
-msgid "Not exists the credential!"
+#: idhub/user/views.py:141
+msgid "The credential does not exist!"
msgstr ""
-#: idhub/user/views.py:135
-msgid "Credentials Presentation"
+#: idhub/user/views.py:147
+msgid "Credential presentation"
msgstr ""
-#: idhub/user/views.py:148
+#: idhub/user/views.py:162
msgid "The credential was presented successfully!"
msgstr ""
-#: idhub/user/views.py:150
+#: idhub/user/views.py:164
msgid "Error sending credential!"
msgstr ""
-#: idhub/user/views.py:156 idhub/user/views.py:194 idhub/user/views.py:213
-msgid "Identities (DID)"
-msgstr ""
-
-#: idhub/user/views.py:169
-msgid "Add a new Identities (DID)"
+#: idhub/user/views.py:183
+msgid "Add a new Identity (DID)"
msgstr ""
diff --git a/locale/es/LC_MESSAGES/django-corregido.po b/locale/es/LC_MESSAGES/django-corregido.po
new file mode 100644
index 0000000..8ddff6d
--- /dev/null
+++ b/locale/es/LC_MESSAGES/django-corregido.po
@@ -0,0 +1,2565 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR , YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-11-07 17:57+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: LANGUAGE \n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+
+#: env/lib/python3.11/site-packages/bootstrap4/components.py:17
+#: env/lib/python3.11/site-packages/bootstrap4/templates/bootstrap4/form_errors.html:3
+#: env/lib/python3.11/site-packages/bootstrap4/templates/bootstrap4/messages.html:4
+#: env/lib/python3.11/site-packages/django_bootstrap5/components.py:26
+msgid "close"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/_termui_impl.py:518
+#, python-brace-format
+msgid "{editor}: Editing failed"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/_termui_impl.py:522
+#, python-brace-format
+msgid "{editor}: Editing failed: {e}"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/core.py:1120
+msgid "Aborted!"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/core.py:1309
+#: env/lib/python3.11/site-packages/click/decorators.py:559
+msgid "Show this message and exit."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/core.py:1340
+#: env/lib/python3.11/site-packages/click/core.py:1370
+#, python-brace-format
+msgid "(Deprecated) {text}"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/core.py:1387
+msgid "Options"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/core.py:1413
+#, python-brace-format
+msgid "Got unexpected extra argument ({args})"
+msgid_plural "Got unexpected extra arguments ({args})"
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python3.11/site-packages/click/core.py:1429
+msgid "DeprecationWarning: The command {name!r} is deprecated."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/core.py:1636
+msgid "Commands"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/core.py:1668
+msgid "Missing command."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/core.py:1746
+msgid "No such command {name!r}."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/core.py:2310
+msgid "Value must be an iterable."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/core.py:2331
+#, python-brace-format
+msgid "Takes {nargs} values but 1 was given."
+msgid_plural "Takes {nargs} values but {len} were given."
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python3.11/site-packages/click/core.py:2778
+#, python-brace-format
+msgid "env var: {var}"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/core.py:2808
+msgid "(dynamic)"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/core.py:2821
+#, python-brace-format
+msgid "default: {default}"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/core.py:2834
+msgid "required"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/decorators.py:465
+#, python-format
+msgid "%(prog)s, version %(version)s"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/decorators.py:528
+msgid "Show the version and exit."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/exceptions.py:44
+#: env/lib/python3.11/site-packages/click/exceptions.py:80
+#, python-brace-format
+msgid "Error: {message}"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/exceptions.py:72
+#, python-brace-format
+msgid "Try '{command} {option}' for help."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/exceptions.py:121
+#, python-brace-format
+msgid "Invalid value: {message}"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/exceptions.py:123
+#, python-brace-format
+msgid "Invalid value for {param_hint}: {message}"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/exceptions.py:179
+msgid "Missing argument"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/exceptions.py:181
+msgid "Missing option"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/exceptions.py:183
+msgid "Missing parameter"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/exceptions.py:185
+#, python-brace-format
+msgid "Missing {param_type}"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/exceptions.py:192
+#, python-brace-format
+msgid "Missing parameter: {param_name}"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/exceptions.py:212
+#, python-brace-format
+msgid "No such option: {name}"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/exceptions.py:224
+#, python-brace-format
+msgid "Did you mean {possibility}?"
+msgid_plural "(Possible options: {possibilities})"
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python3.11/site-packages/click/exceptions.py:262
+msgid "unknown error"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/exceptions.py:269
+msgid "Could not open file {filename!r}: {message}"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/parser.py:231
+msgid "Argument {name!r} takes {nargs} values."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/parser.py:413
+msgid "Option {name!r} does not take a value."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/parser.py:474
+msgid "Option {name!r} requires an argument."
+msgid_plural "Option {name!r} requires {nargs} arguments."
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python3.11/site-packages/click/shell_completion.py:319
+msgid "Shell completion is not supported for Bash versions older than 4.4."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/shell_completion.py:326
+msgid "Couldn't detect Bash version, shell completion is not supported."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/termui.py:158
+msgid "Repeat for confirmation"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/termui.py:174
+msgid "Error: The value you entered was invalid."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/termui.py:176
+#, python-brace-format
+msgid "Error: {e.message}"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/termui.py:187
+msgid "Error: The two entered values do not match."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/termui.py:243
+msgid "Error: invalid input"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/termui.py:773
+msgid "Press any key to continue..."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/types.py:266
+#, python-brace-format
+msgid ""
+"Choose from:\n"
+"\t{choices}"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/types.py:298
+msgid "{value!r} is not {choice}."
+msgid_plural "{value!r} is not one of {choices}."
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python3.11/site-packages/click/types.py:392
+msgid "{value!r} does not match the format {format}."
+msgid_plural "{value!r} does not match the formats {formats}."
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python3.11/site-packages/click/types.py:414
+msgid "{value!r} is not a valid {number_type}."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/types.py:470
+#, python-brace-format
+msgid "{value} is not in the range {range}."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/types.py:611
+msgid "{value!r} is not a valid boolean."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/types.py:635
+msgid "{value!r} is not a valid UUID."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/types.py:822
+msgid "file"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/types.py:824
+msgid "directory"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/types.py:826
+msgid "path"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/types.py:877
+msgid "{name} {filename!r} does not exist."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/types.py:886
+msgid "{name} {filename!r} is a file."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/types.py:894
+#, python-brace-format
+msgid "{name} '{filename}' is a directory."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/types.py:903
+msgid "{name} {filename!r} is not readable."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/types.py:912
+msgid "{name} {filename!r} is not writable."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/types.py:921
+msgid "{name} {filename!r} is not executable."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/click/types.py:988
+#, python-brace-format
+msgid "{len_type} values are required, but {len_value} was given."
+msgid_plural "{len_type} values are required, but {len_value} were given."
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python3.11/site-packages/django/contrib/messages/apps.py:15
+msgid "Messages"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/contrib/sitemaps/apps.py:8
+msgid "Site Maps"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/contrib/staticfiles/apps.py:9
+msgid "Static Files"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/contrib/syndication/apps.py:7
+msgid "Syndication"
+msgstr ""
+
+#. Translators: String used to replace omitted page numbers in elided page
+#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10].
+#: env/lib/python3.11/site-packages/django/core/paginator.py:30
+msgid "…"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/core/paginator.py:50
+msgid "That page number is not an integer"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/core/paginator.py:52
+msgid "That page number is less than 1"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/core/paginator.py:54
+msgid "That page contains no results"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/core/validators.py:22
+msgid "Enter a valid value."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/core/validators.py:104
+#: env/lib/python3.11/site-packages/django/forms/fields.py:752
+msgid "Enter a valid URL."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/core/validators.py:165
+msgid "Enter a valid integer."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/core/validators.py:176
+msgid "Enter a valid email address."
+msgstr ""
+
+#. Translators: "letters" means latin letters: a-z and A-Z.
+#: env/lib/python3.11/site-packages/django/core/validators.py:259
+msgid ""
+"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/core/validators.py:267
+msgid ""
+"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or "
+"hyphens."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/core/validators.py:279
+#: env/lib/python3.11/site-packages/django/core/validators.py:287
+#: env/lib/python3.11/site-packages/django/core/validators.py:316
+msgid "Enter a valid IPv4 address."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/core/validators.py:296
+#: env/lib/python3.11/site-packages/django/core/validators.py:317
+msgid "Enter a valid IPv6 address."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/core/validators.py:308
+#: env/lib/python3.11/site-packages/django/core/validators.py:315
+msgid "Enter a valid IPv4 or IPv6 address."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/core/validators.py:351
+msgid "Enter only digits separated by commas."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/core/validators.py:357
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/core/validators.py:392
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/core/validators.py:401
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/core/validators.py:410
+#, python-format
+msgid "Ensure this value is a multiple of step size %(limit_value)s."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/core/validators.py:420
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d character (it has "
+"%(show_value)d)."
+msgid_plural ""
+"Ensure this value has at least %(limit_value)d characters (it has "
+"%(show_value)d)."
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python3.11/site-packages/django/core/validators.py:438
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d character (it has "
+"%(show_value)d)."
+msgid_plural ""
+"Ensure this value has at most %(limit_value)d characters (it has "
+"%(show_value)d)."
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python3.11/site-packages/django/core/validators.py:461
+#: env/lib/python3.11/site-packages/django/forms/fields.py:347
+#: env/lib/python3.11/site-packages/django/forms/fields.py:386
+msgid "Enter a number."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/core/validators.py:463
+#, python-format
+msgid "Ensure that there are no more than %(max)s digit in total."
+msgid_plural "Ensure that there are no more than %(max)s digits in total."
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python3.11/site-packages/django/core/validators.py:468
+#, python-format
+msgid "Ensure that there are no more than %(max)s decimal place."
+msgid_plural "Ensure that there are no more than %(max)s decimal places."
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python3.11/site-packages/django/core/validators.py:473
+#, python-format
+msgid ""
+"Ensure that there are no more than %(max)s digit before the decimal point."
+msgid_plural ""
+"Ensure that there are no more than %(max)s digits before the decimal point."
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python3.11/site-packages/django/core/validators.py:544
+#, python-format
+msgid ""
+"File extension “%(extension)s” is not allowed. Allowed extensions are: "
+"%(allowed_extensions)s."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/core/validators.py:605
+msgid "Null characters are not allowed."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/base.py:1423
+#: env/lib/python3.11/site-packages/django/forms/models.py:893
+msgid "and"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/base.py:1425
+#, python-format
+msgid "%(model_name)s with this %(field_labels)s already exists."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/constraints.py:17
+#, python-format
+msgid "Constraint “%(name)s” is violated."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:128
+#, python-format
+msgid "Value %(value)r is not a valid choice."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:129
+msgid "This field cannot be null."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:130
+msgid "This field cannot be blank."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:131
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr ""
+
+#. Translators: The 'lookup_type' is one of 'date', 'year' or
+#. 'month'. Eg: "Title must be unique for pub_date year"
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:135
+#, python-format
+msgid ""
+"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:173
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1094
+#, python-format
+msgid "“%(value)s” value must be either True or False."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1095
+#, python-format
+msgid "“%(value)s” value must be either True, False, or None."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1097
+msgid "Boolean (Either True or False)"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1147
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1149
+msgid "String (unlimited)"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1253
+msgid "Comma-separated integers"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1354
+#, python-format
+msgid ""
+"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD "
+"format."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1358
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1493
+#, python-format
+msgid ""
+"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid "
+"date."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1362
+msgid "Date (without time)"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1489
+#, python-format
+msgid ""
+"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[."
+"uuuuuu]][TZ] format."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1497
+#, python-format
+msgid ""
+"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]"
+"[TZ]) but it is an invalid date/time."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1502
+msgid "Date (with time)"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1626
+#, python-format
+msgid "“%(value)s” value must be a decimal number."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1628
+msgid "Decimal number"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1789
+#, python-format
+msgid ""
+"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[."
+"uuuuuu] format."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1793
+msgid "Duration"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1845
+msgid "Email address"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1870
+msgid "File path"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1948
+#, python-format
+msgid "“%(value)s” value must be a float."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1950
+msgid "Floating point number"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1990
+#, python-format
+msgid "“%(value)s” value must be an integer."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1992
+msgid "Integer"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2088
+msgid "Big (8 byte) integer"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2105
+msgid "Small integer"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2113
+msgid "IPv4 address"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2144
+msgid "IP address"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2237
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2238
+#, python-format
+msgid "“%(value)s” value must be either None, True or False."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2240
+msgid "Boolean (Either True, False or None)"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2291
+msgid "Positive big integer"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2306
+msgid "Positive integer"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2321
+msgid "Positive small integer"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2337
+#, python-format
+msgid "Slug (up to %(max_length)s)"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2373
+msgid "Text"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2448
+#, python-format
+msgid ""
+"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] "
+"format."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2452
+#, python-format
+msgid ""
+"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an "
+"invalid time."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2456
+msgid "Time"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2564
+msgid "URL"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2588
+msgid "Raw binary data"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2653
+#, python-format
+msgid "“%(value)s” is not a valid UUID."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2655
+msgid "Universally unique identifier"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/files.py:232
+#: idhub/templates/idhub/admin/import.html:16
+msgid "File"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/files.py:393
+msgid "Image"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/json.py:26
+msgid "A JSON object"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/json.py:28
+msgid "Value must be valid JSON."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/related.py:919
+#, python-format
+msgid "%(model)s instance with %(field)s %(value)r does not exist."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/related.py:921
+msgid "Foreign Key (type determined by related field)"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/related.py:1212
+msgid "One-to-one relationship"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/related.py:1269
+#, python-format
+msgid "%(from)s-%(to)s relationship"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/related.py:1271
+#, python-format
+msgid "%(from)s-%(to)s relationships"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/db/models/fields/related.py:1319
+msgid "Many-to-many relationship"
+msgstr ""
+
+#. Translators: If found as last label character, these punctuation
+#. characters will prevent the default label_suffix to be appended to the label
+#: env/lib/python3.11/site-packages/django/forms/boundfield.py:184
+msgid ":?.!"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/fields.py:91
+msgid "This field is required."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/fields.py:298
+msgid "Enter a whole number."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/fields.py:467
+#: env/lib/python3.11/site-packages/django/forms/fields.py:1241
+msgid "Enter a valid date."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/fields.py:490
+#: env/lib/python3.11/site-packages/django/forms/fields.py:1242
+msgid "Enter a valid time."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/fields.py:517
+msgid "Enter a valid date/time."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/fields.py:551
+msgid "Enter a valid duration."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/fields.py:552
+#, python-brace-format
+msgid "The number of days must be between {min_days} and {max_days}."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/fields.py:621
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/fields.py:622
+msgid "No file was submitted."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/fields.py:623
+msgid "The submitted file is empty."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/fields.py:625
+#, python-format
+msgid "Ensure this filename has at most %(max)d character (it has %(length)d)."
+msgid_plural ""
+"Ensure this filename has at most %(max)d characters (it has %(length)d)."
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python3.11/site-packages/django/forms/fields.py:630
+msgid "Please either submit a file or check the clear checkbox, not both."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/fields.py:694
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/fields.py:857
+#: env/lib/python3.11/site-packages/django/forms/fields.py:949
+#: env/lib/python3.11/site-packages/django/forms/models.py:1566
+#, python-format
+msgid "Select a valid choice. %(value)s is not one of the available choices."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/fields.py:951
+#: env/lib/python3.11/site-packages/django/forms/fields.py:1070
+#: env/lib/python3.11/site-packages/django/forms/models.py:1564
+msgid "Enter a list of values."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/fields.py:1071
+msgid "Enter a complete value."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/fields.py:1310
+msgid "Enter a valid UUID."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/fields.py:1340
+msgid "Enter a valid JSON."
+msgstr ""
+
+#. Translators: This is the default suffix added to form field labels
+#: env/lib/python3.11/site-packages/django/forms/forms.py:98
+msgid ":"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/forms.py:244
+#: env/lib/python3.11/site-packages/django/forms/forms.py:328
+#, python-format
+msgid "(Hidden field %(name)s) %(error)s"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/formsets.py:63
+#, python-format
+msgid ""
+"ManagementForm data is missing or has been tampered with. Missing fields: "
+"%(field_names)s. You may need to file a bug report if the issue persists."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/formsets.py:67
+#, python-format
+msgid "Please submit at most %(num)d form."
+msgid_plural "Please submit at most %(num)d forms."
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python3.11/site-packages/django/forms/formsets.py:72
+#, python-format
+msgid "Please submit at least %(num)d form."
+msgid_plural "Please submit at least %(num)d forms."
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python3.11/site-packages/django/forms/formsets.py:484
+#: env/lib/python3.11/site-packages/django/forms/formsets.py:491
+msgid "Order"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/formsets.py:499
+#: idhub/templates/idhub/admin/dids.html:54
+#: idhub/templates/idhub/admin/issue_credentials.html:15
+#: idhub/templates/idhub/admin/issue_credentials.html:18
+#: idhub/templates/idhub/admin/issue_credentials.html:90
+#: idhub/templates/idhub/admin/roles.html:25
+#: idhub/templates/idhub/admin/schemas.html:56
+#: idhub/templates/idhub/admin/services.html:29
+#: idhub/templates/idhub/admin/user.html:15
+#: idhub/templates/idhub/admin/user.html:120
+#: idhub/templates/idhub/admin/user_edit.html:55
+#: idhub/templates/idhub/admin/user_edit.html:87
+#: idhub/templates/idhub/user/dids.html:54
+#: idhub/templates/templates/musician/address_check_delete.html:9
+#: idhub/templates/templates/musician/address_form.html:15
+#: idhub/templates/templates/musician/mailbox_check_delete.html:12
+#: idhub/templates/templates/musician/mailbox_form.html:25
+msgid "Delete"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/models.py:886
+#, python-format
+msgid "Please correct the duplicate data for %(field)s."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/models.py:891
+#, python-format
+msgid "Please correct the duplicate data for %(field)s, which must be unique."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/models.py:898
+#, python-format
+msgid ""
+"Please correct the duplicate data for %(field_name)s which must be unique "
+"for the %(lookup)s in %(date_field)s."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/models.py:907
+msgid "Please correct the duplicate values below."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/models.py:1338
+msgid "The inline value did not match the parent instance."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/models.py:1429
+msgid "Select a valid choice. That choice is not one of the available choices."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/models.py:1568
+#, python-format
+msgid "“%(pk)s” is not a valid value."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/utils.py:226
+#, python-format
+msgid ""
+"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it "
+"may be ambiguous or it may not exist."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/widgets.py:463
+msgid "Clear"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/widgets.py:464
+msgid "Currently"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/widgets.py:465
+msgid "Change"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/widgets.py:794
+msgid "Unknown"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/widgets.py:795
+msgid "Yes"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/forms/widgets.py:796
+msgid "No"
+msgstr ""
+
+#. Translators: Please do not add spaces around commas.
+#: env/lib/python3.11/site-packages/django/template/defaultfilters.py:861
+msgid "yes,no,maybe"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/template/defaultfilters.py:891
+#: env/lib/python3.11/site-packages/django/template/defaultfilters.py:908
+#, python-format
+msgid "%(size)d byte"
+msgid_plural "%(size)d bytes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python3.11/site-packages/django/template/defaultfilters.py:910
+#, python-format
+msgid "%s KB"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/template/defaultfilters.py:912
+#, python-format
+msgid "%s MB"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/template/defaultfilters.py:914
+#, python-format
+msgid "%s GB"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/template/defaultfilters.py:916
+#, python-format
+msgid "%s TB"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/template/defaultfilters.py:918
+#, python-format
+msgid "%s PB"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dateformat.py:73
+msgid "p.m."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dateformat.py:74
+msgid "a.m."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dateformat.py:79
+msgid "PM"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dateformat.py:80
+msgid "AM"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dateformat.py:152
+msgid "midnight"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dateformat.py:154
+msgid "noon"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:7
+msgid "Monday"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:8
+msgid "Tuesday"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:9
+msgid "Wednesday"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:10
+msgid "Thursday"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:11
+msgid "Friday"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:12
+msgid "Saturday"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:13
+msgid "Sunday"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:16
+msgid "Mon"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:17
+msgid "Tue"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:18
+msgid "Wed"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:19
+msgid "Thu"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:20
+msgid "Fri"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:21
+msgid "Sat"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:22
+msgid "Sun"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:25
+msgid "January"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:26
+msgid "February"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:27
+msgid "March"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:28
+msgid "April"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:29
+msgid "May"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:30
+msgid "June"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:31
+msgid "July"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:32
+msgid "August"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:33
+msgid "September"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:34
+msgid "October"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:35
+msgid "November"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:36
+msgid "December"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:39
+msgid "jan"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:40
+msgid "feb"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:41
+msgid "mar"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:42
+msgid "apr"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:43
+msgid "may"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:44
+msgid "jun"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:45
+msgid "jul"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:46
+msgid "aug"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:47
+msgid "sep"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:48
+msgid "oct"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:49
+msgid "nov"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:50
+msgid "dec"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:53
+msgctxt "abbrev. month"
+msgid "Jan."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:54
+msgctxt "abbrev. month"
+msgid "Feb."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:55
+msgctxt "abbrev. month"
+msgid "March"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:56
+msgctxt "abbrev. month"
+msgid "April"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:57
+msgctxt "abbrev. month"
+msgid "May"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:58
+msgctxt "abbrev. month"
+msgid "June"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:59
+msgctxt "abbrev. month"
+msgid "July"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:60
+msgctxt "abbrev. month"
+msgid "Aug."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:61
+msgctxt "abbrev. month"
+msgid "Sept."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:62
+msgctxt "abbrev. month"
+msgid "Oct."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:63
+msgctxt "abbrev. month"
+msgid "Nov."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:64
+msgctxt "abbrev. month"
+msgid "Dec."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:67
+msgctxt "alt. month"
+msgid "January"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:68
+msgctxt "alt. month"
+msgid "February"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:69
+msgctxt "alt. month"
+msgid "March"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:70
+msgctxt "alt. month"
+msgid "April"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:71
+msgctxt "alt. month"
+msgid "May"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:72
+msgctxt "alt. month"
+msgid "June"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:73
+msgctxt "alt. month"
+msgid "July"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:74
+msgctxt "alt. month"
+msgid "August"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:75
+msgctxt "alt. month"
+msgid "September"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:76
+msgctxt "alt. month"
+msgid "October"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:77
+msgctxt "alt. month"
+msgid "November"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/dates.py:78
+msgctxt "alt. month"
+msgid "December"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/ipv6.py:8
+msgid "This is not a valid IPv6 address."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/text.py:78
+#, python-format
+msgctxt "String to return when truncating text"
+msgid "%(truncated_text)s…"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/text.py:254
+msgid "or"
+msgstr ""
+
+#. Translators: This string is used as a separator between list elements
+#: env/lib/python3.11/site-packages/django/utils/text.py:273
+#: env/lib/python3.11/site-packages/django/utils/timesince.py:135
+msgid ", "
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/utils/timesince.py:8
+#, python-format
+msgid "%(num)d year"
+msgid_plural "%(num)d years"
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python3.11/site-packages/django/utils/timesince.py:9
+#, python-format
+msgid "%(num)d month"
+msgid_plural "%(num)d months"
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python3.11/site-packages/django/utils/timesince.py:10
+#, python-format
+msgid "%(num)d week"
+msgid_plural "%(num)d weeks"
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python3.11/site-packages/django/utils/timesince.py:11
+#, python-format
+msgid "%(num)d day"
+msgid_plural "%(num)d days"
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python3.11/site-packages/django/utils/timesince.py:12
+#, python-format
+msgid "%(num)d hour"
+msgid_plural "%(num)d hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python3.11/site-packages/django/utils/timesince.py:13
+#, python-format
+msgid "%(num)d minute"
+msgid_plural "%(num)d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python3.11/site-packages/django/views/csrf.py:111
+msgid "Forbidden"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/csrf.py:112
+msgid "CSRF verification failed. Request aborted."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/csrf.py:116
+msgid ""
+"You are seeing this message because this HTTPS site requires a “Referer "
+"header” to be sent by your web browser, but none was sent. This header is "
+"required for security reasons, to ensure that your browser is not being "
+"hijacked by third parties."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/csrf.py:122
+msgid ""
+"If you have configured your browser to disable “Referer” headers, please re-"
+"enable them, at least for this site, or for HTTPS connections, or for “same-"
+"origin” requests."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/csrf.py:127
+msgid ""
+"If you are using the tag or "
+"including the “Referrer-Policy: no-referrer” header, please remove them. The "
+"CSRF protection requires the “Referer” header to do strict referer checking. "
+"If you’re concerned about privacy, use alternatives like for links to third-party sites."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/csrf.py:136
+msgid ""
+"You are seeing this message because this site requires a CSRF cookie when "
+"submitting forms. This cookie is required for security reasons, to ensure "
+"that your browser is not being hijacked by third parties."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/csrf.py:142
+msgid ""
+"If you have configured your browser to disable cookies, please re-enable "
+"them, at least for this site, or for “same-origin” requests."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/csrf.py:148
+msgid "More information is available with DEBUG=True."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/generic/dates.py:44
+msgid "No year specified"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/generic/dates.py:64
+#: env/lib/python3.11/site-packages/django/views/generic/dates.py:115
+#: env/lib/python3.11/site-packages/django/views/generic/dates.py:214
+msgid "Date out of range"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/generic/dates.py:94
+msgid "No month specified"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/generic/dates.py:147
+msgid "No day specified"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/generic/dates.py:194
+msgid "No week specified"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/generic/dates.py:349
+#: env/lib/python3.11/site-packages/django/views/generic/dates.py:380
+#, python-format
+msgid "No %(verbose_name_plural)s available"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/generic/dates.py:652
+#, python-format
+msgid ""
+"Future %(verbose_name_plural)s not available because %(class_name)s."
+"allow_future is False."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/generic/dates.py:692
+#, python-format
+msgid "Invalid date string “%(datestr)s” given format “%(format)s”"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/generic/detail.py:56
+#, python-format
+msgid "No %(verbose_name)s found matching the query"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/generic/list.py:70
+msgid "Page is not “last”, nor can it be converted to an int."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/generic/list.py:77
+#, python-format
+msgid "Invalid page (%(page_number)s): %(message)s"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/generic/list.py:169
+#, python-format
+msgid "Empty list and “%(class_name)s.allow_empty” is False."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/static.py:38
+msgid "Directory indexes are not allowed here."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/static.py:40
+#, python-format
+msgid "“%(path)s” does not exist"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/static.py:79
+#, python-format
+msgid "Index of %(directory)s"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:7
+#: env/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:220
+msgid "The install worked successfully! Congratulations!"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:206
+#, python-format
+msgid ""
+"View release notes for Django %(version)s"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:221
+#, python-format
+msgid ""
+"You are seeing this page because DEBUG=True is in your settings file and you have not "
+"configured any URLs."
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:229
+msgid "Django Documentation"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:230
+msgid "Topics, references, & how-to’s"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:238
+msgid "Tutorial: A Polling App"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:239
+msgid "Get started with Django"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:247
+msgid "Django Community"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:248
+msgid "Connect, get help, or contribute"
+msgstr ""
+
+#: env/lib/python3.11/site-packages/isort/main.py:158
+msgid "show this help message and exit"
+msgstr ""
+
+#: idhub/admin/views.py:39 idhub/user/views.py:33
+msgid "Dashboard"
+msgstr ""
+
+#: idhub/admin/views.py:40 idhub/user/views.py:34
+msgid "Success"
+msgstr ""
+
+#: idhub/admin/views.py:45
+msgid "People Management ** User management"
+msgstr ""
+
+#: idhub/admin/views.py:50
+msgid "Access Control Management ** Access control management"
+msgstr ""
+
+#: idhub/admin/views.py:55
+msgid "Credentials Management ** Credential Management"
+msgstr ""
+
+#: idhub/admin/views.py:60
+msgid "Templates Management ** Template Management"
+msgstr ""
+
+#: idhub/admin/views.py:65
+msgid "Massive Data Management ** Data file management"
+msgstr ""
+
+#: idhub/admin/views.py:71
+msgid "People list ** View users"
+msgstr ""
+
+#: idhub/admin/views.py:84
+msgid "User Profile ** User personal information"
+msgstr ""
+
+#: idhub/admin/views.py:108
+msgid "Is not possible deactivate your account! ** It was not possible deactivate the account!"
+msgstr ""
+
+#: idhub/admin/views.py:129 idhub/admin/views.py:235
+msgid "Is not possible delete your account! ** It was not possible delete the account!"
+msgstr ""
+
+#: idhub/admin/views.py:141
+msgid "People Register ** Add a user"
+msgstr ""
+
+#: idhub/admin/views.py:156
+msgid "The account is created successfully ** The account was created successfully"
+msgstr ""
+
+#: idhub/admin/views.py:167 idhub/admin/views.py:204
+msgid "People add membership ** Associate a membership to the user"
+msgstr ""
+
+#: idhub/admin/views.py:242
+msgid "Add Rol to User ** Add a user role to access a service"
+msgstr ""
+
+#: idhub/admin/views.py:272
+msgid "Edit Rol to User ** Modify a user role to access a service"
+msgstr ""
+
+#: idhub/admin/views.py:307
+msgid "Roles Management ** Role Management"
+msgstr ""
+
+#: idhub/admin/views.py:319 idhub/templates/idhub/admin/roles.html:31
+#: idhub/templates/idhub/admin/user_edit.html:93
+msgid "Add Rol ** "Add role"
+msgstr ""
+
+#: idhub/admin/views.py:329
+msgid "Edit Rol ** ** Modify role"
+msgstr ""
+
+#: idhub/admin/views.py:356
+msgid "Service Management ** Service management"
+msgstr ""
+
+#: idhub/admin/views.py:368 idhub/templates/idhub/admin/services.html:35
+msgid "Add Service ** Add service"
+msgstr ""
+
+#: idhub/admin/views.py:378
+msgid "Edit Service ** Modify service"
+msgstr ""
+
+#: idhub/admin/views.py:405
+msgid "Credentials list ** Credential list"
+msgstr ""
+
+#: idhub/admin/views.py:418
+msgid "Change status of Credential"
+msgstr ""
+
+#: idhub/admin/views.py:460
+msgid "Credential revoked successfully"
+msgstr ""
+
+#: idhub/admin/views.py:480
+msgid "Credential deleted successfully"
+msgstr ""
+
+#: idhub/admin/views.py:487 idhub/admin/views.py:518 idhub/admin/views.py:537
+msgid "Organization Identities (DID)"
+msgstr ""
+
+#: idhub/admin/views.py:500
+msgid "Add a new Organization Identities (DID)"
+msgstr ""
+
+#: idhub/admin/views.py:512 idhub/user/views.py:188
+msgid "DID created successfully"
+msgstr ""
+
+#: idhub/admin/views.py:532 idhub/user/views.py:208
+msgid "DID updated successfully"
+msgstr ""
+
+#: idhub/admin/views.py:547 idhub/user/views.py:223
+msgid "DID delete successfully"
+msgstr ""
+
+#: idhub/admin/views.py:554 idhub/templates/idhub/user/profile.html:51
+#: idhub/user/views.py:65
+msgid "Credentials ** Credential management --> idhub/admin/views.py:554 "
+msgid "Credentials ** Credential management --> idhub/user/views.py:65 "
+msgid "Credentials --> idhub/templates/idhub/user/profile.html:51"
+msgstr ""
+
+#: idhub/admin/views.py:561
+msgid "Configure Issues ** Configure credential issuance"
+msgstr ""
+
+#: idhub/admin/views.py:568
+msgid "Template List ** View credential templates"
+msgstr ""
+
+#: idhub/admin/views.py:602
+msgid "Upload Template ** Upload template"
+msgstr ""
+
+#: idhub/admin/views.py:618 idhub/admin/views.py:744
+msgid "There are some errors in the file"
+msgstr ""
+
+#: idhub/admin/views.py:632
+msgid "This template already exists!"
+msgstr ""
+
+#: idhub/admin/views.py:638 idhub/admin/views.py:683
+msgid "This is not a schema valid! ** This is not a valid schema!"
+msgstr ""
+
+#: idhub/admin/views.py:647
+msgid "Import Template ** Import template"
+msgstr ""
+
+#: idhub/admin/views.py:675
+msgid "The schema add successfully! ** The schema was added sucessfully"
+msgstr ""
+
+#: idhub/admin/views.py:700 idhub/admin/views.py:713 idhub/admin/views.py:726
+msgid "Import"
+msgstr ""
+
+#: idhub/admin/views.py:755
+msgid "There aren't file ** The file does not exist!"
+msgstr ""
+
+#: idhub/admin/views.py:760
+msgid "This file already exists!"
+msgstr ""
+
+#: idhub/admin/views.py:799
+msgid "The user not exist! ** The user does not exist!"
+msgstr ""
+
+#: idhub/models.py:57
+msgid "Enabled"
+msgstr ""
+
+#: idhub/models.py:58
+msgid "Issued"
+msgstr ""
+
+#: idhub/models.py:59
+msgid "Revoked"
+msgstr ""
+
+#: idhub/models.py:60
+msgid "Expired"
+msgstr ""
+
+#: idhub/models.py:118
+msgid "Beneficiary"
+msgstr ""
+
+#: idhub/models.py:119
+msgid "Employee"
+msgstr ""
+
+#: idhub/models.py:120
+msgid "Partner ** Member"
+msgstr ""
+
+#: idhub/models.py:122
+msgid "Type of membership"
+msgstr ""
+
+#: idhub/models.py:124
+msgid "Start date"
+msgstr ""
+
+#: idhub/models.py:125
+msgid "What date did the membership start?"
+msgstr ""
+
+#: idhub/models.py:130
+msgid "End date"
+msgstr ""
+
+#: idhub/models.py:131
+msgid "What date did the membership end? ** What date will the membership end"
+msgstr ""
+
+#: idhub/models.py:183
+msgid "Url where to send the presentation"
+msgstr ""
+
+#: idhub/templates/auth/login.html:47
+msgid "Log in"
+msgstr ""
+
+#: idhub/templates/auth/login.html:52
+msgid "Forgot your password? Click here to recover"
+msgstr ""
+
+#: idhub/templates/auth/login_base.html:91
+msgid "Forgot your password?"
+msgstr ""
+
+#: idhub/templates/auth/login_base.html:97
+#, python-format
+msgid ""
+"Send an email to %(support_email)s "
+"including your username and we will provide instructions."
+msgstr ""
+
+#: idhub/templates/auth/password_reset.html:8
+msgid "Password reset"
+msgstr ""
+
+#: idhub/templates/auth/password_reset.html:9
+msgid ""
+"Forgotten your password? Enter your email address below, and we'll email "
+"instructions for setting a new one."
+msgstr ""
+
+#: idhub/templates/auth/password_reset.html:21
+msgid "Reset my password"
+msgstr ""
+
+#: idhub/templates/auth/password_reset_complete.html:9
+msgid "Password reset complete"
+msgstr ""
+
+#: idhub/templates/auth/password_reset_complete.html:10
+msgid "Your password has been set. You may go ahead and log in now."
+msgstr ""
+
+#: idhub/templates/auth/password_reset_complete.html:11 idhub/views.py:9
+msgid "Login"
+msgstr ""
+
+#: idhub/templates/auth/password_reset_confirm.html:9
+msgid "Enter new password"
+msgstr ""
+
+#: idhub/templates/auth/password_reset_confirm.html:10
+msgid ""
+"Please enter your new password twice so we can verify you typed it in "
+"correctly."
+msgstr ""
+
+#: idhub/templates/auth/password_reset_confirm.html:21
+msgid "Change my password"
+msgstr ""
+
+#: idhub/templates/auth/password_reset_confirm.html:29
+msgid "Password reset unsuccessful"
+msgstr ""
+
+#: idhub/templates/auth/password_reset_confirm.html:30
+msgid ""
+"The password reset link was invalid, possibly because it has already been "
+"used."
+msgstr ""
+
+#: idhub/templates/auth/password_reset_confirm.html:31
+msgid "Please request a new password reset."
+msgstr ""
+
+#: idhub/templates/auth/password_reset_done.html:7
+msgid "Password reset sent"
+msgstr ""
+
+#: idhub/templates/auth/password_reset_done.html:9
+msgid ""
+"We've emailed you instructions for setting your password, if an account "
+"exists with the email you entered. You should receive them shortly."
+msgstr ""
+
+#: idhub/templates/auth/password_reset_done.html:11
+msgid ""
+"If you don't receive an email, please make sure you've entered the address "
+"you registered with, and check your spam folder."
+msgstr ""
+
+#: idhub/templates/auth/password_reset_email.html:3
+#: idhub/templates/auth/password_reset_email.txt:2
+#, python-format
+msgid ""
+"You're receiving this email because you requested a password reset for your "
+"user account at %(site_name)s."
+msgstr ""
+
+#: idhub/templates/auth/password_reset_email.html:7
+#: idhub/templates/auth/password_reset_email.txt:4
+msgid "Please go to the following page and choose a new password:"
+msgstr ""
+
+#: idhub/templates/auth/password_reset_email.html:19
+#: idhub/templates/auth/password_reset_email.txt:8
+msgid "Your username, in case you've forgotten:"
+msgstr ""
+
+#: idhub/templates/auth/password_reset_email.html:23
+#: idhub/templates/auth/password_reset_email.txt:10
+#: idhub/templates/idhub/admin/registration/activate_user_email.html:24
+#: idhub/templates/idhub/admin/registration/activate_user_email.txt:15
+msgid "Thanks for using our site!"
+msgstr ""
+
+#: idhub/templates/auth/password_reset_email.html:27
+#: idhub/templates/auth/password_reset_email.txt:12
+#, python-format
+msgid "The %(site_name)s team"
+msgstr ""
+
+#: idhub/templates/auth/password_reset_subject.txt:2
+#, python-format
+msgid "Password reset on %(site_name)s"
+msgstr ""
+
+#: idhub/templates/idhub/admin/credentials.html:15
+#: idhub/templates/idhub/user/credentials.html:15
+#: idhub/templates/templates/musician/billing.html:21
+#: idhub/templates/templates/musician/databases.html:17
+#: idhub/templates/templates/musician/domain_detail.html:17
+msgid "Type"
+msgstr ""
+
+#: idhub/templates/idhub/admin/credentials.html:16
+#: idhub/templates/idhub/user/credentials.html:16
+msgid "Details"
+msgstr ""
+
+#: idhub/templates/idhub/admin/credentials.html:17
+#: idhub/templates/idhub/user/credentials.html:17
+msgid "Issue ** Issued"
+msgstr ""
+
+#: idhub/templates/idhub/admin/credentials.html:18
+#: idhub/templates/idhub/user/credentials.html:18
+msgid "Status"
+msgstr ""
+
+#: idhub/templates/idhub/admin/credentials.html:19
+msgid "User"
+msgstr ""
+
+#: idhub/templates/idhub/admin/credentials.html:31
+#: idhub/templates/idhub/admin/people.html:37
+#: idhub/templates/idhub/admin/schemas.html:30
+msgid "View"
+msgstr ""
+
+#: idhub/templates/idhub/admin/did_register.html:29
+#: idhub/templates/idhub/admin/import_step3.html:27
+#: idhub/templates/idhub/admin/people_membership_register.html:29
+#: idhub/templates/idhub/admin/people_register.html:25
+#: idhub/templates/idhub/admin/people_rol_register.html:29
+#: idhub/templates/idhub/admin/rol_register.html:29
+#: idhub/templates/idhub/admin/schemas_new.html:27
+#: idhub/templates/idhub/admin/service_register.html:29
+#: idhub/templates/idhub/admin/user_edit.html:27
+#: idhub/templates/idhub/user/credentials_presentation.html:29
+#: idhub/templates/idhub/user/credentials_request.html:29
+#: idhub/templates/idhub/user/did_register.html:29
+#: idhub/templates/idhub/user/profile.html:35
+#: idhub/templates/templates/musician/address_check_delete.html:10
+#: idhub/templates/templates/musician/address_form.html:11
+#: idhub/templates/templates/musician/mailbox_change_password.html:11
+#: idhub/templates/templates/musician/mailbox_check_delete.html:13
+#: idhub/templates/templates/musician/mailbox_form.html:20
+msgid "Cancel"
+msgstr ""
+
+#: idhub/templates/idhub/admin/did_register.html:30
+#: idhub/templates/idhub/admin/import_step3.html:28
+#: idhub/templates/idhub/admin/people_membership_register.html:30
+#: idhub/templates/idhub/admin/people_register.html:26
+#: idhub/templates/idhub/admin/people_rol_register.html:30
+#: idhub/templates/idhub/admin/rol_register.html:30
+#: idhub/templates/idhub/admin/schemas_new.html:28
+#: idhub/templates/idhub/admin/service_register.html:30
+#: idhub/templates/idhub/admin/user_edit.html:28
+#: idhub/templates/idhub/user/did_register.html:30
+#: idhub/templates/idhub/user/profile.html:36
+#: idhub/templates/templates/musician/address_form.html:12
+#: idhub/templates/templates/musician/mailbox_change_password.html:12
+#: idhub/templates/templates/musician/mailbox_form.html:21
+msgid "Save"
+msgstr ""
+
+#: idhub/templates/idhub/admin/dids.html:15
+#: idhub/templates/idhub/user/dids.html:15
+msgid "Date"
+msgstr ""
+
+#: idhub/templates/idhub/admin/dids.html:16
+#: idhub/templates/idhub/user/dids.html:16
+msgid "Label"
+msgstr ""
+
+#: idhub/templates/idhub/admin/dids.html:28
+#: idhub/templates/idhub/admin/roles.html:24
+#: idhub/templates/idhub/admin/services.html:28
+#: idhub/templates/idhub/admin/user_edit.html:54
+#: idhub/templates/idhub/admin/user_edit.html:86
+#: idhub/templates/idhub/user/dids.html:28
+msgid "Edit"
+msgstr ""
+
+#: idhub/templates/idhub/admin/dids.html:29
+#: idhub/templates/idhub/admin/schemas.html:31
+#: idhub/templates/idhub/user/dids.html:29
+msgid "Remove"
+msgstr ""
+
+#: idhub/templates/idhub/admin/dids.html:35
+#: idhub/templates/idhub/user/dids.html:35
+msgid "Add Identity ** Add identity"
+msgstr ""
+
+#: idhub/templates/idhub/admin/dids.html:46
+#: idhub/templates/idhub/user/dids.html:46
+msgid "Delete DID"
+msgstr ""
+
+#: idhub/templates/idhub/admin/dids.html:50
+#: idhub/templates/idhub/user/dids.html:50
+msgid "Are you sure that you want delete this DID?"
+msgstr ""
+
+#: idhub/templates/idhub/admin/import.html:15
+#: idhub/templates/idhub/admin/import_step2.html:15
+#: idhub/templates/idhub/admin/schemas.html:15
+msgid "Created at"
+msgstr ""
+
+#: idhub/templates/idhub/admin/import.html:17
+msgid "success ** Success"
+msgstr ""
+
+#: idhub/templates/idhub/admin/import.html:31
+msgid "Import Datas ** Import data"
+msgstr ""
+
+#: idhub/templates/idhub/admin/import_step2.html:16
+#: idhub/templates/idhub/admin/schemas.html:16
+msgid "Template file"
+msgstr ""
+
+#: idhub/templates/idhub/admin/import_step2.html:26
+msgid "Import Dates ** Import data""
+msgstr ""
+
+#: idhub/templates/idhub/admin/issue_credentials.html:14
+#: idhub/templates/idhub/admin/issue_credentials.html:72
+msgid "Revoke"
+msgstr ""
+
+#: idhub/templates/idhub/admin/issue_credentials.html:54
+#: idhub/templates/idhub/user/credential.html:41
+msgid "View in JSON format"
+msgstr ""
+
+#: idhub/templates/idhub/admin/issue_credentials.html:64
+msgid "Revoke credential"
+msgstr ""
+
+#: idhub/templates/idhub/admin/issue_credentials.html:68
+msgid "Are you sure that you want revoke this credential?"
+msgstr ""
+
+#: idhub/templates/idhub/admin/issue_credentials.html:82
+msgid "Delete credential"
+msgstr ""
+
+#: idhub/templates/idhub/admin/issue_credentials.html:86
+msgid "Are you sure that you want delete this Credential?"
+msgstr ""
+
+#: idhub/templates/idhub/admin/people.html:13
+msgid "Last name"
+msgstr ""
+
+#: idhub/templates/idhub/admin/people.html:14
+msgid "First name"
+msgstr ""
+
+#: idhub/templates/idhub/admin/people.html:16
+#: idhub/templates/idhub/admin/user.html:62
+#: idhub/templates/idhub/admin/user_edit.html:41
+#: idhub/templates/idhub/user/profile.html:48
+msgid "Membership"
+msgstr ""
+
+#: idhub/templates/idhub/admin/people.html:17
+msgid "Role"
+msgstr ""
+
+#: idhub/templates/idhub/admin/registration/activate_user_email.html:2
+#: idhub/templates/idhub/admin/registration/activate_user_subject.txt:2
+msgid "IdHub"
+msgstr ""
+
+#: idhub/templates/idhub/admin/registration/activate_user_email.html:4
+#: idhub/templates/idhub/admin/registration/activate_user_email.txt:5
+#, python-format
+msgid ""
+"You're receiving this email because your user account at %(site)s has been "
+"activated."
+msgstr ""
+
+#: idhub/templates/idhub/admin/registration/activate_user_email.html:8
+#: idhub/templates/idhub/admin/registration/activate_user_email.txt:7
+msgid "Your username is:"
+msgstr ""
+
+#: idhub/templates/idhub/admin/registration/activate_user_email.html:12
+#: idhub/templates/idhub/admin/registration/activate_user_email.txt:9
+msgid "Please go to the following page and choose a password:"
+msgstr ""
+
+#: idhub/templates/idhub/admin/registration/activate_user_email.html:28
+#: idhub/templates/idhub/admin/registration/activate_user_email.txt:17
+#, python-format
+msgid "The %(site)s team"
+msgstr ""
+
+#: idhub/templates/idhub/admin/registration/activate_user_email.txt:3
+msgid "Idhub"
+msgstr ""
+
+#: idhub/templates/idhub/admin/registration/activate_user_subject.txt:3
+#, python-format
+msgid "User activation on %(site)s"
+msgstr ""
+
+#: idhub/templates/idhub/admin/roles.html:15
+#: idhub/templates/idhub/admin/services.html:17
+#: idhub/templates/idhub/admin/user.html:87
+#: idhub/templates/idhub/admin/user_edit.html:73
+#: idhub/templates/idhub/user/roles.html:15
+msgid "Rol ** Role"
+msgstr ""
+
+#: idhub/templates/idhub/admin/schemas.html:17
+#: idhub/templates/templates/musician/mailboxes.html:14
+msgid "Name"
+msgstr ""
+
+#: idhub/templates/idhub/admin/schemas.html:18
+#: idhub/templates/idhub/admin/services.html:16
+#: idhub/templates/idhub/admin/user.html:88
+#: idhub/templates/idhub/admin/user_edit.html:74
+#: idhub/templates/idhub/user/roles.html:16
+msgid "Description"
+msgstr ""
+
+#: idhub/templates/idhub/admin/schemas.html:37
+msgid "Add Template ** Add template"
+msgstr ""
+
+#: idhub/templates/idhub/admin/schemas.html:48
+msgid "Delete Template ** Delete template"
+msgstr ""
+
+#: idhub/templates/idhub/admin/schemas.html:52
+msgid "Are you sure that you want delete this template?"
+msgstr ""
+
+#: idhub/templates/idhub/admin/schemas_import.html:15
+msgid "Template available ** Available templates"
+msgstr ""
+
+#: idhub/templates/idhub/admin/schemas_import.html:23
+msgid "Add"
+msgstr ""
+
+#: idhub/templates/idhub/admin/schemas_import.html:29
+msgid "Add template"
+msgstr ""
+
+#: idhub/templates/idhub/admin/services.html:15
+#: idhub/templates/idhub/admin/user.html:89
+#: idhub/templates/idhub/admin/user_edit.html:75
+#: idhub/templates/idhub/user/roles.html:17
+msgid "Service"
+msgstr ""
+
+#: idhub/templates/idhub/admin/user.html:13
+msgid "Modify"
+msgstr ""
+
+#: idhub/templates/idhub/admin/user.html:14
+msgid "Deactivate"
+msgstr ""
+
+#: idhub/templates/idhub/admin/user.html:14
+msgid "Activate"
+msgstr ""
+
+#: idhub/templates/idhub/admin/user.html:63
+#: idhub/templates/idhub/admin/user_edit.html:42
+#: idhub/templates/idhub/user/profile.html:49
+msgid "From"
+msgstr ""
+
+#: idhub/templates/idhub/admin/user.html:64
+#: idhub/templates/idhub/admin/user_edit.html:43
+#: idhub/templates/idhub/user/profile.html:50
+msgid "To"
+msgstr ""
+
+#: idhub/templates/idhub/admin/user.html:112
+msgid "Delete user"
+msgstr ""
+
+#: idhub/templates/idhub/admin/user.html:116
+msgid "Are you sure that you want delete this user?"
+msgstr ""
+
+#: idhub/templates/idhub/admin/user_edit.html:61
+msgid "Add membership"
+msgstr ""
+
+#: idhub/templates/idhub/user/credentials_presentation.html:30
+msgid "Send"
+msgstr ""
+
+#: idhub/templates/idhub/user/credentials_request.html:30
+msgid "Request"
+msgstr ""
+
+#: idhub/templates/idhub/user/profile.html:13
+msgid "ARCO Forms"
+msgstr ""
+
+#: idhub/templates/idhub/user/profile.html:14
+msgid "Notice of Privacy"
+msgstr ""
+
+#: idhub/templates/templates/musician/address_check_delete.html:7
+#, python-format
+msgid "Are you sure that you want remove the address: \"%(address_name)s\"?"
+msgstr ""
+
+#: idhub/templates/templates/musician/address_check_delete.html:8
+#: idhub/templates/templates/musician/mailbox_check_delete.html:11
+msgid "WARNING: This action cannot be undone."
+msgstr ""
+
+#: idhub/templates/templates/musician/addresses.html:15
+msgid "Email"
+msgstr ""
+
+#: idhub/templates/templates/musician/addresses.html:16
+msgid "Domain"
+msgstr ""
+
+#: idhub/templates/templates/musician/addresses.html:17
+#: idhub/templates/templates/musician/mail_base.html:22
+msgid "Mailboxes"
+msgstr ""
+
+#: idhub/templates/templates/musician/addresses.html:18
+msgid "Forward"
+msgstr ""
+
+#: idhub/templates/templates/musician/addresses.html:38
+msgid "New mail address"
+msgstr ""
+
+#: idhub/templates/templates/musician/billing.html:6
+msgid "Billing"
+msgstr ""
+
+#: idhub/templates/templates/musician/billing.html:7
+msgid "Billing page description."
+msgstr ""
+
+#: idhub/templates/templates/musician/billing.html:19
+msgid "Number"
+msgstr ""
+
+#: idhub/templates/templates/musician/billing.html:20
+msgid "Bill date"
+msgstr ""
+
+#: idhub/templates/templates/musician/billing.html:22
+msgid "Total"
+msgstr ""
+
+#: idhub/templates/templates/musician/billing.html:23
+msgid "Download PDF"
+msgstr ""
+
+#: idhub/templates/templates/musician/components/table_paginator.html:15
+msgid "Previous"
+msgstr ""
+
+#: idhub/templates/templates/musician/components/table_paginator.html:29
+msgid "Next"
+msgstr ""
+
+#: idhub/templates/templates/musician/dashboard.html:6
+msgid "Welcome back"
+msgstr ""
+
+#: idhub/templates/templates/musician/dashboard.html:8
+#, python-format
+msgid "Last time you logged in was: %(last_login)s"
+msgstr ""
+
+#: idhub/templates/templates/musician/dashboard.html:10
+msgid "It's the first time you log into the system, welcome on board!"
+msgstr ""
+
+#: idhub/templates/templates/musician/dashboard.html:29
+msgid "Notifications"
+msgstr ""
+
+#: idhub/templates/templates/musician/dashboard.html:33
+msgid "There is no notifications at this time."
+msgstr ""
+
+#: idhub/templates/templates/musician/dashboard.html:40
+msgid "Your domains and websites"
+msgstr ""
+
+#: idhub/templates/templates/musician/dashboard.html:41
+msgid "Dashboard page description."
+msgstr ""
+
+#: idhub/templates/templates/musician/dashboard.html:56
+msgid "view configuration"
+msgstr ""
+
+#: idhub/templates/templates/musician/dashboard.html:63
+msgid "Expiration date"
+msgstr ""
+
+#: idhub/templates/templates/musician/dashboard.html:70
+msgid "Mail"
+msgstr ""
+
+#: idhub/templates/templates/musician/dashboard.html:73
+msgid "mail addresses created"
+msgstr ""
+
+#: idhub/templates/templates/musician/dashboard.html:78
+msgid "Mail list"
+msgstr ""
+
+#: idhub/templates/templates/musician/dashboard.html:83
+msgid "Software as a Service"
+msgstr ""
+
+#: idhub/templates/templates/musician/dashboard.html:85
+msgid "Nothing installed"
+msgstr ""
+
+#: idhub/templates/templates/musician/dashboard.html:90
+msgid "Disk usage"
+msgstr ""
+
+#: idhub/templates/templates/musician/dashboard.html:107
+msgid "Configuration details"
+msgstr ""
+
+#: idhub/templates/templates/musician/dashboard.html:114
+msgid "FTP access:"
+msgstr ""
+
+#. Translators: domain configuration detail modal
+#: idhub/templates/templates/musician/dashboard.html:116
+msgid "Contact with the support team to get details concerning FTP access."
+msgstr ""
+
+#: idhub/templates/templates/musician/dashboard.html:125
+msgid "No website configured."
+msgstr ""
+
+#: idhub/templates/templates/musician/dashboard.html:127
+msgid "Root directory:"
+msgstr ""
+
+#: idhub/templates/templates/musician/dashboard.html:128
+msgid "Type:"
+msgstr ""
+
+#: idhub/templates/templates/musician/dashboard.html:133
+msgid "View DNS records"
+msgstr ""
+
+#: idhub/templates/templates/musician/databases.html:21
+msgid "associated to"
+msgstr ""
+
+#: idhub/templates/templates/musician/databases.html:34
+msgid "No users for this database."
+msgstr ""
+
+#: idhub/templates/templates/musician/databases.html:45
+msgid "Open database manager"
+msgstr ""
+
+#. Translators: database page when there isn't any database.
+#. Translators: saas page when there isn't any saas.
+#: idhub/templates/templates/musician/databases.html:58
+#: idhub/templates/templates/musician/saas.html:49
+msgid "Ooops! Looks like there is nothing here!"
+msgstr ""
+
+#: idhub/templates/templates/musician/domain_detail.html:5
+msgid "Go back"
+msgstr ""
+
+#: idhub/templates/templates/musician/domain_detail.html:7
+msgid "DNS settings for"
+msgstr ""
+
+#: idhub/templates/templates/musician/domain_detail.html:8
+msgid "DNS settings page description."
+msgstr ""
+
+#: idhub/templates/templates/musician/domain_detail.html:18
+msgid "Value"
+msgstr ""
+
+#: idhub/templates/templates/musician/mail_base.html:6
+#: idhub/templates/templates/musician/mailinglists.html:6
+msgid "Go to global"
+msgstr ""
+
+#: idhub/templates/templates/musician/mail_base.html:10
+#: idhub/templates/templates/musician/mailinglists.html:9
+msgid "for"
+msgstr ""
+
+#: idhub/templates/templates/musician/mail_base.html:18
+#: idhub/templates/templates/musician/mailboxes.html:16
+msgid "Addresses"
+msgstr ""
+
+#: idhub/templates/templates/musician/mailbox_change_password.html:5
+#: idhub/templates/templates/musician/mailbox_form.html:24
+msgid "Change password"
+msgstr ""
+
+#: idhub/templates/templates/musician/mailbox_check_delete.html:7
+#, python-format
+msgid "Are you sure that you want remove the mailbox: \"%(name)s\"?"
+msgstr ""
+
+#: idhub/templates/templates/musician/mailbox_check_delete.html:9
+msgid ""
+"All mailbox's messages will be deleted and cannot be recovered"
+"strong>."
+msgstr ""
+
+#: idhub/templates/templates/musician/mailbox_form.html:9
+msgid "Warning!"
+msgstr ""
+
+#: idhub/templates/templates/musician/mailbox_form.html:9
+msgid ""
+"You have reached the limit of mailboxes of your subscription so "
+"extra fees may apply."
+msgstr ""
+
+#: idhub/templates/templates/musician/mailbox_form.html:10
+msgid "Close"
+msgstr ""
+
+#: idhub/templates/templates/musician/mailboxes.html:15
+msgid "Filtering"
+msgstr ""
+
+#: idhub/templates/templates/musician/mailboxes.html:27
+msgid "Update password"
+msgstr ""
+
+#: idhub/templates/templates/musician/mailboxes.html:43
+msgid "New mailbox"
+msgstr ""
+
+#: idhub/templates/templates/musician/mailinglists.html:34
+msgid "Active"
+msgstr ""
+
+#: idhub/templates/templates/musician/mailinglists.html:36
+msgid "Inactive"
+msgstr ""
+
+#: idhub/templates/templates/musician/profile.html:6
+msgid "Profile"
+msgstr ""
+
+#: idhub/templates/templates/musician/profile.html:7
+msgid "Little description on profile page."
+msgstr ""
+
+#: idhub/templates/templates/musician/profile.html:11
+msgid "User information"
+msgstr ""
+
+#: idhub/templates/templates/musician/profile.html:21
+msgid "Preferred language:"
+msgstr ""
+
+#: idhub/templates/templates/musician/profile.html:35
+msgid "Billing information"
+msgstr ""
+
+#: idhub/templates/templates/musician/profile.html:49
+msgid "payment method:"
+msgstr ""
+
+#: idhub/templates/templates/musician/profile.html:60
+msgid "Check your last bills"
+msgstr ""
+
+#: idhub/templates/templates/musician/saas.html:18
+msgid "Installed on"
+msgstr ""
+
+#: idhub/templates/templates/musician/saas.html:29
+msgid "Service info"
+msgstr ""
+
+#: idhub/templates/templates/musician/saas.html:30
+msgid "active"
+msgstr ""
+
+#: idhub/templates/templates/musician/saas.html:37
+msgid "Open service admin panel"
+msgstr ""
+
+#: idhub/user/views.py:22
+msgid "My profile"
+msgstr ""
+
+#: idhub/user/views.py:27
+msgid "My Wallet ** My wallet"
+msgstr ""
+
+#: idhub/user/views.py:41
+msgid "My personal Data ** My personal data"
+msgstr ""
+
+#: idhub/user/views.py:53
+msgid "My roles"
+msgstr ""
+
+#: idhub/user/views.py:59
+msgid "GDPR info"
+msgstr ""
+
+#: idhub/user/views.py:78
+msgid "Credential"
+msgstr ""
+
+#: idhub/user/views.py:114
+msgid "Credentials request ** Credential request"
+msgstr ""
+
+#: idhub/user/views.py:127
+msgid "The credential was required successfully! ** The credential was issued successfully!"
+msgstr ""
+
+#: idhub/user/views.py:129
+msgid "Not exists the credential! ** The credential does not exist!"
+msgstr ""
+
+#: idhub/user/views.py:135
+msgid "Credentials Presentation ** Credential presentation"
+msgstr ""
+
+#: idhub/user/views.py:148
+msgid "The credential was presented successfully!"
+msgstr ""
+
+#: idhub/user/views.py:150
+msgid "Error sending credential!"
+msgstr ""
+
+#: idhub/user/views.py:156 idhub/user/views.py:194 idhub/user/views.py:213
+msgid "Identities (DID) ** Identities (DIDs)"
+msgstr ""
+
+#: idhub/user/views.py:169
+msgid "Add a new Identities (DID) ** Add a new identity (DID)"
+msgstr ""
diff --git a/locale/es/LC_MESSAGES/django.po b/locale/es/LC_MESSAGES/django.po
index e84bbd5..d0b34ef 100644
--- a/locale/es/LC_MESSAGES/django.po
+++ b/locale/es/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-11-07 17:54+0100\n"
+"POT-Creation-Date: 2023-11-13 11:12+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -1533,233 +1533,400 @@ msgstr ""
msgid "show this help message and exit"
msgstr ""
-#: idhub/admin/views.py:39 idhub/user/views.py:33
+#: idhub/admin/forms.py:106
+msgid "The user does not exist!"
+msgstr ""
+
+#: idhub/admin/views.py:43 idhub/templates/idhub/base.html:69
+#: idhub/templates/idhub/base_admin.html:69 idhub/user/views.py:33
msgid "Dashboard"
msgstr ""
-#: idhub/admin/views.py:40 idhub/user/views.py:34
+#: idhub/admin/views.py:44 idhub/templates/idhub/admin/import.html:17
+#: idhub/user/views.py:34
msgid "Success"
msgstr ""
-#: idhub/admin/views.py:45
-msgid "People Management"
+#: idhub/admin/views.py:56
+msgid "User Management"
msgstr ""
-#: idhub/admin/views.py:50
-msgid "Access Control Management"
+#: idhub/admin/views.py:61
+msgid "Access control management"
msgstr ""
-#: idhub/admin/views.py:55
-msgid "Credentials Management"
-msgstr ""
-
-#: idhub/admin/views.py:60
-msgid "Templates Management"
-msgstr ""
-
-#: idhub/admin/views.py:65
-msgid "Massive Data Management"
+#: idhub/admin/views.py:66
+msgid "Credential Management"
msgstr ""
#: idhub/admin/views.py:71
-msgid "People list"
+msgid "Template Management"
msgstr ""
-#: idhub/admin/views.py:84
-msgid "User Profile"
+#: idhub/admin/views.py:76
+msgid "Data file management"
msgstr ""
-#: idhub/admin/views.py:108
+#: idhub/admin/views.py:82 idhub/templates/idhub/base_admin.html:81
+msgid "View users"
+msgstr ""
+
+#: idhub/admin/views.py:95
+msgid "User personal information"
+msgstr ""
+
+#: idhub/admin/views.py:119
msgid "Is not possible deactivate your account!"
msgstr ""
-#: idhub/admin/views.py:129 idhub/admin/views.py:235
+#: idhub/admin/views.py:143 idhub/admin/views.py:261
msgid "Is not possible delete your account!"
msgstr ""
-#: idhub/admin/views.py:141
-msgid "People Register"
+#: idhub/admin/views.py:155
+msgid "The account is updated successfully"
msgstr ""
-#: idhub/admin/views.py:156
-msgid "The account is created successfully"
+#: idhub/admin/views.py:164 idhub/templates/idhub/base_admin.html:86
+msgid "Add user"
msgstr ""
-#: idhub/admin/views.py:167 idhub/admin/views.py:204
+#: idhub/admin/views.py:179
+msgid "The account was created successfully"
+msgstr ""
+
+#: idhub/admin/views.py:193
+msgid "Associate a membership to the user"
+msgstr ""
+
+#: idhub/admin/views.py:230
msgid "People add membership"
msgstr ""
-#: idhub/admin/views.py:242
-msgid "Add Rol to User"
+#: idhub/admin/views.py:268
+msgid "Add a user role to access a service"
msgstr ""
-#: idhub/admin/views.py:272
-msgid "Edit Rol to User"
+#: idhub/admin/views.py:298
+msgid "Modify a user role to access a service"
msgstr ""
-#: idhub/admin/views.py:307
-msgid "Roles Management"
+#: idhub/admin/views.py:333 idhub/templates/idhub/base_admin.html:99
+msgid "Manage roles"
msgstr ""
-#: idhub/admin/views.py:319 idhub/templates/idhub/admin/roles.html:31
+#: idhub/admin/views.py:345 idhub/templates/idhub/admin/roles.html:31
#: idhub/templates/idhub/admin/user_edit.html:93
-msgid "Add Rol"
+msgid "Add Role"
msgstr ""
-#: idhub/admin/views.py:329
-msgid "Edit Rol"
+#: idhub/admin/views.py:354
+msgid "Role created successfully"
msgstr ""
-#: idhub/admin/views.py:356
-msgid "Service Management"
+#: idhub/admin/views.py:361
+msgid "Edit Role"
msgstr ""
-#: idhub/admin/views.py:368 idhub/templates/idhub/admin/services.html:35
-msgid "Add Service"
+#: idhub/admin/views.py:376
+msgid "Role updated successfully"
msgstr ""
-#: idhub/admin/views.py:378
-msgid "Edit Service"
+#: idhub/admin/views.py:389
+msgid "Role deleted successfully"
msgstr ""
-#: idhub/admin/views.py:405
-msgid "Credentials list"
+#: idhub/admin/views.py:396 idhub/templates/idhub/base_admin.html:104
+msgid "Manage services"
msgstr ""
-#: idhub/admin/views.py:418
+#: idhub/admin/views.py:408
+msgid "Add service"
+msgstr ""
+
+#: idhub/admin/views.py:417
+msgid "Service created successfully"
+msgstr ""
+
+#: idhub/admin/views.py:424
+msgid "Modify service"
+msgstr ""
+
+#: idhub/admin/views.py:439
+msgid "Service updated successfully"
+msgstr ""
+
+#: idhub/admin/views.py:452
+msgid "Service deleted successfully"
+msgstr ""
+
+#: idhub/admin/views.py:459 idhub/templates/idhub/base_admin.html:117
+msgid "View credentials"
+msgstr ""
+
+#: idhub/admin/views.py:472
msgid "Change status of Credential"
msgstr ""
-#: idhub/admin/views.py:460
+#: idhub/admin/views.py:514
msgid "Credential revoked successfully"
msgstr ""
-#: idhub/admin/views.py:480
+#: idhub/admin/views.py:536
msgid "Credential deleted successfully"
msgstr ""
-#: idhub/admin/views.py:487 idhub/admin/views.py:518 idhub/admin/views.py:537
-msgid "Organization Identities (DID)"
+#: idhub/admin/views.py:545
+msgid "Manage Identities (DID)"
msgstr ""
-#: idhub/admin/views.py:500
+#: idhub/admin/views.py:558
msgid "Add a new Organization Identities (DID)"
msgstr ""
-#: idhub/admin/views.py:512 idhub/user/views.py:188
+#: idhub/admin/views.py:570 idhub/user/views.py:195
msgid "DID created successfully"
msgstr ""
-#: idhub/admin/views.py:532 idhub/user/views.py:208
+#: idhub/admin/views.py:577 idhub/admin/views.py:596
+msgid "Organization Identities (DID)"
+msgstr ""
+
+#: idhub/admin/views.py:591 idhub/user/views.py:218
msgid "DID updated successfully"
msgstr ""
-#: idhub/admin/views.py:547 idhub/user/views.py:223
+#: idhub/admin/views.py:607 idhub/user/views.py:234
msgid "DID delete successfully"
msgstr ""
-#: idhub/admin/views.py:554 idhub/templates/idhub/user/profile.html:51
-#: idhub/user/views.py:65
-msgid "Credentials"
+#: idhub/admin/views.py:613 idhub/templates/idhub/base_admin.html:132
+msgid "View org. credentials"
msgstr ""
-#: idhub/admin/views.py:561
-msgid "Configure Issues"
+#: idhub/admin/views.py:620 idhub/templates/idhub/base_admin.html:137
+msgid "Configure credential issuance"
msgstr ""
-#: idhub/admin/views.py:568
-msgid "Template List"
+#: idhub/admin/views.py:627
+msgid "View credential templates"
msgstr ""
-#: idhub/admin/views.py:602
-msgid "Upload Template"
+#: idhub/admin/views.py:661
+msgid "Upload template"
msgstr ""
-#: idhub/admin/views.py:618 idhub/admin/views.py:744
+#: idhub/admin/views.py:677
msgid "There are some errors in the file"
msgstr ""
-#: idhub/admin/views.py:632
+#: idhub/admin/views.py:691
msgid "This template already exists!"
msgstr ""
-#: idhub/admin/views.py:638 idhub/admin/views.py:683
+#: idhub/admin/views.py:697 idhub/admin/views.py:742
msgid "This is not a schema valid!"
msgstr ""
-#: idhub/admin/views.py:647
-msgid "Import Template"
+#: idhub/admin/views.py:706
+msgid "Import template"
msgstr ""
-#: idhub/admin/views.py:675
-msgid "The schema add successfully!"
+#: idhub/admin/views.py:734
+msgid "The schema was added sucessfully"
msgstr ""
-#: idhub/admin/views.py:700 idhub/admin/views.py:713 idhub/admin/views.py:726
+#: idhub/admin/views.py:759 idhub/templates/idhub/admin/import.html:31
+#: idhub/templates/idhub/base_admin.html:153
+msgid "Import data"
+msgstr ""
+
+#: idhub/admin/views.py:772 idhub/admin/views.py:785
msgid "Import"
msgstr ""
-#: idhub/admin/views.py:755
-msgid "There aren't file"
+#: idhub/admin/views.py:798
+msgid "The file import was successfully!"
msgstr ""
-#: idhub/admin/views.py:760
-msgid "This file already exists!"
-msgstr ""
-
-#: idhub/admin/views.py:799
-msgid "The user not exist!"
-msgstr ""
-
-#: idhub/models.py:57
-msgid "Enabled"
+#: idhub/admin/views.py:803
+msgid "Error importing the file!"
msgstr ""
#: idhub/models.py:58
+#, python-brace-format
+msgid ""
+"The user {username} was registered: name: {first_name}, last name: "
+"{last_name}"
+msgstr ""
+
+#: idhub/models.py:70
+#, python-brace-format
+msgid ""
+"Welcome. You has been registered: name: {first_name}, last name: {last_name}"
+msgstr ""
+
+#: idhub/models.py:83
+#, python-brace-format
+msgid ""
+"The user '{username}' has request the update of the following information: "
+msgstr ""
+
+#: idhub/models.py:95
+msgid "You have requested the update of the following information: "
+msgstr ""
+
+#: idhub/models.py:132
+#, python-brace-format
+msgid "The admin has deleted the user: username: {username}"
+msgstr ""
+
+#: idhub/models.py:142
+#, python-brace-format
+msgid "New DID with DID-ID: '{did}' created by user '{username}'"
+msgstr ""
+
+#: idhub/models.py:153
+#, python-brace-format
+msgid "New DID with label: '{label}' and DID-ID: '{did}' was created'"
+msgstr ""
+
+#: idhub/models.py:165
+#, python-brace-format
+msgid ""
+"The DID with label '{label}' and DID-ID: '{did}' was deleted from your wallet"
+msgstr ""
+
+#: idhub/models.py:177
+#, python-brace-format
+msgid "The credential of type '{type}' and ID: '{id}' was deleted"
+msgstr ""
+
+#: idhub/models.py:188
+#, python-brace-format
+msgid ""
+"The credential of type '{type}' and ID: '{id}' was deleted from your wallet"
+msgstr ""
+
+#: idhub/models.py:200
+#, python-brace-format
+msgid ""
+"The credential of type '{type}' and ID: '{id}' was issued for user {username}"
+msgstr ""
+
+#: idhub/models.py:212
+#, python-brace-format
+msgid ""
+"The credential of type '{type}' and ID: '{id}' was issued and stored in your "
+"wallet"
+msgstr ""
+
+#: idhub/models.py:254
+#, python-brace-format
+msgid "The credential of type '{type}' was enabled for user {username}"
+msgstr ""
+
+#: idhub/models.py:265
+#, python-brace-format
+msgid "You can request the '{type}' credential"
+msgstr ""
+
+#: idhub/models.py:276
+#, python-brace-format
+msgid "The credential of type '{type}' and ID: '{id}' was revoked for "
+msgstr ""
+
+#: idhub/models.py:287
+#, python-brace-format
+msgid "The credential of type '{type}' and ID: '{id}' was revoked by admin"
+msgstr ""
+
+#: idhub/models.py:299
+msgid "A new role was created by admin"
+msgstr ""
+
+#: idhub/models.py:307
+msgid "The role was modified by admin"
+msgstr ""
+
+#: idhub/models.py:315
+msgid "The role was removed by admin"
+msgstr ""
+
+#: idhub/models.py:323
+msgid "A new service was created by admin"
+msgstr ""
+
+#: idhub/models.py:331
+msgid "The service was modified by admin"
+msgstr ""
+
+#: idhub/models.py:339
+msgid "The service was removed by admin"
+msgstr ""
+
+#: idhub/models.py:347
+#, python-brace-format
+msgid ""
+"New Organisational DID with label: '{label}' and DID-ID: '{did}' was created"
+msgstr ""
+
+#: idhub/models.py:358
+#, python-brace-format
+msgid ""
+"Organisational DID with label: '{label}' and DID-ID: '{did}' was removed"
+msgstr ""
+
+#: idhub/models.py:438
+msgid "Enabled"
+msgstr ""
+
+#: idhub/models.py:439 idhub/templates/idhub/admin/credentials.html:17
+#: idhub/templates/idhub/user/credentials.html:17
msgid "Issued"
msgstr ""
-#: idhub/models.py:59
+#: idhub/models.py:440
msgid "Revoked"
msgstr ""
-#: idhub/models.py:60
+#: idhub/models.py:441
msgid "Expired"
msgstr ""
-#: idhub/models.py:118
+#: idhub/models.py:499
msgid "Beneficiary"
msgstr ""
-#: idhub/models.py:119
+#: idhub/models.py:500
msgid "Employee"
msgstr ""
-#: idhub/models.py:120
-msgid "Partner"
+#: idhub/models.py:501
+msgid "Member"
msgstr ""
-#: idhub/models.py:122
+#: idhub/models.py:503
msgid "Type of membership"
msgstr ""
-#: idhub/models.py:124
+#: idhub/models.py:505
msgid "Start date"
msgstr ""
-#: idhub/models.py:125
+#: idhub/models.py:506
msgid "What date did the membership start?"
msgstr ""
-#: idhub/models.py:130
+#: idhub/models.py:511
msgid "End date"
msgstr ""
-#: idhub/models.py:131
-msgid "What date did the membership end?"
+#: idhub/models.py:512
+msgid "What date will the membership end?"
msgstr ""
-#: idhub/models.py:183
+#: idhub/models.py:564
msgid "Url where to send the presentation"
msgstr ""
@@ -1889,7 +2056,9 @@ msgid "Password reset on %(site_name)s"
msgstr ""
#: idhub/templates/idhub/admin/credentials.html:15
+#: idhub/templates/idhub/admin/dashboard.html:13
#: idhub/templates/idhub/user/credentials.html:15
+#: idhub/templates/idhub/user/dashboard.html:13
#: idhub/templates/templates/musician/billing.html:21
#: idhub/templates/templates/musician/databases.html:17
#: idhub/templates/templates/musician/domain_detail.html:17
@@ -1901,11 +2070,6 @@ msgstr ""
msgid "Details"
msgstr ""
-#: idhub/templates/idhub/admin/credentials.html:17
-#: idhub/templates/idhub/user/credentials.html:17
-msgid "Issue"
-msgstr ""
-
#: idhub/templates/idhub/admin/credentials.html:18
#: idhub/templates/idhub/user/credentials.html:18
msgid "Status"
@@ -1921,8 +2085,25 @@ msgstr ""
msgid "View"
msgstr ""
+#: idhub/templates/idhub/admin/dashboard.html:14
+#: idhub/templates/idhub/admin/schemas.html:18
+#: idhub/templates/idhub/admin/services.html:16
+#: idhub/templates/idhub/admin/user.html:88
+#: idhub/templates/idhub/admin/user_edit.html:74
+#: idhub/templates/idhub/user/dashboard.html:14
+#: idhub/templates/idhub/user/roles.html:16
+msgid "Description"
+msgstr ""
+
+#: idhub/templates/idhub/admin/dashboard.html:15
+#: idhub/templates/idhub/admin/dids.html:15
+#: idhub/templates/idhub/user/dashboard.html:15
+#: idhub/templates/idhub/user/dids.html:15
+msgid "Date"
+msgstr ""
+
#: idhub/templates/idhub/admin/did_register.html:29
-#: idhub/templates/idhub/admin/import_step3.html:27
+#: idhub/templates/idhub/admin/import_add.html:27
#: idhub/templates/idhub/admin/people_membership_register.html:29
#: idhub/templates/idhub/admin/people_register.html:25
#: idhub/templates/idhub/admin/people_rol_register.html:29
@@ -1933,7 +2114,6 @@ msgstr ""
#: idhub/templates/idhub/user/credentials_presentation.html:29
#: idhub/templates/idhub/user/credentials_request.html:29
#: idhub/templates/idhub/user/did_register.html:29
-#: idhub/templates/idhub/user/profile.html:35
#: idhub/templates/templates/musician/address_check_delete.html:10
#: idhub/templates/templates/musician/address_form.html:11
#: idhub/templates/templates/musician/mailbox_change_password.html:11
@@ -1943,7 +2123,7 @@ msgid "Cancel"
msgstr ""
#: idhub/templates/idhub/admin/did_register.html:30
-#: idhub/templates/idhub/admin/import_step3.html:28
+#: idhub/templates/idhub/admin/import_add.html:28
#: idhub/templates/idhub/admin/people_membership_register.html:30
#: idhub/templates/idhub/admin/people_register.html:26
#: idhub/templates/idhub/admin/people_rol_register.html:30
@@ -1952,18 +2132,12 @@ msgstr ""
#: idhub/templates/idhub/admin/service_register.html:30
#: idhub/templates/idhub/admin/user_edit.html:28
#: idhub/templates/idhub/user/did_register.html:30
-#: idhub/templates/idhub/user/profile.html:36
#: idhub/templates/templates/musician/address_form.html:12
#: idhub/templates/templates/musician/mailbox_change_password.html:12
#: idhub/templates/templates/musician/mailbox_form.html:21
msgid "Save"
msgstr ""
-#: idhub/templates/idhub/admin/dids.html:15
-#: idhub/templates/idhub/user/dids.html:15
-msgid "Date"
-msgstr ""
-
#: idhub/templates/idhub/admin/dids.html:16
#: idhub/templates/idhub/user/dids.html:16
msgid "Label"
@@ -1985,8 +2159,7 @@ msgid "Remove"
msgstr ""
#: idhub/templates/idhub/admin/dids.html:35
-#: idhub/templates/idhub/user/dids.html:35
-msgid "Add Identity"
+msgid "Add identity"
msgstr ""
#: idhub/templates/idhub/admin/dids.html:46
@@ -2000,28 +2173,10 @@ msgid "Are you sure that you want delete this DID?"
msgstr ""
#: idhub/templates/idhub/admin/import.html:15
-#: idhub/templates/idhub/admin/import_step2.html:15
#: idhub/templates/idhub/admin/schemas.html:15
msgid "Created at"
msgstr ""
-#: idhub/templates/idhub/admin/import.html:17
-msgid "success"
-msgstr ""
-
-#: idhub/templates/idhub/admin/import.html:31
-msgid "Import Datas"
-msgstr ""
-
-#: idhub/templates/idhub/admin/import_step2.html:16
-#: idhub/templates/idhub/admin/schemas.html:16
-msgid "Template file"
-msgstr ""
-
-#: idhub/templates/idhub/admin/import_step2.html:26
-msgid "Import Dates"
-msgstr ""
-
#: idhub/templates/idhub/admin/issue_credentials.html:14
#: idhub/templates/idhub/admin/issue_credentials.html:72
msgid "Revoke"
@@ -2059,11 +2214,16 @@ msgstr ""
#: idhub/templates/idhub/admin/people.html:16
#: idhub/templates/idhub/admin/user.html:62
#: idhub/templates/idhub/admin/user_edit.html:41
-#: idhub/templates/idhub/user/profile.html:48
+#: idhub/templates/idhub/user/profile.html:43
msgid "Membership"
msgstr ""
#: idhub/templates/idhub/admin/people.html:17
+#: idhub/templates/idhub/admin/roles.html:15
+#: idhub/templates/idhub/admin/services.html:17
+#: idhub/templates/idhub/admin/user.html:87
+#: idhub/templates/idhub/admin/user_edit.html:73
+#: idhub/templates/idhub/user/roles.html:15
msgid "Role"
msgstr ""
@@ -2105,12 +2265,8 @@ msgstr ""
msgid "User activation on %(site)s"
msgstr ""
-#: idhub/templates/idhub/admin/roles.html:15
-#: idhub/templates/idhub/admin/services.html:17
-#: idhub/templates/idhub/admin/user.html:87
-#: idhub/templates/idhub/admin/user_edit.html:73
-#: idhub/templates/idhub/user/roles.html:15
-msgid "Rol"
+#: idhub/templates/idhub/admin/schemas.html:16
+msgid "Template file"
msgstr ""
#: idhub/templates/idhub/admin/schemas.html:17
@@ -2118,20 +2274,13 @@ msgstr ""
msgid "Name"
msgstr ""
-#: idhub/templates/idhub/admin/schemas.html:18
-#: idhub/templates/idhub/admin/services.html:16
-#: idhub/templates/idhub/admin/user.html:88
-#: idhub/templates/idhub/admin/user_edit.html:74
-#: idhub/templates/idhub/user/roles.html:16
-msgid "Description"
-msgstr ""
-
#: idhub/templates/idhub/admin/schemas.html:37
-msgid "Add Template"
+#: idhub/templates/idhub/admin/schemas_import.html:29
+msgid "Add template"
msgstr ""
#: idhub/templates/idhub/admin/schemas.html:48
-msgid "Delete Template"
+msgid "Delete template"
msgstr ""
#: idhub/templates/idhub/admin/schemas.html:52
@@ -2139,17 +2288,13 @@ msgid "Are you sure that you want delete this template?"
msgstr ""
#: idhub/templates/idhub/admin/schemas_import.html:15
-msgid "Template available"
+msgid "Available templates"
msgstr ""
#: idhub/templates/idhub/admin/schemas_import.html:23
msgid "Add"
msgstr ""
-#: idhub/templates/idhub/admin/schemas_import.html:29
-msgid "Add template"
-msgstr ""
-
#: idhub/templates/idhub/admin/services.html:15
#: idhub/templates/idhub/admin/user.html:89
#: idhub/templates/idhub/admin/user_edit.html:75
@@ -2157,6 +2302,10 @@ msgstr ""
msgid "Service"
msgstr ""
+#: idhub/templates/idhub/admin/services.html:35
+msgid "Add Service"
+msgstr ""
+
#: idhub/templates/idhub/admin/user.html:13
msgid "Modify"
msgstr ""
@@ -2171,13 +2320,13 @@ msgstr ""
#: idhub/templates/idhub/admin/user.html:63
#: idhub/templates/idhub/admin/user_edit.html:42
-#: idhub/templates/idhub/user/profile.html:49
+#: idhub/templates/idhub/user/profile.html:44
msgid "From"
msgstr ""
#: idhub/templates/idhub/admin/user.html:64
#: idhub/templates/idhub/admin/user_edit.html:43
-#: idhub/templates/idhub/user/profile.html:50
+#: idhub/templates/idhub/user/profile.html:45
msgid "To"
msgstr ""
@@ -2193,6 +2342,67 @@ msgstr ""
msgid "Add membership"
msgstr ""
+#: idhub/templates/idhub/base.html:76
+msgid "My information"
+msgstr ""
+
+#: idhub/templates/idhub/base.html:81
+msgid "My personal information"
+msgstr ""
+
+#: idhub/templates/idhub/base.html:86 idhub/user/views.py:63
+msgid "My roles"
+msgstr ""
+
+#: idhub/templates/idhub/base.html:91 idhub/user/views.py:69
+msgid "GDPR info"
+msgstr ""
+
+#: idhub/templates/idhub/base.html:99 idhub/user/views.py:27
+msgid "My wallet"
+msgstr ""
+
+#: idhub/templates/idhub/base.html:104 idhub/user/views.py:170
+#: idhub/user/views.py:204 idhub/user/views.py:223
+msgid "Identities (DIDs)"
+msgstr ""
+
+#: idhub/templates/idhub/base.html:109
+msgid "My credentials"
+msgstr ""
+
+#: idhub/templates/idhub/base.html:114
+msgid "Request a credential"
+msgstr ""
+
+#: idhub/templates/idhub/base.html:119
+msgid "Present a credential"
+msgstr ""
+
+#: idhub/templates/idhub/base_admin.html:76
+msgid "User managament"
+msgstr ""
+
+#: idhub/templates/idhub/base_admin.html:94
+msgid "Access control managament"
+msgstr ""
+
+#: idhub/templates/idhub/base_admin.html:112 idhub/user/views.py:75
+msgid "Credential management"
+msgstr ""
+
+#: idhub/templates/idhub/base_admin.html:122
+msgid "Organization's wallet"
+msgstr ""
+
+#: idhub/templates/idhub/base_admin.html:127
+msgid "Manage Identities (DIDs)"
+msgstr ""
+
+#: idhub/templates/idhub/base_admin.html:147
+msgid "Credential template management"
+msgstr ""
+
#: idhub/templates/idhub/user/credentials_presentation.html:30
msgid "Send"
msgstr ""
@@ -2201,6 +2411,10 @@ msgstr ""
msgid "Request"
msgstr ""
+#: idhub/templates/idhub/user/dids.html:35
+msgid "Add Identity"
+msgstr ""
+
#: idhub/templates/idhub/user/profile.html:13
msgid "ARCO Forms"
msgstr ""
@@ -2209,6 +2423,10 @@ msgstr ""
msgid "Notice of Privacy"
msgstr ""
+#: idhub/templates/idhub/user/profile.html:46
+msgid "Credentials"
+msgstr ""
+
#: idhub/templates/templates/musician/address_check_delete.html:7
#, python-format
msgid "Are you sure that you want remove the address: \"%(address_name)s\"?"
@@ -2510,54 +2728,38 @@ msgstr ""
msgid "My profile"
msgstr ""
-#: idhub/user/views.py:27
-msgid "My Wallet"
-msgstr ""
-
#: idhub/user/views.py:41
-msgid "My personal Data"
+msgid "My personal data"
msgstr ""
-#: idhub/user/views.py:53
-msgid "My roles"
-msgstr ""
-
-#: idhub/user/views.py:59
-msgid "GDPR info"
-msgstr ""
-
-#: idhub/user/views.py:78
+#: idhub/user/views.py:88
msgid "Credential"
msgstr ""
-#: idhub/user/views.py:114
-msgid "Credentials request"
+#: idhub/user/views.py:124
+msgid "Credential request"
msgstr ""
-#: idhub/user/views.py:127
-msgid "The credential was required successfully!"
+#: idhub/user/views.py:137
+msgid "The credential was issued successfully!"
msgstr ""
-#: idhub/user/views.py:129
-msgid "Not exists the credential!"
+#: idhub/user/views.py:141
+msgid "The credential does not exist!"
msgstr ""
-#: idhub/user/views.py:135
-msgid "Credentials Presentation"
+#: idhub/user/views.py:147
+msgid "Credential presentation"
msgstr ""
-#: idhub/user/views.py:148
+#: idhub/user/views.py:162
msgid "The credential was presented successfully!"
msgstr ""
-#: idhub/user/views.py:150
+#: idhub/user/views.py:164
msgid "Error sending credential!"
msgstr ""
-#: idhub/user/views.py:156 idhub/user/views.py:194 idhub/user/views.py:213
-msgid "Identities (DID)"
-msgstr ""
-
-#: idhub/user/views.py:169
-msgid "Add a new Identities (DID)"
+#: idhub/user/views.py:183
+msgid "Add a new Identity (DID)"
msgstr ""
diff --git a/trustchain_idhub/settings.py b/trustchain_idhub/settings.py
index 2537456..fb1c4c3 100644
--- a/trustchain_idhub/settings.py
+++ b/trustchain_idhub/settings.py
@@ -143,12 +143,8 @@ AUTH_PASSWORD_VALIDATORS = [
# Internationalization
# https://docs.djangoproject.com/en/4.2/topics/i18n/
-LANGUAGE_CODE = 'en-us'
-
TIME_ZONE = config('TIME_ZONE', 'UTC')
-USE_I18N = True
-
USE_TZ = True
@@ -181,5 +177,8 @@ MESSAGE_TAGS = {
LOCALE_PATHS = [
os.path.join(BASE_DIR, 'locale'),
]
+LANGUAGE_CODE="es"
+USE_I18N = True
+USE_L10N = True
AUTH_USER_MODEL = 'idhub_auth.User'
|