Exemplo n.º 1
0
        public void ServiceConnectionContextWithNullClaimsIsUnauthenticated()
        {
            var serviceConnectionContext = new ServiceConnectionContext(new OpenConnectionMessage("1", null));

            Assert.NotNull(serviceConnectionContext.User.Identity);
            Assert.False(serviceConnectionContext.User.Identity.IsAuthenticated);
        }
Exemplo n.º 2
0
        public void AddClientConnection(ServiceConnectionContext clientConnection)
        {
            ClientConnectionManager.AddClientConnection(clientConnection);

            if (_waitForConnectionOpen.TryGetValue(clientConnection.ConnectionId, out var tcs))
            {
                tcs.TrySetResult(clientConnection);
            }
        }
Exemplo n.º 3
0
            public void AddClientConnection(ServiceConnectionContext clientConnection)
            {
                var tcs = _tcs.GetOrAdd(clientConnection.ConnectionId,
                                        s => new TaskCompletionSource <ServiceConnectionContext>(TaskCreationOptions
                                                                                                 .RunContinuationsAsynchronously));

                _ccm.AddClientConnection(clientConnection);
                tcs.SetResult(clientConnection);
            }
Exemplo n.º 4
0
        public void ServiceConnectionContextWithEmptyHttpContextByDefault()
        {
            var serviceConnectionContext = new ServiceConnectionContext(new OpenConnectionMessage("1", new Claim[0]));

            Assert.NotNull(serviceConnectionContext.User.Identity);
            Assert.NotNull(serviceConnectionContext.HttpContext);
            Assert.Equal(serviceConnectionContext.User, serviceConnectionContext.HttpContext.User);
            Assert.Empty(serviceConnectionContext.HttpContext.Request.Headers);
            Assert.Empty(serviceConnectionContext.HttpContext.Request.Query);
        }
Exemplo n.º 5
0
        public void ServiceConnectionContextRemoteIpTest(string xff, bool canBeParsed, string remoteIP)
        {
            var headers = new HeaderDictionary(new Dictionary <string, StringValues>
            {
                ["X-Forwarded-For"] = new StringValues(xff)
            });

            Assert.Equal(canBeParsed, ServiceConnectionContext.TryGetRemoteIpAddress(headers, out var address));

            if (canBeParsed)
            {
                Assert.Equal(remoteIP, address.ToString());
            }
        }
Exemplo n.º 6
0
        public void ServiceConnectionContextWithSystemClaimsIsUnauthenticated()
        {
            var claims = new[]
            {
                new Claim("aud", "http://localhost"),
                new Claim("exp", "1234567890"),
                new Claim("iat", "1234567890"),
                new Claim("nbf", "1234567890"),
                new Claim(Constants.ClaimType.UserId, "customUserId"),
            };
            var serviceConnectionContext = new ServiceConnectionContext(new OpenConnectionMessage("1", claims));

            Assert.NotNull(serviceConnectionContext.User.Identity);
            Assert.False(serviceConnectionContext.User.Identity.IsAuthenticated);
        }
Exemplo n.º 7
0
        public void ServiceConnectionContextWithRequestPath()
        {
            const string path        = "/this/is/user/path";
            var          queryString = $"?{Constants.QueryParameter.OriginalPath}={WebUtility.UrlEncode(path)}";
            var          serviceConnectionContext = new ServiceConnectionContext(new OpenConnectionMessage("1", null, EmptyHeaders, queryString));

            Assert.NotNull(serviceConnectionContext.User.Identity);
            Assert.NotNull(serviceConnectionContext.HttpContext);
            Assert.Equal(serviceConnectionContext.User, serviceConnectionContext.HttpContext.User);
            var request = serviceConnectionContext.HttpContext.Request;

            Assert.Empty(request.Headers);
            Assert.Equal(1, request.Query.Count);
            Assert.Equal(path, request.Query[Constants.QueryParameter.OriginalPath]);
            Assert.Equal(path, request.Path);
        }
Exemplo n.º 8
0
        public void ServiceConnectionContextWithClaimsCreatesIdentityWithClaims()
        {
            var claims = new[]
            {
                new Claim("k1", "v1"),
                new Claim("k2", "v2")
            };
            var serviceConnectionContext = new ServiceConnectionContext(new OpenConnectionMessage("1", claims));

            Assert.NotNull(serviceConnectionContext.User.Identity);
            Assert.True(serviceConnectionContext.User.Identity.IsAuthenticated);
            var contextClaims = serviceConnectionContext.User.Claims.ToList();

            Assert.Equal("k1", contextClaims[0].Type);
            Assert.Equal("v1", contextClaims[0].Value);
            Assert.Equal("k2", contextClaims[1].Type);
            Assert.Equal("v2", contextClaims[1].Value);
        }
Exemplo n.º 9
0
        public void ServiceConnectionContextWithNonEmptyQueries()
        {
            const string queryString = "?query1=value1&query2=value2&query3=value3";
            var          serviceConnectionContext = new ServiceConnectionContext(new OpenConnectionMessage("1", new Claim[0], EmptyHeaders, queryString));

            Assert.NotNull(serviceConnectionContext.User.Identity);
            Assert.NotNull(serviceConnectionContext.HttpContext);
            Assert.Equal(serviceConnectionContext.User, serviceConnectionContext.HttpContext.User);
            var request = serviceConnectionContext.HttpContext.Request;

            Assert.Empty(request.Headers);
            Assert.Equal(queryString, request.QueryString.Value);
            Assert.Equal(3, request.Query.Count);
            Assert.Equal("value1", request.Query["query1"]);
            Assert.Equal("value2", request.Query["query2"]);
            Assert.Equal("value3", request.Query["query3"]);
            Assert.Equal(string.Empty, request.Path);
        }
Exemplo n.º 10
0
        public void ServiceConnectionContextWithCustomNameTypeIsAuthenticated()
        {
            var claims = new[]
            {
                new Claim("aud", "http://localhost"),
                new Claim("exp", "1234567890"),
                new Claim("iat", "1234567890"),
                new Claim("nbf", "1234567890"),
                new Claim("customNameType", "customUserName"),
                new Claim("customRoleType", "customRole"),
                new Claim(Constants.ClaimType.NameType, "customNameType"),
                new Claim(Constants.ClaimType.RoleType, "customRoleType"),
            };
            var serviceConnectionContext = new ServiceConnectionContext(new OpenConnectionMessage("1", claims));

            Assert.NotNull(serviceConnectionContext.User.Identity);
            Assert.False(serviceConnectionContext.User.IsInRole("Admin"));
            Assert.True(serviceConnectionContext.User.IsInRole("customRole"));
            Assert.Equal("customUserName", serviceConnectionContext.User.Identity.Name);
            Assert.True(serviceConnectionContext.User.Identity.IsAuthenticated);
        }
Exemplo n.º 11
0
        public void TestAllClientConnectionsCompleted()
        {
            var manager = new ClientConnectionManager();

            var c1 = new ServiceConnectionContext(new Protocol.OpenConnectionMessage("foo", new Claim[0]));
            var c2 = new ServiceConnectionContext(new Protocol.OpenConnectionMessage("bar", new Claim[0]));

            manager.AddClientConnection(c1);
            manager.AddClientConnection(c2);

            _ = RemoveConnection(manager, c1);
            _ = RemoveConnection(manager, c2);

            var expected = manager.WhenAllCompleted();
            var actual   = Task.WaitAny(
                expected,
                Task.Delay(TimeSpan.FromSeconds(1))
                );

            Assert.Equal(0, actual);
        }
Exemplo n.º 12
0
        public void ServiceConnectionContextWithNonEmptyHeaders()
        {
            const string key1   = "header-key-1";
            const string key2   = "header-key-2";
            const string value1 = "header-value-1";
            var          value2 = new[] { "header-value-2a", "header-value-2b" };
            var          serviceConnectionContext = new ServiceConnectionContext(new OpenConnectionMessage("1", new Claim[0],
                                                                                                           new Dictionary <string, StringValues> (StringComparer.OrdinalIgnoreCase)
            {
                { key1, value1 },
                { key2, value2 }
            }, string.Empty));

            Assert.NotNull(serviceConnectionContext.User.Identity);
            Assert.NotNull(serviceConnectionContext.HttpContext);
            Assert.Equal(serviceConnectionContext.User, serviceConnectionContext.HttpContext.User);
            var request = serviceConnectionContext.HttpContext.Request;

            Assert.Equal(2, request.Headers.Count);
            Assert.Equal(value1, request.Headers[key1]);
            Assert.Equal(value2, request.Headers[key2]);
            Assert.Empty(request.Query);
            Assert.Equal(string.Empty, request.Path);
        }
Exemplo n.º 13
0
        private async Task RemoveConnection(IClientConnectionManager manager, ServiceConnectionContext ctx)
        {
            await Task.Delay(100);

            ctx.OnCompleted();
        }