Example #1
0
        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);
        }
Example #2
0
        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>());
        }