diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/DynamicRegistrationController.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/DynamicRegistrationController.java index 83460d02e..661becc21 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/DynamicRegistrationController.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/DynamicRegistrationController.java @@ -51,6 +51,21 @@ public ResponseEntity getAll() throws ForbiddenException { return ResponseEntity.ok(dynamicRegistrationService.getAllDynamicRegistrationsBasedOnUserAccess()); } + @GetMapping("/DynamicRegistrations/needsApproval") + @Transactional + public ResponseEntity getAllNeedingApproval() throws ForbiddenException { + return ResponseEntity.ok(dynamicRegistrationService.getAllDynamicRegistrationsNeedingApprovalBasedOnUserAccess()); + } + + /** + * @throws ForbiddenException This call is used for the admin needs action list, therefore the user must be an admin + */ + @Transactional + @GetMapping(value = "/EntityDescriptor/disabledSources") + public ResponseEntity getDisabledMetadataSources() throws ForbiddenException { + return ResponseEntity.ok(dynamicRegistrationService.getDisabledDynamicRegistrations()); + } + @DeleteMapping(value = "/DynamicRegistration/{resourceId}") @Transactional public ResponseEntity deleteOne(@PathVariable String resourceId) throws ForbiddenException, PersistentEntityNotFound { diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/repository/EntityDescriptorRepository.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/repository/EntityDescriptorRepository.java index 1cfc5ca0b..7fb999568 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/repository/EntityDescriptorRepository.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/repository/EntityDescriptorRepository.java @@ -42,8 +42,7 @@ public interface EntityDescriptorRepository extends JpaRepository getEntityDescriptorsNeedingEnabling(); /** diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/permission/ShibUiPermissionDelegate.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/permission/ShibUiPermissionDelegate.java index 8fd1efaaf..077380de7 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/permission/ShibUiPermissionDelegate.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/permission/ShibUiPermissionDelegate.java @@ -57,6 +57,16 @@ public Collection getPersistentEntities(Authentication ignored, ShibUiPermissibl } case dynamicRegistrationInfo: switch (permissionType) { + case approve: + if (!hasPermission(ignored, null, PermissionType.approve)) { + throw new ForbiddenException("User has no access rights to get a list of : " + shibUiType); + } + return getAllDynamicRegistrationInfoObjectsNeedingApprovalBasedOnUserAccess(); + case enable: + if (!hasPermission(ignored, null, PermissionType.enable)) { + throw new ForbiddenException("User has no access rights to get a list of : " + shibUiType); + } + return dynamicRegistrationInfoRepository.getDynamicRegistrationsNeedingEnabling(); case fetch: if (!hasPermission(ignored, null, PermissionType.fetch)) { throw new ForbiddenException("User has no access rights to get a list of : " + shibUiType); @@ -67,6 +77,11 @@ public Collection getPersistentEntities(Authentication ignored, ShibUiPermissibl return null; } + private List getAllDynamicRegistrationInfoObjectsNeedingApprovalBasedOnUserAccess() { + List groupsToApprove = userService.getGroupsCurrentUserCanApprove(); + return dynamicRegistrationInfoRepository.getAllNeedingApproval(groupsToApprove); + } + private List getAllDynamicRegistrationInfoObjectsBasedOnUserAccess() { if (userService.currentUserIsAdmin()) { return dynamicRegistrationInfoRepository.findAll(); diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/repository/DynamicRegistrationInfoRepository.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/repository/DynamicRegistrationInfoRepository.java index fcef188a9..8dfbaa3eb 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/repository/DynamicRegistrationInfoRepository.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/repository/DynamicRegistrationInfoRepository.java @@ -2,11 +2,23 @@ import edu.internet2.tier.shibboleth.admin.ui.domain.oidc.DynamicRegistrationInfo; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import java.util.Collection; import java.util.List; public interface DynamicRegistrationInfoRepository extends JpaRepository { List findAllByIdOfOwner(String idOfOwner); DynamicRegistrationInfo findByResourceId(String id); + + @Query(value = "SELECT dri FROM DynamicRegistrationInfo dri " + + " WHERE dri.idOfOwner IN (:groupIds)" + + " AND dri.enabled = false" + + " AND dri.approved = false") + List getAllNeedingApproval(@Param("groupIds") List groupIds); + + @Query(value = "SELECT dri FROM DynamicRegistrationInfo dri WHERE dri.enabled = false") + List getDynamicRegistrationsNeedingEnabling(); } \ No newline at end of file diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/DynamicRegistrationService.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/DynamicRegistrationService.java index bb4fe2cbf..8703fdb33 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/DynamicRegistrationService.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/DynamicRegistrationService.java @@ -1,10 +1,13 @@ package edu.internet2.tier.shibboleth.admin.ui.service; import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.DynamicRegistrationRepresentation; +import edu.internet2.tier.shibboleth.admin.ui.domain.oidc.DynamicRegistrationInfo; import edu.internet2.tier.shibboleth.admin.ui.exception.ForbiddenException; import edu.internet2.tier.shibboleth.admin.ui.exception.ObjectIdExistsException; import edu.internet2.tier.shibboleth.admin.ui.exception.PersistentEntityNotFound; +import java.util.List; + public interface DynamicRegistrationService { DynamicRegistrationRepresentation approveDynamicRegistration(String resourceId, boolean status) throws PersistentEntityNotFound, ForbiddenException; @@ -15,7 +18,11 @@ DynamicRegistrationRepresentation approveDynamicRegistration(String resourceId, DynamicRegistrationRepresentation enableDynamicRegistration(String resourceId) throws PersistentEntityNotFound, ForbiddenException; - Object getAllDynamicRegistrationsBasedOnUserAccess() throws ForbiddenException; + List getAllDynamicRegistrationsBasedOnUserAccess() throws ForbiddenException; + + List getAllDynamicRegistrationsNeedingApprovalBasedOnUserAccess() throws ForbiddenException; + + List getDisabledDynamicRegistrations() throws ForbiddenException; DynamicRegistrationRepresentation update(DynamicRegistrationRepresentation dynRegRepresentation) throws PersistentEntityNotFound, ForbiddenException; diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/JPADynamicRegistrationServiceImpl.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/JPADynamicRegistrationServiceImpl.java index 6da71ff2c..6e7c94e7c 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/JPADynamicRegistrationServiceImpl.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/JPADynamicRegistrationServiceImpl.java @@ -1,8 +1,6 @@ package edu.internet2.tier.shibboleth.admin.ui.service; -import edu.internet2.tier.shibboleth.admin.ui.domain.EntityDescriptor; import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.DynamicRegistrationRepresentation; -import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.EntityDescriptorRepresentation; import edu.internet2.tier.shibboleth.admin.ui.domain.oidc.DynamicRegistrationInfo; import edu.internet2.tier.shibboleth.admin.ui.exception.ForbiddenException; import edu.internet2.tier.shibboleth.admin.ui.exception.ObjectIdExistsException; @@ -26,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.ConcurrentModificationException; import java.util.List; @@ -103,6 +102,12 @@ public DynamicRegistrationRepresentation createNew(DynamicRegistrationRepresenta return new DynamicRegistrationRepresentation(repository.save(dri)); } + private List convertToRepresentations(List temp) { + List result = new ArrayList<>(); + temp.forEach(dri -> result.add(new DynamicRegistrationRepresentation(dri))); + return result; + } + @Override public void delete(String resourceId) throws ForbiddenException, PersistentEntityNotFound { if (!shibUiAuthorizationDelegate.hasPermission(userService.getCurrentUserAuthentication(), null, PermissionType.admin)) { @@ -137,8 +142,21 @@ private boolean entityExists(String id) { } @Override - public List getAllDynamicRegistrationsBasedOnUserAccess() throws ForbiddenException { - return (List) shibUiAuthorizationDelegate.getPersistentEntities(userService.getCurrentUserAuthentication(), ShibUiPermissibleType.dynamicRegistrationInfo, PermissionType.fetch); + public List getAllDynamicRegistrationsBasedOnUserAccess() throws ForbiddenException { + List temp = (List) shibUiAuthorizationDelegate.getPersistentEntities(userService.getCurrentUserAuthentication(), ShibUiPermissibleType.dynamicRegistrationInfo, PermissionType.fetch); + return convertToRepresentations(temp); + } + + @Override + public List getAllDynamicRegistrationsNeedingApprovalBasedOnUserAccess() throws ForbiddenException { + List temp = (List) shibUiAuthorizationDelegate.getPersistentEntities(userService.getCurrentUserAuthentication(), ShibUiPermissibleType.dynamicRegistrationInfo, PermissionType.approve); + return convertToRepresentations(temp); + } + + @Override + public List getDisabledDynamicRegistrations() throws ForbiddenException { + List temp = (List) shibUiAuthorizationDelegate.getPersistentEntities(userService.getCurrentUserAuthentication(), ShibUiPermissibleType.dynamicRegistrationInfo, PermissionType.enable); + return convertToRepresentations(temp); } @Override