From 81fd5bf68ba471a5cc33fdfb89eb08649fd1b007 Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Tue, 16 Oct 2018 14:08:30 -0700 Subject: [PATCH] [SHIBUI-906] Updated building of overrides from attributes. Now, we use the override property to get the property name from the attribute name.. and we skip any attributes that aren't defined in the yaml. --- .../JPAEntityDescriptorServiceImpl.java | 14 +++++++------- .../util/ModelRepresentationConversions.java | 18 ++++++++---------- 2 files changed, 15 insertions(+), 17 deletions(-) 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 9ca15a77e..4807e336a 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 @@ -25,6 +25,7 @@ import edu.internet2.tier.shibboleth.admin.ui.domain.OrganizationName; import edu.internet2.tier.shibboleth.admin.ui.domain.OrganizationURL; import edu.internet2.tier.shibboleth.admin.ui.domain.PrivacyStatementURL; +import edu.internet2.tier.shibboleth.admin.ui.domain.RelyingPartyOverrideProperty; import edu.internet2.tier.shibboleth.admin.ui.domain.SPSSODescriptor; import edu.internet2.tier.shibboleth.admin.ui.domain.SingleLogoutService; import edu.internet2.tier.shibboleth.admin.ui.domain.UIInfo; @@ -37,7 +38,6 @@ import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.LogoutEndpointRepresentation; import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.MduiRepresentation; import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.OrganizationRepresentation; -import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.RelyingPartyOverridesRepresentation; import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.SecurityInfoRepresentation; import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.ServiceProviderSsoDescriptorRepresentation; import edu.internet2.tier.shibboleth.admin.ui.opensaml.OpenSamlObjects; @@ -57,12 +57,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; -import static edu.internet2.tier.shibboleth.admin.util.ModelRepresentationConversions.getBooleanValueOfAttribute; -import static edu.internet2.tier.shibboleth.admin.util.ModelRepresentationConversions.getStringListOfAttributeValues; -import static edu.internet2.tier.shibboleth.admin.util.ModelRepresentationConversions.getStringListValueOfAttribute; - /** * Default implementation of {@link EntityDescriptorService} * @@ -496,8 +493,11 @@ public EntityDescriptorRepresentation createRepresentationFromDescriptor(org.ope for (org.opensaml.saml.saml2.core.Attribute attribute : ((EntityAttributes) ed.getExtensions().getUnknownXMLObjects(EntityAttributes.DEFAULT_ELEMENT_NAME).get(0)).getAttributes()) { Attribute jpaAttribute = (Attribute) attribute; - relyingPartyOverrides.put(ModelRepresentationConversions.getAttributeNameFromFriendlyName(jpaAttribute.getFriendlyName()), - jpaAttribute.getAttributeValues()); + Optional override = ModelRepresentationConversions.getOverrideByAttributeName(jpaAttribute.getName()); + if (override.isPresent()) { + relyingPartyOverrides.put(((RelyingPartyOverrideProperty)override.get()).getName(), + jpaAttribute.getAttributeValues()); + } } representation.setRelyingPartyOverrides(relyingPartyOverrides); diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/util/ModelRepresentationConversions.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/util/ModelRepresentationConversions.java index 13d4d6587..3edb7f3ee 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/util/ModelRepresentationConversions.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/util/ModelRepresentationConversions.java @@ -78,14 +78,9 @@ public static List getStringListValueOfAttribute(Attribute attribute) { return getStringListOfAttributeValues(attribute.getAttributeValues()); } - public static String getAttributeNameFromFriendlyName(String attributeFriendlyName) { - Optional override = customPropertiesConfiguration.getOverrides().stream().filter(it -> it.getAttributeFriendlyName().equals(attributeFriendlyName)).findFirst(); - if (!override.isPresent()) { - // WAT? Somehow we persisted a property that we're not configured for. This shouldn't happen. - throw new RuntimeException("Persisted attribute with friendlyName \"" + attributeFriendlyName + "\" doesn't have a matching configuration in application.yml!"); - } - return ((RelyingPartyOverrideProperty)override.get()).getName(); - } + public static Optional getOverrideByAttributeName(String attributeName) { + return customPropertiesConfiguration.getOverrides().stream().filter(it -> it.getAttributeName().equals(attributeName)).findFirst(); + } public static Map getRelyingPartyOverridesRepresentationFromAttributeList(List attributeList) { Map relyingPartyOverrides = new HashMap<>(); @@ -93,8 +88,11 @@ public static Map getRelyingPartyOverridesRepresentationFromAttr for (org.opensaml.saml.saml2.core.Attribute attribute : attributeList) { Attribute jpaAttribute = (Attribute) attribute; - relyingPartyOverrides.put(getAttributeNameFromFriendlyName(jpaAttribute.getFriendlyName()), - getOverrideFromAttribute(jpaAttribute)); + Optional override = getOverrideByAttributeName(jpaAttribute.getName()); + if (override.isPresent()) { + relyingPartyOverrides.put(((RelyingPartyOverrideProperty)override.get()).getName(), + getOverrideFromAttribute(jpaAttribute)); + } } return relyingPartyOverrides;