TOMEE-2247 - Load public key from file Location.
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/52b52362 Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/52b52362 Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/52b52362 Branch: refs/heads/master Commit: 52b5236226dbc16b90048339322f78d2866f2dae Parents: 0cca6ac Author: Roberto Cortez <[email protected]> Authored: Mon Sep 24 13:59:50 2018 +0100 Committer: Roberto Cortez <[email protected]> Committed: Fri Dec 7 18:11:17 2018 +0000 ---------------------------------------------------------------------- .../config/ConfigurableJWTAuthContextInfo.java | 38 +++++++++++++++++--- .../jwt/MicroProfileJWTTCKArchiveProcessor.java | 6 ++-- .../MicroProfileJWTTCKDeploymentPackager.java | 4 ++- 3 files changed, 41 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/52b52362/mp-jwt/src/main/java/org/apache/tomee/microprofile/jwt/config/ConfigurableJWTAuthContextInfo.java ---------------------------------------------------------------------- diff --git a/mp-jwt/src/main/java/org/apache/tomee/microprofile/jwt/config/ConfigurableJWTAuthContextInfo.java b/mp-jwt/src/main/java/org/apache/tomee/microprofile/jwt/config/ConfigurableJWTAuthContextInfo.java index 514abb3..3a6f34a 100644 --- a/mp-jwt/src/main/java/org/apache/tomee/microprofile/jwt/config/ConfigurableJWTAuthContextInfo.java +++ b/mp-jwt/src/main/java/org/apache/tomee/microprofile/jwt/config/ConfigurableJWTAuthContextInfo.java @@ -25,10 +25,12 @@ import javax.enterprise.inject.spi.DeploymentException; import javax.inject.Inject; import javax.servlet.ServletContext; import java.io.BufferedReader; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringWriter; +import java.net.URISyntaxException; import java.net.URL; import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; @@ -118,12 +120,12 @@ public class ConfigurableJWTAuthContextInfo { } final StringWriter content = new StringWriter(); - try (final BufferedReader br = new BufferedReader(new InputStreamReader(is))) { - String line = br.readLine(); + try (final BufferedReader reader = new BufferedReader(new InputStreamReader(is))) { + String line = reader.readLine(); while (line != null) { content.write(line); content.write('\n'); - line = br.readLine(); + line = reader.readLine(); } } return Optional.of(content.toString()); @@ -134,7 +136,35 @@ public class ConfigurableJWTAuthContextInfo { } private Optional<String> readPublicKeyFromFile(final String publicKeyLocation) { - return Optional.empty(); + if (!publicKeyLocation.startsWith("file")) { + return Optional.empty(); + } + + try { + final URL locationURL = new URL(publicKeyLocation); + + final File publicKeyFile = new File(locationURL.toURI()); + if (!publicKeyFile.exists() || publicKeyFile.isDirectory()) { + throw new DeploymentException( + "Could not read MicroProfile Public Key from Location: " + + publicKeyLocation + + ". File does not exist or it is a directory."); + } + + final StringWriter content = new StringWriter(); + try (final BufferedReader reader = new BufferedReader(new InputStreamReader(locationURL.openStream()))) { + String line = reader.readLine(); + while (line != null) { + content.write(line); + content.write('\n'); + line = reader.readLine(); + } + } + return Optional.of(content.toString()); + } catch (final IOException | URISyntaxException e) { + throw new DeploymentException( + "Could not read MicroProfile Public Key from Location: " + publicKeyLocation, e); + } } private Optional<String> readPublicKeyFromHttp(final String publicKeyLocation) { http://git-wip-us.apache.org/repos/asf/tomee/blob/52b52362/tck/microprofile-tck/jwt/src/test/java/org/apache/tomee/microprofile/tck/jwt/MicroProfileJWTTCKArchiveProcessor.java ---------------------------------------------------------------------- diff --git a/tck/microprofile-tck/jwt/src/test/java/org/apache/tomee/microprofile/tck/jwt/MicroProfileJWTTCKArchiveProcessor.java b/tck/microprofile-tck/jwt/src/test/java/org/apache/tomee/microprofile/tck/jwt/MicroProfileJWTTCKArchiveProcessor.java index 16182c3..bd4d8f3 100644 --- a/tck/microprofile-tck/jwt/src/test/java/org/apache/tomee/microprofile/tck/jwt/MicroProfileJWTTCKArchiveProcessor.java +++ b/tck/microprofile-tck/jwt/src/test/java/org/apache/tomee/microprofile/tck/jwt/MicroProfileJWTTCKArchiveProcessor.java @@ -21,6 +21,7 @@ import org.apache.openejb.loader.JarLocation; import org.apache.tomee.arquillian.remote.RemoteTomEEConfiguration; import org.apache.tomee.arquillian.remote.RemoteTomEEContainer; import org.eclipse.microprofile.jwt.tck.config.IssValidationTest; +import org.eclipse.microprofile.jwt.tck.config.PublicKeyAsFileLocationURLTest; import org.eclipse.microprofile.jwt.tck.config.PublicKeyAsPEMLocationTest; import org.eclipse.microprofile.jwt.tck.config.PublicKeyAsPEMTest; import org.eclipse.microprofile.jwt.tck.util.TokenUtils; @@ -68,8 +69,9 @@ public class MicroProfileJWTTCKArchiveProcessor implements ApplicationArchivePro Stream.of( PublicKeyAsPEMTest.class, PublicKeyAsPEMLocationTest.class, - org.apache.tomee.microprofile.tck.jwt.config.PublicKeyAsPEMLocationTest.class, - IssValidationTest.class) + PublicKeyAsFileLocationURLTest.class, + IssValidationTest.class, + org.apache.tomee.microprofile.tck.jwt.config.PublicKeyAsPEMLocationTest.class) .filter(c -> c.equals(testClass.getJavaClass())) .findAny() .ifPresent(c -> war.deleteClass(JWTAuthContextInfoProvider.class)); http://git-wip-us.apache.org/repos/asf/tomee/blob/52b52362/tck/microprofile-tck/jwt/src/test/java/org/apache/tomee/microprofile/tck/jwt/MicroProfileJWTTCKDeploymentPackager.java ---------------------------------------------------------------------- diff --git a/tck/microprofile-tck/jwt/src/test/java/org/apache/tomee/microprofile/tck/jwt/MicroProfileJWTTCKDeploymentPackager.java b/tck/microprofile-tck/jwt/src/test/java/org/apache/tomee/microprofile/tck/jwt/MicroProfileJWTTCKDeploymentPackager.java index cd92e00..20a3c94 100644 --- a/tck/microprofile-tck/jwt/src/test/java/org/apache/tomee/microprofile/tck/jwt/MicroProfileJWTTCKDeploymentPackager.java +++ b/tck/microprofile-tck/jwt/src/test/java/org/apache/tomee/microprofile/tck/jwt/MicroProfileJWTTCKDeploymentPackager.java @@ -29,7 +29,9 @@ public class MicroProfileJWTTCKDeploymentPackager extends ServletProtocolDeploym @Override public Archive<?> generateDeployment(final TestDeployment testDeployment, final Collection<ProtocolArchiveProcessor> processors) { - final WebArchive webArchive = ShrinkWrap.create(WebArchive.class, testDeployment.getApplicationArchive().getName()) + + // Some tests on the TCK use duplicate war names. This is to use the unique id generated by Arquillian. + final WebArchive webArchive = ShrinkWrap.create(WebArchive.class) .merge(testDeployment.getApplicationArchive()); return super.generateDeployment(
