in templates/typescript/generator-bot-virtualassistant/generators/app/templates/sample-assistant/src/tokenExchange/tokenExchangeSkillHandler.ts [91:128]
private async interceptOAuthCards(claimsIdentity: ClaimsIdentity, activity: Activity): Promise<boolean> {
if (activity.attachments !== undefined) {
let targetSkill: BotFrameworkSkill | undefined;
activity.attachments.filter(a => a.contentType === this.oAuthCardContentType).forEach(async (attachment: Attachment) => {
if (targetSkill === undefined) {
targetSkill = this.getCallingSkill(claimsIdentity);
}
if (targetSkill !== undefined) {
const oauthCard: OAuthCard = attachment.content;
if (oauthCard !== undefined && oauthCard.tokenExchangeResource !== undefined &&
this.tokenExchangeConfig !== undefined && this.tokenExchangeConfig.provider !== undefined && this.tokenExchangeConfig.provider.trim().length > 0 &&
this.tokenExchangeConfig.provider === oauthCard.tokenExchangeResource.providerId) {
const context: TurnContext = new TurnContext(this.tokenExchangeSkillHandlerAdapter, activity);
context.turnState.set(this.tokenExchangeSkillHandlerAdapter.BotIdentityKey, claimsIdentity);
// AAD token exchange
const result = await this.tokenExchangeProvider.exchangeToken(
context,
this.tokenExchangeConfig.connectionName,
activity.recipient?.id,
{ uri: oauthCard.tokenExchangeResource.uri });
if (result.token !== undefined && result.token.trim().length > 0){
// Send an Invoke back to the Skill
return await this.sendTokenExchangeInvokeToSkill(activity, oauthCard.tokenExchangeResource.id as string, result.token, oauthCard.connectionName, targetSkill);
}
return false;
}
}
});
}
return false;
}