diff --git a/oidc4vp/forms.py b/oidc4vp/forms.py index b3c4c9e..d40c6a1 100644 --- a/oidc4vp/forms.py +++ b/oidc4vp/forms.py @@ -19,7 +19,9 @@ class AuthorizeForm(forms.Form): self.user = kwargs.pop('user', None) self.org = kwargs.pop('org', None) self.code = kwargs.pop('code', None) + self.pw = kwargs.pop('pw', None) self.presentation_definition = kwargs.pop('presentation_definition', []) + self.subject_did = None reg = r'({})'.format('|'.join(self.presentation_definition)) @@ -49,7 +51,12 @@ class AuthorizeForm(forms.Form): txt = _('There are some problems with this credentials') raise ValidationError(txt) - self.list_credentials.append(c) + cred = self.user.decrypt_data( + c.data, + self.pw + ) + self.subject_did = c.subject_did + self.list_credentials.append(cred) if not self.code: txt = _("There isn't code in request") @@ -69,13 +76,14 @@ class AuthorizeForm(forms.Form): return def get_verificable_presentation(self): - did = self.list_credentials[0].subject_did + did = self.subject_did vp_template = get_template('credentials/verifiable_presentation.json') - vc_list = json.dumps([json.loads(x.data) for x in self.list_credentials]) + vc_list = json.dumps([json.loads(x) for x in self.list_credentials]) context = { "holder_did": did.did, "verifiable_credential_list": vc_list } unsigned_vp = vp_template.render(context) - self.vp = create_verifiable_presentation(did.key_material, unsigned_vp) + key_material = did.get_key_material(self.pw) + self.vp = create_verifiable_presentation(key_material, unsigned_vp) diff --git a/oidc4vp/views.py b/oidc4vp/views.py index a62e462..94c14f7 100644 --- a/oidc4vp/views.py +++ b/oidc4vp/views.py @@ -13,6 +13,7 @@ from django.contrib import messages from oidc4vp.models import Authorization, Organization, OAuth2VPToken from idhub.mixins import UserView +from idhub.models import Event from oidc4vp.forms import AuthorizeForm from utils.idhub_ssikit import verify_presentation @@ -43,6 +44,11 @@ class AuthorizeView(UserView, FormView): kwargs['presentation_definition'] = vps kwargs["org"] = self.get_org() kwargs["code"] = self.request.GET.get('code') + enc_pw = self.request.session["key_did"] + kwargs['pw'] = self.request.user.decrypt_data( + enc_pw, + self.request.user.password+self.request.session._session_key + ) return kwargs def get_form(self, form_class=None): @@ -55,12 +61,12 @@ class AuthorizeView(UserView, FormView): authorization = form.save() if not authorization or authorization.status_code != 200: messages.error(self.request, _("Error sending credential!")) - return super().form_valid(form) + return redirect(self.success_url) try: authorization = authorization.json() except: messages.error(self.request, _("Error sending credential!")) - return super().form_valid(form) + return redirect(self.success_url) verify = authorization.get('verify') result, msg = verify.split(",") @@ -74,8 +80,16 @@ class AuthorizeView(UserView, FormView): elif authorization.get('response'): txt = authorization.get('response') messages.success(self.request, txt) + cred = form.credentials.first() + verifier = form.org.name + if cred and verifier: + Event.set_EV_CREDENTIAL_PRESENTED(cred, verifier) + txt2 = f"Verifier {verifier} send: " + txt + Event.set_EV_USR_SEND_VP(txt2, self.request.user) + url = reverse_lazy('idhub:user_dashboard') + return redirect(url) - return super().form_valid(form) + return redirect(self.success_url) def get_org(self): client_id = self.request.GET.get("client_id")