use of org.apereo.cas.support.saml.services.SamlRegisteredService in project cas by apereo.
the class JpaServiceRegistryDaoImplTests method verifySamlService.
@Test
public void verifySamlService() {
final SamlRegisteredService r = new SamlRegisteredService();
r.setName("test345");
r.setServiceId("Testing");
r.setDescription("description");
r.setAttributeReleasePolicy(new ReturnAllAttributeReleasePolicy());
final Map fmt = new HashMap();
fmt.put("key", "value");
r.setAttributeNameFormats(fmt);
r.setMetadataCriteriaDirection("INCLUDE");
r.setMetadataCriteriaRemoveEmptyEntitiesDescriptors(true);
r.setMetadataSignatureLocation("location");
r.setRequiredAuthenticationContextClass("Testing");
final SamlRegisteredService r2 = (SamlRegisteredService) this.dao.save(r);
assertEquals(r, r2);
}
use of org.apereo.cas.support.saml.services.SamlRegisteredService in project cas by apereo.
the class SamlSPUtils method newSamlServiceProviderService.
/**
* New saml service provider registration.
*
* @param sp the properties
* @param resolver the resolver
* @return the saml registered service
*/
public static SamlRegisteredService newSamlServiceProviderService(final AbstractSamlSPProperties sp, final SamlRegisteredServiceCachingMetadataResolver resolver) {
if (StringUtils.isBlank(sp.getMetadata())) {
LOGGER.debug("Skipped registration of [{}] since no metadata location is found", sp.getName());
return null;
}
try {
final SamlRegisteredService service = new SamlRegisteredService();
service.setName(sp.getName());
service.setDescription(sp.getDescription());
service.setEvaluationOrder(Integer.MIN_VALUE);
service.setMetadataLocation(sp.getMetadata());
final List<String> attributesToRelease = new ArrayList<>(sp.getAttributes());
if (StringUtils.isNotBlank(sp.getNameIdAttribute())) {
attributesToRelease.add(sp.getNameIdAttribute());
service.setUsernameAttributeProvider(new PrincipalAttributeRegisteredServiceUsernameProvider(sp.getNameIdAttribute()));
}
if (StringUtils.isNotBlank(sp.getNameIdFormat())) {
service.setRequiredNameIdFormat(sp.getNameIdFormat());
}
final Map<String, String> attributes = Beans.transformPrincipalAttributesListIntoMap(attributesToRelease);
service.setAttributeReleasePolicy(new ReturnMappedAttributeReleasePolicy(attributes));
service.setMetadataCriteriaRoles(SPSSODescriptor.DEFAULT_ELEMENT_NAME.getLocalPart());
service.setMetadataCriteriaRemoveEmptyEntitiesDescriptors(true);
service.setMetadataCriteriaRemoveRolelessEntityDescriptors(true);
if (StringUtils.isNotBlank(sp.getSignatureLocation())) {
service.setMetadataSignatureLocation(sp.getSignatureLocation());
}
final List<String> entityIDList = sp.getEntityIds();
if (entityIDList.isEmpty()) {
final ChainingMetadataResolver chainingResolver = resolver.resolve(service);
if (chainingResolver.getResolvers().isEmpty()) {
LOGGER.warn("Skipped registration of [{}] since no metadata resolver could be constructed", sp.getName());
return null;
}
chainingResolver.getResolvers().forEach(r -> {
if (r instanceof AbstractBatchMetadataResolver) {
final Iterator<EntityDescriptor> it = ((AbstractBatchMetadataResolver) r).iterator();
final Optional<EntityDescriptor> descriptor = StreamSupport.stream(Spliterators.spliteratorUnknownSize(it, Spliterator.ORDERED), false).filter(e -> e.getSPSSODescriptor(SAMLConstants.SAML20P_NS) != null).findFirst();
if (descriptor.isPresent()) {
entityIDList.add(descriptor.get().getEntityID());
} else {
LOGGER.warn("Skipped registration of [{}] since no entity id could be found", sp.getName());
}
}
});
}
if (entityIDList.isEmpty()) {
LOGGER.warn("Skipped registration of [{}] since no metadata entity ids could be found", sp.getName());
return null;
}
final String entityIds = org.springframework.util.StringUtils.collectionToDelimitedString(entityIDList, "|");
service.setMetadataCriteriaDirection(PredicateFilter.Direction.INCLUDE.name());
service.setMetadataCriteriaPattern(entityIds);
LOGGER.debug("Registering saml service [{}] by entity id [{}]", sp.getName(), entityIds);
service.setServiceId(entityIds);
return service;
} catch (final Exception e) {
throw Throwables.propagate(e);
}
}
use of org.apereo.cas.support.saml.services.SamlRegisteredService in project cas by apereo.
the class CasSamlSPAsanaConfiguration method init.
@PostConstruct
public void init() {
final SamlRegisteredService service = SamlSPUtils.newSamlServiceProviderService(casProperties.getSamlSP().getAsana(), samlRegisteredServiceCachingMetadataResolver);
if (service != null) {
service.setSignResponses(true);
SamlSPUtils.saveService(service, this.servicesManager);
}
}
use of org.apereo.cas.support.saml.services.SamlRegisteredService in project cas by apereo.
the class CasSamlSPEvernoteConfiguration method init.
@PostConstruct
public void init() {
final SamlRegisteredService service = SamlSPUtils.newSamlServiceProviderService(casProperties.getSamlSP().getEvernote(), samlRegisteredServiceCachingMetadataResolver);
if (service != null) {
service.setSignResponses(true);
SamlSPUtils.saveService(service, this.servicesManager);
}
}
use of org.apereo.cas.support.saml.services.SamlRegisteredService in project cas by apereo.
the class CasSamlSPInCommonConfiguration method init.
@PostConstruct
public void init() {
final SamlRegisteredService service = SamlSPUtils.newSamlServiceProviderService(casProperties.getSamlSP().getInCommon(), samlRegisteredServiceCachingMetadataResolver);
if (service != null) {
service.setSignResponses(true);
SamlSPUtils.saveService(service, servicesManager);
LOGGER.info("Launching background thread to load the InCommon metadata. Depending on bandwidth, this might take a while...");
new Thread(() -> {
LOGGER.debug("Loading InCommon metadata at [{}]...", service.getMetadataLocation());
final ChainingMetadataResolver chainingResolver = samlRegisteredServiceCachingMetadataResolver.resolve(service);
if (!chainingResolver.getResolvers().isEmpty()) {
LOGGER.info("Loaded InCommon metadata. [{}] metadata resolver(s) available.", chainingResolver.getResolvers().size());
}
}).start();
}
}
Aggregations