public static IApplicationBuilder UseInDirectLineCore(this IApplicationBuilder app) { var sp = app.ApplicationServices; var env = sp.GetRequiredService <IWebHostEnvironment>(); var directLineSettings = sp.GetRequiredService <IOptions <InDirectLineSettings> >()?.Value; if (directLineSettings == null) { throw new Exception("InDirectLineOptions cannot be null!"); } var webSocketOptions = new WebSocketOptions() { KeepAliveInterval = TimeSpan.FromSeconds(120), ReceiveBufferSize = 4 * 1024 }; var botEndPoint = directLineSettings.BotEndpoint; var botOrigin = UtilsEx.GetOrigin(botEndPoint); webSocketOptions.AllowedOrigins.Add(botOrigin); webSocketOptions.AllowedOrigins.Add("*"); app.UseWebSockets(webSocketOptions); app.UseMiddleware <WebSocketConnectionMiddleware>(); return(app); }
public static IServiceCollection AddInDirectLine(this IServiceCollection services, InDirectLineSettings directlineOpts) { services.Configure <InDirectLineSettings>(opt => { foreach (var pi in opt.GetType().GetProperties()) { var propValue = pi.GetValue(directlineOpts); pi.SetValue(opt, propValue); } }); services.AddHttpClient(); services.AddHttpContextAccessor(); services.AddSingleton <IConversationHistoryStore, InMemoryConversationHistoryStore>(); services.AddSingleton <IDirectLineConnection, WebSocketDirectLineConnection>(); services.AddSingleton <IDirectLineConnectionManager, DirectLineConnectionManager>(); services.AddSingleton <TokenBuilder>(); services.AddScoped <ChannelServiceHandler, InDirectLineConversationHandler>(); services.AddAuthorization(opt => { opt.AddPolicy("MatchConversation", pb => pb.Requirements.Add(new MatchConversationAuthzRequirement())); }); services.AddHttpClient <InDirectLineClient>(); var botEndPointUri = UtilsEx.GetOrigin(directlineOpts.BotEndpoint); services.AddSingleton <IAuthorizationHandler, MatchConversationAuthzHandler>(); services.AddCors(options => { options.AddPolicy( InDirectLineDefaults.CorsPolicyNames, builder => { builder.WithOrigins(botEndPointUri); builder.AllowAnyOrigin(); builder.AllowAnyHeader(); builder.AllowAnyMethod(); } ); }); services.AddScoped <WebSocketConnectionMiddleware>(); return(services.AddScoped <DirectLineHelper>()); }