28 lines
841 B
Python
28 lines
841 B
Python
from django.utils.translation import gettext_lazy as _
|
|
from rest_framework import exceptions
|
|
from rest_framework.authentication import TokenAuthentication
|
|
|
|
from api_tokens.models import APIToken
|
|
|
|
|
|
class BearerTokenAuthentication(TokenAuthentication):
|
|
"""
|
|
Customized TokenAuthentication to support the APIToken model
|
|
and sentry-cli's usage of bearer
|
|
"""
|
|
|
|
keyword = "Bearer"
|
|
model = APIToken
|
|
|
|
def authenticate_credentials(self, key):
|
|
model = self.get_model()
|
|
try:
|
|
token = model.objects.select_related("user").get(token=key)
|
|
except model.DoesNotExist:
|
|
raise exceptions.AuthenticationFailed(_("Invalid token."))
|
|
|
|
if not token.user.is_active:
|
|
raise exceptions.AuthenticationFailed(_("User inactive or deleted."))
|
|
|
|
return (token.user, token)
|