internal static async Task <TransportParams> Create(string host, AblyAuth auth, ClientOptions options, string connectionKey = null, long?connectionSerial = null, ILogger logger = null) { var result = new TransportParams(); result.Host = host; result.Tls = options.Tls; result.Port = options.Tls ? options.TlsPort : options.Port; result.ClientId = options.GetClientId(); result.AuthMethod = auth.AuthMethod; if (result.AuthMethod == AuthMethod.Basic) { result.AuthValue = ApiKey.Parse(options.Key).ToString(); } else { var token = await auth.GetCurrentValidTokenAndRenewIfNecessaryAsync(); if (token == null) { throw new AblyException("There is no valid token. Can't authenticate", 40100, HttpStatusCode.Unauthorized); } result.AuthValue = token.Token; } result.ConnectionKey = connectionKey; result.ConnectionSerial = connectionSerial; result.EchoMessages = options.EchoMessages; result.FallbackHosts = options.FallbackHosts; result.UseBinaryProtocol = options.UseBinaryProtocol; result.RecoverValue = options.Recover; result.Logger = logger ?? options.Logger; return(result); }
public void Parse_WithValidKeyWithWhiteSpaceOnBothSides_ReturnsValidApiKeyObject() { var key = ApiKey.Parse(" 123.456:789 "); Assert.Equal(key.AppId, "123"); Assert.Equal(key.KeyName, "123.456"); Assert.Equal(key.KeySecret, "789"); }
public void Parse_WithValidKeyReturns_ApiKeyWithAppIdKeyAndValue() { var key = ApiKey.Parse("123.456:789"); Assert.Equal(key.AppId, "123"); Assert.Equal(key.KeyName, "123.456"); Assert.Equal(key.KeySecret, "789"); }
public void Parse_WithValidKeyWithWhiteSpaceOnBothSides_ReturnsValidApiKeyObject() { var key = ApiKey.Parse(" 123.456:789 "); key.AppId.Should().Be("123"); key.KeyName.Should().Be("123.456"); key.KeySecret.Should().Be("789"); }
public void Parse_WithValidKeyReturns_ApiKeyWithAppIdKeyAndValue() { var key = ApiKey.Parse("123.456:789"); key.AppId.Should().Be("123"); key.KeyName.Should().Be("123.456"); key.KeySecret.Should().Be("789"); }
public async Task WithDefaultTokenParams_ShouldSetTokenRequestValuesCorrectly() { var client = GetClientWithTokenParams(); var request = await client.Auth.CreateTokenRequestAsync(); request.Capability.Should().Be(Capability.AllowAll); request.ClientId.Should().Be("123"); request.KeyName.Should().Be(ApiKey.Parse(client.Options.Key).KeyName); request.Ttl.Should().Be(TimeSpan.FromHours(2)); request.Timestamp.Should().Be(Now.AddMinutes(1)); request.Nonce.Should().Be("defaultnonce"); }
public async Task WithDefaultTokenParams_ShouldSetTokenRequestValuesCorrectly() { var client = GetClientWithTokenParams(); var request = await CreateTokenRequest(client); request.Capability.Should().Be(Capability.AllowAll); request.ClientId.Should().Be("123"); request.KeyName.Should().Be(ApiKey.Parse(client.Options.Key).KeyName); request.Ttl.Should().Be(TimeSpan.FromHours(2)); Debug.Assert(request.Timestamp.HasValue, "Expected a 'Value', got none."); request.Timestamp.Value.Should().BeCloseTo(Now.AddMinutes(1), TimeSpan.FromMilliseconds(100)); request.Nonce.Should().Be("defaultnonce"); }
public ActionResult Confirm(ApiConfirmation model) { if (!ModelState.IsValid) { return(View(model)); } ApiKey toBeConfirmed = ApiKey.Parse(model.ApiKey); // TODO: make async _apiKeys.Confirm(toBeConfirmed, DateTimeOffset.UtcNow); return(View(model)); }
public async Task AddAuthHeader_WithBasicAuthentication_AddsCorrectAuthorisationHeader() { //Arrange var rest = new AblyRest(ValidKey); ApiKey key = ApiKey.Parse(ValidKey); var request = new AblyRequest("/test", HttpMethod.Get, Protocol.Json); var expectedValue = "Basic " + key.ToString().ToBase64(); //Act await rest.AblyAuth.AddAuthHeader(request); //Assert var authHeader = request.Headers.First(); authHeader.Key.Should().Be("Authorization"); authHeader.Value.Should().Be(expectedValue); }
public void AddAuthHeader_WithBasicAuthentication_AddsCorrectAuthorisationHeader() { //Arrange var rest = new RestClient(ValidKey); ApiKey key = ApiKey.Parse(ValidKey); var request = new AblyRequest("/test", HttpMethod.Get, Protocol.Json); var expectedValue = "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(key.ToString())); //Act rest.AddAuthHeader(request); //Assert var authHeader = request.Headers.First(); Assert.Equal("Authorization", authHeader.Key); Assert.Equal(expectedValue, authHeader.Value); }
public void Parse_WithKeyNotContaining3PartsSeparatedByColon_ThrowsInvalidKeyException(string key) { Assert.Throws <AblyException>(delegate { ApiKey.Parse(key); }); }
internal static async Task <TransportParams> Create(string host, AblyAuth auth, ClientOptions options, string connectionKey = null, long?connectionSerial = null, ILogger logger = null) { var result = new TransportParams { Host = host, Tls = options.Tls, Port = options.Tls ? options.TlsPort : options.Port, ClientId = options.GetClientId(), ConnectionKey = connectionKey, ConnectionSerial = connectionSerial, EchoMessages = options.EchoMessages, FallbackHosts = options.GetFallbackHosts(), UseBinaryProtocol = options.UseBinaryProtocol, RecoverValue = options.Recover, Logger = logger ?? options.Logger, AdditionalParameters = StringifyParameters(options.TransportParams), AuthMethod = auth.AuthMethod, }; if (result.AuthMethod == AuthMethod.Basic) { result.AuthValue = ApiKey.Parse(options.Key).ToString(); } else { var token = await auth.GetCurrentValidTokenAndRenewIfNecessaryAsync(); if (token == null) { throw new AblyException("There is no valid token. Can't authenticate", ErrorCodes.Unauthorized, HttpStatusCode.Unauthorized); } result.AuthValue = token.Token; } return(result); Dictionary <string, string> StringifyParameters(Dictionary <string, object> originalParams) { if (originalParams is null) { return(new Dictionary <string, string>()); } return(originalParams.ToDictionary(x => x.Key, x => ConvertValue(x.Key, x.Value))); string ConvertValue(string key, object value) { switch (value) { case bool boolValue: return(boolValue.ToString().ToLower()); case null: return(string.Empty); default: try { return(value.ToString()); } catch (Exception e) { logger?.Error($"Error converting custom transport parameter '{key}'. Error: {e.Message}"); return(string.Empty); } } } } }