Skip to content

Commit

Permalink
Merge branch 'SHIBUI-517' into SHIBUI-522
Browse files Browse the repository at this point in the history
  • Loading branch information
Bill Smith committed May 25, 2018
2 parents fc512fb + 7d0c33c commit 2044bdc
Show file tree
Hide file tree
Showing 17 changed files with 1,035 additions and 68 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public class JPAMetadataResolverServiceImpl implements MetadataResolverService {

// MetadataResolver targetMetadataResolver = chainingMetadataResolver.getResolvers().stream().filter(r -> r.getId().equals(metadataResolverName)).findFirst().get();
MetadataResolver targetMetadataResolver = chainingMetadataResolver.getResolvers().find { it.id == metadataResolverName }
edu.internet2.tier.shibboleth.admin.ui.domain.MetadataResolver jpaMetadataResolver = metadataResolverRepository.findByName(metadataResolverName);
edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver jpaMetadataResolver = metadataResolverRepository.findByName(metadataResolverName);

if (targetMetadataResolver && targetMetadataResolver.getMetadataFilter() instanceof MetadataFilterChain) {
MetadataFilterChain metadataFilterChain = (MetadataFilterChain)targetMetadataResolver.getMetadataFilter();
Expand Down Expand Up @@ -88,7 +88,7 @@ public class JPAMetadataResolverServiceImpl implements MetadataResolverService {
'xsi:type': 'ChainingMetadataProvider',
'xsi:schemaLocation': 'urn:mace:shibboleth:2.0:metadata http://shibboleth.net/schema/idp/shibboleth-metadata.xsd urn:mace:shibboleth:2.0:resource http://shibboleth.net/schema/idp/shibboleth-resource.xsd urn:mace:shibboleth:2.0:security http://shibboleth.net/schema/idp/shibboleth-security.xsd urn:oasis:names:tc:SAML:2.0:metadata http://docs.oasis-open.org/security/saml/v2.0/saml-schema-metadata-2.0.xsd urn:oasis:names:tc:SAML:2.0:assertion http://docs.oasis-open.org/security/saml/v2.0/saml-schema-assertion-2.0.xsd'
) {
metadataResolverRepository.findAll().each { edu.internet2.tier.shibboleth.admin.ui.domain.MetadataResolver mr ->
metadataResolverRepository.findAll().each { edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver mr ->
MetadataProvider(id: 'HTTPMetadata',
'xsi:type': 'FileBackedHTTPMetadataProvider',
backingFile: '%{idp.home}/metadata/incommonmd.xml',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ protected void processConditionalRetrievalHeaders(HttpResponse response) {
resolvers.add(incommonMR);

if (!metadataResolverRepository.findAll().iterator().hasNext()) {
edu.internet2.tier.shibboleth.admin.ui.domain.MetadataResolver mr = new edu.internet2.tier.shibboleth.admin.ui.domain.MetadataResolver();
edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver mr = new edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver();
mr.setName("incommonmd");
metadataResolverRepository.save(mr);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
package edu.internet2.tier.shibboleth.admin.ui.controller;

import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FileBackedHttpMetadataResolver;
import edu.internet2.tier.shibboleth.admin.ui.repository.FileBackedHttpMetadataResolverRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;

import java.net.URI;

/**
* @author Bill Smith (wsmith@unicon.net)
*/
@RestController
@RequestMapping("/api/MetadataProvider/FileBackedHttp")
public class FileBackedHttpMetadataProviderController {
private static final Logger logger = LoggerFactory.getLogger(FileBackedHttpMetadataProviderController.class);

@Autowired
FileBackedHttpMetadataResolverRepository repository;

@DeleteMapping("/{resourceId}")
public ResponseEntity<?> deleteByResourceId(@PathVariable String resourceId) {
if (repository.deleteByResourceId(resourceId)) {
return ResponseEntity.accepted().build();
} else {
return ResponseEntity.notFound().build();
}
}

@GetMapping("/name/{metadataProviderName}")
@Transactional(readOnly = true)
public ResponseEntity<?> getOneByName(@PathVariable String metadataProviderName) {
FileBackedHttpMetadataResolver resolver = repository.findByName(metadataProviderName);
if (resolver == null) {
return ResponseEntity.notFound().build();
} else {
resolver.setVersion(resolver.hashCode());
return ResponseEntity.ok(resolver);
}
}

@GetMapping("/{resourceId}")
@Transactional(readOnly = true)
public ResponseEntity<?> getOneByResourceId(@PathVariable String resourceId) {
FileBackedHttpMetadataResolver resolver = repository.findByResourceId(resourceId);
if (resolver == null) {
return ResponseEntity.notFound().build();
} else {
resolver.setVersion(resolver.hashCode());
return ResponseEntity.ok(resolver);
}
}

@PostMapping
public ResponseEntity<?> create(@RequestBody FileBackedHttpMetadataResolver resolver) {
if (repository.findByName(resolver.getName()) != null) {
return ResponseEntity.status(HttpStatus.CONFLICT).build();
}

FileBackedHttpMetadataResolver persistedResolver = repository.save(resolver);
persistedResolver.setVersion(persistedResolver.hashCode());

return ResponseEntity
.created(getResourceUriFor(persistedResolver))
.body(persistedResolver);
}

@PutMapping
public ResponseEntity<?> update(@RequestBody FileBackedHttpMetadataResolver resolver) {
FileBackedHttpMetadataResolver existingResolver = repository.findByResourceId(resolver.getResourceId());

if (existingResolver == null) {
return ResponseEntity.notFound().build();
}

if (existingResolver.hashCode() != resolver.getVersion()) {
logger.info("Comparing: " + existingResolver.hashCode() + " with " + resolver.getVersion());
return ResponseEntity.status(HttpStatus.CONFLICT).build();
}

resolver.setAudId(existingResolver.getAudId());
//TODO: Do we need to set anything else? dates?

FileBackedHttpMetadataResolver updatedResolver = repository.save(resolver);
updatedResolver.setVersion(updatedResolver.hashCode());

return ResponseEntity.ok(updatedResolver);
}

private static URI getResourceUriFor(FileBackedHttpMetadataResolver resolver) {
return ServletUriComponentsBuilder
.fromCurrentServletMapping().path("/api/MetadataProvider/FileBackedHttp/")
.pathSegment(resolver.getResourceId())
.build()
.toUri();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

import edu.internet2.tier.shibboleth.admin.ui.domain.EntityAttributesFilter;
import edu.internet2.tier.shibboleth.admin.ui.domain.filters.MetadataFilter;
import edu.internet2.tier.shibboleth.admin.ui.domain.MetadataResolver;
import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.FilterRepresentation;
import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver;
import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository;
import edu.internet2.tier.shibboleth.admin.ui.service.FilterService;
import edu.internet2.tier.shibboleth.admin.ui.service.MetadataResolverService;
Expand All @@ -13,7 +13,13 @@
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;

import java.net.URI;
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package edu.internet2.tier.shibboleth.admin.ui.domain.resolvers;

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

import javax.persistence.Embedded;
import javax.persistence.Entity;

@Entity
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@Getter
@Setter
@ToString
public class FileBackedHttpMetadataResolver extends MetadataResolver {

@Embedded
private ReloadableMetadataResolverAttributes reloadableMetadataResolverAttributes;

@Embedded
private HttpMetadataResolverAttributes httpMetadataResolverAttributes;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package edu.internet2.tier.shibboleth.admin.ui.domain.resolvers;

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

import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.Enumerated;

import static javax.persistence.EnumType.STRING;

@Embeddable
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@EqualsAndHashCode
public class HttpMetadataResolverAttributes {

private String httpClientRef;

private String connectionRequestTimeout;

private String requestTimeout;

private String socketTimeout;

private Boolean disregardTLSCertificate;

private String tlsTrustEngineRef;

private String httpClientSecurityParametersRef;

private String proxyHost;

private String proxyPort;

private String proxyUser;

private String proxyPassword;

@Enumerated(STRING)
@Column(length = 6)
private HttpCachingType httpCaching;

private String httpCacheDirectory;

private Integer httpMaxCacheEntries;

private Integer httpMaxCacheEntrySize;

private enum HttpCachingType {
none,file,memory
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package edu.internet2.tier.shibboleth.admin.ui.domain.resolvers;

import edu.internet2.tier.shibboleth.admin.ui.domain.AbstractAuditable;
import edu.internet2.tier.shibboleth.admin.ui.domain.filters.MetadataFilter;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.OneToMany;
import javax.persistence.OrderColumn;
import javax.persistence.Transient;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@EqualsAndHashCode(callSuper = true, exclude={"version"})
@NoArgsConstructor
@Getter
@Setter
@ToString
public class MetadataResolver extends AbstractAuditable {

@Column(unique=true)
private String name;

@Column(unique=true)
private String resourceId = UUID.randomUUID().toString();

private Boolean requireValidMetadata;

private Boolean failFastInitialization;

private Integer sortKey;

private String criterionPredicateRegistryRef;

private Boolean useDefaultPredicateRegistry;

private Boolean satisfyAnyPredicates;

@OneToMany(cascade = CascadeType.ALL)
@OrderColumn
private List<MetadataFilter> metadataFilters = new ArrayList<>();

@Transient
private int version;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package edu.internet2.tier.shibboleth.admin.ui.domain.resolvers;

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

import javax.persistence.Embeddable;

@Embeddable
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@EqualsAndHashCode
public class ReloadableMetadataResolverAttributes {

private String parserPoolRef;

private String taskTimerRef;

private String minRefreshDelay;

private String maxRefreshDelay;

private Double refreshDelayFactor;

private String indexesRef;

private Boolean resolveViaPredicatesOnly;

private String expirationWarningThreshold;

}
Loading

0 comments on commit 2044bdc

Please sign in to comment.