Add code to refresh token

This commit is contained in:
Micke Nordin 2024-01-15 12:29:56 +01:00
parent ff10e706cd
commit 4bd47e747a
Signed by untrusted user: Micke
GPG key ID: F53C4CC83EDAB3BE

View file

@ -12,9 +12,26 @@ hub:
extraConfig: extraConfig:
oauthCode: | oauthCode: |
import time import time
import requests
from datetime import datetime from datetime import datetime
from oauthenticator.generic import GenericOAuthenticator from oauthenticator.generic import GenericOAuthenticator
def get_nextcloud_access_token(refresh_token):
client_id = os.environ['NEXTCLOUD_CLIENT_ID']
client_secret = os.environ['NEXTCLOUD_CLIENT_SECRET']
url = 'https://' + os.environ['NEXTCLOUD_HOST'] + '/index.php/apps/oauth2/api/v1/token'
code = refresh_token
data = {
'grant_type': refresh_token,
'code': code,
'refresh_token: refresh_token,
'client_id': client_id,
'client_secret': client_secret
}
response = requests.post(url, data=data)
return response.json()
def post_auth_hook(authenticator, handler, authentication): def post_auth_hook(authenticator, handler, authentication):
user = authentication['auth_state']['oauth_user']['ocs']['data']['id'] user = authentication['auth_state']['oauth_user']['ocs']['data']['id']
auth_state = authentication['auth_state'] auth_state = authentication['auth_state']
@ -54,6 +71,21 @@ hub:
if now >= expires: if now >= expires:
if debug: if debug:
print(f'Time is: {now_hr}, token expired: {expires_hr}') print(f'Time is: {now_hr}, token expired: {expires_hr}')
print(f'Refreshing token for {user}')
try:
token_response = get_nextcloud_access_token(refresh_token)
auth_state['access_token'] = token_response['access_token']
auth_state['refresh_token'] = token_response['refresh_token']
auth_state['token_expires'] = now + token_response['expires_in']
auth_state['token_response'] = token_response
if debug:
print(f'Successfully refreshed token for {user}')
print(f'auth_state for {user}: {auth_state}')
return auth_state
except Exception as e:
if debug:
print(f'Failed to refresh token for {user}')
return False
return False return False
if debug: if debug:
print(f'Time is: {now_hr}, token expires: {expires_hr}') print(f'Time is: {now_hr}, token expires: {expires_hr}')