Skip to content

Commit 761dbfc

Browse files
author
Nick Bragdon
committed
Adding support for using the refresh token once an access token is expired
1 parent 66709c3 commit 761dbfc

2 files changed

Lines changed: 22 additions & 3 deletions

File tree

server/src/app/views.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def authorizationCallback():
7272
configSettings = getConfigSettings(myEnv)
7373

7474
# this gets the token from Medicare.gov once the 'user' authenticates their Medicare.gov account
75-
response = getAccessToken(requestQuery.get('code'),requestQuery.get('state'),configSettings=configSettings,settings=settings)
75+
authToken = getAccessToken(requestQuery.get('code'),requestQuery.get('state'),configSettings=configSettings,settings=settings)
7676

7777
"""DEVELOPER NOTES:
7878
* This is where you would most likely place some type of
@@ -82,7 +82,6 @@ def authorizationCallback():
8282
* Here we are however, just updating the loggedInUser we pulled from our MockDb, but we aren't persisting that change
8383
* back into our mocked DB, normally you would want to do this
8484
"""
85-
authToken = json.loads(response.text)
8685

8786
#Here we are grabbing the mocked 'user' for our application
8887
# to be able to store the access token for that user

server/src/utils/bb2Util.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import requests
77
from requests_toolbelt.multipart.encoder import MultipartEncoder
88
import urllib
9+
import datetime
910

1011
""" DEVELOPER NOTES:
1112
* This is our mocked Data Service layer for both the BB2 API
@@ -53,11 +54,30 @@ def getAccessToken(code, state, configSettings, settings):
5354
# and provide a header with the content type including the boundary or this call will fail
5455
mp_encoder = MultipartEncoder(PARAMS)
5556
myResponse = requests.post(url=BB2_ACCESS_TOKEN_URL,data=mp_encoder,headers={'content-type':mp_encoder.content_type})
56-
return myResponse
57+
response_json = myResponse.json()
58+
response_json['expires_at'] = datetime.datetime.now() + datetime.timedelta(seconds=response_json['expires_in'])
59+
return response_json
60+
61+
def refreshAccessToken(refresh_token, configSettings, settings):
62+
BB2_ACCESS_TOKEN_URL = configSettings.get('bb2BaseUrl')+'/'+settings.version+'/o/token/'
63+
params = {
64+
'client_id':configSettings.get('bb2ClientId'),
65+
'grant_type': 'refresh_token',
66+
'refresh_token': refresh_token
67+
}
68+
69+
myResponse = requests.post(url=BB2_ACCESS_TOKEN_URL, params=params, auth=(configSettings.get('bb2ClientId'), configSettings.get('bb2ClientSecret')))
70+
response_json = myResponse.json()
71+
response_json['expires_at'] = datetime.datetime.now() + datetime.timedelta(seconds=response_json['expires_in'])
72+
return response_json
5773

5874
# this function is used to query eob data for the authenticated Medicare.gov
5975
# user and returned - we are then storing in a mocked DB
6076
def getBenefitData(settings, configsSettings, query, loggedInUser):
77+
if (datetime.datetime.now() > loggedInUser.get('authToken').get('expires_at')):
78+
updated_auth_token = refreshAccessToken(loggedInUser.get('authToken').get('refresh_token'), configsSettings, settings)
79+
loggedInUser.update({'authToken':updated_auth_token})
80+
6181
PARAMS = {
6282
'code':query.get('code'),
6383
'state':query.get('state')

0 commit comments

Comments
 (0)