From 3b8da33ff3e48ac8af9a163385aed4f234e4c0d9 Mon Sep 17 00:00:00 2001 From: Alfredo Oliviero Date: Tue, 21 May 2024 17:55:09 +0200 Subject: [PATCH] user format in IdmUser, implementd missing search methods --- pom.xml | 1 - .../gcube/idm/client/DefaultUsersClient.java | 67 ++++++++++++++--- .../gcube/idm/client/IdmClientFactory.java | 8 +- .../org/gcube/idm/client/IdmUsersClient.java | 5 ++ .../idm/client/test/IdmUsersClientTest.java | 75 ++++++++++++++----- 5 files changed, 126 insertions(+), 30 deletions(-) diff --git a/pom.xml b/pom.xml index 077dd10..1c0a7f9 100644 --- a/pom.xml +++ b/pom.xml @@ -87,7 +87,6 @@ gxJRS - org.glassfish.jersey.core jersey-client diff --git a/src/main/java/org/gcube/idm/client/DefaultUsersClient.java b/src/main/java/org/gcube/idm/client/DefaultUsersClient.java index c7988bc..f6fddc8 100644 --- a/src/main/java/org/gcube/idm/client/DefaultUsersClient.java +++ b/src/main/java/org/gcube/idm/client/DefaultUsersClient.java @@ -7,11 +7,12 @@ import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.List; +import java.util.Map; import org.gcube.com.fasterxml.jackson.databind.JavaType; -import org.gcube.common.keycloak.model.UserInfo; import org.gcube.idm.client.beans.ResponseBean; import org.gcube.idm.client.clients.IdmRestClient; +import org.gcube.idm.client.model.UserInfo; import org.gcube.idm.client.model.UserProfile; import org.gcube.idm.client.model.util.JsonUtilsCustom; import org.gcube.idm.common.models.IdmFullUser; @@ -20,6 +21,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import jakarta.ws.rs.BadRequestException; +import jakarta.ws.rs.NotAuthorizedException; public class DefaultUsersClient extends AbstractIdmClient implements IdmUsersClient { protected String auth_token; @@ -104,10 +106,19 @@ public class DefaultUsersClient extends AbstractIdmClient implements IdmUsersCli return resp.getResult(); } - private HashMap getSearchParameters(String format, Integer first, Integer max, + @Override + public UserInfo getUser(String user_id) { + ResponseBean resp = this.client.performGetRequest(pathForUserID(user_id, null), + this.auth_token, + UserInfo.class); + + return resp.getResult(); + } + + private HashMap getSearchParameters(IdmUser.USERS_REPR format, Integer first, Integer max, SearchUsersParams params) { HashMap parameters = new HashMap(); - parameters.put("format", format); + parameters.put("format", format.toString()); if (first != null) { parameters.put("first", first.toString()); } @@ -134,7 +145,7 @@ public class DefaultUsersClient extends AbstractIdmClient implements IdmUsersCli @Override public List searchUsernames(Integer first, Integer max, SearchUsersParams params) { HashMap headers = IdmRestClient.getHeadersWithAuth(this.auth_token, null); - HashMap parameters = getSearchParameters("username", first, max, params); + HashMap parameters = getSearchParameters(IdmUser.USERS_REPR.username, first, max, params); JavaType listType = JsonUtilsCustom.geListOfObjectsType(String.class); ResponseBean> resp = this.client.performGetRequest("/users/search", headers, parameters, listType); return resp.getResult(); @@ -143,7 +154,7 @@ public class DefaultUsersClient extends AbstractIdmClient implements IdmUsersCli @Override public List searchUsers(Integer first, Integer max, SearchUsersParams params) { HashMap headers = IdmRestClient.getHeadersWithAuth(this.auth_token, null); - HashMap parameters = getSearchParameters("compact", first, max, params); + HashMap parameters = getSearchParameters(IdmUser.USERS_REPR.compact, first, max, params); JavaType listType = JsonUtilsCustom.geListOfObjectsType(UserInfo.class); ResponseBean> resp = this.client.performGetRequest("/users/search", headers, parameters, listType); @@ -154,7 +165,7 @@ public class DefaultUsersClient extends AbstractIdmClient implements IdmUsersCli public List searchFullUsers(Integer first, Integer max, SearchUsersParams params) { // TODO Auto-generated method stub HashMap headers = IdmRestClient.getHeadersWithAuth(this.auth_token, null); - HashMap parameters = getSearchParameters("full", first, max, params); + HashMap parameters = getSearchParameters(IdmUser.USERS_REPR.full, first, max, params); JavaType listType = JsonUtilsCustom.geListOfObjectsType(IdmFullUser.class); ResponseBean> resp = this.client.performGetRequest("/users/search", headers, parameters, listType); @@ -162,8 +173,46 @@ public class DefaultUsersClient extends AbstractIdmClient implements IdmUsersCli } @Override - public org.gcube.idm.client.model.UserInfo getUser(String user_id) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'getUser'"); + public List searchEmails(Integer first, Integer max, SearchUsersParams params) { + HashMap headers = IdmRestClient.getHeadersWithAuth(this.auth_token, null); + HashMap parameters = getSearchParameters(IdmUser.USERS_REPR.email, first, max, params); + JavaType listType = JsonUtilsCustom.geListOfObjectsType(String.class); + ResponseBean> resp = this.client.performGetRequest("/users/search", headers, parameters, listType); + return resp.getResult(); + } + + @Override + public Map searchUsernamesEmails(Integer first, Integer max, SearchUsersParams params) + throws NotAuthorizedException, BadRequestException { + HashMap headers = IdmRestClient.getHeadersWithAuth(this.auth_token, null); + HashMap parameters = getSearchParameters(IdmUser.USERS_REPR.username_email, first, max, params); + + JavaType mapStringType = JsonUtilsCustom.geMapOfObjectsType(String.class, String.class); + ResponseBean> resp = this.client.performGetRequest("/users/search", headers, + parameters, mapStringType); + return resp.getResult(); + } + + @Override + public Map searchUsernamesUsers(Integer first, Integer max, SearchUsersParams params) + throws NotAuthorizedException, BadRequestException { + HashMap headers = IdmRestClient.getHeadersWithAuth(this.auth_token, null); + + HashMap parameters = getSearchParameters(IdmUser.USERS_REPR.username_user, first, max, params); + + JavaType mapStringType = JsonUtilsCustom.geMapOfObjectsType(String.class, IdmUser.class); + ResponseBean> resp = this.client.performGetRequest("/users/search", headers, + parameters, mapStringType); + return resp.getResult(); + } + + @Override + public List searchFullnames(Integer first, Integer max, SearchUsersParams params) + throws NotAuthorizedException, BadRequestException { + HashMap headers = IdmRestClient.getHeadersWithAuth(this.auth_token, null); + HashMap parameters = getSearchParameters(IdmUser.USERS_REPR.fullname, first, max, params); + JavaType listType = JsonUtilsCustom.geListOfObjectsType(String.class); + ResponseBean> resp = this.client.performGetRequest("/users/search", headers, parameters, listType); + return resp.getResult(); } } diff --git a/src/main/java/org/gcube/idm/client/IdmClientFactory.java b/src/main/java/org/gcube/idm/client/IdmClientFactory.java index 0df8c95..04fbe4b 100644 --- a/src/main/java/org/gcube/idm/client/IdmClientFactory.java +++ b/src/main/java/org/gcube/idm/client/IdmClientFactory.java @@ -44,7 +44,8 @@ public class IdmClientFactory { // set a custom secret, instead of fetch it from IS public void setSecret(Secret secret) { this.secret = secret; - this.setConfig(fetchIsConfig(secret)); + this.setConfig(null); + // this.setConfig(fetchIsConfig(secret)); } // set a custom config for the factory, skipping or overriding the fetch from IS @@ -57,6 +58,11 @@ public class IdmClientFactory { String error_message = "secret is null. invoke setSecret(secret) before fetching the configuration. "; throw new InternalServerErrorException(error_message); } + + if (this.config == null) { + this.config = fetchIsConfig(this.secret); + } + return fetchIsConfig(this.secret); } diff --git a/src/main/java/org/gcube/idm/client/IdmUsersClient.java b/src/main/java/org/gcube/idm/client/IdmUsersClient.java index 65b1af0..b0ce74d 100644 --- a/src/main/java/org/gcube/idm/client/IdmUsersClient.java +++ b/src/main/java/org/gcube/idm/client/IdmUsersClient.java @@ -1,6 +1,7 @@ package org.gcube.idm.client; import java.util.List; +import java.util.Map; import org.gcube.idm.client.model.UserInfo; import org.gcube.idm.client.model.UserProfile; @@ -30,6 +31,10 @@ public interface IdmUsersClient { public List searchFullUsers(Integer first, Integer max, SearchUsersParams params) throws NotAuthorizedException, BadRequestException; public List searchUsernames(Integer first, Integer max, SearchUsersParams params) throws NotAuthorizedException, BadRequestException; + public List searchEmails(Integer first, Integer max, SearchUsersParams params) throws NotAuthorizedException, BadRequestException; + public Map searchUsernamesEmails(Integer first, Integer max, SearchUsersParams params) throws NotAuthorizedException, BadRequestException; + public Map searchUsernamesUsers(Integer first, Integer max, SearchUsersParams params) throws NotAuthorizedException, BadRequestException; + public List searchFullnames(Integer first, Integer max, SearchUsersParams params) throws NotAuthorizedException, BadRequestException; public UserInfo getUser(String user_id); diff --git a/src/test/java/org/gcube/idm/client/test/IdmUsersClientTest.java b/src/test/java/org/gcube/idm/client/test/IdmUsersClientTest.java index 23908b7..d4e178f 100644 --- a/src/test/java/org/gcube/idm/client/test/IdmUsersClientTest.java +++ b/src/test/java/org/gcube/idm/client/test/IdmUsersClientTest.java @@ -7,9 +7,12 @@ import static org.junit.Assert.assertNull; import java.io.IOException; import java.rmi.ServerException; import java.util.List; +import java.util.Map; import org.gcube.idm.client.IdmUsersClient; import org.gcube.idm.client.SearchUsersParams; +import org.gcube.idm.client.model.UserInfo; +import org.gcube.idm.client.model.UserProfile; import org.gcube.idm.common.models.IdmFullUser; import org.gcube.idm.common.models.IdmUser; import org.junit.Test; @@ -17,20 +20,26 @@ import org.junit.Test; import jakarta.ws.rs.NotAuthorizedException; public class IdmUsersClientTest extends ClientContextTest { - // @Test - // public void getUser() throws IOException { - // fail("Unimplemented"); - // } + @Test + public void getUser() throws IOException { + IdmUsersClient client = getUserClient(); + UserInfo user = client.getUser("alfredo.oliviero"); + String expected = "alfredo.oliviero@isti.cnr.it"; + assertEquals(expected, user.user.getEmail()); + } // @Test // public void getUserInspect() throws IOException { - // fail("Unimplemented"); + // fail("Unimplemented"); // } - // @Test - // public void getUserProfile() throws IOException { - // fail("Unimplemented"); - // } + @Test + public void getUserProfile() throws IOException { + IdmUsersClient client = getUserClient(); + UserProfile profile = client.getUserProfile("alfredo.oliviero"); + String expected = "alfredo.oliviero"; + assertEquals(expected, profile.getUsername()); + } @Test public void getUserEmail() throws IOException { @@ -42,46 +51,44 @@ public class IdmUsersClientTest extends ClientContextTest { // @Test // public void getUserRolesRealm() throws IOException { - // fail("Unimplemented"); + // fail("Unimplemented"); // } // @Test // public void getUserRolesClient() throws IOException { - // fail("Unimplemented"); + // fail("Unimplemented"); // } // @Test // public void getUserGroups() throws IOException { - // fail("Unimplemented"); + // fail("Unimplemented"); // } // @Test // public void getUserId() throws IOException { - // fail("Unimplemented"); + // fail("Unimplemented"); // } // @Test // public void getUserUsername() throws IOException { - // fail("Unimplemented"); + // fail("Unimplemented"); // } // @Test // public void getUserName() throws IOException { - // fail("Unimplemented"); + // fail("Unimplemented"); // } // @Test // public void getUserAttributes() throws IOException { - // fail("Unimplemented"); + // fail("Unimplemented"); // } - // @Test // public void getUserUser() throws IOException { - // fail("Unimplemented"); + // fail("Unimplemented"); // } - // public String getUserEmail(String user_id); // public String getUserUsername(String user_id); // public TokenInfo getUserOwner(String user_id); @@ -110,6 +117,36 @@ public class IdmUsersClientTest extends ClientContextTest { assertNotNull("expected to receive users", users); assertEquals("size expected 3", 3, users.size()); } + @Test + public void searchEmail() throws IOException { + IdmUsersClient client = getUserClient(); + List emails = client.searchEmails(null, 3, null); + assertNotNull("expected to receive emails", emails); + assertEquals("size expected 3", 3, emails.size()); + } + + @Test + public void searchUsernamesEmail() throws IOException { + IdmUsersClient client = getUserClient(); + Map users_emails = client.searchUsernamesEmails(null, 3, null); + assertNotNull("expected to receive users", users_emails); + assertEquals("size expected 3", 3, users_emails.size()); + } + @Test + public void searchUsernamesUsers() throws IOException { + IdmUsersClient client = getUserClient(); + Map users = client.searchUsernamesUsers(null, 3, null); + assertNotNull("expected to receive users", users); + assertEquals("size expected 3", 3, users.size()); + } @Test + + public void searchFullnames() throws IOException { + IdmUsersClient client = getUserClient(); + List users = client.searchFullnames(null, 3, null); + assertNotNull("expected to receive users", users); + assertEquals("size expected 3", 3, users.size()); + } + @Test public void searchFilteredFullUsers() throws IOException {