Skip to content
Snippets Groups Projects
Select Git revision
  • 876-http-signature
  • issue-1238
  • develop default protected
  • master
  • 1.0.1
  • 1121-download
  • plugins-v3
  • plugins-v2
  • plugins
  • 1.0.1
  • 1.0
  • 1.0-rc1
  • 0.21.2
  • 0.21.1
  • 0.21
  • 0.21-rc2
  • 0.21-rc1
  • 0.20.1
  • 0.20.0
  • 0.20.0-rc1
  • 0.19.1
  • 0.19.0
  • 0.19.0-rc2
  • 0.19.0-rc1
  • 0.18.3
  • 0.18.2
  • 0.18.1
  • 0.18
  • 0.17
29 results

authentication.py

Blame
  • Forked from funkwhale / funkwhale
    7111 commits behind the upstream repository.
    authentication.py 1.98 KiB
    from django.utils.encoding import smart_text
    from django.utils.translation import ugettext as _
    from rest_framework import exceptions
    from rest_framework_jwt import authentication
    from rest_framework_jwt.settings import api_settings
    
    
    class JSONWebTokenAuthenticationQS(authentication.BaseJSONWebTokenAuthentication):
    
        www_authenticate_realm = "api"
    
        def get_jwt_value(self, request):
            token = request.query_params.get("jwt")
            if "jwt" in request.query_params and not token:
                msg = _("Invalid Authorization header. No credentials provided.")
                raise exceptions.AuthenticationFailed(msg)
            return token
    
        def authenticate_header(self, request):
            return '{0} realm="{1}"'.format(
                api_settings.JWT_AUTH_HEADER_PREFIX, self.www_authenticate_realm
            )
    
    
    class BearerTokenHeaderAuth(authentication.BaseJSONWebTokenAuthentication):
        """
        For backward compatibility purpose, we used Authorization: JWT <token>
        but Authorization: Bearer <token> is probably better.
        """
    
        www_authenticate_realm = "api"
    
        def get_jwt_value(self, request):
            auth = authentication.get_authorization_header(request).split()
            auth_header_prefix = "bearer"
    
            if not auth:
                if api_settings.JWT_AUTH_COOKIE:
                    return request.COOKIES.get(api_settings.JWT_AUTH_COOKIE)
                return None
    
            if smart_text(auth[0].lower()) != auth_header_prefix:
                return None
    
            if len(auth) == 1:
                msg = _("Invalid Authorization header. No credentials provided.")
                raise exceptions.AuthenticationFailed(msg)
            elif len(auth) > 2:
                msg = _(
                    "Invalid Authorization header. Credentials string "
                    "should not contain spaces."
                )
                raise exceptions.AuthenticationFailed(msg)
    
            return auth[1]
    
        def authenticate_header(self, request):
            return '{0} realm="{1}"'.format("Bearer", self.www_authenticate_realm)