in common/lib/plugins/federated_auth/federated_auth_plugin.ts [69:103]
async connectInternal(hostInfo: HostInfo, props: Map<string, any>, connectFunc: () => Promise<ClientWrapper>): Promise<ClientWrapper> {
SamlUtils.checkIdpCredentialsWithFallback(props);
const host = IamAuthUtils.getIamHost(props, hostInfo);
const port = IamAuthUtils.getIamPort(props, hostInfo, this.pluginService.getDialect().getDefaultPort());
const region: string = RegionUtils.getRegion(props.get(WrapperProperties.IAM_REGION.name), host);
const cacheKey = IamAuthUtils.getCacheKey(port, WrapperProperties.DB_USER.get(props), host, region);
const tokenInfo = FederatedAuthPlugin.tokenCache.get(cacheKey);
const isCachedToken: boolean = tokenInfo !== undefined && !tokenInfo.isExpired();
if (isCachedToken && tokenInfo) {
logger.debug(Messages.get("AuthenticationToken.useCachedToken", tokenInfo.token));
WrapperProperties.PASSWORD.set(props, tokenInfo.token);
} else {
await this.updateAuthenticationToken(hostInfo, props, region, cacheKey, host);
}
WrapperProperties.USER.set(props, WrapperProperties.DB_USER.get(props));
this.pluginService.updateConfigWithProperties(props);
try {
return await connectFunc();
} catch (e) {
if (!this.pluginService.isLoginError(e as Error) || !isCachedToken) {
throw e;
}
try {
await this.updateAuthenticationToken(hostInfo, props, region, cacheKey, host);
return await connectFunc();
} catch (e: any) {
throw new AwsWrapperError(Messages.get("SamlAuthPlugin.unhandledError", e.message));
}
}
}