public void ConfigureTranscriptLoggerMiddleware(BotFrameworkHttpAdapter adapter, BotSettings settings) { if (ConfigSectionValid(settings?.BlobStorage?.ConnectionString) && ConfigSectionValid(settings?.BlobStorage?.Container)) { adapter.Use(new TranscriptLoggerMiddleware(new BlobsTranscriptStore(settings?.BlobStorage?.ConnectionString, settings?.BlobStorage?.Container))); } }
public StorageQueueTrigger(IConfiguration configuration, BotFrameworkHttpAdapter botAdapter, GitHubAdapter githubAdapter, IBot bot) { this._botId = configuration.GetValue<string>("MicrosoftAppId") ?? throw new ArgumentNullException("MicrosoftAppId"); this._botAdapter = botAdapter ?? throw new ArgumentNullException(nameof(botAdapter)); ; this._githubAdapter = githubAdapter ?? throw new ArgumentNullException(nameof(githubAdapter)); ; this._bot = bot ?? throw new ArgumentNullException(nameof(bot)); }
public void ConstructorWithConfiguration() { // Arrange var appSettings = new Dictionary <string, string> { { "MicrosoftAppId", "appId" }, { "MicrosoftAppPassword", "appPassword" }, { "ChannelService", "channelService" }, { "BotOpenIdMetadata", "botOpenIdMetadata" }, }; var configuration = new ConfigurationBuilder() .AddInMemoryCollection(appSettings) .Build(); // Act var adapter = new BotFrameworkHttpAdapter(configuration); // Assert // Note this is a special case testing a little more than just the public interface. var credentialProviderField = typeof(BotFrameworkAdapter).GetField("_credentialProvider", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance); var channelProviderField = typeof(BotFrameworkAdapter).GetField("_channelProvider", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance); var credentialProvider = (SimpleCredentialProvider)credentialProviderField.GetValue(adapter); var channelProvider = (SimpleChannelProvider)channelProviderField.GetValue(adapter); Assert.Equal("appId", credentialProvider.AppId); Assert.Equal("appPassword", credentialProvider.Password); Assert.Equal("channelService", channelProvider.ChannelService); Assert.Equal("botOpenIdMetadata", ChannelValidation.OpenIdMetadataUrl); Assert.Equal("botOpenIdMetadata", GovernmentChannelValidation.OpenIdMetadataUrl); }
/// <summary> /// Initializes a new instance of the <see cref="WebSocketEnabledHttpAdapter"/> class. /// An adapter meant for subclassing and injecting custom implementation of BotFrameworkHttpAdapter for handling Http requests. /// Throws <see cref="ArgumentNullException"/> if configure is null. /// </summary> /// <param name="configuration">The configuration for the adapter to use.</param> /// <param name="botFrameworkHttpAdapter">Optional http adapter to use for non-streaming extensions requests.</param> /// <param name="credentialProvider">Optional credential provider.</param> /// <param name="channelProvider">Optional channel provider.</param> /// <param name="loggerFactory">Optional logger factory.</param> protected WebSocketEnabledHttpAdapter(IConfiguration configuration, IBotFrameworkHttpAdapter botFrameworkHttpAdapter = null, ICredentialProvider credentialProvider = null, IChannelProvider channelProvider = null, ILoggerFactory loggerFactory = null) { if (configuration == null) { throw new ArgumentNullException(nameof(configuration)); } var openIdEndpoint = configuration.GetSection(AuthenticationConstants.BotOpenIdMetadataKey)?.Value; if (!string.IsNullOrEmpty(openIdEndpoint)) { // If an open ID endpoint is configured, use it. This enables Public and Sovereign clouds that require open id. ChannelValidation.OpenIdMetadataUrl = openIdEndpoint; GovernmentChannelValidation.OpenIdMetadataUrl = openIdEndpoint; } credentialProvider = credentialProvider ?? new ConfigurationCredentialProvider(configuration); channelProvider = channelProvider ?? new ConfigurationChannelProvider(configuration); _botFrameworkHttpAdapter = _botFrameworkHttpAdapter ?? new BotFrameworkHttpAdapter(credentialProvider, channelProvider, loggerFactory?.CreateLogger <BotFrameworkHttpAdapter>()); _webSocketConnector = new WebSocketConnector(credentialProvider, channelProvider); _ensureMiddlewareSet = new Lazy <bool>(() => { middlewares.ForEach(mw => _botFrameworkHttpAdapter.Use(mw)); _botFrameworkHttpAdapter.OnTurnError = OnTurnError; return(true); }); }
/// <summary> /// Initializes a new instance of the <see cref="TeamMembersService"/> class. /// </summary> /// <param name="botAdapter">Bot adapter.</param> /// <param name="botOptions">Bot options.</param> public TeamMembersService( BotFrameworkHttpAdapter botAdapter, IOptions <BotOptions> botOptions) { this.botAdapter = botAdapter ?? throw new ArgumentNullException(nameof(botAdapter)); this.microsoftAppId = botOptions?.Value?.MicrosoftAppId ?? throw new ArgumentNullException(nameof(botOptions)); }
public BotFrameworkHttpAdapter GetBotAdapter(IStorage storage, BotSettings settings, UserState userState, ConversationState conversationState, IServiceProvider s) { HostContext.Current.Set <IConfiguration>(Configuration); var adapter = new BotFrameworkHttpAdapter(new ConfigurationCredentialProvider(this.Configuration)); adapter .UseStorage(storage) .UseState(userState, conversationState); // Configure Middlewares ConfigureTranscriptLoggerMiddleware(adapter, settings); ConfigureInspectionMiddleWare(adapter, settings, s); ConfigureShowTypingMiddleWare(adapter, settings); adapter.OnTurnError = async(turnContext, exception) => { await turnContext.SendActivityAsync(exception.Message).ConfigureAwait(false); await conversationState.ClearStateAsync(turnContext).ConfigureAwait(false); await conversationState.SaveChangesAsync(turnContext).ConfigureAwait(false); }; return(adapter); }
public async Task WebSocketRequest() { // Arrange var headerDictionaryMock = new Mock <IHeaderDictionary>(); headerDictionaryMock.Setup(h => h[It.Is <string>(v => v == "Authorization")]).Returns <string>(null); var httpRequestMock = new Mock <HttpRequest>(); httpRequestMock.Setup(r => r.Body).Returns(CreateMessageActivityStream()); httpRequestMock.Setup(r => r.Headers).Returns(headerDictionaryMock.Object); httpRequestMock.Setup(r => r.Method).Returns(HttpMethods.Get); httpRequestMock.Setup(r => r.HttpContext.WebSockets.IsWebSocketRequest).Returns(true); httpRequestMock.Setup(r => r.HttpContext.WebSockets.AcceptWebSocketAsync()).Returns(async() => await Task.FromResult(new FauxSock())); var httpResponseMock = new Mock <HttpResponse>(); var botMock = new Mock <IBot>(); botMock.Setup(b => b.OnTurnAsync(It.IsAny <TurnContext>(), It.IsAny <CancellationToken>())).Returns(Task.CompletedTask); // Act var adapter = new BotFrameworkHttpAdapter(); await adapter.ProcessAsync(httpRequestMock.Object, httpResponseMock.Object, botMock.Object); // Assert, we should have made the call to accept the web socket httpRequestMock.Verify(m => m.HttpContext.WebSockets.AcceptWebSocketAsync(), Times.Once()); }
public async Task BasicMessageActivity() { // Arrange var headerDictionaryMock = new Mock <IHeaderDictionary>(); headerDictionaryMock.Setup(h => h[It.Is <string>(v => v == "Authorization")]).Returns <string>(null); var httpRequestMock = new Mock <HttpRequest>(); httpRequestMock.Setup(r => r.Body).Returns(CreateMessageActivityStream()); httpRequestMock.Setup(r => r.Headers).Returns(headerDictionaryMock.Object); var httpResponseMock = new Mock <HttpResponse>(); var botMock = new Mock <IBot>(); botMock.Setup(b => b.OnTurnAsync(It.IsAny <TurnContext>(), It.IsAny <CancellationToken>())).Returns(Task.CompletedTask); // Act var adapter = new BotFrameworkHttpAdapter(); await adapter.ProcessAsync(httpRequestMock.Object, httpResponseMock.Object, botMock.Object); // Assert botMock.Verify(m => m.OnTurnAsync(It.Is <TurnContext>(tc => true), It.Is <CancellationToken>(ct => true)), Times.Once()); }
public BotFrameworkHttpAdapter GetBotAdapter(IStorage storage, BotSettings settings, UserState userState, ConversationState conversationState, IServiceProvider s, TelemetryInitializerMiddleware telemetryInitializerMiddleware) { var adapter = new BotFrameworkHttpAdapter(new ConfigurationCredentialProvider(this.Configuration)); SetBotAdapter(adapter, storage, settings, userState, conversationState, s, telemetryInitializerMiddleware); return(adapter); }
/// <summary> /// Initializes a new instance of the <see cref="MessageService"/> class. /// </summary> /// <param name="botOptions">The bot options.</param> /// <param name="botAdapter">The bot adapter.</param> public MessageService( IOptions <BotOptions> botOptions, BotFrameworkHttpAdapter botAdapter) { this.microsoftAppId = botOptions?.Value?.MicrosoftAppId ?? throw new ArgumentNullException(nameof(botOptions)); this.botAdapter = botAdapter ?? throw new ArgumentNullException(nameof(botAdapter)); }
/// <summary> /// Initializes a new instance of the <see cref="SendNotificationService"/> class. /// </summary> /// <param name="botOptions">The bot options.</param> /// <param name="botAdapter">The bot adapter.</param> public SendNotificationService( IOptions <BotOptions> botOptions, BotFrameworkHttpAdapter botAdapter) { this.microsoftAppId = botOptions.Value.MicrosoftAppId; this.botAdapter = botAdapter; }
/// <summary> /// Initializes a new instance of the <see cref="ConversationService"/> class. /// </summary> /// <param name="botAdapter">The bot adapter.</param> /// <param name="appCredentials">The common Microsoft app credentials.</param> public ConversationService( BotFrameworkHttpAdapter botAdapter, CommonMicrosoftAppCredentials appCredentials) { this.botAdapter = botAdapter ?? throw new ArgumentNullException(nameof(botAdapter)); this.appCredentials = appCredentials ?? throw new ArgumentNullException(nameof(appCredentials)); }
/// <summary> /// Initializes a new instance of the <see cref="CreateUserConversationService"/> class. /// </summary> /// <param name="botAdapter">The bot adapter.</param> /// <param name="commonMicrosoftAppCredentials">The common Microsoft app credentials.</param> public CreateUserConversationService( BotFrameworkHttpAdapter botAdapter, CommonMicrosoftAppCredentials commonMicrosoftAppCredentials) { this.botAdapter = botAdapter; this.appCredentials = commonMicrosoftAppCredentials; }
public async Task InvokeActivity() { // Arrange var headerDictionaryMock = new Mock <IHeaderDictionary>(); headerDictionaryMock.Setup(h => h[It.Is <string>(v => v == "Authorization")]).Returns <string>(null); var httpRequestMock = new Mock <HttpRequest>(); httpRequestMock.Setup(r => r.Body).Returns(CreateInvokeActivityStream()); httpRequestMock.Setup(r => r.Headers).Returns(headerDictionaryMock.Object); var response = new MemoryStream(); var httpResponseMock = new Mock <HttpResponse>(); httpResponseMock.Setup(r => r.Body).Returns(response); var bot = new InvokeResponseBot(); // Act var adapter = new BotFrameworkHttpAdapter(); await adapter.ProcessAsync(httpRequestMock.Object, httpResponseMock.Object, bot); // Assert using (var stream = new MemoryStream(response.GetBuffer())) using (var reader = new StreamReader(stream)) { var s = reader.ReadToEnd(); var json = JObject.Parse(s); Assert.Equal("im.feeling.really.attacked.right.now", json["quite.honestly"]); } }
public void SetCurrent(string botDir) { IStorage storage = new MemoryStorage(); var userState = new UserState(storage); var conversationState = new ConversationState(storage); var inspectionState = new InspectionState(storage); // manage all bot resources var resourceExplorer = new ResourceExplorer().AddFolder(botDir); var adapter = new BotFrameworkHttpAdapter(new ConfigurationCredentialProvider(Config)); var credentials = new MicrosoftAppCredentials(Config["MicrosoftAppId"], Config["MicrosoftAppPassword"]); adapter .UseStorage(storage) .UseState(userState, conversationState) .UseAdaptiveDialogs() .UseResourceExplorer(resourceExplorer) .UseLanguageGeneration(resourceExplorer, "common.lg") .Use(new RegisterClassMiddleware <IConfiguration>(Config)) .Use(new InspectionMiddleware(inspectionState, userState, conversationState, credentials)); adapter.OnTurnError = async(turnContext, exception) => { await turnContext.SendActivityAsync(exception.Message).ConfigureAwait(false); await conversationState.ClearStateAsync(turnContext).ConfigureAwait(false); await conversationState.SaveChangesAsync(turnContext).ConfigureAwait(false); }; CurrentAdapter = adapter; CurrentBot = new ComposerBot("Main.dialog", conversationState, userState, resourceExplorer, DebugSupport.SourceMap); }
public async Task MessageActivityWithHttpClient() { // Arrange var httpRequest = new HttpRequestMessage(); httpRequest.Method = HttpMethod.Post; httpRequest.Content = CreateMessageActivityContent(); var httpResponse = new HttpResponseMessage(); var mockHttpMessageHandler = new Mock <HttpMessageHandler>(); mockHttpMessageHandler.Protected() .Setup <Task <HttpResponseMessage> >("SendAsync", ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()) .Returns((HttpRequestMessage request, CancellationToken cancellationToken) => Task.FromResult(CreateInternalHttpResponse())); var httpClient = new HttpClient(mockHttpMessageHandler.Object); var bot = new MessageBot(); // Act var adapter = new BotFrameworkHttpAdapter(null, null, httpClient, null); await adapter.ProcessAsync(httpRequest, httpResponse, bot); // Assert mockHttpMessageHandler.Protected().Verify <Task <HttpResponseMessage> >("SendAsync", Times.Once(), ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()); }
public void ConfigureServices(IServiceCollection services) { services.AddCors(o => o.AddPolicy("AllowAllOrigins", builder => { builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); })); services.AddMvc().SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_2_1); services.AddSingleton <ICredentialProvider, ConfigurationCredentialProvider>(); services.AddSingleton <IBotFrameworkHttpAdapter, BotFrameworkHttpAdapter>((provider) => { var cred = provider.GetRequiredService <ICredentialProvider>(); var adpt = new BotFrameworkHttpAdapter(cred); adpt.Use(new ConversationSynchronizationMiddleware(new SampleUserConversationsStaticStorageProvider(), adpt, _configuration)); return(adpt); }); services.AddSingleton <IStorage, MemoryStorage>(); services.AddSingleton <UserState>(); services.AddSingleton <ConversationState>(); services.AddSingleton <RootDialog>(); services.AddTransient <IBot, MainBot <RootDialog> >(); }
public async Task MessageActivityWithHttpClient() { // Arrange var headerDictionaryMock = new Mock <IHeaderDictionary>(); headerDictionaryMock.Setup(h => h[It.Is <string>(v => v == "Authorization")]).Returns <string>(null); var httpRequestMock = new Mock <HttpRequest>(); httpRequestMock.Setup(r => r.Body).Returns(CreateMessageActivityStream()); httpRequestMock.Setup(r => r.Headers).Returns(headerDictionaryMock.Object); var httpResponseMock = new Mock <HttpResponse>(); var mockHttpMessageHandler = new Mock <HttpMessageHandler>(); mockHttpMessageHandler.Protected() .Setup <Task <HttpResponseMessage> >("SendAsync", ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()) .Returns((HttpRequestMessage request, CancellationToken cancellationToken) => Task.FromResult(CreateInternalHttpResponse())); var httpClient = new HttpClient(mockHttpMessageHandler.Object); var bot = new MessageBot(); // Act var adapter = new BotFrameworkHttpAdapter(null, null, httpClient, null); await adapter.ProcessAsync(httpRequestMock.Object, httpResponseMock.Object, bot); // Assert mockHttpMessageHandler.Protected().Verify <Task <HttpResponseMessage> >("SendAsync", Times.Once(), ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()); }
public LivePersonController(BotFrameworkHttpAdapter adapter, ILivePersonCredentialsProvider creds, IBot bot, ConversationMap conversationMap) { _adapter = (ILivePersonAdapter)adapter; _bot = bot; _creds = creds; _conversationMap = conversationMap; }
public IBotFrameworkHttpAdapter BindToAdapter(IServiceProvider e) { var ae = new BotFrameworkHttpAdapter(e.GetService <ICredentialProvider>()); ae.Use(new ShowTypingMiddleware(500, 2000)); return((IBotFrameworkHttpAdapter)ae); }
/// <summary> /// Initializes a new instance of the <see cref="ImageUploaderController"/> class. /// </summary> /// <param name="botAdapter">Bot Adapter client.</param> /// <param name="botOptions">BOT options.</param> public ImageUploaderController( BotFrameworkHttpAdapter botAdapter, IOptions <BotOptions> botOptions) { this.botAdapter = botAdapter ?? throw new ArgumentNullException(nameof(botAdapter)); this.storageAccount = botOptions?.Value?.StorageAccount ?? throw new ArgumentNullException(nameof(botOptions)); this.blobContainerName = botOptions?.Value?.BlobContainerName ?? throw new ArgumentNullException(nameof(botOptions)); }
public BuggyAdapterBase(ICredentialProvider credentialProvider = null, IChannelProvider channelProvider = null, ILoggerFactory loggerFactory = null) { _botFrameworkHttpAdapter = new BotFrameworkHttpAdapter(credentialProvider, channelProvider, loggerFactory?.CreateLogger <BotFrameworkHttpAdapter>()); _ensureMiddlewareSet = new Lazy <bool>(() => { _botFrameworkHttpAdapter.Use(base.MiddlewareSet); return(true); }); }
public BotFrameworkHttpTrigger(BotFrameworkHttpAdapter adapter, IBot bot, IConfiguration config) { this._adapter = adapter ?? throw new ArgumentNullException(nameof(adapter)); this._bot = bot ?? throw new ArgumentNullException(nameof(bot)); var hostname = config.GetValue <string>("WEBSITE_HOSTNAME"); var protocol = hostname.StartsWith("localhost") ? "http" : "https"; _internalMessageEndpoint = $"{protocol}://{hostname}/api/internalMessages"; }
/// <summary> /// Initializes a new instance of the <see cref="NotificationCardHelper"/> class. /// </summary> /// <param name="botOptions">A set of key/value application configuration properties.</param> /// <param name="logger">Logger implementation to send logs to the logger service.</param> /// <param name="adapter">Bot adapter.</param> public NotificationCardHelper( IOptions <BotOptions> botOptions, ILogger <NotificationCardHelper> logger, BotFrameworkHttpAdapter adapter) { this.botOptions = botOptions ?? throw new ArgumentNullException(nameof(botOptions)); this.logger = logger ?? throw new ArgumentNullException(nameof(logger)); this.adapter = adapter ?? throw new ArgumentNullException(nameof(adapter)); }
/// <summary> /// Initializes a new instance of the <see cref="BotController"/> class. /// Dependency Injection will provide the Adapter and IBot implementation at runtime. /// </summary> /// <param name="adapter">Company Communicator Bot Adapter instance.</param> /// <param name="authorBot">Company Communicator Author Bot instance.</param> /// <param name="userBot">Company Communicator User Bot instance.</param> public BotController( CompanyCommunicatorBotAdapter adapter, AuthorTeamsActivityHandler authorBot, UserTeamsActivityHandler userBot) { this.adapter = adapter ?? throw new ArgumentNullException(nameof(adapter)); this.authorBot = authorBot ?? throw new ArgumentNullException(nameof(authorBot)); this.userBot = userBot ?? throw new ArgumentNullException(nameof(userBot)); }
public async Task BotFrameworkHttpAdapter_does_not_support_handoff() { await Assert.ThrowsExceptionAsync <NotSupportedException>(async() => { var adapter = new BotFrameworkHttpAdapter(); ITurnContext turnContext = new TurnContext(adapter, new Schema.Activity()); await turnContext.InitiateHandoffAsync(new IActivity [] { }, 0); }); }
/// <summary> /// Initializes a new instance of the <see cref="FileCardService"/> class. /// </summary> /// <param name="botOptions">the bot options.</param> /// <param name="botAdapter">the users service.</param> /// <param name="userDataRepository">the user data repository.</param> public FileCardService( IOptions <BotOptions> botOptions, BotFrameworkHttpAdapter botAdapter, UserDataRepository userDataRepository) { this.botAdapter = botAdapter; this.microsoftAppId = botOptions.Value.MicrosoftAppId; this.userDataRepository = userDataRepository; }
/// <summary> /// Initializes a new instance of the <see cref="ConversationService"/> class. /// </summary> /// <param name="botAdapter">The bot adapter.</param> /// <param name="userAppCredentials">The user Microsoft app credentials.</param> /// <param name="authorAppCredentials">The author Microsoft app credentials.</param> public ConversationService( BotFrameworkHttpAdapter botAdapter, UserAppCredentials userAppCredentials, AuthorAppCredentials authorAppCredentials) { this.botAdapter = botAdapter ?? throw new ArgumentNullException(nameof(botAdapter)); this.userAppCredentials = userAppCredentials ?? throw new ArgumentNullException(nameof(userAppCredentials)); this.authorAppCredentials = authorAppCredentials ?? throw new ArgumentNullException(nameof(authorAppCredentials)); }
public MockBot(Func <Schema.Activity, Task <InvokeResponse> > processActivityAsync, string pipeName = null, BotFrameworkHttpAdapter adapter = null) { if (pipeName == null) { pipeName = Guid.NewGuid().ToString(); } _processActivityAsync = processActivityAsync; _adapter = adapter ?? new BotFrameworkHttpAdapter(); }
public void ConfigureTranscriptLoggerMiddleware(BotFrameworkHttpAdapter adapter, BotSettings settings) { if (settings.Feature.UseTranscriptLoggerMiddleware) { if (!string.IsNullOrEmpty(settings.BlobStorage.ConnectionString) && !string.IsNullOrEmpty(settings.BlobStorage.Container)) { adapter.Use(new TranscriptLoggerMiddleware(new AzureBlobTranscriptStore(settings.BlobStorage.ConnectionString, settings.BlobStorage.Container))); } } }