Spaces:
Build error
Build error
Validify-testbot-1
/
botbuilder-python
/libraries
/botbuilder-dialogs
/botbuilder
/dialogs
/_user_token_access.py
| # Copyright (c) Microsoft Corporation. All rights reserved. | |
| # Licensed under the MIT License. | |
| from abc import ABC | |
| from botbuilder.core import TurnContext | |
| from botbuilder.core.bot_framework_adapter import TokenExchangeRequest | |
| from botbuilder.core.oauth import ConnectorClientBuilder, ExtendedUserTokenProvider | |
| from botbuilder.schema import TokenResponse | |
| from botframework.connector import ConnectorClient | |
| from botframework.connector.auth import ClaimsIdentity, ConnectorFactory | |
| from botframework.connector.auth.user_token_client import UserTokenClient | |
| from botframework.connector.token_api.models import SignInUrlResponse | |
| from .prompts.oauth_prompt_settings import OAuthPromptSettings | |
| class _UserTokenAccess(ABC): | |
| async def get_user_token( | |
| turn_context: TurnContext, settings: OAuthPromptSettings, magic_code: str | |
| ) -> TokenResponse: | |
| user_token_client: UserTokenClient = turn_context.turn_state.get( | |
| UserTokenClient.__name__, None | |
| ) | |
| if user_token_client: | |
| return await user_token_client.get_user_token( | |
| turn_context.activity.from_property.id, | |
| settings.connection_name, | |
| turn_context.activity.channel_id, | |
| magic_code, | |
| ) | |
| if isinstance(turn_context.adapter, ExtendedUserTokenProvider): | |
| return await turn_context.adapter.get_user_token( | |
| turn_context, | |
| settings.connection_name, | |
| magic_code, | |
| settings.oath_app_credentials, | |
| ) | |
| raise TypeError("OAuthPrompt is not supported by the current adapter") | |
| async def get_sign_in_resource( | |
| turn_context: TurnContext, settings: OAuthPromptSettings | |
| ) -> SignInUrlResponse: | |
| user_token_client: UserTokenClient = turn_context.turn_state.get( | |
| UserTokenClient.__name__, None | |
| ) | |
| if user_token_client: | |
| return await user_token_client.get_sign_in_resource( | |
| settings.connection_name, turn_context.activity, None | |
| ) | |
| if isinstance(turn_context.adapter, ExtendedUserTokenProvider): | |
| return await turn_context.adapter.get_sign_in_resource_from_user_and_credentials( | |
| turn_context, | |
| settings.oath_app_credentials, | |
| settings.connection_name, | |
| ( | |
| turn_context.activity.from_property.id | |
| if turn_context.activity and turn_context.activity.from_property | |
| else None | |
| ), | |
| ) | |
| raise TypeError("OAuthPrompt is not supported by the current adapter") | |
| async def sign_out_user(turn_context: TurnContext, settings: OAuthPromptSettings): | |
| user_token_client: UserTokenClient = turn_context.turn_state.get( | |
| UserTokenClient.__name__, None | |
| ) | |
| if user_token_client: | |
| return await user_token_client.sign_out_user( | |
| turn_context.activity.from_property.id, | |
| settings.connection_name, | |
| turn_context.activity.channel_id, | |
| ) | |
| if isinstance(turn_context.adapter, ExtendedUserTokenProvider): | |
| return await turn_context.adapter.sign_out_user( | |
| turn_context, | |
| settings.connection_name, | |
| ( | |
| turn_context.activity.from_property.id | |
| if turn_context.activity and turn_context.activity.from_property | |
| else None | |
| ), | |
| settings.oath_app_credentials, | |
| ) | |
| raise TypeError("OAuthPrompt is not supported by the current adapter") | |
| async def exchange_token( | |
| turn_context: TurnContext, | |
| settings: OAuthPromptSettings, | |
| token_exchange_request: TokenExchangeRequest, | |
| ) -> TokenResponse: | |
| user_token_client: UserTokenClient = turn_context.turn_state.get( | |
| UserTokenClient.__name__, None | |
| ) | |
| user_id = turn_context.activity.from_property.id | |
| if user_token_client: | |
| channel_id = turn_context.activity.channel_id | |
| return await user_token_client.exchange_token( | |
| user_id, | |
| channel_id, | |
| token_exchange_request, | |
| ) | |
| if isinstance(turn_context.adapter, ExtendedUserTokenProvider): | |
| return await turn_context.adapter.exchange_token( | |
| turn_context, | |
| settings.connection_name, | |
| user_id, | |
| token_exchange_request, | |
| ) | |
| raise TypeError("OAuthPrompt is not supported by the current adapter") | |
| async def create_connector_client( | |
| turn_context: TurnContext, | |
| service_url: str, | |
| claims_identity: ClaimsIdentity, | |
| audience: str, | |
| ) -> ConnectorClient: | |
| connector_factory: ConnectorFactory = turn_context.turn_state.get( | |
| ConnectorFactory.__name__, None | |
| ) | |
| if connector_factory: | |
| return await connector_factory.create(service_url, audience) | |
| if isinstance(turn_context.adapter, ConnectorClientBuilder): | |
| return await turn_context.adapter.create_connector_client( | |
| service_url, | |
| claims_identity, | |
| audience, | |
| ) | |
| raise TypeError("OAuthPrompt is not supported by the current adapter") | |