Fix authentication() returning None value

This commit is contained in:
Pieter Lambrecht 2022-03-18 10:37:28 +01:00
parent 14fbebfc24
commit 7d2ea49c01
2 changed files with 20 additions and 15 deletions

View File

@ -12,22 +12,26 @@ class TokenAuthentication(authentication.TokenAuthentication):
model = Token model = Token
def authenticate(self, request): def authenticate(self, request):
token_user, token = super().authenticate(request) authenticationresult = super().authenticate(request)
if authenticationresult:
token_user, token = authenticationresult
# Verify source IP is allowed # Verify source IP is allowed
if token.allowed_ips: if token.allowed_ips:
# Replace 'HTTP_X_REAL_IP' with the settings variable choosen in #8867 # Replace 'HTTP_X_REAL_IP' with the settings variable choosen in #8867
if 'HTTP_X_REAL_IP' in request.META: if 'HTTP_X_REAL_IP' in request.META:
clientip = request.META['HTTP_X_REAL_IP'].split(",")[0].strip() clientip = request.META['HTTP_X_REAL_IP'].split(",")[0].strip()
elif 'REMOTE_ADDR' in request.META: elif 'REMOTE_ADDR' in request.META:
clientip = request.META['REMOTE_ADDR'] clientip = request.META['REMOTE_ADDR']
else: else:
raise exceptions.AuthenticationFailed(f"A HTTP header containing the SourceIP (HTTP_X_REAL_IP, REMOTE_ADDR) is missing from the request.") raise exceptions.AuthenticationFailed(f"A HTTP header containing the SourceIP (HTTP_X_REAL_IP, REMOTE_ADDR) is missing from the request.")
if not token.validate_client_ip(clientip): if not token.validate_client_ip(clientip):
raise exceptions.AuthenticationFailed(f"Source IP {clientip} is not allowed to use this token.") raise exceptions.AuthenticationFailed(f"Source IP {clientip} is not allowed to use this token.")
return token_user, token return token_user, token
else:
return None
def authenticate_credentials(self, key): def authenticate_credentials(self, key):
model = self.get_model() model = self.get_model()

View File

@ -62,8 +62,9 @@ class TokenAdmin(admin.ModelAdmin):
] ]
def list_allowed_ips(self, obj): def list_allowed_ips(self, obj):
return obj.allowed_ips if obj.allowed_ips:
list_allowed_ips.empty_value_display = 'Any' return obj.allowed_ips
return 'Any'
list_allowed_ips.short_description = "Allowed IPs" list_allowed_ips.short_description = "Allowed IPs"