general: use a fake proxy object for unknown local NameIDs (#30723)

This commit is contained in:
Frédéric Péters 2019-02-21 11:20:09 +01:00
parent b5a8e0cda4
commit cfbf038356
2 changed files with 18 additions and 6 deletions

View File

@ -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'):

View File

@ -15,6 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
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)