def get_refresh_token_string(verbose=False): try: curl = Client._Curl() curl.verbose = verbose tmp_log = PLogger.getPandaLogger() oidc = curl.get_oidc(tmp_log) token_file = oidc.get_token_path() if os.path.exists(token_file): with open(token_file) as f: data = json.load(f) enc = data['id_token'].split('.')[1] enc += '=' * (-len(enc) % 4) dec = json.loads(base64.urlsafe_b64decode(enc.encode())) exp_time = datetime.datetime.utcfromtimestamp(dec['exp']) delta = exp_time - datetime.datetime.utcnow() minutes = delta.total_seconds() / 60 print('Token will expire in %s minutes.' % minutes) print('Token expiration time : {0} UTC'.format( exp_time.strftime("%Y-%m-%d %H:%M:%S"))) if delta < datetime.timedelta(minutes=0): print("Token already expired. Cannot refresh.") return False, None, None return True, data['refresh_token'], delta else: print("Cannot find token file.") except Exception as e: print('failed to decode cached token with {0}'.format(e)) return False, None, None
def get_token_info(verbose=False): # c = panda_api.get_api() curl = Client._Curl() curl.verbose = verbose token_info = curl.get_token_info() # print(token_info) if token_info and type(token_info) in [dict]: for key in token_info: print("%s: %s" % (key, token_info[key])) get_expire_time() else: print(token_info)
def refresh_token(minutes=30, verbose=False): curl = Client._Curl() curl.verbose = verbose tmp_log = PLogger.getPandaLogger() oidc = curl.get_oidc(tmp_log) status, refresh_token, delta = get_refresh_token_string() if not status: print("Cannot refresh token.") return False print("Fetching auth configuration from: %s" % str(oidc.auth_config_url)) s, o = oidc.fetch_page(oidc.auth_config_url) if not s: print("Failed to get Auth configuration: " + o) return False auth_config = o print("Fetching endpoint configuration from: %s" % str(auth_config['oidc_config_url'])) s, o = oidc.fetch_page(auth_config['oidc_config_url']) if not s: print("Failed to get endpoint configuration: " + o) return False endpoint_config = o # s, o = oidc.refresh_token(endpoint_config['token_endpoint'], auth_config['client_id'], # auth_config['client_secret'], refresh_token) s, o = oidc_refresh_token(oidc, endpoint_config['token_endpoint'], auth_config['client_id'], auth_config['client_secret'], refresh_token) if not s: print("Failed to refresh token: " + o) if delta < datetime.timedelta(minutes=minutes): print( "The left lifetime of the token is less than required %s minutes" % minutes) return False else: return True else: print("Success to refresh token: " + o) if delta < datetime.timedelta(minutes=minutes): print( "The left lifetime of the token is less than required %s minutes" % minutes) return False else: return True return True
def get_expire_time(verbose=False): try: # token_file = openidc_utils.OpenIdConnect_Utils().get_token_path() curl = Client._Curl() curl.verbose = verbose tmp_log = PLogger.getPandaLogger() oidc = curl.get_oidc(tmp_log) token_file = oidc.get_token_path() if os.path.exists(token_file): with open(token_file) as f: data = json.load(f) enc = data['id_token'].split('.')[1] enc += '=' * (-len(enc) % 4) dec = json.loads(base64.urlsafe_b64decode(enc.encode())) exp_time = datetime.datetime.utcfromtimestamp(dec['exp']) delta = exp_time - datetime.datetime.utcnow() minutes = delta.total_seconds() / 60 print('Token will expire in %s minutes.' % minutes) print('Token expiration time : {0} UTC'.format( exp_time.strftime("%Y-%m-%d %H:%M:%S"))) else: print("Cannot find token file.") except Exception as e: print('failed to decode cached token with {0}'.format(e))