Skip to content

Commit 1ca4d2d

Browse files
committed
Add getOidcProviderConfig operation.
1 parent 0c76cc6 commit 1ca4d2d

File tree

4 files changed

+135
-14
lines changed

4 files changed

+135
-14
lines changed

src/main/java/com/google/firebase/auth/AbstractFirebaseAuth.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -978,6 +978,46 @@ protected OidcProviderConfig execute() throws FirebaseAuthException {
978978
};
979979
}
980980

981+
/**
982+
* Gets the provider OIDC Auth config corresponding to the specified provider ID.
983+
*
984+
* @param providerId A provider ID string.
985+
* @return An {@link OidcProviderConfig} instance.
986+
* @throws IllegalArgumentException If the provider ID string is null or empty.
987+
* @throws FirebaseAuthException If an error occurs while retrieving the provider config.
988+
*/
989+
public OidcProviderConfig getOidcProviderConfig(@NonNull String providerId)
990+
throws FirebaseAuthException {
991+
return getOidcProviderConfigOp(providerId).call();
992+
}
993+
994+
/**
995+
* Similar to {@link #getOidcProviderConfig(String)} but performs the operation asynchronously.
996+
*
997+
* @param providerId A provider ID string.
998+
* @return An {@code ApiFuture} which will complete successfully with an
999+
* {@link OidcProviderConfig} instance. If an error occurs while retrieving the provider
1000+
* config or if the specified provider ID does not exist, the future throws a
1001+
* {@link FirebaseAuthException}.
1002+
* @throws IllegalArgumentException If the provider ID string is null or empty.
1003+
*/
1004+
public ApiFuture<OidcProviderConfig> getOidcProviderConfigAsync(@NonNull String providerId) {
1005+
return getOidcProviderConfigOp(providerId).callAsync(firebaseApp);
1006+
}
1007+
1008+
private CallableOperation<OidcProviderConfig, FirebaseAuthException>
1009+
getOidcProviderConfigOp(final String providerId) {
1010+
checkNotDestroyed();
1011+
checkArgument(!Strings.isNullOrEmpty(providerId), "provider ID must not be null or empty");
1012+
final FirebaseUserManager userManager = getUserManager();
1013+
return new CallableOperation<OidcProviderConfig, FirebaseAuthException>() {
1014+
@Override
1015+
protected OidcProviderConfig execute() throws FirebaseAuthException {
1016+
return userManager.getOidcProviderConfig(providerId);
1017+
}
1018+
};
1019+
}
1020+
9811021
/**
9821022
* Deletes the provider config identified by the specified provider ID.
9831023
*

src/main/java/com/google/firebase/auth/FirebaseUserManager.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
*/
6666
class FirebaseUserManager {
6767

68-
static final String CONFIGURATION_NOT_FOUND = "configuration-not-found";
68+
static final String CONFIGURATION_NOT_FOUND_ERROR = "configuration-not-found";
6969
static final String TENANT_ID_MISMATCH_ERROR = "tenant-id-mismatch";
7070
static final String TENANT_NOT_FOUND_ERROR = "tenant-not-found";
7171
static final String USER_NOT_FOUND_ERROR = "user-not-found";
@@ -75,7 +75,7 @@ class FirebaseUserManager {
7575
// SDK error codes defined at: https://firebase.google.com/docs/auth/admin/errors
7676
private static final Map<String, String> ERROR_CODES = ImmutableMap.<String, String>builder()
7777
.put("CLAIMS_TOO_LARGE", "claims-too-large")
78-
.put("CONFIGURATION_NOT_FOUND", CONFIGURATION_NOT_FOUND)
78+
.put("CONFIGURATION_NOT_FOUND", CONFIGURATION_NOT_FOUND_ERROR)
7979
.put("INSUFFICIENT_PERMISSION", "insufficient-permission")
8080
.put("DUPLICATE_EMAIL", "email-already-exists")
8181
.put("DUPLICATE_LOCAL_ID", "uid-already-exists")
@@ -330,6 +330,11 @@ OidcProviderConfig createOidcProviderConfig(
330330
return sendRequest("POST", url, request.getProperties(), OidcProviderConfig.class);
331331
}
332332

333+
OidcProviderConfig getOidcProviderConfig(String providerId) throws FirebaseAuthException {
334+
GenericUrl url = new GenericUrl(idpConfigMgtBaseUrl + "/oauthIdpConfigs/" + providerId);
335+
return sendRequest("GET", url, null, OidcProviderConfig.class);
336+
}
337+
333338
void deleteProviderConfig(String providerId) throws FirebaseAuthException {
334339
GenericUrl url = new GenericUrl(idpConfigMgtBaseUrl + "/oauthIdpConfigs/" + providerId);
335340
sendRequest("DELETE", url, null, GenericJson.class);

src/test/java/com/google/firebase/auth/FirebaseAuthIT.java

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -976,17 +976,27 @@ public void testOidcProviderConfigLifecycle() throws Exception {
976976
assertEquals("ClientId", config.getClientId());
977977
assertEquals("https://oidc.com/issuer", config.getIssuer());
978978

979-
// TODO(micahstairs): Test getOidcProviderConfig and updateProviderConfig operations.
979+
try {
980+
// Get config provider
981+
config = auth.getOidcProviderConfigAsync(providerId).get();
982+
assertEquals(providerId, config.getProviderId());
983+
assertEquals("DisplayName", config.getDisplayName());
984+
assertEquals("ClientId", config.getClientId());
985+
assertEquals("https://oidc.com/issuer", config.getIssuer());
986+
987+
// TODO(micahstairs): Test updateProviderConfig operation
980988

981-
// Delete config provider
982-
auth.deleteProviderConfigAsync(providerId).get();
983-
// TODO(micahstairs): Once getOidcProviderConfig operation is implemented, add a check here to
984-
// double-check that the config provider was deleted.
989+
} finally {
990+
// Delete config provider
991+
auth.deleteProviderConfigAsync(providerId).get();
992+
}
993+
994+
assertOidcProviderConfigDoesNotExist(auth, providerId);
985995
}
986996

987997
@Test
988998
public void testTenantAwareOidcProviderConfigLifecycle() throws Exception {
989-
// Create tenant to use.
999+
// Create tenant to use
9901000
TenantManager tenantManager = auth.getTenantManager();
9911001
Tenant.CreateRequest tenantCreateRequest =
9921002
new Tenant.CreateRequest().setDisplayName("DisplayName");
@@ -1010,12 +1020,22 @@ public void testTenantAwareOidcProviderConfigLifecycle() throws Exception {
10101020
assertEquals("ClientId", config.getClientId());
10111021
assertEquals("https://oidc.com/issuer", config.getIssuer());
10121022

1013-
// TODO(micahstairs): Test getOidcProviderConfig and updateProviderConfig operations.
1023+
try {
1024+
// Get config provider
1025+
config = tenantAwareAuth.getOidcProviderConfigAsync(providerId).get();
1026+
assertEquals(providerId, config.getProviderId());
1027+
assertEquals("DisplayName", config.getDisplayName());
1028+
assertEquals("ClientId", config.getClientId());
1029+
assertEquals("https://oidc.com/issuer", config.getIssuer());
1030+
1031+
// TODO(micahstairs): Test updateProviderConfig operation
1032+
1033+
} finally {
1034+
// Delete config provider
1035+
tenantAwareAuth.deleteProviderConfigAsync(providerId).get();
1036+
}
10141037

1015-
// Delete config provider
1016-
tenantAwareAuth.deleteProviderConfigAsync(providerId).get();
1017-
// TODO(micahstairs): Once getOidcProviderConfig operation is implemented, add a check here to
1018-
// double-check that the config provider was deleted.
1038+
assertOidcProviderConfigDoesNotExist(tenantAwareAuth, providerId);
10191039
} finally {
10201040
// Delete tenant.
10211041
tenantManager.deleteTenantAsync(tenantId).get();
@@ -1152,6 +1172,19 @@ static RandomUser create() {
11521172
}
11531173
}
11541174

1175+
1176+
private static void assertOidcProviderConfigDoesNotExist(
1177+
AbstractFirebaseAuth firebaseAuth, String providerId) throws Exception {
1178+
try {
1179+
firebaseAuth.getOidcProviderConfigAsync(providerId).get();
1180+
fail("No error thrown for getting a deleted provider config");
1181+
} catch (ExecutionException e) {
1182+
assertTrue(e.getCause() instanceof FirebaseAuthException);
1183+
assertEquals(FirebaseUserManager.CONFIGURATION_NOT_FOUND_ERROR,
1184+
((FirebaseAuthException) e.getCause()).getErrorCode());
1185+
}
1186+
}
1187+
11551188
private static void assertUserDoesNotExist(AbstractFirebaseAuth firebaseAuth, String uid)
11561189
throws Exception {
11571190
try {

src/test/java/com/google/firebase/auth/FirebaseUserManagerTest.java

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1491,6 +1491,49 @@ public void testTenantAwareCreateOidcProvider() throws Exception {
14911491
checkUrl(interceptor, "POST", TENANTS_BASE_URL + "/TENANT_ID/oauthIdpConfigs");
14921492
}
14931493

1494+
@Test
1495+
public void testGetOidcProviderConfig() throws Exception {
1496+
TestResponseInterceptor interceptor = initializeAppForUserManagement(
1497+
TestUtils.loadResource("oidc.json"));
1498+
1499+
OidcProviderConfig config =
1500+
FirebaseAuth.getInstance().getOidcProviderConfig("oidc.provider-id");
1501+
1502+
checkOidcProviderConfig(config);
1503+
checkRequestHeaders(interceptor);
1504+
checkUrl(interceptor, "GET", PROJECT_BASE_URL + "/oauthIdpConfigs/oidc.provider-id");
1505+
}
1506+
1507+
@Test
1508+
public void testGetOidcProviderConfigWithNotFoundError() throws Exception {
1509+
TestResponseInterceptor interceptor =
1510+
initializeAppForUserManagementWithStatusCode(404,
1511+
"{\"error\": {\"message\": \"CONFIGURATION_NOT_FOUND\"}}");
1512+
try {
1513+
FirebaseAuth.getInstance().getOidcProviderConfig("oidc.provider-id");
1514+
fail("No error thrown for invalid response");
1515+
} catch (FirebaseAuthException e) {
1516+
assertEquals(FirebaseUserManager.CONFIGURATION_NOT_FOUND_ERROR, e.getErrorCode());
1517+
}
1518+
checkUrl(interceptor, "GET", PROJECT_BASE_URL + "/oauthIdpConfigs/oidc.provider-id");
1519+
}
1520+
1521+
@Test
1522+
public void testGetTenantAwareOidcProviderConfig() throws Exception {
1523+
TestResponseInterceptor interceptor = initializeAppForTenantAwareUserManagement(
1524+
"TENANT_ID",
1525+
TestUtils.loadResource("oidc.json"));
1526+
TenantAwareFirebaseAuth tenantAwareAuth =
1527+
FirebaseAuth.getInstance().getTenantManager().getAuthForTenant("TENANT_ID");
1528+
1529+
OidcProviderConfig config = tenantAwareAuth.getOidcProviderConfig("oidc.provider-id");
1530+
1531+
checkOidcProviderConfig(config);
1532+
checkRequestHeaders(interceptor);
1533+
checkUrl(interceptor, "GET", TENANTS_BASE_URL + "/TENANT_ID/oauthIdpConfigs/oidc.provider-id");
1534+
}
1535+
1536+
14941537
@Test
14951538
public void testDeleteProviderConfig() throws Exception {
14961539
TestResponseInterceptor interceptor = initializeAppForUserManagement("{}");
@@ -1510,7 +1553,7 @@ public void testDeleteProviderConfigWithNotFoundError() throws Exception {
15101553
FirebaseAuth.getInstance().deleteProviderConfig("UNKNOWN");
15111554
fail("No error thrown for invalid response");
15121555
} catch (FirebaseAuthException e) {
1513-
assertEquals(FirebaseUserManager.CONFIGURATION_NOT_FOUND, e.getErrorCode());
1556+
assertEquals(FirebaseUserManager.CONFIGURATION_NOT_FOUND_ERROR, e.getErrorCode());
15141557
}
15151558
checkUrl(interceptor, "DELETE", PROJECT_BASE_URL + "/oauthIdpConfigs/UNKNOWN");
15161559
}

0 commit comments

Comments
 (0)