From 0cd425443fa51158ac2d11dd4da6be12fd5c5676 Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Tue, 11 Sep 2018 08:13:29 -0400 Subject: [PATCH] SHIBUI-836: work in progress --- .../admin/ui/ShibbolethUiApplication.java | 6 ++ ...eValueSettingEnvironmentPostProcessor.java | 57 +++++++++++++++++++ .../main/resources/META-INF/spring.factories | 2 + 3 files changed, 65 insertions(+) create mode 100644 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/postprocessors/IdpHomeValueSettingEnvironmentPostProcessor.java create mode 100644 backend/src/main/resources/META-INF/spring.factories diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/ShibbolethUiApplication.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/ShibbolethUiApplication.java index 1fc74cf9d..2c241cf8e 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/ShibbolethUiApplication.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/ShibbolethUiApplication.java @@ -2,6 +2,7 @@ import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.domain.EntityScan; @@ -36,10 +37,15 @@ public static class MetadataResolversResourceIdEmitter { @Autowired MetadataResolverRepository metadataResolverRepository; + @Value("${idp.home}") + String idpHome; + @EventListener void showMetadataResolversResourceIds(ApplicationStartedEvent e) { metadataResolverRepository.findAll() .forEach(it -> System.out.println(String.format("MetadataResolver [%s: %s]", it.getName(), it.getResourceId()))); + + System.out.println("IDP HOME: " + idpHome); } } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/postprocessors/IdpHomeValueSettingEnvironmentPostProcessor.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/postprocessors/IdpHomeValueSettingEnvironmentPostProcessor.java new file mode 100644 index 000000000..74b35f362 --- /dev/null +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/postprocessors/IdpHomeValueSettingEnvironmentPostProcessor.java @@ -0,0 +1,57 @@ +package edu.internet2.tier.shibboleth.admin.ui.configuration.postprocessors; + +import lombok.extern.log4j.Log4j2; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.env.EnvironmentPostProcessor; +import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.core.env.MapPropertySource; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.Map; + +/** + * Spring Boot Environment Post Processor setting the value for idp.home property to an abstract temp directory. + * + * @author Dmitriy Kopylenko + */ +public class IdpHomeValueSettingEnvironmentPostProcessor implements EnvironmentPostProcessor { + + private static final String IDP_HOME_PROP = "idp.home"; + + private static final String METADATA_DIR = "metadata"; + + private static final Logger LOGGER = LoggerFactory.getLogger(IdpHomeValueSettingEnvironmentPostProcessor.class); + + @Override + public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { + String existingIdpHome = environment.getProperty(IDP_HOME_PROP); + Path metadataSubDir = Paths.get(existingIdpHome, METADATA_DIR); + if (existingIdpHome != null) { + if (!Files.exists(metadataSubDir)) { + try { + Files.createDirectories(metadataSubDir); + } catch (IOException e) { + LOGGER.error(e.getMessage()); + throw new RuntimeException(e); + } + } + return; + } + + Map map = new HashMap<>(1); + try { + map.put(IDP_HOME_PROP, Files.createTempDirectory(null).toAbsolutePath().toString()); + } catch (IOException e) { + LOGGER.error(e.getMessage()); + throw new RuntimeException(e); + } + environment.getPropertySources().addLast(new MapPropertySource("idp.home.propertysource", map)); + } +} diff --git a/backend/src/main/resources/META-INF/spring.factories b/backend/src/main/resources/META-INF/spring.factories new file mode 100644 index 000000000..fc0a891d0 --- /dev/null +++ b/backend/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.env.EnvironmentPostProcessor=\ + edu.internet2.tier.shibboleth.admin.ui.configuration.postprocessors.IdpHomeValueSettingEnvironmentPostProcessor \ No newline at end of file