[java-oidc-common] branch main updated: JCOMOIDC-23 - Add OpenID Provider Configuration Document Resolver
Phil Smart
philip.smart at jisc.ac.uk
Tue Feb 22 17:28:27 UTC 2022
This is an automated email from the git hooks/post-receive script.
philsmart pushed a commit to branch main
in repository java-oidc-common.
View the commit online:
http://git.shibboleth.net/view/?p=java-oidc-common.git;a=commit;h=03701898f29846a2de11ae0e697e357acd90dc7a
The following commit(s) were added to refs/heads/main by this push:
new 0370189 JCOMOIDC-23 - Add OpenID Provider Configuration Document Resolver
0370189 is described below
commit 03701898f29846a2de11ae0e697e357acd90dc7a
Author: Phil Smart <philip.smart at jisc.ac.uk>
AuthorDate: Tue Feb 22 17:28:22 2022 +0000
JCOMOIDC-23 - Add OpenID Provider Configuration Document Resolver
Allow Default file loading strategy to accept null resources. Returning
null on apply.
https://shibboleth.atlassian.net/browse/JCOMOIDC-23
---
.../metadata/cache/impl/BatchMetadataCache.java | 21 ++++----
.../cache/impl/DefaultFileLoadingStrategy.java | 29 +++++++----
.../impl/DefaultFileLoadingStrategyTest.java | 58 ++++++++++++++++++++++
.../metadata/impl/file-loading-strategy-test.txt | 1 +
4 files changed, 89 insertions(+), 20 deletions(-)
diff --git a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/cache/impl/BatchMetadataCache.java b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/cache/impl/BatchMetadataCache.java
index 4b1b648..06baff7 100644
--- a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/cache/impl/BatchMetadataCache.java
+++ b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/cache/impl/BatchMetadataCache.java
@@ -371,9 +371,9 @@ public class BatchMetadataCache<IdentifierType, MetadataType>
// Any exception here is caught
final byte[] rawFetchedMetadata = loadingStrategy.apply(createLoadingContext());
-
- if (sourceMetadataValidPredicate.test(rawFetchedMetadata)) {
- if (rawFetchedMetadata != null) {
+ if (rawFetchedMetadata != null) {
+ if (sourceMetadataValidPredicate.test(rawFetchedMetadata)) {
+
final List<MetadataType> parsedMetadata = parsingStrategy.apply(rawFetchedMetadata);
if (parsedMetadata != null) {
log.info("{} Parsed {} metadata candidates, loading into cache",
@@ -382,16 +382,17 @@ public class BatchMetadataCache<IdentifierType, MetadataType>
// Store away the original, raw, metadata bytes.
getBackingStore().setOriginalValue(rawFetchedMetadata);
}
+
+ // Compute metadata expiration from whatever is in the cache (updated or not) will
+ // remain null if no cached original value.
+ metadataExpiration = sourceMetadataExpiryStrategy.apply(getBackingStore().getOriginalValue());
} else {
- log.info("{} Metadata has not changed since last refresh", getLogPrefix());
+ // Metadata is not valid
+ log.warn("{} Source metadata is not valid");
+ //TODO MUST FINISH THIS !!
}
- // Compute metadata expiration from whatever is in the cache (updated or not) will
- // remain null if no cached original value.
- metadataExpiration = sourceMetadataExpiryStrategy.apply(getBackingStore().getOriginalValue());
} else {
- // Metadata is not valid
- log.warn("{} Source metadata is not valid");
- //TODO MUST FINISH THIS !!
+ log.info("{} Metadata has not changed since last refresh", getLogPrefix());
}
} catch (final Throwable t) {
diff --git a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/cache/impl/DefaultFileLoadingStrategy.java b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/cache/impl/DefaultFileLoadingStrategy.java
index 0091926..8292643 100644
--- a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/cache/impl/DefaultFileLoadingStrategy.java
+++ b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/cache/impl/DefaultFileLoadingStrategy.java
@@ -24,6 +24,7 @@ import java.io.IOException;
import java.time.Instant;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import javax.annotation.concurrent.ThreadSafe;
import org.slf4j.Logger;
@@ -33,7 +34,7 @@ import org.springframework.core.io.Resource;
import net.shibboleth.oidc.metadata.cache.CacheLoadingContext;
import net.shibboleth.oidc.metadata.cache.LoadingStrategy;
import net.shibboleth.oidc.metadata.impl.ResolverHelper;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
import net.shibboleth.utilities.java.support.resolver.ResolverException;
/** Default strategy for loading information from a file.*/
@@ -44,23 +45,28 @@ public class DefaultFileLoadingStrategy implements LoadingStrategy {
@Nonnull private final Logger log = LoggerFactory.getLogger(DefaultFileLoadingStrategy.class);
/** The metadata file. */
- @Nonnull private final File metadataFile;
+ @Nullable private final File metadataFile;
/** The metadata file name to use in logs. */
- @Nonnull private final String metadataFileFriendlyName;
+ @Nonnull @NotEmpty private final String metadataFileFriendlyName;
/**
*
* Constructor.
*
- * @param metadata the metadata file resource
+ * @param metadata the metadata file resource. Can be {@literal null}.
*
* @throws IOException if the file does not exist.
*/
- public DefaultFileLoadingStrategy(@Nonnull final Resource metadata) throws IOException {
- Constraint.isNotNull(metadata, "The metadata file can not be null");
- metadataFile = metadata.getFile();
- metadataFileFriendlyName = metadata.getDescription();
+ public DefaultFileLoadingStrategy(@Nullable final Resource metadata) throws IOException {
+ if (metadata == null) {
+ log.warn("File resource is null, no bytes will be returned");
+ metadataFile = null;
+ metadataFileFriendlyName = "No file specified";
+ } else {
+ metadataFile = metadata.getFile();
+ metadataFileFriendlyName = metadata.getDescription();
+ }
}
/**
@@ -72,7 +78,10 @@ public class DefaultFileLoadingStrategy implements LoadingStrategy {
}
@Override
- public byte[] apply(@Nonnull final CacheLoadingContext context) {
+ @Nullable public byte[] apply(@Nonnull final CacheLoadingContext context) {
+ if (metadataFile == null) {
+ return null;
+ }
try {
ResolverHelper.validateMetadataFile(metadataFile);
final Instant metadataUpdateTime = getMetadataUpdateTime();
@@ -92,7 +101,7 @@ public class DefaultFileLoadingStrategy implements LoadingStrategy {
}
@Override
- public String getSourceIdentifier() {
+ @Nonnull public String getSourceIdentifier() {
return metadataFileFriendlyName;
}
diff --git a/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/metadata/impl/DefaultFileLoadingStrategyTest.java b/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/metadata/impl/DefaultFileLoadingStrategyTest.java
new file mode 100644
index 0000000..9cd618b
--- /dev/null
+++ b/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/metadata/impl/DefaultFileLoadingStrategyTest.java
@@ -0,0 +1,58 @@
+package net.shibboleth.oidc.metadata.impl;
+
+import static org.junit.Assert.assertNull;
+import static org.testng.Assert.assertEquals;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.time.Instant;
+
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.testng.annotations.Test;
+
+import net.shibboleth.oidc.metadata.cache.CacheLoadingContext;
+import net.shibboleth.oidc.metadata.cache.impl.DefaultFileLoadingStrategy;
+
+/** Tests for the DefaultFileLoadingStrategy.*/
+public class DefaultFileLoadingStrategyTest {
+
+ private DefaultFileLoadingStrategy strategy;
+
+ private final static String EXAMPLE_FILE_CONTENT = "test";
+
+ @Test
+ public void testFileLoads() throws IOException {
+ final Resource resource =
+ new ClassPathResource("/net/shibboleth/oidc/metadata/impl/file-loading-strategy-test.txt");
+ strategy = new DefaultFileLoadingStrategy(resource);
+ final byte[] loaded = strategy.apply(new CacheLoadingContext(null, null));
+ assertEquals(loaded, EXAMPLE_FILE_CONTENT.getBytes(StandardCharsets.UTF_8));
+ }
+
+ @Test(expectedExceptions = FileNotFoundException.class)
+ public void testFileDoesNotExist() throws IOException {
+ final Resource resource =
+ new ClassPathResource("/net/shibboleth/oidc/metadata/impl/no-file.txt");
+ strategy = new DefaultFileLoadingStrategy(resource);
+ }
+
+ @Test
+ public void testNullFile_NullResponse() throws IOException {
+ strategy = new DefaultFileLoadingStrategy(null);
+ final byte[] loaded = strategy.apply(new CacheLoadingContext(null, null));
+ assertNull(loaded);
+ }
+
+ @Test
+ public void testNullResponse_FileNotUpdatedSinceLastLoad() throws IOException {
+ final Resource resource =
+ new ClassPathResource("/net/shibboleth/oidc/metadata/impl/file-loading-strategy-test.txt");
+ strategy = new DefaultFileLoadingStrategy(resource);
+ final byte[] loaded = strategy.apply(new CacheLoadingContext(Instant.MAX, Instant.MAX));
+ assertNull(loaded);
+ }
+
+
+}
diff --git a/oidc-common-metadata-impl/src/test/resources/net/shibboleth/oidc/metadata/impl/file-loading-strategy-test.txt b/oidc-common-metadata-impl/src/test/resources/net/shibboleth/oidc/metadata/impl/file-loading-strategy-test.txt
new file mode 100644
index 0000000..30d74d2
--- /dev/null
+++ b/oidc-common-metadata-impl/src/test/resources/net/shibboleth/oidc/metadata/impl/file-loading-strategy-test.txt
@@ -0,0 +1 @@
+test
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list