fix issue dates

This commit is contained in:
Cayo Puigdefabregas 2023-11-14 17:45:08 +01:00
parent 4cb5c638a3
commit 745afdea2c
10 changed files with 181 additions and 238 deletions

View File

@ -291,7 +291,6 @@ class PeopleMembershipEditView(People, FormView):
def get_form_kwargs(self): def get_form_kwargs(self):
kwargs = super().get_form_kwargs() kwargs = super().get_form_kwargs()
kwargs['instance'] = self.object kwargs['instance'] = self.object
# import pdb; pdb.set_trace()
return kwargs return kwargs
def form_valid(self, form): def form_valid(self, form):
@ -475,7 +474,7 @@ class ServicesView(AccessControl):
}) })
return context return context
class ServiceRegisterView(AccessControl, UpdateView): class ServiceRegisterView(AccessControl, CreateView):
template_name = "idhub/admin/service_register.html" template_name = "idhub/admin/service_register.html"
subtitle = _('Add service') subtitle = _('Add service')
icon = '' icon = ''
@ -484,6 +483,11 @@ class ServiceRegisterView(AccessControl, UpdateView):
success_url = reverse_lazy('idhub:admin_services') success_url = reverse_lazy('idhub:admin_services')
object = None object = None
def get_form(self):
form = super().get_form()
form.fields['rol'].required = False
return form
def form_valid(self, form): def form_valid(self, form):
form.save() form.save()
messages.success(self.request, _('Service created successfully')) messages.success(self.request, _('Service created successfully'))
@ -506,6 +510,11 @@ class ServiceEditView(AccessControl, UpdateView):
kwargs = super().get_form_kwargs() kwargs = super().get_form_kwargs()
return kwargs return kwargs
def get_form(self):
form = super().get_form()
form.fields['rol'].required = False
return form
def form_valid(self, form): def form_valid(self, form):
form.save() form.save()
messages.success(self.request, _('Service updated successfully')) messages.success(self.request, _('Service updated successfully'))

View File

@ -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.conf import settings
from django.db import migrations, models from django.db import migrations, models
@ -63,7 +63,13 @@ class Migration(migrations.Migration):
verbose_name='ID', 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( migrations.CreateModel(
@ -95,8 +101,11 @@ class Migration(migrations.Migration):
verbose_name='ID', verbose_name='ID',
), ),
), ),
('domain', models.CharField(max_length=250)), ('domain', models.CharField(max_length=250, verbose_name='Domain')),
('description', models.CharField(max_length=250)), (
'description',
models.CharField(max_length=250, verbose_name='Description'),
),
('rol', models.ManyToManyField(to='idhub.rol')), ('rol', models.ManyToManyField(to='idhub.rol')),
], ],
), ),
@ -131,7 +140,7 @@ class Migration(migrations.Migration):
('id_string', models.CharField(max_length=250)), ('id_string', models.CharField(max_length=250)),
('verified', models.BooleanField()), ('verified', models.BooleanField()),
('created_on', models.DateTimeField(auto_now=True)), ('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_issuer', models.CharField(max_length=250)),
('did_subject', models.CharField(max_length=250)), ('did_subject', models.CharField(max_length=250)),
('data', models.TextField()), ('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( migrations.CreateModel(
name='UserRol', name='UserRol',
fields=[ fields=[
@ -186,78 +330,8 @@ class Migration(migrations.Migration):
), ),
), ),
], ],
), options={
migrations.CreateModel( 'unique_together': {('user', 'service')},
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,
),
),
],
), ),
] ]

View File

@ -1,77 +0,0 @@
# Generated by Django 4.2.5 on 2023-11-09 13:54
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('idhub', '0001_initial'),
]
operations = [
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,
),
),
],
),
]

View File

@ -1,52 +0,0 @@
# Generated by Django 4.2.5 on 2023-11-14 09:19
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('idhub', '0002_event'),
]
operations = [
migrations.AddField(
model_name='rol',
name='description',
field=models.CharField(
max_length=250, null=True, verbose_name='Description'
),
),
migrations.AlterField(
model_name='membership',
name='end_date',
field=models.DateField(
blank=True,
help_text='What date will the membership end?',
null=True,
verbose_name='End date',
),
),
migrations.AlterField(
model_name='membership',
name='type',
field=models.PositiveSmallIntegerField(
choices=[(1, 'Beneficiary'), (2, 'Employee'), (3, 'Member')],
verbose_name='Type of membership',
),
),
migrations.AlterField(
model_name='rol',
name='name',
field=models.CharField(max_length=250, verbose_name='name'),
),
migrations.AlterField(
model_name='service',
name='description',
field=models.CharField(max_length=250, verbose_name='Description'),
),
migrations.AlterField(
model_name='service',
name='domain',
field=models.CharField(max_length=250, verbose_name='Domain'),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 4.2.5 on 2023-11-14 09:49
from django.conf import settings
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('idhub', '0003_rol_description_alter_membership_end_date_and_more'),
]
operations = [
migrations.AlterUniqueTogether(
name='userrol',
unique_together={('user', 'service')},
),
]

View File

@ -1,5 +1,6 @@
import json import json
import requests import requests
import datetime
from django.db import models from django.db import models
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from idhub_auth.models import User from idhub_auth.models import User
@ -443,7 +444,7 @@ class VerificableCredential(models.Model):
id_string = models.CharField(max_length=250) id_string = models.CharField(max_length=250)
verified = models.BooleanField() verified = models.BooleanField()
created_on = models.DateTimeField(auto_now=True) 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_issuer = models.CharField(max_length=250)
did_subject = models.CharField(max_length=250) did_subject = models.CharField(max_length=250)
data = models.TextField() data = models.TextField()
@ -476,9 +477,13 @@ class VerificableCredential(models.Model):
data = json.loads(self.data).get('instance').items() data = json.loads(self.data).get('instance').items()
return data return data
def get_issued(self, did): def issue(self, did):
self.status = self.Status.ISSUED self.status = self.Status.ISSUED
self.did_subject = did 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): class VCTemplate(models.Model):
wkit_template_id = models.CharField(max_length=250) wkit_template_id = models.CharField(max_length=250)
@ -540,7 +545,9 @@ class Service(models.Model):
) )
def get_roles(self): def get_roles(self):
if self.rol.exists():
return ", ".join([x.name for x in self.rol.all()]) return ", ".join([x.name for x in self.rol.all()])
return _("None")
def __str__(self): def __str__(self):
return "{} -> {}".format(self.domain, self.get_roles()) return "{} -> {}".format(self.domain, self.get_roles())

View File

@ -15,7 +15,7 @@
<th scope="col"><button type="button" class="btn btn-grey border border-dark">{% trans 'Type' %}</button></th> <th scope="col"><button type="button" class="btn btn-grey border border-dark">{% trans 'Type' %}</button></th>
<th scope="col"><button type="button" class="btn btn-grey border border-dark">{% trans 'Details' %}</button></th> <th scope="col"><button type="button" class="btn btn-grey border border-dark">{% trans 'Details' %}</button></th>
<th scope="col"><button type="button" class="btn btn-grey border border-dark">{% trans 'Issued' %}</button></th> <th scope="col"><button type="button" class="btn btn-grey border border-dark">{% trans 'Issued' %}</button></th>
<th scope="col"><button type="button" class="btn btn-grey border border-dark">{% trans 'Status' %}</button></th> <th scope="col" class="text-center"><button type="button" class="btn btn-grey border border-dark">{% trans 'Status' %}</button></th>
<th scope="col"><button type="button" class="btn btn-grey border border-dark">{% trans 'User' %}</button></th> <th scope="col"><button type="button" class="btn btn-grey border border-dark">{% trans 'User' %}</button></th>
<th scope="col"></th> <th scope="col"></th>
</tr> </tr>
@ -25,8 +25,8 @@
<tr style="font-size:15px;"> <tr style="font-size:15px;">
<td>{{ f.type }}</td> <td>{{ f.type }}</td>
<td>{{ f.description }}</td> <td>{{ f.description }}</td>
<td>{{ f.issue_on }}</td> <td>{{ f.get_issued_on }}</td>
<td>{{ f.get_status }}</td> <td class="text-center">{{ f.get_status }}</td>
<td>{{ f.user.email }}</td> <td>{{ f.user.email }}</td>
<td><a href="{% url 'idhub:admin_credential' f.id %}" class="btn btn-green-admin">{% trans 'View' %}</a></td> <td><a href="{% url 'idhub:admin_credential' f.id %}" class="btn btn-green-admin">{% trans 'View' %}</a></td>
</tr> </tr>

View File

@ -15,7 +15,7 @@
<th scope="col"><button type="button" class="btn btn-grey border border-dark">{% trans 'Type' %}</button></th> <th scope="col"><button type="button" class="btn btn-grey border border-dark">{% trans 'Type' %}</button></th>
<th scope="col"><button type="button" class="btn btn-grey border border-dark">{% trans 'Details' %}</button></th> <th scope="col"><button type="button" class="btn btn-grey border border-dark">{% trans 'Details' %}</button></th>
<th scope="col"><button type="button" class="btn btn-grey border border-dark">{% trans 'Issued' %}</button></th> <th scope="col"><button type="button" class="btn btn-grey border border-dark">{% trans 'Issued' %}</button></th>
<th scope="col"><button type="button" class="btn btn-grey border border-dark">{% trans 'Status' %}</button></th> <th scope="col" class="text-center"><button type="button" class="btn btn-grey border border-dark">{% trans 'Status' %}</button></th>
<th scope="col"></th> <th scope="col"></th>
</tr> </tr>
</thead> </thead>
@ -24,8 +24,8 @@
<tr style="font-size:15px;"> <tr style="font-size:15px;">
<td>{{ f.type }}</td> <td>{{ f.type }}</td>
<td>{{ f.description }}</td> <td>{{ f.description }}</td>
<td>{{ f.issue_on }}</td> <td>{{ f.get_issued_on }}</td>
<td>{{ f.get_status }}</td> <td class="text-center">{{ f.get_status }}</td>
<td> <td>
<a href="{% url 'idhub:user_credential' f.id %}" class="text-primary"> <a href="{% url 'idhub:user_credential' f.id %}" class="text-primary">
<i class="bi bi-eye"></i> <i class="bi bi-eye"></i>

View File

@ -44,7 +44,7 @@ class RequestCredentialForm(forms.Form):
did = did[0].did did = did[0].did
cred = cred[0] cred = cred[0]
cred.get_issued(did) cred.issue(did)
if commit: if commit:
cred.save() cred.save()

View File

@ -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 from django.db import migrations, models