From 1e04e06830f005e1b07f05c27bc9e55378c5b5be Mon Sep 17 00:00:00 2001 From: chasegawa Date: Wed, 31 Aug 2022 16:20:10 -0700 Subject: [PATCH] SHIBUI-2341 Fixing logic to correctly import the XML --- .../ui/controller/EntityDescriptorController.java | 6 ++++-- .../admin/ui/domain/AttributeConsumingService.java | 11 ++++++++++- .../shibboleth/admin/ui/domain/SPSSODescriptor.java | 4 ++-- .../admin/ui/service/EntityDescriptorService.java | 2 ++ .../ui/service/JPAEntityDescriptorServiceImpl.java | 10 ++++++++-- .../controller/EntityDescriptorControllerTests.groovy | 8 ++++++-- testbed/postgres/docker-compose.yml | 2 ++ 7 files changed, 34 insertions(+), 9 deletions(-) diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorController.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorController.java index c2d9b81a0..a31838f1a 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorController.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorController.java @@ -9,6 +9,7 @@ import edu.internet2.tier.shibboleth.admin.ui.opensaml.OpenSamlObjects; import edu.internet2.tier.shibboleth.admin.ui.service.EntityDescriptorService; import edu.internet2.tier.shibboleth.admin.ui.service.EntityDescriptorVersionService; +import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tags; import lombok.extern.slf4j.Slf4j; @@ -33,6 +34,7 @@ import javax.annotation.PostConstruct; import java.net.URI; import java.util.ConcurrentModificationException; +import java.util.Optional; @RestController @RequestMapping("/api") @@ -127,8 +129,8 @@ public ResponseEntity getSpecificVersion(@PathVariable String resourceId, @Pa private ResponseEntity handleUploadingEntityDescriptorXml(byte[] rawXmlBytes, String spName) throws Exception { final EntityDescriptor ed = EntityDescriptor.class.cast(openSamlObjects.unmarshalFromXml(rawXmlBytes)); ed.setServiceProviderName(spName); - - EntityDescriptorRepresentation persistedEd = entityDescriptorService.createNew(ed); + + EntityDescriptorRepresentation persistedEd = entityDescriptorService.createNewEntityDescriptorFromXMLOrigin(ed); return ResponseEntity.created(getResourceUriFor(persistedEd.getId())).body(persistedEd); } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/AttributeConsumingService.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/AttributeConsumingService.java index 632bcb888..9adb45e2e 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/AttributeConsumingService.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/AttributeConsumingService.java @@ -2,6 +2,7 @@ import lombok.EqualsAndHashCode; import org.hibernate.envers.Audited; +import org.opensaml.core.xml.XMLObject; import org.opensaml.core.xml.schema.XSBooleanValue; import javax.persistence.CascadeType; @@ -17,7 +18,6 @@ @EqualsAndHashCode(callSuper = true) @Audited public class AttributeConsumingService extends AbstractXMLObject implements org.opensaml.saml.saml2.metadata.AttributeConsumingService { - private int acsIndex; private boolean isDefault; @@ -93,4 +93,13 @@ public List getRequestedAtt public void setRequestedAttributes(List requestedAttributes) { this.requestedAttributes = requestedAttributes; } + + @Override + public List getOrderedChildren() { + List childXMLObjects = new ArrayList<>(); + childXMLObjects.addAll(serviceNames); + childXMLObjects.addAll(serviceDescriptions); + childXMLObjects.addAll(requestedAttributes); + return childXMLObjects; + } } \ No newline at end of file diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/SPSSODescriptor.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/SPSSODescriptor.java index e90542c5a..52d37bf1f 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/SPSSODescriptor.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/SPSSODescriptor.java @@ -95,7 +95,7 @@ public AssertionConsumerService getDefaultAssertionConsumerService() { @Override public List getAttributeConsumingServices() { - return Lists.newArrayList(attributeConsumingServices); + return (List)(List) attributeConsumingServices; } public void setAttributeConsumingServices(List attributeConsumingServices) { @@ -124,4 +124,4 @@ public List getOrderedChildren() { public Optional getOptionalExtensions() { return Optional.ofNullable(this.getExtensions()); } -} +} \ No newline at end of file diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EntityDescriptorService.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EntityDescriptorService.java index b2bf96ac3..ed3f7be0e 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EntityDescriptorService.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EntityDescriptorService.java @@ -114,4 +114,6 @@ EntityDescriptorRepresentation update(EntityDescriptorRepresentation edRepresent void updateDescriptorFromRepresentation(final org.opensaml.saml.saml2.metadata.EntityDescriptor entityDescriptor, final EntityDescriptorRepresentation representation); EntityDescriptorRepresentation updateEntityDescriptorEnabledStatus(String resourceId, boolean status) throws EntityNotFoundException, ForbiddenException; + + EntityDescriptorRepresentation createNewEntityDescriptorFromXMLOrigin(EntityDescriptor ed); } \ No newline at end of file diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/JPAEntityDescriptorServiceImpl.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/JPAEntityDescriptorServiceImpl.java index f6c419b31..be79e3097 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/JPAEntityDescriptorServiceImpl.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/JPAEntityDescriptorServiceImpl.java @@ -102,11 +102,17 @@ public EntityDescriptor createDescriptorFromRepresentation(final EntityDescripto } @Override - public EntityDescriptorRepresentation createNew(EntityDescriptor ed) - throws ForbiddenException, ObjectIdExistsException, InvalidPatternMatchException { + public EntityDescriptorRepresentation createNew(EntityDescriptor ed) throws ForbiddenException, ObjectIdExistsException, InvalidPatternMatchException { return createNew(createRepresentationFromDescriptor(ed)); } + @Override + public EntityDescriptorRepresentation createNewEntityDescriptorFromXMLOrigin(EntityDescriptor ed) { + ed.setIdOfOwner(userService.getCurrentUserGroup().getOwnerId()); + EntityDescriptor savedEntity = entityDescriptorRepository.save(ed); + return createRepresentationFromDescriptor(savedEntity); + } + @Override public EntityDescriptorRepresentation createNew(EntityDescriptorRepresentation edRep) throws ForbiddenException, ObjectIdExistsException, InvalidPatternMatchException { diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorControllerTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorControllerTests.groovy index 8861d1613..94de774b3 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorControllerTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorControllerTests.groovy @@ -530,6 +530,11 @@ class EntityDescriptorControllerTests extends AbstractBaseDataJpaTest { urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified + + Shrink Space + Shrink Space Authenticator + + ''' @@ -551,7 +556,6 @@ class EntityDescriptorControllerTests extends AbstractBaseDataJpaTest { .andExpect(jsonPath("\$.assertionConsumerServices[0].binding").value("urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST")) .andExpect(jsonPath("\$.assertionConsumerServices[0].makeDefault").value(false)) .andExpect(jsonPath("\$.assertionConsumerServices[0].locationUrl").value("https://test.scaldingspoon.org/test1/acs")) - } @WithMockAdmin @@ -691,4 +695,4 @@ class EntityDescriptorControllerTests extends AbstractBaseDataJpaTest { e instanceof ConcurrentModificationException } } -} +} \ No newline at end of file diff --git a/testbed/postgres/docker-compose.yml b/testbed/postgres/docker-compose.yml index c66b591a8..1a3dd4d82 100644 --- a/testbed/postgres/docker-compose.yml +++ b/testbed/postgres/docker-compose.yml @@ -18,9 +18,11 @@ services: - 8080:8080 - 5005:5005 - 8443:8443 + - 8000:8000 volumes: - ./conf:/conf - ./conf/application.yml:/application.yml + entrypoint: ["/usr/bin/java", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000", "-jar", "app.war"] networks: - front depends_on: