general: use a fake proxy object for unknown local NameIDs (#30723)
This commit is contained in:
parent
b5a8e0cda4
commit
cfbf038356
|
@ -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'):
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue