From cfbf038356b625acf923b71bab311ef63d217b98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Thu, 21 Feb 2019 11:20:09 +0100 Subject: [PATCH] general: use a fake proxy object for unknown local NameIDs (#30723) --- combo/apps/lingo/views.py | 6 ++---- combo/profile/utils.py | 18 ++++++++++++++++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/combo/apps/lingo/views.py b/combo/apps/lingo/views.py index fba3bd5a..124edfc1 100644 --- a/combo/apps/lingo/views.py +++ b/combo/apps/lingo/views.py @@ -121,9 +121,7 @@ class AddBasketItemApiView(View): try: if request.GET.get('NameId'): - user = get_user_from_name_id(request.GET.get('NameId')) - if user is None: - raise User.DoesNotExist() + user = get_user_from_name_id(request.GET.get('NameId'), raise_on_missing=True) elif request.GET.get('email'): user = User.objects.get(email=request.GET.get('email')) else: @@ -191,7 +189,7 @@ class RemoveBasketItemApiView(View): try: if request.GET.get('NameId'): - user = get_user_from_name_id(request.GET.get('NameId')) + user = get_user_from_name_id(request.GET.get('NameId'), raise_on_missing=True) if user is None: raise User.DoesNotExist() elif request.GET.get('email'): diff --git a/combo/profile/utils.py b/combo/profile/utils.py index e8ca8fe0..11ba3e58 100644 --- a/combo/profile/utils.py +++ b/combo/profile/utils.py @@ -15,6 +15,7 @@ # along with this program. If not, see . from django.conf import settings +from django.contrib.auth.models import User if 'mellon' in settings.INSTALLED_APPS: @@ -23,10 +24,23 @@ else: UserSAMLIdentifier = None -def get_user_from_name_id(name_id): +class ProxiedUser(object): + def __init__(self, name_id): + self.name_id = name_id + self.email = '' + + def get_name_id(self): + return self.name_id + + +def get_user_from_name_id(name_id, raise_on_missing=False): if not UserSAMLIdentifier: + if raise_on_missing: + raise User.DoesNotExist() return None try: return UserSAMLIdentifier.objects.get(name_id=name_id).user except UserSAMLIdentifier.DoesNotExist: - return None + if raise_on_missing: + raise User.DoesNotExist() + return ProxiedUser(name_id=name_id)