diff --git a/pom.xml b/pom.xml
index b69f646..229a16f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,7 +8,7 @@
1.0.0
dnet-role-management
- 1.0.1-SNAPSHOT
+ 1.0.2-SNAPSHOT
war
dnet-role-management
DNET Role Management API. Integrated with AAI Registry Service
diff --git a/src/main/java/eu/dnetlib/dnetrolemanagement/controllers/HealthController.java b/src/main/java/eu/dnetlib/dnetrolemanagement/controllers/HealthController.java
new file mode 100644
index 0000000..1668559
--- /dev/null
+++ b/src/main/java/eu/dnetlib/dnetrolemanagement/controllers/HealthController.java
@@ -0,0 +1,17 @@
+package eu.dnetlib.dnetrolemanagement.controllers;
+
+import org.apache.log4j.Logger;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class HealthController {
+ private final Logger log = Logger.getLogger(this.getClass());
+
+ @RequestMapping(value = {"", "/health_check"}, method = RequestMethod.GET)
+ public String hello() {
+ log.debug("Hello from role management!");
+ return "Hello from Role management!";
+ }
+}
diff --git a/src/main/java/eu/dnetlib/dnetrolemanagement/controllers/SuperAdminController.java b/src/main/java/eu/dnetlib/dnetrolemanagement/controllers/SuperAdminController.java
index a09cc7a..57d4afb 100644
--- a/src/main/java/eu/dnetlib/dnetrolemanagement/controllers/SuperAdminController.java
+++ b/src/main/java/eu/dnetlib/dnetrolemanagement/controllers/SuperAdminController.java
@@ -2,24 +2,33 @@ package eu.dnetlib.dnetrolemanagement.controllers;
import eu.dnetlib.dnetrolemanagement.entities.Response;
import eu.dnetlib.dnetrolemanagement.exception.ConflictException;
+import eu.dnetlib.dnetrolemanagement.exception.ResourceNotFoundException;
import eu.dnetlib.dnetrolemanagement.services.RegistryService;
+import eu.dnetlib.dnetrolemanagement.utils.AuthoritiesUpdater;
+import eu.dnetlib.dnetrolemanagement.utils.AuthoritiesUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.HttpClientErrorException;
+import java.util.List;
+
@RestController
@RequestMapping("/super")
public class SuperAdminController {
private final RegistryService registryService;
+ private final AuthoritiesUpdater authoritiesUpdater;
@Autowired
- public SuperAdminController(RegistryService registryService) {
+ public SuperAdminController(RegistryService registryService, AuthoritiesUpdater authoritiesUpdater) {
this.registryService = registryService;
+ this.authoritiesUpdater = authoritiesUpdater;
}
/**
@@ -38,4 +47,27 @@ public class SuperAdminController {
throw new ConflictException("This role already exists");
}
}
+
+ /**
+ * Assign portal admin role to user with @email
+ *
+ */
+ @RequestMapping(value = "/assign", method = RequestMethod.POST)
+ public ResponseEntity assignRole(@RequestParam(required = false) String email) {
+ List coPersonIds = registryService.getCoPersonIdsByEmail(email);
+ if (coPersonIds.size() > 0) {
+ Integer couId = registryService.getCouId(AuthoritiesUtils.portalAdminRole());
+ if (couId != null) {
+ coPersonIds.forEach(coPersonId -> {
+ String identifier = registryService.getIdentifierByCoPersonId(coPersonId);
+ Integer role = registryService.getRoleId(coPersonId, couId);
+ registryService.assignMemberRole(coPersonId, couId, role);
+ authoritiesUpdater.addRole(identifier, new SimpleGrantedAuthority(AuthoritiesUtils.PORTAL_ADMIN));
+ });
+ return ResponseEntity.ok(new Response("Role has been assigned successfully"));
+ }
+ throw new ResourceNotFoundException("Role has not been found");
+ }
+ throw new ResourceNotFoundException("User has not been found");
+ }
}
diff --git a/src/main/java/eu/dnetlib/dnetrolemanagement/services/RegistryService.java b/src/main/java/eu/dnetlib/dnetrolemanagement/services/RegistryService.java
index 41872cc..dde4dae 100644
--- a/src/main/java/eu/dnetlib/dnetrolemanagement/services/RegistryService.java
+++ b/src/main/java/eu/dnetlib/dnetrolemanagement/services/RegistryService.java
@@ -287,7 +287,7 @@ public class RegistryService {
*/
public void assignMemberRole(Integer coPersonId, Integer couId, Integer id) {
if (id != null) {
- httpUtils.put("co_person_roles/" + id.toString() + ".json", jsonUtils.coPersonRoles(coPersonId, couId, "Active"));
+ httpUtils.put("co_person_roles/" + id + ".json", jsonUtils.coPersonRoles(coPersonId, couId, "Active"));
} else {
httpUtils.post("co_person_roles.json", jsonUtils.coPersonRoles(coPersonId, couId, "Active"));
}
@@ -298,7 +298,7 @@ public class RegistryService {
*/
public void removeMemberRole(Integer coPersonId, Integer couId, Integer id) {
if (id != null) {
- httpUtils.put("co_person_roles/" + id.toString() + ".json", jsonUtils.coPersonRoles(coPersonId, couId, "Deleted"));
+ httpUtils.put("co_person_roles/" + id + ".json", jsonUtils.coPersonRoles(coPersonId, couId, "Deleted"));
}
}
@@ -366,7 +366,7 @@ public class RegistryService {
}
}
if (id != null) {
- httpUtils.delete("co_group_members/" + id.toString() + ".json");
+ httpUtils.delete("co_group_members/" + id + ".json");
}
}
}
diff --git a/src/main/java/eu/dnetlib/dnetrolemanagement/utils/AuthoritiesUpdater.java b/src/main/java/eu/dnetlib/dnetrolemanagement/utils/AuthoritiesUpdater.java
index ceaee43..8e7dc32 100644
--- a/src/main/java/eu/dnetlib/dnetrolemanagement/utils/AuthoritiesUpdater.java
+++ b/src/main/java/eu/dnetlib/dnetrolemanagement/utils/AuthoritiesUpdater.java
@@ -26,7 +26,7 @@ public class AuthoritiesUpdater extends HttpSessionSecurityContextRepository {
@Autowired
FindByIndexNameSessionRepository sessions;
- public void update(String id, Collection extends GrantedAuthority> authorities) {
+ public void update(String id, Update update) {
if (sessions != null) {
Map map = sessions.
findByIndexNameAndIndexValue(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME, id);
@@ -38,7 +38,7 @@ public class AuthoritiesUpdater extends HttpSessionSecurityContextRepository {
if (authentication instanceof OIDCAuthenticationToken) {
OIDCAuthenticationToken authOIDC = (OIDCAuthenticationToken) authentication;
securityContext.setAuthentication(new OIDCAuthenticationToken(authOIDC.getSub(), authOIDC.getIssuer(),
- authOIDC.getUserInfo(), authorities, authOIDC.getIdToken(),
+ authOIDC.getUserInfo(), update.authorities(authOIDC.getAuthorities()), authOIDC.getIdToken(),
authOIDC.getAccessTokenValue(), authOIDC.getRefreshTokenValue()));
session.setAttribute(SPRING_SECURITY_CONTEXT_KEY, securityContext);
sessions.save(session);
@@ -49,11 +49,6 @@ public class AuthoritiesUpdater extends HttpSessionSecurityContextRepository {
}
}
- public void update(String id, Update update) {
- Collection extends GrantedAuthority> authorities = update.authorities(SecurityContextHolder.getContext().getAuthentication().getAuthorities());
- this.update(id, authorities);
- }
-
public void addRole(String id, GrantedAuthority role) {
this.update(id, old -> {
HashSet authorities = new HashSet<>(old);
diff --git a/src/main/java/eu/dnetlib/dnetrolemanagement/utils/AuthoritiesUtils.java b/src/main/java/eu/dnetlib/dnetrolemanagement/utils/AuthoritiesUtils.java
index 717cc96..bc61874 100644
--- a/src/main/java/eu/dnetlib/dnetrolemanagement/utils/AuthoritiesUtils.java
+++ b/src/main/java/eu/dnetlib/dnetrolemanagement/utils/AuthoritiesUtils.java
@@ -6,6 +6,12 @@ import org.springframework.security.core.context.SecurityContextHolder;
public class AuthoritiesUtils {
+ public static String PORTAL_ADMIN = "PORTAL_ADMINISTRATOR";
+
+ public static String portalAdminRole() {
+ return "Portal Administrator";
+ }
+
/**
* Type = FUNDER | COMMUNITY | INSTITUTION | PROJECT etc.
*/