From 533d749711638c1767fedf140ab2e1c66139b7d3 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Wed, 27 Sep 2023 14:03:14 +0200 Subject: [PATCH] add comunication with id_provider --- orchestra/views.py | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/orchestra/views.py b/orchestra/views.py index 5b5e5652..79b61e24 100644 --- a/orchestra/views.py +++ b/orchestra/views.py @@ -1,9 +1,14 @@ +import json +import requests from django.apps import apps -from django.http import Http404 +from django.http import Http404, JsonResponse from django.contrib.admin.utils import unquote from django.core.exceptions import PermissionDenied from django.shortcuts import get_object_or_404 from django.views.static import serve +from django.views.decorators.csrf import csrf_exempt +from rest_framework.authtoken.models import Token +from orchestra.contrib.accounts.models import Account def serve_private_media(request, app_label, model_name, field_name, object_id, filename): @@ -18,3 +23,32 @@ def serve_private_media(request, app_label, model_name, field_name, object_id, f return serve(request, field.name, document_root=field.storage.location) else: raise PermissionDenied() + + +def get_user_info(token): + url = "http://localhost:5000/oauth/userinfo" + access_token = token['access_token'] + token_type = token.get('token_type', 'Bearer') + headers = {"Authorization": f"{token_type} {access_token}"} + msg = requests.get(url, headers=headers) + userinfo = json.loads(msg.text) + username = userinfo.get('username') + return username + + +@csrf_exempt +def obtain_auth_token_v2(request): + oidc_token = request.POST.get('token') + if not oidc_token: + raise PermissionDenied() + oidc_token = json.loads(oidc_token) + + username = get_user_info(oidc_token) + users = Account.objects.filter(username=username) + if not users: + raise PermissionDenied() + + user = users[0] + token = Token.objects.get_or_create(user=user) + if len(token) == 2: + return JsonResponse({"token": token[0].key})