diff --git a/alexia/api/v1/methods/authorization.py b/alexia/api/v1/methods/authorization.py index a0b6ade..7d1af32 100644 --- a/alexia/api/v1/methods/authorization.py +++ b/alexia/api/v1/methods/authorization.py @@ -42,15 +42,7 @@ def authorization_list(request, radius_username=None): authorizations = Authorization.objects.filter(organization=request.organization) if radius_username is not None: - try: - user = User.objects.get(authenticationdata__backend=SAML2_BACKEND_NAME, - authenticationdata__username=radius_username) - except User.DoesNotExist: - try: - user = User.objects.get(authenticationdata__backend=RADIUS_BACKEND_NAME, - authenticationdata__username=radius_username) - except User.DoesNotExist: - raise InvalidParamsError('User with provided username does not exist') + user = get_user_by_username(radius_username) authorizations = authorizations.filter(user=user) @@ -88,15 +80,7 @@ def authorization_get(request, radius_username): """ result = [] - try: - user = User.objects.get(authenticationdata__backend=SAML2_BACKEND_NAME, - authenticationdata__username=radius_username) - except User.DoesNotExist: - try: - user = User.objects.get(authenticationdata__backend=RADIUS_BACKEND_NAME, - authenticationdata__username=radius_username) - except User.DoesNotExist: - raise InvalidParamsError('User with provided username does not exits') + user = get_user_by_username(radius_username) authorizations = Authorization.objects.filter(user=user, organization=request.organization) @@ -137,15 +121,7 @@ def authorization_add(request, radius_username, account): Raises error -32602 (Invalid params) if the username does not exist. """ - try: - user = User.objects.get(authenticationdata__backend=SAML2_BACKEND_NAME, - authenticationdata__username=radius_username) - except User.DoesNotExist: - try: - user = User.objects.get(authenticationdata__backend=RADIUS_BACKEND_NAME, - authenticationdata__username=radius_username) - except User.DoesNotExist: - raise InvalidParamsError('User with provided username does not exits') + user = get_user_by_username(radius_username) authorization = Authorization(user=user, organization=request.organization) authorization.save() @@ -171,15 +147,7 @@ def authorization_end(request, radius_username, authorization_id): Raises error -32602 (Invalid params) if the username does not exist. Raises error -32602 (Invalid params) if provided authorization cannot be found. """ - try: - user = User.objects.get(authenticationdata__backend=SAML2_BACKEND_NAME, - authenticationdata__username=radius_username) - except User.DoesNotExist: - try: - user = User.objects.get(authenticationdata__backend=RADIUS_BACKEND_NAME, - authenticationdata__username=radius_username) - except User.DoesNotExist: - raise InvalidParamsError('User with provided username does not exits') + user = get_user_by_username(radius_username) try: authorization = Authorization.objects.select_for_update().get(user=user, @@ -194,3 +162,18 @@ def authorization_end(request, radius_username, authorization_id): return True else: return False + +def get_user_by_username(radius_username): + try: + user = User.objects.get(authenticationdata__backend=SAML2_BACKEND_NAME, + authenticationdata__username=radius_username) + except User.DoesNotExist: + try: + user = User.objects.get(authenticationdata__backend=RADIUS_BACKEND_NAME, + authenticationdata__username=radius_username) + except User.DoesNotExist: + try: + user = User.objects.get(username=radius_username) + except User.DoesNotExist: + raise InvalidParamsError('User with provided username does not exits') + return user diff --git a/alexia/api/v1/methods/billing.py b/alexia/api/v1/methods/billing.py index dc54412..19e9fc8 100644 --- a/alexia/api/v1/methods/billing.py +++ b/alexia/api/v1/methods/billing.py @@ -225,7 +225,10 @@ def order_list(request, radius_username=None): user = User.objects.get(authenticationdata__backend=RADIUS_BACKEND_NAME, authenticationdata__username=radius_username) except User.DoesNotExist: - return [] + try: + user = User.objects.get(username=radius_username) + except User.DoesNotExist: + return [] orders = orders.filter(authorization__user=user) orders = orders.select_related('event', 'authorization') diff --git a/alexia/api/v1/methods/rfid.py b/alexia/api/v1/methods/rfid.py index 71126fe..1a2a44b 100644 --- a/alexia/api/v1/methods/rfid.py +++ b/alexia/api/v1/methods/rfid.py @@ -61,7 +61,10 @@ def rfid_list(request, radius_username=None): user = User.objects.get(authenticationdata__backend=RADIUS_BACKEND_NAME, authenticationdata__username=radius_username) except User.DoesNotExist: - return [] + try: + user = User.objects.get(username=radius_username) + except User.DoesNotExist: + return [] rfidcards = rfidcards.filter(user=user) rfidcards = rfidcards.select_related('user') @@ -96,15 +99,7 @@ def rfid_get(request, radius_username): Raises error -32602 (Invalid params) if the username does not exist. """ result = [] - try: - user = User.objects.get(authenticationdata__backend=SAML2_BACKEND_NAME, - authenticationdata__username=radius_username) - except User.DoesNotExist: - try: - user = User.objects.get(authenticationdata__backend=RADIUS_BACKEND_NAME, - authenticationdata__username=radius_username) - except User.DoesNotExist: - raise InvalidParamsError('User with provided username does not exits') + user = get_user_by_username(radius_username) rfidcards = RfidCard.objects.filter(user=user, managed_by=request.organization) @@ -140,15 +135,7 @@ def rfid_add(request, radius_username, identifier): Raises error -32602 (Invalid params) if the RFID card is already registered by someone else. """ - try: - user = User.objects.get(authenticationdata__backend=SAML2_BACKEND_NAME, - authenticationdata__username=radius_username) - except User.DoesNotExist: - try: - user = User.objects.get(authenticationdata__backend=RADIUS_BACKEND_NAME, - authenticationdata__username=radius_username) - except User.DoesNotExist: - raise InvalidParamsError('User with provided username does not exits') + user = get_user_by_username(radius_username) try: rfidcard = RfidCard.objects.select_for_update().get(user=user, identifier=identifier) @@ -182,15 +169,7 @@ def rfid_remove(request, radius_username, identifier): Raises error -32602 (Invalid params) if the username does not exist. Raises error -32602 (Invalid params) if the RFID card does not exist for this person/organization. """ - try: - user = User.objects.get(authenticationdata__backend=SAML2_BACKEND_NAME, - authenticationdata__username=radius_username) - except User.DoesNotExist: - try: - user = User.objects.get(authenticationdata__backend=RADIUS_BACKEND_NAME, - authenticationdata__username=radius_username) - except User.DoesNotExist: - raise InvalidParamsError('User with provided username does not exits') + user = get_user_by_username(radius_username) try: rfidcard = RfidCard.objects.select_for_update().get(user=user, identifier=identifier) @@ -208,3 +187,19 @@ def rfid_remove(request, radius_username, identifier): rfidcard.delete() else: rfidcard.managed_by.remove(request.organization) + + +def get_user_by_username(radius_username): + try: + user = User.objects.get(authenticationdata__backend=SAML2_BACKEND_NAME, + authenticationdata__username=radius_username) + except User.DoesNotExist: + try: + user = User.objects.get(authenticationdata__backend=RADIUS_BACKEND_NAME, + authenticationdata__username=radius_username) + except User.DoesNotExist: + try: + user = User.objects.get(username=radius_username) + except User.DoesNotExist: + raise InvalidParamsError('User with provided username does not exits') + return user diff --git a/alexia/api/v1/methods/scheduling.py b/alexia/api/v1/methods/scheduling.py index bc49671..0df96bf 100644 --- a/alexia/api/v1/methods/scheduling.py +++ b/alexia/api/v1/methods/scheduling.py @@ -53,7 +53,10 @@ def user_get_availabilities(request, radius_username): user = User.objects.get(authenticationdata__backend=RADIUS_BACKEND_NAME, authenticationdata__username=radius_username) except User.DoesNotExist: - raise InvalidParamsError('User with provided username does not exits') + try: + user = User.objects.get(username=radius_username) + except User.DoesNotExist: + raise InvalidParamsError('User with provided username does not exits') availabilities = BartenderAvailability.objects.filter(user=user, event__organizer=request.organization) diff --git a/alexia/api/v1/methods/user.py b/alexia/api/v1/methods/user.py index 799a242..a3edd5c 100644 --- a/alexia/api/v1/methods/user.py +++ b/alexia/api/v1/methods/user.py @@ -68,7 +68,8 @@ def user_exists(request, radius_username): return User.objects.filter(authenticationdata__backend=RADIUS_BACKEND_NAME, authenticationdata__username=radius_username).exists() or \ User.objects.filter(authenticationdata__backend=SAML2_BACKEND_NAME, - authenticationdata__username=radius_username).exists() + authenticationdata__username=radius_username).exists() or \ + User.objects.filter(username=radius_username).exists() @jsonrpc_method('user.get(radius_username=String) -> Object', site=api_v1_site, authenticated=True, safe=True) @@ -97,8 +98,11 @@ def user_get(request, radius_username): try: user = User.objects.get(authenticationdata__backend=RADIUS_BACKEND_NAME, authenticationdata__username=radius_username) - except: - raise ObjectNotFoundError + except User.DoesNotExist: + try: + user = User.objects.get(username=radius_username) + except: + raise ObjectNotFoundError return format_user(user) @@ -163,8 +167,11 @@ def user_get_membership(request, radius_username): try: user = User.objects.get(authenticationdata__backend=RADIUS_BACKEND_NAME, authenticationdata__username=radius_username) - except: - raise ObjectNotFoundError + except User.DoesNotExist: + try: + user = User.objects.get(username=radius_username) + except: + raise ObjectNotFoundError try: membership = Membership.objects.get( @@ -215,8 +222,11 @@ def user_get_iva_certificate(request, radius_username): try: user = User.objects.get(authenticationdata__backend=RADIUS_BACKEND_NAME, authenticationdata__username=radius_username) - except: - raise ObjectNotFoundError + except User.DoesNotExist: + try: + user = User.objects.get(username=radius_username) + except: + raise ObjectNotFoundError try: certificate = Certificate.objects.get(owner=user)