public async Task CreateConfigUnknownError() { var handler = new MockMessageHandler() { StatusCode = HttpStatusCode.InternalServerError, Response = ProviderConfigTestUtils.UnknownErrorResponse, }; var auth = ProviderConfigTestUtils.CreateFirebaseAuth(handler); var args = new SamlProviderConfigArgs() { ProviderId = "saml.minimal-provider", IdpEntityId = "IDP_ENTITY_ID", SsoUrl = "https://example.com/login", X509Certificates = new List <string>() { "CERT1", "CERT2" }, RpEntityId = "RP_ENTITY_ID", CallbackUrl = "https://projectId.firebaseapp.com/__/auth/handler", }; var exception = await Assert.ThrowsAsync <FirebaseAuthException>( () => auth.CreateProviderConfigAsync(args)); Assert.Equal(ErrorCode.Internal, exception.ErrorCode); Assert.Null(exception.AuthErrorCode); Assert.StartsWith( "Unexpected HTTP response with status: 500 (InternalServerError)", exception.Message); Assert.NotNull(exception.HttpResponse); Assert.Null(exception.InnerException); }
public async Task UpdateConfigMinimal() { var handler = new MockMessageHandler() { Response = OidcProviderConfigResponse, }; var auth = ProviderConfigTestUtils.CreateFirebaseAuth(handler); var args = new OidcProviderConfigArgs() { ProviderId = "oidc.minimal-provider", ClientId = "CLIENT_ID", }; var provider = await auth.UpdateProviderConfigAsync(args); this.AssertOidcProviderConfig(provider); Assert.Equal(1, handler.Requests.Count); var request = handler.Requests[0]; Assert.Equal(ProviderConfigTestUtils.PatchMethod, request.Method); Assert.Equal( "/v2/projects/project1/oauthIdpConfigs/oidc.minimal-provider?updateMask=clientId", request.Url.PathAndQuery); ProviderConfigTestUtils.AssertClientVersionHeader(request); var body = NewtonsoftJsonSerializer.Instance.Deserialize<JObject>( handler.LastRequestBody); Assert.Single(body); Assert.Equal("CLIENT_ID", body["clientId"]); }
public async Task UpdateConfigNullArgs() { var auth = ProviderConfigTestUtils.CreateFirebaseAuth(); await Assert.ThrowsAsync<ArgumentNullException>( () => auth.UpdateProviderConfigAsync(null as OidcProviderConfigArgs)); }
public async Task CreateConfig() { var handler = new MockMessageHandler() { Response = OidcProviderConfigResponse, }; var auth = ProviderConfigTestUtils.CreateFirebaseAuth(handler); var args = new OidcProviderConfigArgs() { ProviderId = "oidc.provider", DisplayName = "oidcProviderName", Enabled = true, ClientId = "CLIENT_ID", Issuer = "https://oidc.com/issuer", }; var provider = await auth.CreateProviderConfigAsync(args); this.AssertOidcProviderConfig(provider); Assert.Equal(1, handler.Requests.Count); var request = handler.Requests[0]; Assert.Equal(HttpMethod.Post, request.Method); Assert.Equal( "/v2/projects/project1/oauthIdpConfigs?oauthIdpConfigId=oidc.provider", request.Url.PathAndQuery); ProviderConfigTestUtils.AssertClientVersionHeader(request); var body = NewtonsoftJsonSerializer.Instance.Deserialize<JObject>( handler.LastRequestBody); Assert.Equal(4, body.Count); Assert.Equal("oidcProviderName", body["displayName"]); Assert.True((bool)body["enabled"]); Assert.Equal("CLIENT_ID", body["clientId"]); Assert.Equal("https://oidc.com/issuer", body["issuer"]); }
public async Task CreateConfigUnknownError() { var handler = new MockMessageHandler() { StatusCode = HttpStatusCode.InternalServerError, Response = ProviderConfigTestUtils.UnknownErrorResponse, }; var auth = ProviderConfigTestUtils.CreateFirebaseAuth(handler); var args = new OidcProviderConfigArgs() { ProviderId = "oidc.provider", ClientId = "CLIENT_ID", Issuer = "https://oidc.com/issuer", }; var exception = await Assert.ThrowsAsync<FirebaseAuthException>( () => auth.CreateProviderConfigAsync(args)); Assert.Equal(ErrorCode.Internal, exception.ErrorCode); Assert.Null(exception.AuthErrorCode); Assert.StartsWith( "Unexpected HTTP response with status: 500 (InternalServerError)", exception.Message); Assert.NotNull(exception.HttpResponse); Assert.Null(exception.InnerException); }
public async Task ListConfigs() { var handler = new MockMessageHandler() { Response = ListConfigsResponses, }; var auth = ProviderConfigTestUtils.CreateFirebaseAuth(handler); var configs = new List<OidcProviderConfig>(); var pagedEnumerable = auth.ListOidcProviderConfigsAsync(null); var enumerator = pagedEnumerable.GetEnumerator(); while (await enumerator.MoveNext()) { configs.Add(enumerator.Current); } Assert.Equal(5, configs.Count); Assert.All(configs, this.AssertOidcProviderConfig); Assert.Equal(2, handler.Requests.Count); var query = ProviderConfigTestUtils.ExtractQueryParams(handler.Requests[0]); Assert.Single(query); Assert.Equal("100", query["pageSize"]); query = ProviderConfigTestUtils.ExtractQueryParams(handler.Requests[1]); Assert.Equal(2, query.Count); Assert.Equal("100", query["pageSize"]); Assert.Equal("token", query["pageToken"]); Assert.All(handler.Requests, ProviderConfigTestUtils.AssertClientVersionHeader); }
public async Task DeleteConfigNoProviderId(string providerId) { var auth = ProviderConfigTestUtils.CreateFirebaseAuth(); await Assert.ThrowsAsync<ArgumentException>( () => auth.DeleteProviderConfigAsync(providerId)); }
public void ListOidcForEach() { var handler = new MockMessageHandler() { Response = ListConfigsResponses, }; var auth = ProviderConfigTestUtils.CreateFirebaseAuth(handler); var configs = new List<OidcProviderConfig>(); var pagedEnumerable = auth.ListOidcProviderConfigsAsync(null); foreach (var user in pagedEnumerable.ToEnumerable()) { configs.Add(user); } Assert.Equal(5, configs.Count); Assert.All(configs, this.AssertOidcProviderConfig); Assert.Equal(2, handler.Requests.Count); var query = ProviderConfigTestUtils.ExtractQueryParams(handler.Requests[0]); Assert.Single(query); Assert.Equal("100", query["pageSize"]); query = ProviderConfigTestUtils.ExtractQueryParams(handler.Requests[1]); Assert.Equal(2, query.Count); Assert.Equal("100", query["pageSize"]); Assert.Equal("token", query["pageToken"]); Assert.All(handler.Requests, ProviderConfigTestUtils.AssertClientVersionHeader); }
public async Task UpdateConfigMinimal() { var handler = new MockMessageHandler() { Response = SamlProviderConfigResponse, }; var auth = ProviderConfigTestUtils.CreateFirebaseAuth(handler); var args = new SamlProviderConfigArgs() { ProviderId = "saml.minimal-provider", IdpEntityId = "IDP_ENTITY_ID", }; var provider = await auth.UpdateProviderConfigAsync(args); this.AssertSamlProviderConfig(provider); Assert.Equal(1, handler.Requests.Count); var request = handler.Requests[0]; Assert.Equal(ProviderConfigTestUtils.PatchMethod, request.Method); Assert.Equal( "/v2/projects/project1/inboundSamlConfigs/saml.minimal-provider?updateMask=idpConfig.idpEntityId", request.Url.PathAndQuery); ProviderConfigTestUtils.AssertClientVersionHeader(request); var body = NewtonsoftJsonSerializer.Instance.Deserialize <JObject>( handler.LastRequestBody); Assert.Single(body); var idpConfig = (JObject)body["idpConfig"]; Assert.Equal("IDP_ENTITY_ID", idpConfig["idpEntityId"]); }
public async Task ListOidcAsRawResponses() { var handler = new MockMessageHandler() { Response = ListConfigsResponses, }; var auth = ProviderConfigTestUtils.CreateFirebaseAuth(handler); var configs = new List<OidcProviderConfig>(); var tokens = new List<string>(); var pagedEnumerable = auth.ListOidcProviderConfigsAsync(null); var responses = pagedEnumerable.AsRawResponses().GetEnumerator(); while (await responses.MoveNext()) { configs.AddRange(responses.Current.ProviderConfigs); tokens.Add(responses.Current.NextPageToken); Assert.Equal(tokens.Count, handler.Requests.Count); } Assert.Equal(new List<string>() { "token", null }, tokens); Assert.Equal(5, configs.Count); Assert.All(configs, this.AssertOidcProviderConfig); Assert.Equal(2, handler.Requests.Count); var query = ProviderConfigTestUtils.ExtractQueryParams(handler.Requests[0]); Assert.Single(query); Assert.Equal("100", query["pageSize"]); query = ProviderConfigTestUtils.ExtractQueryParams(handler.Requests[1]); Assert.Equal(2, query.Count); Assert.Equal("100", query["pageSize"]); Assert.Equal("token", query["pageToken"]); }
public async Task UpdateConfigNotFoundError() { var handler = new MockMessageHandler() { StatusCode = HttpStatusCode.NotFound, Response = ProviderConfigTestUtils.ConfigNotFoundResponse, }; var auth = ProviderConfigTestUtils.CreateFirebaseAuth(handler); var args = new OidcProviderConfigArgs() { ProviderId = "oidc.provider", ClientId = "CLIENT_ID", }; var exception = await Assert.ThrowsAsync<FirebaseAuthException>( () => auth.UpdateProviderConfigAsync(args)); Assert.Equal(ErrorCode.NotFound, exception.ErrorCode); Assert.Equal(AuthErrorCode.ConfigurationNotFound, exception.AuthErrorCode); Assert.Equal( "No identity provider configuration found for the given identifier " + "(CONFIGURATION_NOT_FOUND).", exception.Message); Assert.NotNull(exception.HttpResponse); Assert.Null(exception.InnerException); }
public async Task UpdateConfigInvalidArgs(OidcProviderConfigArgs args, string expected) { var auth = ProviderConfigTestUtils.CreateFirebaseAuth(); var exception = await Assert.ThrowsAsync<ArgumentException>( () => auth.UpdateProviderConfigAsync(args)); Assert.Equal(expected, exception.Message); }
public async Task GetConfigInvalidProviderId() { var auth = ProviderConfigTestUtils.CreateFirebaseAuth(); var exception = await Assert.ThrowsAsync<ArgumentException>( () => auth.GetOidcProviderConfigAsync("saml.provider")); Assert.Equal("OIDC provider ID must have the prefix 'oidc.'.", exception.Message); }
public async Task GetConfigNoProviderId(string providerId) { var auth = ProviderConfigTestUtils.CreateFirebaseAuth(); var exception = await Assert.ThrowsAsync<ArgumentException>( () => auth.GetOidcProviderConfigAsync(providerId)); Assert.Equal("Provider ID cannot be null or empty.", exception.Message); }
public async Task DeleteConfigInvalidProviderId() { var auth = ProviderConfigTestUtils.CreateFirebaseAuth(); var exception = await Assert.ThrowsAsync<ArgumentException>( () => auth.DeleteProviderConfigAsync("unknown.provider")); Assert.Equal( "Provider ID must have 'oidc.' or 'saml.' as the prefix.", exception.Message); }
public async Task ListOidcReadPageSizeTooLarge() { var handler = new MockMessageHandler() { Response = ListConfigsResponses, }; var auth = ProviderConfigTestUtils.CreateFirebaseAuth(handler); var pagedEnumerable = auth.ListOidcProviderConfigsAsync(null); await Assert.ThrowsAsync<ArgumentException>( async () => await pagedEnumerable.ReadPageAsync(101)); Assert.Empty(handler.Requests); }
public void ListOidcInvalidOptions(ListProviderConfigsOptions options, string expected) { var handler = new MockMessageHandler() { Response = ListConfigsResponses, }; var auth = ProviderConfigTestUtils.CreateFirebaseAuth(handler); var exception = Assert.Throws<ArgumentException>( () => auth.ListOidcProviderConfigsAsync(options)); Assert.Equal(expected, exception.Message); Assert.Empty(handler.Requests); }
public async Task UpdateConfig() { var handler = new MockMessageHandler() { Response = SamlProviderConfigResponse, }; var auth = ProviderConfigTestUtils.CreateFirebaseAuth(handler); var args = new SamlProviderConfigArgs() { ProviderId = "saml.provider", DisplayName = "samlProviderName", Enabled = true, IdpEntityId = "IDP_ENTITY_ID", SsoUrl = "https://example.com/login", X509Certificates = new List <string>() { "CERT1", "CERT2" }, RpEntityId = "RP_ENTITY_ID", CallbackUrl = "https://projectId.firebaseapp.com/__/auth/handler", }; var provider = await auth.UpdateProviderConfigAsync(args); this.AssertSamlProviderConfig(provider); Assert.Equal(1, handler.Requests.Count); var request = handler.Requests[0]; Assert.Equal(ProviderConfigTestUtils.PatchMethod, request.Method); var mask = "displayName,enabled,idpConfig.idpCertificates,idpConfig.idpEntityId,idpConfig.ssoUrl," + "spConfig.callbackUri,spConfig.spEntityId"; Assert.Equal( $"/v2/projects/project1/inboundSamlConfigs/saml.provider?updateMask={mask}", request.Url.PathAndQuery); ProviderConfigTestUtils.AssertClientVersionHeader(request); var body = NewtonsoftJsonSerializer.Instance.Deserialize <JObject>( handler.LastRequestBody); Assert.Equal(4, body.Count); Assert.Equal("samlProviderName", body["displayName"]); Assert.True((bool)body["enabled"]); this.AssertIdpConfig((JObject)body["idpConfig"]); this.AssertSpConfig((JObject)body["spConfig"]); }
public async Task DeleteConfig() { var handler = new MockMessageHandler() { Response = "{}", }; var auth = ProviderConfigTestUtils.CreateFirebaseAuth(handler); await auth.DeleteProviderConfigAsync("oidc.provider"); Assert.Equal(1, handler.Requests.Count); var request = handler.Requests[0]; Assert.Equal(HttpMethod.Delete, request.Method); Assert.Equal( "/v2/projects/project1/oauthIdpConfigs/oidc.provider", request.Url.PathAndQuery); ProviderConfigTestUtils.AssertClientVersionHeader(request); }
public async Task ListSamlByPages() { var handler = new MockMessageHandler() { Response = ListConfigsResponses, }; var auth = ProviderConfigTestUtils.CreateFirebaseAuth(handler); var configs = new List <SamlProviderConfig>(); // Read page 1. var pagedEnumerable = auth.ListSamlProviderConfigsAsync(null); var configPage = await pagedEnumerable.ReadPageAsync(3); Assert.Equal(3, configPage.Count()); Assert.Equal("token", configPage.NextPageToken); Assert.Single(handler.Requests); var query = ProviderConfigTestUtils.ExtractQueryParams(handler.Requests[0]); Assert.Single(query); Assert.Equal("3", query["pageSize"]); configs.AddRange(configPage); // Read page 2. pagedEnumerable = auth.ListSamlProviderConfigsAsync(new ListProviderConfigsOptions() { PageToken = configPage.NextPageToken, }); configPage = await pagedEnumerable.ReadPageAsync(3); Assert.Equal(2, configPage.Count()); Assert.Null(configPage.NextPageToken); Assert.Equal(2, handler.Requests.Count); query = ProviderConfigTestUtils.ExtractQueryParams(handler.Requests[1]); Assert.Equal(2, query.Count); Assert.Equal("3", query["pageSize"]); Assert.Equal("token", query["pageToken"]); configs.AddRange(configPage); Assert.Equal(5, configs.Count); Assert.All(configs, this.AssertSamlProviderConfig); }
public async Task GetConfig() { var handler = new MockMessageHandler() { Response = SamlProviderConfigResponse, }; var auth = ProviderConfigTestUtils.CreateFirebaseAuth(handler); var provider = await auth.GetSamlProviderConfigAsync("saml.provider"); this.AssertSamlProviderConfig(provider); Assert.Equal(1, handler.Requests.Count); var request = handler.Requests[0]; Assert.Equal(HttpMethod.Get, request.Method); Assert.Equal( "/v2/projects/project1/inboundSamlConfigs/saml.provider", request.Url.PathAndQuery); ProviderConfigTestUtils.AssertClientVersionHeader(request); }
public async Task CreateConfigMinimal() { var handler = new MockMessageHandler() { Response = SamlProviderConfigResponse, }; var auth = ProviderConfigTestUtils.CreateFirebaseAuth(handler); var args = new SamlProviderConfigArgs() { ProviderId = "saml.minimal-provider", IdpEntityId = "IDP_ENTITY_ID", SsoUrl = "https://example.com/login", X509Certificates = new List <string>() { "CERT1", "CERT2" }, RpEntityId = "RP_ENTITY_ID", CallbackUrl = "https://projectId.firebaseapp.com/__/auth/handler", }; var provider = await auth.CreateProviderConfigAsync(args); this.AssertSamlProviderConfig(provider); Assert.Equal(1, handler.Requests.Count); var request = handler.Requests[0]; Assert.Equal(HttpMethod.Post, request.Method); Assert.Equal( "/v2/projects/project1/inboundSamlConfigs?inboundSamlConfigId=saml.minimal-provider", request.Url.PathAndQuery); ProviderConfigTestUtils.AssertClientVersionHeader(request); var body = NewtonsoftJsonSerializer.Instance.Deserialize <JObject>( handler.LastRequestBody); Assert.Equal(2, body.Count); this.AssertIdpConfig((JObject)body["idpConfig"]); this.AssertSpConfig((JObject)body["spConfig"]); }
public void ListSamlOptions() { var handler = new MockMessageHandler() { Response = ListConfigsResponses, }; var auth = ProviderConfigTestUtils.CreateFirebaseAuth(handler); var configs = new List <SamlProviderConfig>(); var customOptions = new ListProviderConfigsOptions() { PageSize = 3, PageToken = "custom-token", }; var pagedEnumerable = auth.ListSamlProviderConfigsAsync(customOptions); foreach (var user in pagedEnumerable.ToEnumerable()) { configs.Add(user); } Assert.Equal(5, configs.Count); Assert.All(configs, this.AssertSamlProviderConfig); Assert.Equal(2, handler.Requests.Count); var query = ProviderConfigTestUtils.ExtractQueryParams(handler.Requests[0]); Assert.Equal(2, query.Count); Assert.Equal("3", query["pageSize"]); Assert.Equal("custom-token", query["pageToken"]); query = ProviderConfigTestUtils.ExtractQueryParams(handler.Requests[1]); Assert.Equal(2, query.Count); Assert.Equal("3", query["pageSize"]); Assert.Equal("token", query["pageToken"]); Assert.All(handler.Requests, ProviderConfigTestUtils.AssertClientVersionHeader); }