update user roles using identifier instead of email
This commit is contained in:
parent
e4d52c2323
commit
7c5020c205
|
@ -26,7 +26,15 @@ public interface AaiRegistryService {
|
||||||
Integer getCoPersonIdByEmail(String email);
|
Integer getCoPersonIdByEmail(String email);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 1. Get CoPersonId List by Email
|
* 1.3 Get a list of User Identifiers by Email
|
||||||
|
*
|
||||||
|
* @param email
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<String> getUserIdentifiersByEmail(String email);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1.4 Get CoPersonId List by Email
|
||||||
*
|
*
|
||||||
* @param email
|
* @param email
|
||||||
* @return
|
* @return
|
||||||
|
|
|
@ -5,12 +5,13 @@ import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import eu.dnetlib.repo.manager.domain.dto.Role;
|
import eu.dnetlib.repo.manager.domain.dto.Role;
|
||||||
import eu.dnetlib.repo.manager.domain.dto.User;
|
import eu.dnetlib.repo.manager.domain.dto.User;
|
||||||
import eu.dnetlib.repo.manager.service.aai.registry.utils.RegistryUtils;
|
|
||||||
import eu.dnetlib.repo.manager.service.aai.registry.utils.HttpUtils;
|
import eu.dnetlib.repo.manager.service.aai.registry.utils.HttpUtils;
|
||||||
|
import eu.dnetlib.repo.manager.service.aai.registry.utils.RegistryUtils;
|
||||||
import org.mitre.openid.connect.model.OIDCAuthenticationToken;
|
import org.mitre.openid.connect.model.OIDCAuthenticationToken;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.security.core.context.SecurityContextHolder;
|
import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@ -27,11 +28,13 @@ public class RegistryCalls implements AaiRegistryService {
|
||||||
|
|
||||||
public final HttpUtils httpUtils;
|
public final HttpUtils httpUtils;
|
||||||
public final RegistryUtils jsonUtils;
|
public final RegistryUtils jsonUtils;
|
||||||
|
private final String coid;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
RegistryCalls(HttpUtils httpUtils, RegistryUtils registryUtils) {
|
RegistryCalls(HttpUtils httpUtils, RegistryUtils registryUtils, @Value("${services.provide.aai.registry.coid}") String coid) {
|
||||||
this.httpUtils = httpUtils;
|
this.httpUtils = httpUtils;
|
||||||
this.jsonUtils = registryUtils;
|
this.jsonUtils = registryUtils;
|
||||||
|
this.coid = coid;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String mapType(String type, boolean communityMap) {
|
private String mapType(String type, boolean communityMap) {
|
||||||
|
@ -62,6 +65,7 @@ public class RegistryCalls implements AaiRegistryService {
|
||||||
public Integer getCoPersonIdByEmail(String email) {
|
public Integer getCoPersonIdByEmail(String email) {
|
||||||
Map<String, String> params = new HashMap<>();
|
Map<String, String> params = new HashMap<>();
|
||||||
params.put("mail", email);
|
params.put("mail", email);
|
||||||
|
params.put("coid", coid);
|
||||||
JsonElement response = httpUtils.get("co_people.json", params);
|
JsonElement response = httpUtils.get("co_people.json", params);
|
||||||
if (response != null) {
|
if (response != null) {
|
||||||
JsonArray coPeople = response.getAsJsonObject().get("CoPeople").getAsJsonArray();
|
JsonArray coPeople = response.getAsJsonObject().get("CoPeople").getAsJsonArray();
|
||||||
|
@ -72,11 +76,31 @@ public class RegistryCalls implements AaiRegistryService {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getUserIdentifiersByEmail(String email) {
|
||||||
|
List<String> ids = new ArrayList<>();
|
||||||
|
Map<String, String> params = new HashMap<>();
|
||||||
|
params.put("copersonid", getCoPersonIdByEmail(email).toString());
|
||||||
|
|
||||||
|
JsonElement response = httpUtils.get("identifiers.json", params);
|
||||||
|
if (response != null) {
|
||||||
|
JsonArray infos = response.getAsJsonObject().get("Identifiers").getAsJsonArray();
|
||||||
|
infos.forEach(info -> {
|
||||||
|
JsonObject jsonInfo = info.getAsJsonObject();
|
||||||
|
if (!jsonInfo.get("Deleted").getAsBoolean()) {
|
||||||
|
ids.add(jsonInfo.get("Identifier").getAsString());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return ids;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Integer> getCoPersonIdsByEmail(String email) {
|
public List<Integer> getCoPersonIdsByEmail(String email) {
|
||||||
List<Integer> coPersonIds = new ArrayList<>();
|
List<Integer> coPersonIds = new ArrayList<>();
|
||||||
Map<String, String> params = new HashMap<>();
|
Map<String, String> params = new HashMap<>();
|
||||||
params.put("mail", email);
|
params.put("mail", email);
|
||||||
|
params.put("coid", coid);
|
||||||
JsonElement response = httpUtils.get("co_people.json", params);
|
JsonElement response = httpUtils.get("co_people.json", params);
|
||||||
if (response != null) {
|
if (response != null) {
|
||||||
JsonArray coPeople = response.getAsJsonObject().get("CoPeople").getAsJsonArray();
|
JsonArray coPeople = response.getAsJsonObject().get("CoPeople").getAsJsonArray();
|
||||||
|
@ -102,6 +126,7 @@ public class RegistryCalls implements AaiRegistryService {
|
||||||
public Integer getCoPersonIdByIdentifier(String sub) {
|
public Integer getCoPersonIdByIdentifier(String sub) {
|
||||||
Map<String, String> params = new HashMap<>();
|
Map<String, String> params = new HashMap<>();
|
||||||
params.put("search.identifier", sub);
|
params.put("search.identifier", sub);
|
||||||
|
params.put("coid", coid);
|
||||||
JsonElement response = httpUtils.get("co_people.json", params);
|
JsonElement response = httpUtils.get("co_people.json", params);
|
||||||
return (response != null) ? response.getAsJsonObject().get("CoPeople").getAsJsonArray().get(0).getAsJsonObject().get("Id").getAsInt() : null;
|
return (response != null) ? response.getAsJsonObject().get("CoPeople").getAsJsonArray().get(0).getAsJsonObject().get("Id").getAsInt() : null;
|
||||||
}
|
}
|
||||||
|
@ -368,7 +393,7 @@ public class RegistryCalls implements AaiRegistryService {
|
||||||
params.put("copersonid", coPersonId.toString());
|
params.put("copersonid", coPersonId.toString());
|
||||||
JsonElement response = httpUtils.get("names.json", params);
|
JsonElement response = httpUtils.get("names.json", params);
|
||||||
JsonObject info = (response != null) ? response.getAsJsonObject().get("Names").getAsJsonArray().get(0).getAsJsonObject() : null;
|
JsonObject info = (response != null) ? response.getAsJsonObject().get("Names").getAsJsonArray().get(0).getAsJsonObject() : null;
|
||||||
if ( info != null ) {
|
if (info != null) {
|
||||||
JsonObject jsonInfo = info.getAsJsonObject();
|
JsonObject jsonInfo = info.getAsJsonObject();
|
||||||
return jsonInfo.get("Given").getAsString() + " " + jsonInfo.get("Family").getAsString();
|
return jsonInfo.get("Given").getAsString() + " " + jsonInfo.get("Family").getAsString();
|
||||||
} else
|
} else
|
||||||
|
|
|
@ -16,7 +16,6 @@ import org.springframework.web.util.UriComponentsBuilder;
|
||||||
|
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
|
@ -33,9 +32,6 @@ public class HttpUtils {
|
||||||
@Value("${services.provide.aai.registry.password}")
|
@Value("${services.provide.aai.registry.password}")
|
||||||
private String password;
|
private String password;
|
||||||
|
|
||||||
@Value("2")
|
|
||||||
private String coid;
|
|
||||||
|
|
||||||
public JsonElement post(String path, JsonObject body) {
|
public JsonElement post(String path, JsonObject body) {
|
||||||
RestTemplate restTemplate = new RestTemplate();
|
RestTemplate restTemplate = new RestTemplate();
|
||||||
HttpHeaders headers = createHeaders(user, password);
|
HttpHeaders headers = createHeaders(user, password);
|
||||||
|
@ -70,17 +66,7 @@ public class HttpUtils {
|
||||||
return getResponseEntityAsJsonElement(responseEntity);
|
return getResponseEntityAsJsonElement(responseEntity);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<String, String> addCoId(Map<String, String> params) {
|
|
||||||
if(params == null) {
|
|
||||||
params = new HashMap<>();
|
|
||||||
}
|
|
||||||
params.put("coid", coid);
|
|
||||||
return params;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private String createUrl(String baseAddress, Map<String, String> params) {
|
private String createUrl(String baseAddress, Map<String, String> params) {
|
||||||
params = addCoId(params);
|
|
||||||
LinkedMultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>();
|
LinkedMultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>();
|
||||||
params.forEach((k, v) -> multiValueMap.put(k, Collections.singletonList(v)));
|
params.forEach((k, v) -> multiValueMap.put(k, Collections.singletonList(v)));
|
||||||
UriComponents uriComponents = UriComponentsBuilder
|
UriComponents uriComponents = UriComponentsBuilder
|
||||||
|
@ -101,11 +87,11 @@ public class HttpUtils {
|
||||||
|
|
||||||
private JsonElement getResponseEntityAsJsonElement(ResponseEntity<String> responseEntity) {
|
private JsonElement getResponseEntityAsJsonElement(ResponseEntity<String> responseEntity) {
|
||||||
|
|
||||||
if ( responseEntity == null )
|
if (responseEntity == null)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
String responseBody = responseEntity.getBody();
|
String responseBody = responseEntity.getBody();
|
||||||
if ( responseBody != null ) {
|
if (responseBody != null) {
|
||||||
logger.debug(responseBody);
|
logger.debug(responseBody);
|
||||||
try {
|
try {
|
||||||
return new JsonParser().parse(responseBody);
|
return new JsonParser().parse(responseBody);
|
||||||
|
|
|
@ -90,7 +90,9 @@ public class AuthorizationServiceImpl implements AuthorizationService {
|
||||||
aaiRegistryService.assignMemberRole(coPersonId, couId);
|
aaiRegistryService.assignMemberRole(coPersonId, couId);
|
||||||
|
|
||||||
// Add role to user current authorities
|
// Add role to user current authorities
|
||||||
authoritiesUpdater.addRole(email, roleMappingService.convertRepoIdToAuthority(resourceId));
|
for (String userId : aaiRegistryService.getUserIdentifiersByEmail(email)) {
|
||||||
|
authoritiesUpdater.addRole(userId, roleMappingService.convertRepoIdToAuthority(resourceId));
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
|
@ -115,7 +117,9 @@ public class AuthorizationServiceImpl implements AuthorizationService {
|
||||||
aaiRegistryService.removeMemberRole(coPersonId, couId, roleId);
|
aaiRegistryService.removeMemberRole(coPersonId, couId, roleId);
|
||||||
|
|
||||||
// Remove role from user current authorities
|
// Remove role from user current authorities
|
||||||
authoritiesUpdater.removeRole(email, roleMappingService.convertRepoIdToAuthority(resourceId));
|
for (String userId : aaiRegistryService.getUserIdentifiersByEmail(email)) {
|
||||||
|
authoritiesUpdater.removeRole(userId, roleMappingService.convertRepoIdToAuthority(resourceId));
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue