public void Initialize() { string secretKey = "dotnetifydemo_secretkey_123!"; var tokenValidationParameters = new TokenValidationParameters { IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(secretKey)), ValidAudience = "DotNetifyDemoApp", ValidIssuer = "DotNetifyDemoServer", ValidateIssuerSigningKey = true, ValidateAudience = true, ValidateIssuer = true, ValidateLifetime = true, ClockSkew = TimeSpan.FromSeconds(0) }; var types = new Dictionary <Type, object> { { typeof(FilterTestVM), (_vm = new FilterTestVM()) }, { typeof(CustomFilter1), (_filter1 = new CustomFilter1()) }, { typeof(CustomFilter2), (_filter2 = new CustomFilter2()) }, { typeof(ExtractHeadersMiddleware), new ExtractHeadersMiddleware(_headersCache) }, { typeof(JwtBearerAuthenticationMiddleware), new JwtBearerAuthenticationMiddleware(tokenValidationParameters) }, { typeof(AuthorizeFilter), new AuthorizeFilter() } }; VMController.CreateInstance = (type, args) => types.ContainsKey(type) ? types[type] : Activator.CreateInstance(type, args); _vmArg = JObject.Parse(@"{ Property: 'World', $headers: { Authorization: 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImp0aSI6IjI0YTUwOGJlLWJlMTktNDFhZS1iZmI1LTc5OGU4YmNjNDI3ZCIsImlhdCI6MTUxNDUyODgxNiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvbmFtZSI6WyJhZG1pbiIsImFkbWluIl0sImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvcm9sZSI6ImFkbWluIiwibmJmIjoxNTE0NTI4ODE2LCJleHAiOjE4Mjk4ODg4MTYsImlzcyI6IkRvdE5ldGlmeURlbW9TZXJ2ZXIiLCJhdWQiOiJEb3ROZXRpZnlEZW1vQXBwIn0.q2wZyS13FskQ094O9xbz4FLlRPPHf1GfKOUOTHJyLbk' } }"); }
public void Filter_PushUpdateIntercepted() { var vm = new FilterTestVM(); var hubEmulator = new HubEmulatorBuilder() .Register(nameof(FilterTestVM), vm) .UseMiddleware <JwtBearerAuthenticationMiddleware>(_tokenValidationParameters) .UseFilter <AuthorizeFilter>() .UseFilter <CustomFilter1>() .UseFilter <CustomFilter2>() .Build(); var client = hubEmulator.CreateClient(); Action filter1Assertions = null; CustomFilter1.Invoked += (sender, tuple) => { if (tuple.Item2.HubContext.CallType != "Response_VM") { return; } var attr = tuple.Item1; var vmContext = tuple.Item2; var context = vmContext.HubContext; var connectionId = context.CallerContext.ConnectionId; var authToken = (context.Headers as JObject)["Authorization"].ToString(); var principalName = context.Principal.Identity.Name; var pipelineData = new Dictionary <string, object>(context.PipelineData); filter1Assertions = () => { Assert.AreEqual(client.ConnectionId, connectionId); Assert.IsTrue(authToken.StartsWith("Bearer ")); Assert.AreEqual("admin", principalName); Assert.AreEqual(0, pipelineData.Count); Assert.AreEqual(vm, vmContext.Instance); Assert.AreEqual("Welcome", attr.Property); }; }; client.Connect(nameof(FilterTestVM), _vmConnectOptions); vm.TriggerProperty = true; vm.PushUpdates(); filter1Assertions(); }
public void Filter_RequestIntercepted() { var vm = new FilterTestVM(); var hubEmulator = new HubEmulatorBuilder() .Register(nameof(FilterTestVM), vm) .UseMiddleware <JwtBearerAuthenticationMiddleware>(_tokenValidationParameters) .UseFilter <AuthorizeFilter>() .UseFilter <CustomFilter1>() .UseFilter <CustomFilter2>() .Build(); var client = hubEmulator.CreateClient(); Action filter1Assertions = null; CustomFilter1.Invoked += (sender, tuple) => { if (filter1Assertions != null) { return; } var attr = tuple.Item1; var vmContext = tuple.Item2; var context = vmContext.HubContext; var callType = context.CallType; var connectionId = context.CallerContext.ConnectionId; var testVMPropValue = (context.Data as JObject)[nameof(FilterTestVM.Property)]; var authToken = (context.Headers as JObject)["Authorization"].ToString(); var principalName = context.Principal.Identity.Name; var pipelineData = new Dictionary <string, object>(context.PipelineData); filter1Assertions = () => { Assert.AreEqual("Request_VM", callType); Assert.AreEqual(client.ConnectionId, connectionId); Assert.AreEqual("World", testVMPropValue); Assert.IsTrue(authToken.StartsWith("Bearer ")); Assert.AreEqual("admin", principalName); Assert.AreEqual(0, pipelineData.Count); Assert.AreEqual(vm, vmContext.Instance); Assert.AreEqual("Welcome", attr.Property); }; }; Action filter2Assertions = null; CustomFilter2.Invoked += (sender, tuple) => { if (filter2Assertions != null) { return; } var attr = tuple.Item1; var vmContext = tuple.Item2; var context = vmContext.HubContext; var callType = context.CallType; var connectionId = context.CallerContext.ConnectionId; var testVMPropValue = (context.Data as JObject)[nameof(FilterTestVM.Property)]; var authToken = (context.Headers as JObject)["Authorization"].ToString(); var principalName = context.Principal.Identity.Name; var pipelineData = new Dictionary <string, object>(context.PipelineData); filter2Assertions = () => { Assert.AreEqual("Request_VM", callType); Assert.AreEqual(client.ConnectionId, connectionId); Assert.AreEqual("World", testVMPropValue); Assert.IsTrue(authToken.StartsWith("Bearer ")); Assert.AreEqual("admin", principalName); Assert.AreEqual(0, pipelineData.Count); Assert.AreEqual(vm, vmContext.Instance); Assert.AreEqual("Bienvenu", attr.Property); }; }; var response = client.Connect(nameof(FilterTestVM), _vmConnectOptions).As <dynamic>(); Assert.AreEqual("WORLD", (string)response.Property); filter1Assertions(); filter2Assertions(); }