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(

Reply via email to