Ejemplo n.º 1
0
        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'
            }
         }");
        }
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 3
0
        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();
        }