Skip to content

Commit

Permalink
Adds support for filtering client-grants by grant_ids
Browse files Browse the repository at this point in the history
  • Loading branch information
kailash-b committed Oct 4, 2024
1 parent 07da45c commit 09dcab5
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 19 deletions.
2 changes: 1 addition & 1 deletion src/Auth0.AuthenticationApi/AuthenticationApiClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -533,7 +533,7 @@ private Task AssertIdTokenValid(string idToken, string audience, JwtSignatureAlg

private Uri BuildUri(string path)
{
return Utils.BuildUri(BaseUri.AbsoluteUri, path, null, null);
return Utils.BuildUri(BaseUri.AbsoluteUri, path, null, queryStrings:null);
}

private IDictionary<string, string> BuildHeaders(string accessToken)
Expand Down
4 changes: 2 additions & 2 deletions src/Auth0.Core/Utils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,11 @@ internal static Uri BuildUri(string baseUrl, string resource, IDictionary<string

return new Uri(resource, UriKind.RelativeOrAbsolute);
}
internal static Uri BuildUri(string baseUrl, string resource, IDictionary<string, string> urlSegments, IList<Tuple<string, string>> queryStrings, bool includeEmptyParameters = false)
internal static Uri BuildUri(string baseUrl, string resource, IDictionary<string, string> urlSegments, IList<Tuple<string, string>> queryStringsTuple, bool includeEmptyParameters = false)
{
resource = ReplaceUrlSegments(resource, urlSegments);

var queryString = AddQueryString(queryStrings, includeEmptyParameters);
var queryString = AddQueryString(queryStringsTuple, includeEmptyParameters);

// If we have a querystring, append it to the resource
if (!string.IsNullOrEmpty(queryString))
Expand Down
19 changes: 13 additions & 6 deletions src/Auth0.ManagementApi/Clients/OrganizationsClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
Expand Down Expand Up @@ -435,17 +436,23 @@ public Task<IPagedList<OrganizationClientGrant>> GetAllClientGrantsAsync(string
if (request == null)
throw new ArgumentNullException(nameof(request));

var queryStrings = new Dictionary<string, string>
var queryStrings = new List<Tuple<string, string>>()
{
{"audience", request.Audience},
{"client_id", request.ClientId},
new Tuple<string, string>("audience", request.Audience),
new Tuple<string, string>("client_id", request.ClientId)
};

if (request.GrantIds != null)
{
queryStrings.AddRange(
request.GrantIds.Select(grantId => new Tuple<string, string>("grant_ids", grantId)));
}

if (pagination != null)
{
queryStrings["page"] = pagination.PageNo.ToString();
queryStrings["per_page"] = pagination.PerPage.ToString();
queryStrings["include_totals"] = pagination.IncludeTotals.ToString().ToLower();
queryStrings.Add(new Tuple<string, string>("page", pagination.PageNo.ToString()));
queryStrings.Add(new Tuple<string, string>("per_page", pagination.PerPage.ToString()));
queryStrings.Add(new Tuple<string, string>("include_totals", pagination.IncludeTotals.ToString().ToLower()));
}

return Connection.GetAsync<IPagedList<OrganizationClientGrant>>(BuildUri($"organizations/{EncodePath(organizationId)}/client-grants", queryStrings), DefaultHeaders, clientGrantsConverters, cancellationToken);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
using System.Collections.Generic;

namespace Auth0.ManagementApi.Models
{
public class OrganizationGetClientGrantsRequest
Expand All @@ -10,6 +12,11 @@ public class OrganizationGetClientGrantsRequest
/// <summary>
/// The Id of a client to filter by.
/// </summary>
public string ClientId { get; set; }
public string ClientId { get; set; }

/// <summary>
/// List of GrantIds to filter results on
/// </summary>
public IList<string> GrantIds { get; set; }
}
}
6 changes: 0 additions & 6 deletions tests/Auth0.Core.UnitTests/UtilsTest.cs

This file was deleted.

16 changes: 13 additions & 3 deletions tests/Auth0.ManagementApi.IntegrationTests/ClientGrantTests.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Auth0.IntegrationTests.Shared.CleanUp;
using Auth0.ManagementApi.IntegrationTests.Testing;
Expand Down Expand Up @@ -191,7 +192,6 @@ public async Task Organization_Client_Grants()
OrganizationUsage = OrganizationUsage.Allow,
AllowAnyOrganization = true
});

fixture.TrackIdentifier(CleanUpType.ClientGrants, newGrant.Id);

var orgsBefore = await fixture.ApiClient.ClientGrants.GetAllOrganizationsAsync(newGrant.Id);
Expand Down Expand Up @@ -223,10 +223,20 @@ public async Task Organization_Client_Grants()

orgsAfter.Count.Should().Be(1);
orgGrantsAfter.Count.Should().Be(1);


// Get client grants using a client-Grants filter
var grantsFilter = new List<string>() { newGrant.Id, newGrant.Id };
var filteredUsingClientGrants =
await fixture.ApiClient.Organizations.GetAllClientGrantsAsync(existingOrgId,
new OrganizationGetClientGrantsRequest()
{
GrantIds = grantsFilter
});

filteredUsingClientGrants.Count.Should().Be(1);
filteredUsingClientGrants.First().Id.Should().BeEquivalentTo(newGrant.Id);
await fixture.ApiClient.ClientGrants.DeleteAsync(newGrant.Id);
fixture.UnTrackIdentifier(CleanUpType.ClientGrants, newGrant.Id);
}

}
}

0 comments on commit 09dcab5

Please sign in to comment.