Merge pull request 'pilot-ereuse' (#209) from pilot-ereuse into release

Reviewed-on: https://gitea.pangea.org/trustchain-oc1-orchestral/IdHub/pulls/209
This commit is contained in:
cayop 2024-04-02 19:22:51 +00:00
commit 9823e2ad4f
2 changed files with 63 additions and 2 deletions

View File

@ -1,12 +1,13 @@
import json import json
import base64 import base64
import logging import logging
import requests
from django.template import loader from django.template import loader
from django.core.mail import EmailMultiAlternatives from django.core.mail import EmailMultiAlternatives
from django.conf import settings from django.conf import settings
from django.views.generic.edit import View, FormView from django.views.generic.edit import View, FormView
from django.http import HttpResponse, Http404, JsonResponse from django.http import HttpResponse, Http404, JsonResponse, QueryDict
from django.shortcuts import get_object_or_404, redirect from django.shortcuts import get_object_or_404, redirect
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
@ -221,6 +222,7 @@ class VerifyView(View):
def get_verification(self): def get_verification(self):
return self.vp_token.get_user_info_all() return self.vp_token.get_user_info_all()
class AllowCodeView(View): class AllowCodeView(View):
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
code = self.request.GET.get("code") code = self.request.GET.get("code")
@ -232,6 +234,10 @@ class AllowCodeView(View):
code=code, code=code,
code_used=False code_used=False
) )
if self.request.session.get("response_uri"):
url = self.send_api()
if url:
return redirect(url)
promotion = self.authorization.promotions.first() promotion = self.authorization.promotions.first()
if not promotion: if not promotion:
@ -239,6 +245,40 @@ class AllowCodeView(View):
return redirect(promotion.get_url(code)) return redirect(promotion.get_url(code))
def send_api(self):
vp = self.get_vp_token()
if not vp:
return
data = {
"vp_token": vp,
"code": self.authorization.code
}
url = self.request.session.get("response_uri")
result = requests.post(url, data=data)
return result.json().get('redirect_uri')
def get_vp_token(self):
vp = self.authorization.vp_tokens.first()
if not vp:
return
return base64.b64encode(vp.vp_token.encode()).decode()
def get_response_uri(self):
data = {
"code": self.authorization.code,
}
query_dict = QueryDict('', mutable=True)
query_dict.update(data)
response_uri = self.request.session.get("response_uri")
url = '{response_uri}?{params}'.format(
response_uri=response_uri,
params=query_dict.urlencode()
)
return url
class ReceivedCodeView(View): class ReceivedCodeView(View):
template_name = "received_code.html" template_name = "received_code.html"

View File

@ -106,11 +106,32 @@ class SelectWalletView(FormView):
success_url = reverse_lazy('promotion:select_wallet') success_url = reverse_lazy('promotion:select_wallet')
def get_form_kwargs(self): def get_form_kwargs(self):
presentation = self.get_response_uri()
if not presentation:
presentation = json.dumps(
settings.SUPPORTED_CREDENTIALS
)
kwargs = super().get_form_kwargs() kwargs = super().get_form_kwargs()
kwargs['presentation_definition'] = json.dumps(settings.SUPPORTED_CREDENTIALS) kwargs['presentation_definition'] = presentation
return kwargs return kwargs
def form_valid(self, form): def form_valid(self, form):
url = form.save() url = form.save()
return redirect(url) return redirect(url)
def get_response_uri(self):
path = self.request.get_full_path().split("?")
if len(path) < 2:
return
args = dict(
[x.split("=") for x in path[1].split("&")]
)
response_uri = args.get('response_uri')
self.request.session["response_uri"] = response_uri
presentation = args.get('presentation_definition')
for x in settings.SUPPORTED_CREDENTIALS:
if x in presentation:
return json.dumps([x])