Exemplo n.º 1
0
def _get_user(ctx: rest.Context, bump_login: bool) -> Optional[model.User]:
    if not ctx.has_header('Authorization'):
        return None

    auth_token = None

    try:
        auth_type, credentials = ctx.get_header('Authorization').split(' ', 1)
        if auth_type.lower() == 'basic':
            username, password = base64.decodebytes(
                credentials.encode('ascii')).decode('utf8').split(':', 1)
            auth_user = _authenticate_basic_auth(username, password)
        elif auth_type.lower() == 'token':
            username, token = base64.decodebytes(
                credentials.encode('ascii')).decode('utf8').split(':', 1)
            auth_user, auth_token = _authenticate_token(username, token)
        else:
            raise HttpBadRequest(
                'ValidationError',
                'Only basic or token HTTP authentication is supported.')
    except ValueError as err:
        msg = (
            'Authorization header values are not properly formed. '
            'Supplied header {0}. Got error: {1}')
        raise HttpBadRequest(
            'ValidationError',
            msg.format(ctx.get_header('Authorization'), str(err)))

    if bump_login and auth_user.user_id:
        users.bump_user_login_time(auth_user)
        if auth_token is not None:
            user_tokens.bump_usage_time(auth_token)
        ctx.session.commit()

    return auth_user
Exemplo n.º 2
0
 def process_request(self, request, _response):
     ''' Bind the user to request. Update last login time if needed. '''
     request.context.user = self._get_user(request)
     if request.get_param_as_bool('bump-login') \
             and request.context.user.user_id:
         users.bump_user_login_time(request.context.user)
         request.context.session.commit()
Exemplo n.º 3
0
def _get_user(ctx: rest.Context, bump_login: bool) -> Optional[model.User]:
    if not ctx.has_header('Authorization'):
        return None

    auth_token = None

    try:
        auth_type, credentials = ctx.get_header('Authorization').split(' ', 1)
        if auth_type.lower() == 'basic':
            username, password = base64.decodebytes(
                credentials.encode('ascii')).decode('utf8').split(':', 1)
            auth_user = _authenticate_basic_auth(username, password)
        elif auth_type.lower() == 'token':
            username, token = base64.decodebytes(
                credentials.encode('ascii')).decode('utf8').split(':', 1)
            auth_user, auth_token = _authenticate_token(username, token)
        else:
            raise HttpBadRequest('ValidationError', '기본 및 토큰 HTTP 인증만을 지원합니다.')
    except ValueError as err:
        msg = ('인증 헤더 값이 적절한 형식이 아닙니다. ' '전달된 헤더 {0}. 오류: {1}')
        raise HttpBadRequest(
            'ValidationError',
            msg.format(ctx.get_header('Authorization'), str(err)))

    if bump_login and auth_user.user_id:
        users.bump_user_login_time(auth_user)
        if auth_token is not None:
            user_tokens.bump_usage_time(auth_token)
        ctx.session.commit()

    return auth_user
Exemplo n.º 4
0
 def process_request(self, request, _response):
     ''' Bind the user to request. Update last login time if needed. '''
     request.context.user = self._get_user(request)
     if request.get_param_as_bool('bump-login') \
             and request.context.user.user_id:
         users.bump_user_login_time(request.context.user)
         request.context.session.commit()
Exemplo n.º 5
0
def process_request(ctx: rest.Context) -> None:
    ''' Bind the user to request. Update last login time if needed. '''
    auth_user = _get_user(ctx)
    if auth_user:
        ctx.user = auth_user
    if ctx.get_param_as_bool('bump-login', default=False) and ctx.user.user_id:
        users.bump_user_login_time(ctx.user)
        ctx.session.commit()
Exemplo n.º 6
0
def _get_user(ctx: rest.Context, bump_login: bool) -> Optional[model.User]:
    if not ctx.has_header("Authorization"):
        return None

    auth_token = None

    try:
        auth_type, credentials = ctx.get_header("Authorization").split(" ", 1)
        if auth_type.lower() == "basic":
            username, password = (
                base64.decodebytes(credentials.encode("ascii"))
                .decode("utf8")
                .split(":", 1)
            )
            auth_user = _authenticate_basic_auth(username, password)
        elif auth_type.lower() == "token":
            username, token = (
                base64.decodebytes(credentials.encode("ascii"))
                .decode("utf8")
                .split(":", 1)
            )
            auth_user, auth_token = _authenticate_token(username, token)
        else:
            raise HttpBadRequest(
                "ValidationError",
                "Only basic or token HTTP authentication is supported.",
            )
    except ValueError as err:
        msg = (
            "Authorization header values are not properly formed. "
            "Supplied header {0}. Got error: {1}"
        )
        raise HttpBadRequest(
            "ValidationError",
            msg.format(ctx.get_header("Authorization"), str(err)),
        )

    if bump_login and auth_user.user_id:
        users.bump_user_login_time(auth_user)
        if auth_token is not None:
            user_tokens.bump_usage_time(auth_token)
        ctx.session.commit()

    return auth_user
Exemplo n.º 7
0
def process_request(ctx):
    ''' Bind the user to request. Update last login time if needed. '''
    ctx.user = _get_user(ctx)
    if ctx.get_param_as_bool('bump-login') and ctx.user.user_id:
        users.bump_user_login_time(ctx.user)
        ctx.session.commit()
Exemplo n.º 8
0
def test_bump_user_login_time(user_factory, fake_datetime):
    user = user_factory()
    with fake_datetime("1997-01-01"):
        users.bump_user_login_time(user)
        assert user.last_login_time == datetime(1997, 1, 1)
Exemplo n.º 9
0
def test_bump_user_login_time(user_factory, fake_datetime):
    user = user_factory()
    with fake_datetime('1997-01-01'):
        users.bump_user_login_time(user)
        assert user.last_login_time == datetime(1997, 1, 1)