IdHub/idhub/user/forms.py

96 lines
2.6 KiB
Python
Raw Normal View History

2023-10-10 08:52:04 +00:00
from django import forms
2023-10-25 15:49:17 +00:00
from idhub_auth.models import User
2023-11-02 16:13:49 +00:00
from idhub.models import DID, VerificableCredential, Organization
ORGANIZATION = [
(x.id, x.name) for x in Organization.objects.filter()
]
2023-10-10 08:52:04 +00:00
2023-10-11 07:52:05 +00:00
class ProfileForm(forms.ModelForm):
2023-10-10 08:52:04 +00:00
MANDATORY_FIELDS = ['first_name', 'last_name', 'email']
class Meta:
model = User
2023-11-02 13:17:07 +00:00
fields = ('first_name', 'last_name', 'email')
class RequestCredentialForm(forms.Form):
did = forms.ChoiceField(choices=[])
credential = forms.ChoiceField(choices=[])
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user', None)
super().__init__(*args, **kwargs)
self.fields['did'].choices = [
(x.did, x.label) for x in DID.objects.filter(user=self.user)
]
self.fields['credential'].choices = [
(x.id, x.type()) for x in VerificableCredential.objects.filter(
user=self.user,
status=VerificableCredential.Status.ENABLED
)
]
def save(self, commit=True):
did = DID.objects.filter(
user=self.user,
did=self.data['did']
)
cred = VerificableCredential.objects.filter(
user=self.user,
2023-11-02 16:13:49 +00:00
id=self.data['credential'],
status=VerificableCredential.Status.ENABLED
2023-11-02 13:17:07 +00:00
)
if not all([cred.exists(), did.exists()]):
return
did = did[0].did
cred = cred[0]
cred.get_issued(did)
if commit:
cred.save()
return cred
return
2023-11-02 16:13:49 +00:00
class CredentialPresentationForm(forms.Form):
organization = forms.ChoiceField(choices=ORGANIZATION)
credential = forms.ChoiceField(choices=[])
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user', None)
super().__init__(*args, **kwargs)
self.fields['credential'].choices = [
(x.id, x.type()) for x in VerificableCredential.objects.filter(
user=self.user,
status=VerificableCredential.Status.ISSUED
)
]
def save(self, commit=True):
org = Organization.objects.filter(
id=self.data['organization']
)
cred = VerificableCredential.objects.filter(
user=self.user,
id=self.data['credential'],
status=VerificableCredential.Status.ISSUED
)
if not all([org.exists(), cred.exists()]):
return
org =org[0]
cred = cred[0]
if commit:
org.send(cred)
return cred
return