diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/PersistentEntityControllerExceptionHandler.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/PersistentEntityControllerExceptionHandler.java index eeb7223f4..7c6fc0182 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/PersistentEntityControllerExceptionHandler.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/PersistentEntityControllerExceptionHandler.java @@ -2,6 +2,7 @@ import edu.internet2.tier.shibboleth.admin.ui.exception.ForbiddenException; import edu.internet2.tier.shibboleth.admin.ui.exception.InvalidPatternMatchException; +import edu.internet2.tier.shibboleth.admin.ui.exception.MissingRequiredFieldsException; import edu.internet2.tier.shibboleth.admin.ui.exception.ObjectIdExistsException; import edu.internet2.tier.shibboleth.admin.ui.exception.PersistentEntityNotFound; import org.springframework.http.HttpHeaders; @@ -46,4 +47,9 @@ public ResponseEntity handleObjectIdExistsException(ObjectIdExistsException e String.format("The persistent entity with id [%s] already exists.", e.getMessage()))); } + + @ExceptionHandler({ MissingRequiredFieldsException.class }) + public ResponseEntity handleMissingRequiredFieldsException(MissingRequiredFieldsException e, WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ErrorResponse(HttpStatus.BAD_REQUEST, e.getMessage())); + } } \ No newline at end of file diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/exception/MissingRequiredFieldsException.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/exception/MissingRequiredFieldsException.java new file mode 100644 index 000000000..6e046cefa --- /dev/null +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/exception/MissingRequiredFieldsException.java @@ -0,0 +1,7 @@ +package edu.internet2.tier.shibboleth.admin.ui.exception; + +public class MissingRequiredFieldsException extends Exception { + public MissingRequiredFieldsException(String entityId) { + super(entityId); + } +} \ No newline at end of file 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 18a1be0ef..1e613b930 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 @@ -3,6 +3,7 @@ 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.MissingRequiredFieldsException; import edu.internet2.tier.shibboleth.admin.ui.exception.ObjectIdExistsException; import edu.internet2.tier.shibboleth.admin.ui.exception.PersistentEntityNotFound; import edu.internet2.tier.shibboleth.admin.ui.exception.UnsupportedShibUiOperationException; @@ -83,11 +84,15 @@ private DynamicRegistrationRepresentation changeApproveStatusOfDynamicRepresenta } @Override - public DynamicRegistrationRepresentation createNew(DynamicRegistrationRepresentation dynRegRepresentation) throws ObjectIdExistsException { + public DynamicRegistrationRepresentation createNew(DynamicRegistrationRepresentation dynRegRepresentation) throws ObjectIdExistsException, MissingRequiredFieldsException { if (entityExists(dynRegRepresentation.getResourceId())) { throw new ObjectIdExistsException(dynRegRepresentation.getResourceId()); } + if (StringUtils.isEmpty(dynRegRepresentation.getName()) || StringUtils.isEmpty(dynRegRepresentation.getRedirectUris())) { + throw new MissingRequiredFieldsException("Name and Redirect URIs are both required to create new Dynamic Registration"); + } + DynamicRegistrationInfo dri = dynRegRepresentation.buildDynamicRegistrationInfo(); dri.setEnabled(false); // cannot create as enabled