Пример #1
0
def test_get_by_key(data_fixture):
    user = data_fixture.create_user()
    data_fixture.create_user()
    group_1 = data_fixture.create_group(user=user)
    group_2 = data_fixture.create_group()
    token = data_fixture.create_token(user=user, group=group_1)
    data_fixture.create_token(user=user, group=group_2)

    handler = TokenHandler()

    with pytest.raises(TokenDoesNotExist):
        handler.get_by_key(key='abc')

    token_tmp = handler.get_by_key(key=token.key)
    assert token_tmp.id == token.id
    assert token.group_id == group_1.id
    assert isinstance(token_tmp, Token)
Пример #2
0
    def authenticate(self, request):
        auth = get_authorization_header(request).split()

        if not auth or auth[0].lower() != b"token":
            return None

        if len(auth) == 1:
            msg = _("Invalid token header. No token provided.")
            raise AuthenticationFailed(
                {"detail": msg, "error": "ERROR_INVALID_TOKEN_HEADER"}
            )
        elif len(auth) > 2:
            msg = _("Invalid token header. Token string should not contain spaces.")
            raise AuthenticationFailed(
                {"detail": msg, "error": "ERROR_INVALID_TOKEN_HEADER"}
            )

        decoded_key = auth[1].decode(HTTP_HEADER_ENCODING)
        handler = TokenHandler()

        try:
            token = handler.get_by_key(decoded_key)
        except UserNotInGroup:
            msg = _("The token's user does not belong to the group anymore.")
            raise AuthenticationFailed(
                {"detail": msg, "error": "ERROR_TOKEN_GROUP_MISMATCH"}
            )
        except TokenDoesNotExist:
            msg = _("The provided token does not exist.")
            raise AuthenticationFailed(
                {"detail": msg, "error": "ERROR_TOKEN_DOES_NOT_EXIST"}
            )

        if not token.user.is_active:
            raise AuthenticationFailed(
                {
                    "detail": "The user related to the token is disabled.",
                    "error": "ERROR_USER_NOT_ACTIVE",
                }
            )

        token = handler.update_token_usage(token)
        request.user_token = token
        return token.user, token
Пример #3
0
    def authenticate(self, request):
        auth = get_authorization_header(request).split()

        if not auth or auth[0].lower() != b'token':
            return None

        if len(auth) == 1:
            msg = _('Invalid token header. No token provided.')
            raise AuthenticationFailed({
                'detail': msg,
                'error': 'ERROR_INVALID_TOKEN_HEADER'
            })
        elif len(auth) > 2:
            msg = _(
                'Invalid token header. Token string should not contain spaces.'
            )
            raise AuthenticationFailed({
                'detail': msg,
                'error': 'ERROR_INVALID_TOKEN_HEADER'
            })

        decoded_key = auth[1].decode(HTTP_HEADER_ENCODING)
        handler = TokenHandler()

        try:
            token = handler.get_by_key(decoded_key)
        except UserNotInGroupError:
            msg = _('The token\'s user does not belong to the group anymore.')
            raise AuthenticationFailed({
                'detail': msg,
                'error': 'ERROR_TOKEN_GROUP_MISMATCH'
            })
        except TokenDoesNotExist:
            msg = _('The provided token does not exist.')
            raise AuthenticationFailed({
                'detail': msg,
                'error': 'ERROR_TOKEN_DOES_NOT_EXIST'
            })

        token = handler.update_token_usage(token)
        request.user_token = token
        return token.user, token