diff options
author | Frederick Muriuki Muriithi | 2024-05-14 09:27:25 +0300 |
---|---|---|
committer | Frederick Muriuki Muriithi | 2024-05-14 09:31:30 +0300 |
commit | d80bf00d16048c0f1dbc5635ce6bf52411d44346 (patch) | |
tree | fde16390d583a77ac3e1a8b023e1392b5b0e3666 | |
parent | ea5de4da71b3cb876410136a097041387ab5d227 (diff) | |
download | genenetwork2-d80bf00d16048c0f1dbc5635ce6bf52411d44346.tar.gz |
Enable client to automatically request a refresh token.
-rw-r--r-- | gn2/wqflask/oauth2/client.py | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/gn2/wqflask/oauth2/client.py b/gn2/wqflask/oauth2/client.py index c16b705d..f4ad4f00 100644 --- a/gn2/wqflask/oauth2/client.py +++ b/gn2/wqflask/oauth2/client.py @@ -6,6 +6,7 @@ from urllib.parse import urljoin from flask import current_app as app from pymonad.either import Left, Right, Either +from authlib.jose import jwt from authlib.integrations.requests_client import OAuth2Session from gn2.wqflask.oauth2 import session @@ -39,11 +40,22 @@ def user_logged_in(): def oauth2_client(): + def __update_token__(token, refresh_token=None, access_token=None): + """Update the token when refreshed.""" + session.set_user_token(token) + def __client__(token) -> OAuth2Session: - return OAuth2Session( - oauth2_clientid(), oauth2_clientsecret(), - scope=SCOPE, token_endpoint_auth_method="client_secret_post", - token=token) + _jwt = jwt.decode(token["access_token"], + app.config["AUTH_SERVER_SSL_PUBLIC_KEY"]) + client = OAuth2Session( + oauth2_clientid(), + oauth2_clientsecret(), + scope=SCOPE, + token_endpoint=urljoin(authserver_uri(), "/auth/token"), + token_endpoint_auth_method="client_secret_post", + token=token, + update_token=__update_token__) + return client return session.user_token().either( lambda _notok: __client__(None), lambda token: __client__(token)) |