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
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)