60 lines
1.7 KiB
Python
60 lines
1.7 KiB
Python
|
|
||
|
import json
|
||
|
import requests
|
||
|
|
||
|
from django import forms
|
||
|
from django.conf import settings
|
||
|
from django.template.loader import get_template
|
||
|
from django.utils.translation import gettext_lazy as _
|
||
|
from django.core.exceptions import ValidationError
|
||
|
|
||
|
from utils.idhub_ssikit import create_verifiable_presentation
|
||
|
from oidc4vp.models import Organization
|
||
|
|
||
|
|
||
|
class WalletForm(forms.Form):
|
||
|
|
||
|
def __init__(self, *args, **kwargs):
|
||
|
self.presentation_definition = kwargs.pop('presentation_definition', [])
|
||
|
|
||
|
reg = r'({})'.format('|'.join(self.presentation_definition))
|
||
|
|
||
|
self.credentials = self.user.vcredentials.filter(
|
||
|
schema__type__iregex=reg
|
||
|
)
|
||
|
super().__init__(*args, **kwargs)
|
||
|
for vp in self.presentation_definition:
|
||
|
vp = vp.lower()
|
||
|
choices = [
|
||
|
(str(x.id), x.schema.type.lower()) for x in self.credentials.filter(
|
||
|
schema__type__iexact=vp)
|
||
|
]
|
||
|
self.fields[vp.lower()] = forms.ChoiceField(
|
||
|
widget=forms.RadioSelect,
|
||
|
choices=choices
|
||
|
)
|
||
|
def clean(self):
|
||
|
data = super().clean()
|
||
|
self.list_credentials = []
|
||
|
for c in self.credentials:
|
||
|
if str(c.id) == data.get(c.schema.type.lower()):
|
||
|
if c.status is not c.Status.ISSUED.value or not c.data:
|
||
|
txt = _('There are some problems with this credentials')
|
||
|
raise ValidationError(txt)
|
||
|
|
||
|
self.list_credentials.append(c)
|
||
|
|
||
|
return data
|
||
|
|
||
|
def save(self, commit=True):
|
||
|
if not self.list_credentials:
|
||
|
return
|
||
|
|
||
|
self.get_verificable_presentation()
|
||
|
|
||
|
if commit:
|
||
|
return self.org.send(self.vp)
|
||
|
|
||
|
return
|
||
|
|