Skip to content

Commit

Permalink
SHIBUI-2024
Browse files Browse the repository at this point in the history
Including the entity targets for name and id filter
  • Loading branch information
chasegawa committed Aug 19, 2021
1 parent f9ff3e3 commit 0294ca3
Show file tree
Hide file tree
Showing 9 changed files with 158 additions and 89 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package edu.internet2.tier.shibboleth.admin.ui.controller;

import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilter;
import edu.internet2.tier.shibboleth.admin.ui.domain.filters.ITargetable;
import edu.internet2.tier.shibboleth.admin.ui.domain.filters.MetadataFilter;
import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver;
import edu.internet2.tier.shibboleth.admin.ui.repository.FilterRepository;
Expand Down Expand Up @@ -234,10 +235,10 @@ public ResponseEntity<?> update(@PathVariable String metadataResolverId,
* IF the filter is of type "EntityAttributes" AND the target is "ENTITY" THEN check each of the values (which are entityIds)
*/
private void validateFilterOrThrowHttp400(MetadataFilter createdFilter) {
if ("EntityAttributes".equals(createdFilter.getType())) {
EntityAttributesFilter filter = (EntityAttributesFilter) createdFilter;
if ("ENTITY".equals(filter.getEntityAttributesFilterTarget().getEntityAttributesFilterTargetType())) {
for (String entityId : filter.getEntityAttributesFilterTarget().getValue()) {
if (createdFilter instanceof ITargetable){
ITargetable filter = (ITargetable) createdFilter;
if ("ENTITY".equals(filter.getTarget().getTargetTypeValue())) {
for (String entityId : filter.getTarget().getValue()) {
if (!groupService.doesStringMatchGroupPattern(userService.getCurrentUser().getGroupId(), entityId)) {
throw HTTP_400_BAD_REQUEST_EXCEPTION.get();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,70 +8,45 @@
import lombok.ToString;
import org.hibernate.envers.Audited;

import javax.persistence.CascadeType;
import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.OrderColumn;
import javax.persistence.PostLoad;
import javax.persistence.Transient;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;

import static edu.internet2.tier.shibboleth.admin.util.ModelRepresentationConversions.getAttributeListFromAttributeReleaseList;
import static edu.internet2.tier.shibboleth.admin.util.ModelRepresentationConversions.getAttributeListFromRelyingPartyOverridesRepresentation;
import static edu.internet2.tier.shibboleth.admin.util.ModelRepresentationConversions.getAttributeReleaseListFromAttributeList;
import static edu.internet2.tier.shibboleth.admin.util.ModelRepresentationConversions.getRelyingPartyOverridesRepresentationFromAttributeList;
import static edu.internet2.tier.shibboleth.admin.util.ModelRepresentationConversions.*;

@Entity
@EqualsAndHashCode(callSuper = true, exclude={"attributeRelease", "relyingPartyOverrides"})
@EqualsAndHashCode(callSuper = true, exclude = { "attributeRelease", "relyingPartyOverrides" })
@Getter
@Setter
@ToString
@Audited
public class EntityAttributesFilter extends MetadataFilter {
public class EntityAttributesFilter extends MetadataFilter implements ITargetable {
private static final long serialVersionUID = 1L;

public EntityAttributesFilter() {
type = "EntityAttributes";
}

@OneToOne(cascade = CascadeType.ALL)
private EntityAttributesFilterTarget entityAttributesFilterTarget;

@OneToMany(cascade = CascadeType.ALL)
@OrderColumn
@JsonIgnore
private List<Attribute> attributes = new ArrayList<>();

@Transient
private List<String> attributeRelease = new ArrayList<>();

public void setAttributeRelease(List<String> attributeRelease) {
this.attributeRelease = attributeRelease;
this.rebuildAttributes();
}

@OneToOne(cascade = CascadeType.ALL)
private EntityAttributesFilterTarget entityAttributesFilterTarget;

@Transient
private Map<String, Object> relyingPartyOverrides;

public void setRelyingPartyOverrides(Map<String, Object> relyingPartyOverridesRepresentation) {
this.relyingPartyOverrides = relyingPartyOverridesRepresentation;
this.rebuildAttributes();
public EntityAttributesFilter() {
type = "EntityAttributes";
}

//TODO: yeah, I'm not too happy, either
private void rebuildAttributes() {
this.attributes.clear();
this.attributes.addAll((List<edu.internet2.tier.shibboleth.admin.ui.domain.Attribute>) (List<? extends org.opensaml.saml.saml2.core.Attribute>)getAttributeListFromAttributeReleaseList(this.attributeRelease));
this.attributes.addAll((List<edu.internet2.tier.shibboleth.admin.ui.domain.Attribute>) (List<? extends org.opensaml.saml.saml2.core.Attribute>)getAttributeListFromRelyingPartyOverridesRepresentation(this.relyingPartyOverrides));
@Override
@JsonIgnore
public IFilterTarget getTarget() {
return entityAttributesFilterTarget;
}

@PostLoad
Expand All @@ -82,15 +57,31 @@ public void intoTransientRepresentation() {
this.relyingPartyOverrides = getRelyingPartyOverridesRepresentationFromAttributeList(this.attributes);
}

//TODO: yeah, I'm not too happy, either
private void rebuildAttributes() {
this.attributes.clear();
this.attributes.addAll((List<edu.internet2.tier.shibboleth.admin.ui.domain.Attribute>) (List<? extends org.opensaml.saml.saml2.core.Attribute>) getAttributeListFromAttributeReleaseList(this.attributeRelease));
this.attributes.addAll((List<edu.internet2.tier.shibboleth.admin.ui.domain.Attribute>) (List<? extends org.opensaml.saml.saml2.core.Attribute>) getAttributeListFromRelyingPartyOverridesRepresentation(this.relyingPartyOverrides));
}

public void setAttributeRelease(List<String> attributeRelease) {
this.attributeRelease = attributeRelease;
this.rebuildAttributes();
}

public void setRelyingPartyOverrides(Map<String, Object> relyingPartyOverridesRepresentation) {
this.relyingPartyOverrides = relyingPartyOverridesRepresentation;
this.rebuildAttributes();
}

private EntityAttributesFilter updateConcreteFilterTypeData(EntityAttributesFilter filterToBeUpdated) {
filterToBeUpdated.setEntityAttributesFilterTarget(getEntityAttributesFilterTarget());
filterToBeUpdated.setRelyingPartyOverrides(getRelyingPartyOverrides());
filterToBeUpdated.setAttributeRelease(getAttributeRelease());
return filterToBeUpdated;
}

@Override
public MetadataFilter updateConcreteFilterTypeData(MetadataFilter filterToBeUpdated) {
@Override public MetadataFilter updateConcreteFilterTypeData(MetadataFilter filterToBeUpdated) {
return updateConcreteFilterTypeData((EntityAttributesFilter) filterToBeUpdated);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
package edu.internet2.tier.shibboleth.admin.ui.domain.filters;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import edu.internet2.tier.shibboleth.admin.ui.domain.AbstractAuditable;
import lombok.EqualsAndHashCode;
import org.hibernate.envers.AuditOverride;
import org.hibernate.envers.Audited;

import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.OrderColumn;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

Expand All @@ -18,10 +16,7 @@
@Audited
@AuditOverride(forClass = AbstractAuditable.class)
@JsonIgnoreProperties({"handler", "hibernateLazyInitializer"})
public class EntityAttributesFilterTarget extends AbstractAuditable {
public enum EntityAttributesFilterTargetType {
ENTITY, CONDITION_SCRIPT, CONDITION_REF, REGEX
}
public class EntityAttributesFilterTarget extends AbstractAuditable implements IFilterTarget {

private EntityAttributesFilterTargetType entityAttributesFilterTargetType;

Expand All @@ -34,14 +29,20 @@ public EntityAttributesFilterTargetType getEntityAttributesFilterTargetType() {
return entityAttributesFilterTargetType;
}

public void setEntityAttributesFilterTargetType(EntityAttributesFilterTargetType entityAttributesFilterTarget) {
this.entityAttributesFilterTargetType = entityAttributesFilterTarget;
@Override
@JsonIgnore
public String getTargetTypeValue() {
return entityAttributesFilterTargetType.name();
}

public List<String> getValue() {
return value;
}

public void setEntityAttributesFilterTargetType(EntityAttributesFilterTargetType entityAttributesFilterTarget) {
this.entityAttributesFilterTargetType = entityAttributesFilterTarget;
}

public void setSingleValue(String value) {
List<String> values = new ArrayList<>();
values.add(value);
Expand All @@ -59,4 +60,8 @@ public String toString() {
", value=" + value +
'}';
}
}

public enum EntityAttributesFilterTargetType {
ENTITY, CONDITION_SCRIPT, CONDITION_REF, REGEX
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package edu.internet2.tier.shibboleth.admin.ui.domain.filters;

import java.util.List;

public interface IFilterTarget {
String getTargetTypeValue();

List<String> getValue();

void setSingleValue(String value);

void setValue(List<String> value);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package edu.internet2.tier.shibboleth.admin.ui.domain.filters;

public interface ITargetable {
public IFilterTarget getTarget();
}
Original file line number Diff line number Diff line change
@@ -1,27 +1,22 @@
package edu.internet2.tier.shibboleth.admin.ui.domain.filters;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.OneToOne;
import javax.persistence.OrderColumn;

import org.hibernate.envers.Audited;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.hibernate.envers.Audited;

import javax.persistence.*;
import java.util.List;

@Entity
@EqualsAndHashCode(callSuper = true)
@Getter
@Setter
@ToString
@Audited
public class NameIdFormatFilter extends MetadataFilter {
public class NameIdFormatFilter extends MetadataFilter implements ITargetable {

public NameIdFormatFilter() {
type = "NameIDFormat";
Expand All @@ -36,6 +31,12 @@ public NameIdFormatFilter() {
@OneToOne(cascade = CascadeType.ALL)
private NameIdFormatFilterTarget nameIdFormatFilterTarget;

@Override
@JsonIgnore
public IFilterTarget getTarget() {
return nameIdFormatFilterTarget;
}

private NameIdFormatFilter updateConcreteFilterTypeData(NameIdFormatFilter filterToBeUpdated) {
filterToBeUpdated.setRemoveExistingFormats(getRemoveExistingFormats());
filterToBeUpdated.setFormats(getFormats());
Expand All @@ -47,5 +48,4 @@ private NameIdFormatFilter updateConcreteFilterTypeData(NameIdFormatFilter filte
public MetadataFilter updateConcreteFilterTypeData(MetadataFilter filterToBeUpdated) {
return updateConcreteFilterTypeData((NameIdFormatFilter) filterToBeUpdated);
}

}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package edu.internet2.tier.shibboleth.admin.ui.domain.filters;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import edu.internet2.tier.shibboleth.admin.ui.domain.AbstractAuditable;
import lombok.EqualsAndHashCode;
Expand All @@ -10,6 +11,7 @@
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.OrderColumn;
import javax.persistence.Transient;
import java.util.ArrayList;
import java.util.List;

Expand All @@ -19,30 +21,32 @@
@Audited
@AuditOverride(forClass = AbstractAuditable.class)
@JsonIgnoreProperties({"handler", "hibernateLazyInitializer"})
public class NameIdFormatFilterTarget extends AbstractAuditable {

public enum NameIdFormatFilterTargetType {
ENTITY, CONDITION_SCRIPT, REGEX
}
public class NameIdFormatFilterTarget extends AbstractAuditable implements IFilterTarget {

private NameIdFormatFilterTargetType nameIdFormatFilterTargetType;

@ElementCollection
@OrderColumn
private List<String> value;

public NameIdFormatFilterTargetType getNameIdFormatFilterTargetType() {
return nameIdFormatFilterTargetType;
}

public void setNameIdFormatFilterTargetType(NameIdFormatFilterTargetType nameIdFormatFilterTargetType) {
this.nameIdFormatFilterTargetType = nameIdFormatFilterTargetType;
@Override
@JsonIgnore
public String getTargetTypeValue() {
return nameIdFormatFilterTargetType.name();
}

@ElementCollection
@OrderColumn
private List<String> value;

public List<String> getValue() {
return value;
}

public void setNameIdFormatFilterTargetType(NameIdFormatFilterTargetType nameIdFormatFilterTargetType) {
this.nameIdFormatFilterTargetType = nameIdFormatFilterTargetType;
}

public void setSingleValue(String value) {
List<String> values = new ArrayList<>();
values.add(value);
Expand All @@ -53,5 +57,7 @@ public void setValue(List<String> value) {
this.value = value;
}


}
public enum NameIdFormatFilterTargetType {
ENTITY, CONDITION_SCRIPT, REGEX
}
}
Loading

0 comments on commit 0294ca3

Please sign in to comment.