예제 #1
0
def get_user_token():
    """
    Returns an access token for the authenticated user.
    This function facilitates interactions with the bundle service.
    """
    CLIENT_ID = 'codalab_cli_client'

    if not request.user.is_authenticated:
        return None

    # Try to find an existing token that will work.
    token = local.model.find_oauth2_token(
        CLIENT_ID, request.user.user_id,
        datetime.utcnow() + timedelta(minutes=5))
    if token is not None:
        return token.access_token

    # Otherwise, generate a new one.
    token = OAuth2Token(
        local.model,
        access_token=generate_token(),
        refresh_token=None,
        scopes='',
        expires=datetime.utcnow() + timedelta(hours=10),
        client_id=CLIENT_ID,
        user_id=request.user.user_id,
    )
    local.model.save_oauth2_token(token)

    return token.access_token
예제 #2
0
def set_token(token, _request, *args, **kwargs):
    # _request.user only available for "password" grant types,
    # while request.user is available on views with @require_login,
    # i.e. the authorize view
    user = _request.user or request.user

    # Make sure that every client has only one token connected to a user
    local.model.clear_oauth2_tokens(_request.client.client_id, user.user_id)

    expires_in = token.get('expires_in')
    expires = datetime.utcnow() + timedelta(seconds=expires_in)

    token = OAuth2Token(
        local.model,
        access_token=token['access_token'],
        refresh_token=token.get('refresh_token', None),
        scopes=token['scope'],
        expires=expires,
        client_id=_request.client.client_id,
        user_id=user.user_id,
    )

    return local.model.save_oauth2_token(token)