public void ServiceConnectionContextWithNullClaimsIsUnauthenticated() { var serviceConnectionContext = new ServiceConnectionContext(new OpenConnectionMessage("1", null)); Assert.NotNull(serviceConnectionContext.User.Identity); Assert.False(serviceConnectionContext.User.Identity.IsAuthenticated); }
public void AddClientConnection(ServiceConnectionContext clientConnection) { ClientConnectionManager.AddClientConnection(clientConnection); if (_waitForConnectionOpen.TryGetValue(clientConnection.ConnectionId, out var tcs)) { tcs.TrySetResult(clientConnection); } }
public void AddClientConnection(ServiceConnectionContext clientConnection) { var tcs = _tcs.GetOrAdd(clientConnection.ConnectionId, s => new TaskCompletionSource <ServiceConnectionContext>(TaskCreationOptions .RunContinuationsAsynchronously)); _ccm.AddClientConnection(clientConnection); tcs.SetResult(clientConnection); }
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); }
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()); } }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
private async Task RemoveConnection(IClientConnectionManager manager, ServiceConnectionContext ctx) { await Task.Delay(100); ctx.OnCompleted(); }