Skip to content

Commit

Permalink
SHIBUI-979 WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
dima767 committed Nov 26, 2018
1 parent 584630f commit 3a55e5a
Show file tree
Hide file tree
Showing 4 changed files with 102 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
package edu.internet2.tier.shibboleth.admin.ui.domain.filters;

import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

import javax.persistence.ElementCollection;
import javax.persistence.Embeddable;
import javax.persistence.Entity;
import javax.persistence.OrderColumn;
import java.util.List;

@Entity
@EqualsAndHashCode(callSuper = true)
Expand All @@ -17,4 +23,26 @@ public class NameIdFormatFilter extends MetadataFilter {
public NameIdFormatFilter() {
type = "NameIDFormat";
}

private Boolean removeExistingFormats = false;

@ElementCollection
@OrderColumn
private List<FormatAndTarget> formats;

@Embeddable
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@EqualsAndHashCode
public static class FormatAndTarget {
private String format;
private String value;
private Type type;

private enum Type {
ENTITY, CONDITION_REF, CONDITION_SCRIPT
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -175,4 +175,42 @@ class PolymorphicFiltersJacksonHandlingTests extends Specification {
EntityAttributesFilter.class.cast(filter).entityAttributesFilterTarget.entityAttributesFilterTargetType.name() == 'ENTITY'
EntityAttributesFilter.class.cast(filter).entityAttributesFilterTarget.value == ['GATCCLk32V']
}

def "Correct polymorphic serialization of NameIdFormatFilter"() {
given:
def givenFilterJson = """
{
"@type" : "NameIDFormat",
"name" : "NameIDFormat",
"resourceId" : "20147f53-e368-4911-921a-2e24598e37f8",
"filterEnabled" : true,
"removeExistingFormats" : false,
"formats" : [ {
"format" : "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent",
"value" : "https://sp1.example.org",
"type" : "ENTITY"
}, {
"format" : "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress",
"value" : "https://sp2.example.org",
"type" : "ENTITY"
}, {
"format" : "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress",
"value" : "input.getEntityID().equals(\\"https://sp1.example.org\\");",
"type" : "CONDITION_SCRIPT"
} ]
}"""

when:
def deSerializedFilter = mapper.readValue(givenFilterJson, MetadataFilter)
def json = mapper.writeValueAsString(deSerializedFilter)
println(json)
def roundTripFilter = mapper.readValue(json, MetadataFilter)

then:
roundTripFilter == deSerializedFilter

and:
deSerializedFilter instanceof NameIdFormatFilter
roundTripFilter instanceof NameIdFormatFilter
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import edu.internet2.tier.shibboleth.admin.ui.configuration.Internationalization
import edu.internet2.tier.shibboleth.admin.ui.configuration.SearchConfiguration
import edu.internet2.tier.shibboleth.admin.ui.configuration.TestConfiguration
import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilter
import edu.internet2.tier.shibboleth.admin.ui.util.TestObjectGenerator
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.autoconfigure.domain.EntityScan
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest
Expand All @@ -15,6 +16,8 @@ import spock.lang.Specification

import javax.persistence.EntityManager

import static edu.internet2.tier.shibboleth.admin.ui.util.TestObjectGenerator.*

@DataJpaTest
@ContextConfiguration(classes=[CoreShibUiConfiguration, SearchConfiguration, TestConfiguration, InternationalizationConfiguration])
@EnableJpaRepositories(basePackages = ["edu.internet2.tier.shibboleth.admin.ui"])
Expand Down Expand Up @@ -70,4 +73,16 @@ class FilterRepositoryTests extends Specification {

item1.hashCode() == item2.hashCode()
}

def "NameIdFormatFilter is able to be persisted to RDBMS"() {
given:
def nameIdFormatFilter = TestObjectGenerator.nameIdFormatFilter()

when:
def persistedFilter = repositoryUnderTest.save(nameIdFormatFilter)

then:
persistedFilter.audId > 0L
persistedFilter.formats.size() == 3
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ import org.opensaml.saml.saml2.metadata.Organization
import java.nio.file.Files
import java.util.function.Supplier

import static edu.internet2.tier.shibboleth.admin.ui.domain.filters.NameIdFormatFilter.*
import static edu.internet2.tier.shibboleth.admin.ui.domain.filters.NameIdFormatFilter.FormatAndTarget.*
import static edu.internet2.tier.shibboleth.admin.ui.domain.filters.NameIdFormatFilter.FormatAndTarget.Type.*
import static edu.internet2.tier.shibboleth.admin.ui.domain.filters.NameIdFormatFilter.FormatAndTarget.Type.*

/**
* @author Bill Smith (wsmith@unicon.net)
*/
Expand Down Expand Up @@ -169,6 +174,7 @@ class TestObjectGenerator {
it
}
}

EntityRoleWhiteListFilter entityRoleWhitelistFilter() {
new EntityRoleWhiteListFilter().with {
it.name = 'EntityRoleWhiteList'
Expand Down Expand Up @@ -213,9 +219,20 @@ class TestObjectGenerator {
}
}

NameIdFormatFilter nameIdFormatFilter() {
static NameIdFormatFilter nameIdFormatFilter() {
return new NameIdFormatFilter().with {
it.name = "NameIDFormat"
it.formats = [
new FormatAndTarget(
format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
type: Type.ENTITY, value: 'https://sp1.example.org'),
new FormatAndTarget(
format: 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress',
type: Type.ENTITY, value: 'https://sp2.example.org'),
new FormatAndTarget(
format: 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress',
type: Type.CONDITION_SCRIPT, value: 'input.getEntityID().equals("https://sp1.example.org");')
]
it
}
}
Expand Down Expand Up @@ -276,12 +293,12 @@ class TestObjectGenerator {
List<Attribute> buildAttributesList() {
List<Attribute> attributes = new ArrayList<>()

customPropertiesConfiguration.getOverrides().each {override ->
customPropertiesConfiguration.getOverrides().each { override ->
if (generator.randomBoolean()) {
switch (ModelRepresentationConversions.AttributeTypes.valueOf(override.getDisplayType().toUpperCase())) {
case ModelRepresentationConversions.AttributeTypes.BOOLEAN:
if (override.getPersistType() != null &&
override.getPersistType() != override.getDisplayType()) {
override.getPersistType() != override.getDisplayType()) {
attributes.add(attributeUtility.createAttributeWithStringValues(override.getAttributeName(), override.getAttributeFriendlyName(), generator.randomString(30)))
} else {
attributes.add(attributeUtility.createAttributeWithBooleanValue(override.getAttributeName(), override.getAttributeFriendlyName(), generator.randomBoolean()))
Expand Down Expand Up @@ -326,7 +343,7 @@ class TestObjectGenerator {
switch (ModelRepresentationConversions.AttributeTypes.valueOf(override.getDisplayType().toUpperCase())) {
case ModelRepresentationConversions.AttributeTypes.BOOLEAN:
if (override.getPersistType() != null &&
override.getPersistType() != override.getDisplayType()) {
override.getPersistType() != override.getDisplayType()) {
representation.put(override.getName(), generator.randomString(30))
} else {
representation.put(override.getName(), generator.randomBoolean())
Expand Down

0 comments on commit 3a55e5a

Please sign in to comment.