예제 #1
0
def generate_and_record_refresh_token(user: User,
                                      current_time: datetime) -> str:
    token_id = generate_refresh_token_id()
    token, payload = generate_refresh_token_for_user(user, current_time,
                                                     token_id)
    register_user_refresh_token(user, token_id, payload)
    return token
예제 #2
0
def test_is_refresh_token_active_supports_multiple_active_refresh_tokens(
        current_time, user):
    _, refresh_token_1_payload = generate_refresh_token_for_user(
        user, current_time, "token-1")
    _, refresh_token_2_payload = generate_refresh_token_for_user(
        user, current_time, "token-2")
    register_user_refresh_token(user, "token-1", refresh_token_1_payload)
    register_user_refresh_token(user, "token-2", refresh_token_2_payload)

    assert True is is_refresh_token_active(refresh_token_1_payload)
    assert True is is_refresh_token_active(refresh_token_2_payload)
예제 #3
0
def test_revoke_refresh_token(user, token_id, refresh_token):
    register_user_refresh_token(user, token_id, refresh_token.payload)
    assert 1 == len(RefreshToken.objects.all())
    response = make_request({"refresh_token": refresh_token.encoded})
    assert 204 == response.status_code
    assert 0 == len(RefreshToken.objects.all())

    # now the refresh token is invalid
    response = make_request({"refresh_token": refresh_token.encoded})
    assert 400 == response.status_code
    assert b"token is invalid" in response.content
def test_retrieve_access_token(current_time, user, token_id, refresh_token):
    register_user_refresh_token(user, token_id, refresh_token.payload)
    response = make_request({"refresh_token": refresh_token.encoded})
    assert 200 == response.status_code

    response_data = response.json()
    assert {"access_token", "expiry_time"} == response_data.keys()

    payload = decode_token(response_data["access_token"])
    expiry_time = get_access_token_expiry_time(current_time)
    assert isinstance(payload, dict)
    assert user.user_id == payload["sub"]
    assert to_timestamp(expiry_time) == payload["exp"]
    assert expiry_time.isoformat() == response_data["expiry_time"]
def test_get_refresh_token_payload_if_active(current_time, user, token_id,
                                             refresh_token):
    access_token, _ = generate_access_token_for_user(user.user_id,
                                                     current_time)
    assert None is get_refresh_token_payload_if_active(access_token)
    assert None is get_refresh_token_payload_if_active("")
    assert None is get_refresh_token_payload_if_active("foo")
    assert None is get_refresh_token_payload_if_active(refresh_token.encoded)

    register_user_refresh_token(user, token_id, refresh_token.payload)
    assert refresh_token.payload == get_refresh_token_payload_if_active(
        refresh_token.encoded)

    register_user_refresh_token(user, "newer-refresh-token", {})
    assert None is get_refresh_token_payload_if_active(refresh_token.encoded)