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 %} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + {% endfor %}
#
1,001randomdataplaceholdertext
1,002placeholderirrelevantvisuallayout
1,003datarichdashboardtabular
1,003informationplaceholderillustrativedata
1,004textrandomlayoutdashboard
1,005dashboardirrelevanttextplaceholder
1,006dashboardillustrativerichdata
1,007placeholdertabularinformationirrelevant
1,008randomdataplaceholdertext
1,009placeholderirrelevantvisuallayout
1,010datarichdashboardtabular
1,011informationplaceholderillustrativedata
1,012textplaceholderlayoutdashboard
1,013dashboardirrelevanttextvisual
1,014dashboardillustrativerichdata
1,015randomtabularinformationtext{{ ev.get_type }}{{ ev.message }}{{ ev.created }}
-
-
-
-
{% 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 @@
- {% translate "Import Datas" %} + {% translate "Import data" %}
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 %} + @@ -28,7 +30,7 @@
{{ rol.name }}{{ rol.description|default:""}}
- {% translate "Add Rol" %} + {% translate "Add Role" %}
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 @@
- {% translate "Add Template" %} + {% translate "Add template" %}
@@ -45,7 +45,7 @@ -
-
-
-
{% 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 %} -
- {% translate "Cancel" %} - -
-
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." +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'