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