from django import forms from django.conf import settings from oidc4vp.models import Organization # class OrganizationForm(forms.Form): # wallet = forms.ChoiceField( # "Wallet", # choices=[(x.id, x.name) for x in Organization.objects.all()] # ) # def clean_wallet(self): # data = self.cleaned_data["wallet"] # organization = Organization.objects.filter( # id=data # ) # if not organization.exists(): # raise ValidationError("organization is not valid!") # self.organization = organization.first() # return data # def authorize(self): # data = { # "response_type": "vp_token", # "response_mode": "direct_post", # "client_id": self.organization.client_id, # "response_uri": settings.RESPONSE_URI, # "presentation_definition": self.pv_definition(), # "nonce": "" # } # query_dict = QueryDict('', mutable=True) # query_dict.update(data) # url = '{response_uri}/authorize?{params}'.format( # response_uri=self.organization.response_uri, # params=query_dict.urlencode() # ) # def pv_definition(self): # return "" class AuthorizeForm(forms.Form): # organization = forms.ChoiceField(choices=[]) def __init__(self, *args, **kwargs): # import pdb; pdb.set_trace() self.data = kwargs.get('data', {}).copy() self.user = kwargs.pop('user', None) 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 save(self, commit=True): # self.org = Organization.objects.filter( # id=self.data['organization'] # ) # if not self.org.exists(): # return # self.org = self.org[0] # if commit: # url = self.org.demand_authorization() # if url.status_code == 200: # return url.json().get('redirect_uri') return