Skip to content

Commit

Permalink
SHIBUI-2380
Browse files Browse the repository at this point in the history
Incremental commit:
Added protocol to entity descriptor
  • Loading branch information
chasegawa committed Sep 16, 2022
1 parent 1cd3224 commit 3d52207
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,9 @@ public class EntityDescriptor extends AbstractDescriptor implements org.opensaml
@EqualsAndHashCode.Exclude
private Long versionModifiedTimestamp;

@Setter
private EntityDescriptorProtocol protocol = EntityDescriptorProtocol.SAML;

public EntityDescriptor() {
super();
this.resourceId = UUID.randomUUID().toString();
Expand Down Expand Up @@ -176,6 +179,10 @@ public org.opensaml.saml.saml2.metadata.Organization getOrganization() {
return organization;
}

public EntityDescriptorProtocol getProtocol() {
return protocol == null ? EntityDescriptorProtocol.SAML : protocol;
}

@Override
public PDPDescriptor getPDPDescriptor(String s) {
return pdpDescriptor;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package edu.internet2.tier.shibboleth.admin.ui.domain;

public enum EntityDescriptorProtocol {
SAML, OIDC
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;

import edu.internet2.tier.shibboleth.admin.ui.domain.EntityDescriptor;
import edu.internet2.tier.shibboleth.admin.ui.domain.EntityDescriptorProtocol;
import lombok.Getter;
import lombok.Setter;

Expand Down Expand Up @@ -67,6 +69,10 @@ public class EntityDescriptorRepresentation implements Serializable {

private int version;

@Getter
@Setter
private EntityDescriptorProtocol protocol;

public EntityDescriptorRepresentation() {
}

Expand Down Expand Up @@ -247,4 +253,4 @@ public void setServiceProviderSsoDescriptor(ServiceProviderSsoDescriptorRepresen
public void setVersion(int version) {
this.version = version;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package edu.internet2.tier.shibboleth.admin.ui.repository;

import edu.internet2.tier.shibboleth.admin.ui.domain.EntityDescriptorProtocol;

import java.time.LocalDateTime;

public interface EntityDescriptorProjection {
Expand All @@ -16,4 +18,5 @@ default String getEntityId() {
LocalDateTime getCreatedDate();
boolean getServiceEnabled();
String getIdOfOwner();
EntityDescriptorProtocol getProtocol();
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import edu.internet2.tier.shibboleth.admin.ui.domain.Attribute;
import edu.internet2.tier.shibboleth.admin.ui.domain.EntityAttributes;
import edu.internet2.tier.shibboleth.admin.ui.domain.EntityDescriptor;
import edu.internet2.tier.shibboleth.admin.ui.domain.EntityDescriptorProtocol;
import edu.internet2.tier.shibboleth.admin.ui.domain.IRelyingPartyOverrideProperty;
import edu.internet2.tier.shibboleth.admin.ui.domain.KeyDescriptor;
import edu.internet2.tier.shibboleth.admin.ui.domain.UIInfo;
import edu.internet2.tier.shibboleth.admin.ui.domain.X509Data;
import edu.internet2.tier.shibboleth.admin.ui.domain.XSBoolean;
Expand Down Expand Up @@ -48,6 +48,7 @@
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.opensaml.core.xml.XMLObject;
import org.opensaml.saml.saml2.metadata.KeyDescriptor;
import org.opensaml.xmlsec.signature.KeyInfo;
import org.opensaml.xmlsec.signature.KeyName;
import org.opensaml.xmlsec.signature.KeyValue;
Expand Down Expand Up @@ -117,10 +118,28 @@ public EntityDescriptorRepresentation createNew(EntityDescriptor ed) throws Forb
@Override
public EntityDescriptorRepresentation createNewEntityDescriptorFromXMLOrigin(EntityDescriptor ed) {
ed.setIdOfOwner(userService.getCurrentUserGroup().getOwnerId());
ed.setProtocol(determineEntityDescriptorProtocol(ed));
EntityDescriptor savedEntity = entityDescriptorRepository.save(ed);
return createRepresentationFromDescriptor(savedEntity);
}

// Change to check for OAuthRPExtensions in the extensions?
private EntityDescriptorProtocol determineEntityDescriptorProtocol(EntityDescriptor ed) {
boolean oidcType = false;
if (ed.getSPSSODescriptor("") != null && ed.getSPSSODescriptor("").getKeyDescriptors().size() > 0) {
for (KeyDescriptor keyDescriptor : ed.getSPSSODescriptor("").getKeyDescriptors()) {
KeyInfo keyInfo = keyDescriptor.getKeyInfo();
KeyDescriptorRepresentation.ElementType keyInfoType = determineKeyInfoType(keyInfo);
if (keyInfoType == KeyDescriptorRepresentation.ElementType.clientSecret || keyInfoType == KeyDescriptorRepresentation.ElementType.clientSecretKeyReference ||
keyInfoType == KeyDescriptorRepresentation.ElementType.jwksData || keyInfoType == KeyDescriptorRepresentation.ElementType.jwksUri) {
oidcType = true;
break;
}
}
}
return oidcType ? EntityDescriptorProtocol.OIDC : EntityDescriptorProtocol.SAML;
}

@Override
public boolean entityExists(String entityID) {
return entityDescriptorRepository.findByEntityID(entityID) != null ;
Expand Down Expand Up @@ -174,6 +193,7 @@ public EntityDescriptorRepresentation createRepresentationFromDescriptor(org.ope
representation.setCreatedBy(ed.getCreatedBy());
representation.setCurrent(ed.isCurrent());
representation.setIdOfOwner(ed.getIdOfOwner());
representation.setProtocol(ed.getProtocol());

if (ed.getSPSSODescriptor("") != null && ed.getSPSSODescriptor("").getSupportedProtocols().size() > 0) {
ServiceProviderSsoDescriptorRepresentation serviceProviderSsoDescriptorRepresentation = representation.getServiceProviderSsoDescriptor(true);
Expand Down

0 comments on commit 3d52207

Please sign in to comment.