You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ta...@apache.org on 2019/04/22 17:13:12 UTC

[tika] branch master updated: TIKA-2858 -- add a key to TikaResource to allow base64 utf8 encoded passwords

This is an automated email from the ASF dual-hosted git repository.

tallison pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tika.git


The following commit(s) were added to refs/heads/master by this push:
     new 9bcce8f  TIKA-2858 -- add a key to TikaResource to allow base64 utf8 encoded passwords
     new e1ed5cc  Merge remote-tracking branch 'origin/master'
9bcce8f is described below

commit 9bcce8fa5a9d328487a24ef2804b183c9f222158
Author: TALLISON <ta...@apache.org>
AuthorDate: Mon Apr 22 13:12:14 2019 -0400

    TIKA-2858 -- add a key to TikaResource to allow base64 utf8 encoded passwords
---
 .../apache/tika/server/resource/TikaResource.java    |  19 +++++++++++++++++--
 .../org/apache/tika/server/TikaResourceTest.java     |  15 +++++++++++++++
 .../src/test/resources/testPassword4Spaces.pdf       | Bin 0 -> 18285 bytes
 3 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/tika-server/src/main/java/org/apache/tika/server/resource/TikaResource.java b/tika-server/src/main/java/org/apache/tika/server/resource/TikaResource.java
index 285d3dd..2eb3baf 100644
--- a/tika-server/src/main/java/org/apache/tika/server/resource/TikaResource.java
+++ b/tika-server/src/main/java/org/apache/tika/server/resource/TikaResource.java
@@ -17,6 +17,7 @@
 
 package org.apache.tika.server.resource;
 
+import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.cxf.attachment.ContentDisposition;
 import org.apache.cxf.jaxrs.ext.multipart.Attachment;
@@ -88,8 +89,11 @@ public class TikaResource {
     public static final String GREETING = "This is Tika Server (" + new Tika().toString() + "). Please PUT\n";
     public static final String X_TIKA_OCR_HEADER_PREFIX = "X-Tika-OCR";
     public static final String X_TIKA_PDF_HEADER_PREFIX = "X-Tika-PDF";
+    public static final String PASSWORD = "Password";
+    public static final String PASSWORD_BASE64_UTF8 = "Password_Base64_UTF-8";
 
     private static final Logger LOG = LoggerFactory.getLogger(TikaResource.class);
+    private static final Base64 BASE_64 = new Base64();
 
     private static TikaConfig tikaConfig;
     private static DigestingParser.Digester digester = null;
@@ -338,8 +342,14 @@ public class TikaResource {
             });
         }
 
-        final String password = httpHeaders.getFirst("Password");
-        if (password != null) {
+        String tmpPassword = httpHeaders.getFirst(PASSWORD_BASE64_UTF8);
+        if (tmpPassword != null) {
+            tmpPassword = decodeBase64UTF8(tmpPassword);
+        } else {
+            tmpPassword = httpHeaders.getFirst(PASSWORD);
+        }
+        if (tmpPassword != null) {
+            final String password = tmpPassword;
             context.set(PasswordProvider.class, new PasswordProvider() {
                 @Override
                 public String getPassword(Metadata metadata) {
@@ -349,6 +359,11 @@ public class TikaResource {
         }
     }
 
+    private static String decodeBase64UTF8(String s) {
+        byte[] bytes = BASE_64.decode(s);
+        return new String(bytes, UTF_8);
+    }
+
     public static void setDetector(Parser p, Detector detector) {
         AutoDetectParser adp = getAutoDetectParser(p);
         adp.setDetector(detector);
diff --git a/tika-server/src/test/java/org/apache/tika/server/TikaResourceTest.java b/tika-server/src/test/java/org/apache/tika/server/TikaResourceTest.java
index 8fe286c..943d083 100644
--- a/tika-server/src/test/java/org/apache/tika/server/TikaResourceTest.java
+++ b/tika-server/src/test/java/org/apache/tika/server/TikaResourceTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.tika.server;
 
+import org.apache.commons.codec.binary.Base64;
 import org.apache.cxf.attachment.AttachmentUtil;
 import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
 import org.apache.cxf.jaxrs.client.WebClient;
@@ -30,6 +31,7 @@ import org.junit.Test;
 import javax.ws.rs.ProcessingException;
 import javax.ws.rs.core.Response;
 import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -423,4 +425,17 @@ public class TikaResourceTest extends CXFTestBase {
 
         assertContains("plundered our seas", responseMsg);
     }
+
+    @Test
+    public void testUnicodePasswordProtected() throws Exception {
+        final String password = "    ";
+        final String encoded = new Base64().encodeAsString(password.getBytes(StandardCharsets.UTF_8));
+        Response response = WebClient.create(endPoint + TIKA_PATH)
+                .accept("text/plain")
+                .header(TikaResource.PASSWORD_BASE64_UTF8, encoded)
+                .put(ClassLoader.getSystemResourceAsStream("testPassword4Spaces.pdf"));
+        String responseMsg = getStringFromInputStream((InputStream) response
+                .getEntity());
+        assertContains("Just some text.", responseMsg);
+    }
 }
diff --git a/tika-server/src/test/resources/testPassword4Spaces.pdf b/tika-server/src/test/resources/testPassword4Spaces.pdf
new file mode 100644
index 0000000..0b1a835
Binary files /dev/null and b/tika-server/src/test/resources/testPassword4Spaces.pdf differ