示例#1
0
        public void StreamingDisablesLongPollingTransport()
        {
            var options = new SignalROptions();

            options.Transports.EnabledTransports = TransportType.Streaming;

            Assert.False(options.Transports.EnabledTransports.HasFlag(TransportType.LongPolling));
            Assert.True(options.Transports.EnabledTransports.HasFlag(TransportType.ForeverFrame));
            Assert.True(options.Transports.EnabledTransports.HasFlag(TransportType.ServerSentEvents));
            Assert.True(options.Transports.EnabledTransports.HasFlag(TransportType.WebSockets));
        }
示例#2
0
        public void TestSignalROptionsFormat()
        {
            var options = new SignalROptions()
            {
                JsonObjectSerializer = new JsonObjectSerializer(),
                ServiceTransportType = ServiceTransportType.Persistent
            };

            options.ServiceEndpoints.Add(new ServiceEndpoint(FakeEndpointUtils.GetFakeConnectionString()));
            options.ServiceEndpoints.Add(new ServiceEndpoint(new Uri("https://mysignalr.com"), new DefaultAzureCredential(), EndpointType.Secondary, "backup"));
            _outputHelper.WriteLine((options as IOptionsFormatter).Format());
        }
示例#3
0
        public AuthService(IOptions <AuthOptions> options
                           , IOptions <SignalROptions> iSignalROptions)
        {
            var authOptions = options.Value;

            signingKey      = new SymmetricSecurityKey(Convert.FromBase64String(authOptions.SigningKey));
            issuer          = authOptions.Issuer;
            audience        = authOptions.Audience;
            jwtTokenHandler = new JwtSecurityTokenHandler();
            signingCreds    = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256);

            signalROptions      = iSignalROptions.Value;
            signalRServiceUtils = new SignalRServiceUtils(signalROptions.ConnectionString);
        }
示例#4
0
        public static void AddMyApi(this IServiceCollection services, SignalROptions signalROptions)
        {
            if (signalROptions.Enabled)
            {
                services.AddSingletonAs <NotificationHubAccessor>()
                .As <IStreamClient>();
            }
            else
            {
                services.AddSingletonAs <NoopStreamClient>()
                .As <IStreamClient>();
            }

            services.AddSingletonAs <UrlBuilder>()
            .As <IEmailUrl>().As <IMessagingUrl>().As <ISmsUrl>().As <IUserNotificationUrl>();
        }
示例#5
0
        internal static bool TryRejectJSONPRequest(SignalROptions options,
                                                   HttpContext context)
        {
            // If JSONP is enabled then do nothing
            if (options.EnableJSONP)
            {
                return(false);
            }

            string callback = context.Request.Query.Get("callback");

            // The request isn't a JSONP request so do nothing
            if (String.IsNullOrEmpty(callback))
            {
                return(false);
            }

            // Disable the JSONP request with a 403
            context.Response.StatusCode = 403;

            // TODO
            //context.Response.ReasonPhrase = Resources.Forbidden_JSONPDisabled;
            return(true);
        }
示例#6
0
        public static void AddMyClustering(this IServiceCollection services, IConfiguration config, SignalROptions signalROptions)
        {
            config.ConfigureByOption("clustering:type", new Alternatives
            {
                ["Redis"] = () =>
                {
                    var connection = new RedisConnection(config.GetRequiredValue("clustering:redis:connectionString"));

                    if (signalROptions.Enabled)
                    {
                        services.AddSignalR()
                        .AddStackExchangeRedis(options =>
                        {
                            options.ConnectionFactory = connection.ConnectAsync;
                        });
                    }

                    services.AddRedisPubSub(options =>
                    {
                        options.ConnectionFactory = connection.ConnectAsync;
                    });
                },
                ["None"] = () =>
                {
                    // NOOP
                }
            });
        }
 public SignalRCollectorBuilder(SignalROptions options)
 {
     this.options = options;
 }
        public void JavascriptProviesOnByDefault()
        {
            var options = new SignalROptions();

            Assert.True(options.Hubs.EnableJavaScriptProxies);
        }
        public void StreamingDisablesLongPollingTransport()
        {
            var options = new SignalROptions();
            options.Transports.EnabledTransports = TransportType.Streaming;

            Assert.False(options.Transports.EnabledTransports.HasFlag(TransportType.LongPolling));
            Assert.True(options.Transports.EnabledTransports.HasFlag(TransportType.ForeverFrame));
            Assert.True(options.Transports.EnabledTransports.HasFlag(TransportType.ServerSentEvents));
            Assert.True(options.Transports.EnabledTransports.HasFlag(TransportType.WebSockets));
        }
 public void AllTransportEnabledByDefault()
 {
     var options = new SignalROptions();
     Assert.Equal(TransportType.All, options.Transports.EnabledTransports);
 }
示例#11
0
 public static IServiceCollection AddSignalRWebNotification <T>(this IServiceCollection services, SignalROptions options)
 {
     services.AddSingleton <IWebNotification <T> >(new SignalRNotification <T>(options.Endpoint, options.Hubs[typeof(T).Name], options.MethodNames[typeof(T).Name]));
     return(services);
 }
示例#12
0
        public void JavascriptProviesOnByDefault()
        {
            var options = new SignalROptions();

            Assert.True(options.Hubs.EnableJavaScriptProxies);
        }
示例#13
0
        public void AllTransportEnabledByDefault()
        {
            var options = new SignalROptions();

            Assert.Equal(TransportType.All, options.Transports.EnabledTransports);
        }
示例#14
0
        internal static bool TryRejectJSONPRequest(SignalROptions options,
                                                   HttpContext context)
        {
            // If JSONP is enabled then do nothing
            if (options.EnableJSONP)
            {
                return false;
            }

            string callback = context.Request.Query["callback"];

            // The request isn't a JSONP request so do nothing
            if (String.IsNullOrEmpty(callback))
            {
                return false;
            }

            // Disable the JSONP request with a 403
            context.Response.StatusCode = 403;
            
            // TODO
            //context.Response.ReasonPhrase = Resources.Forbidden_JSONPDisabled;
            return true;
        }
示例#15
0
 public WebController(IUserNotificationStore userNotificationStore,
                      IOptions <SignalROptions> signalROptions)
 {
     this.userNotificationStore = userNotificationStore;
     this.signalROptions        = signalROptions.Value;
 }
示例#16
0
        public void TestDefaultSignalROptionsFormat()
        {
            var options = new SignalROptions();

            _outputHelper.WriteLine((options as IOptionsFormatter).Format());
        }