You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ma...@apache.org on 2018/07/20 08:05:04 UTC

[03/19] james-project git commit: JAMES-2472 refactor hashing code to use guava

JAMES-2472 refactor hashing code to use guava


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/18340831
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/18340831
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/18340831

Branch: refs/heads/master
Commit: 18340831fd5e7f33c547c75ea0dcf56386ff3044
Parents: 18f5da3
Author: Matthieu Baechler <ma...@apache.org>
Authored: Tue Jul 17 16:23:08 2018 +0200
Committer: Matthieu Baechler <ma...@apache.org>
Committed: Fri Jul 20 10:03:52 2018 +0200

----------------------------------------------------------------------
 .../org/apache/james/mailbox/model/BlobId.java  |  5 ++--
 .../mailbox/tika/CachingTextExtractor.java      |  4 +--
 .../james/blob/cassandra/CassandraBlobId.java   |  4 +--
 .../apache/james/user/jpa/model/JPAUser.java    | 30 +++++++++++++-------
 .../DockerClusterRabbitMQExtension.java         |  6 ++--
 5 files changed, 29 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/18340831/mailbox/api/src/main/java/org/apache/james/mailbox/model/BlobId.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/BlobId.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/BlobId.java
index 34a62e3..b5b25ad 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/BlobId.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/BlobId.java
@@ -21,16 +21,15 @@ package org.apache.james.mailbox.model;
 
 import java.util.Objects;
 
-import org.apache.commons.codec.digest.DigestUtils;
-
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
+import com.google.common.hash.Hashing;
 
 public class BlobId {
     public static BlobId fromBytes(byte[] bytes) {
         Preconditions.checkNotNull(bytes);
-        return new BlobId(DigestUtils.sha256Hex(bytes));
+        return new BlobId(Hashing.sha256().hashBytes(bytes).toString());
     }
 
     public static BlobId fromString(String raw) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/18340831/mailbox/tika/src/main/java/org/apache/james/mailbox/tika/CachingTextExtractor.java
----------------------------------------------------------------------
diff --git a/mailbox/tika/src/main/java/org/apache/james/mailbox/tika/CachingTextExtractor.java b/mailbox/tika/src/main/java/org/apache/james/mailbox/tika/CachingTextExtractor.java
index 3db1ad9..9feaf55 100644
--- a/mailbox/tika/src/main/java/org/apache/james/mailbox/tika/CachingTextExtractor.java
+++ b/mailbox/tika/src/main/java/org/apache/james/mailbox/tika/CachingTextExtractor.java
@@ -26,7 +26,6 @@ import java.util.Optional;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 
-import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.james.mailbox.extractor.ParsedContent;
 import org.apache.james.mailbox.extractor.TextExtractor;
@@ -39,6 +38,7 @@ import com.google.common.cache.Cache;
 import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.RemovalListener;
 import com.google.common.cache.Weigher;
+import com.google.common.hash.Hashing;
 import com.google.common.util.concurrent.UncheckedExecutionException;
 
 public class CachingTextExtractor implements TextExtractor {
@@ -110,7 +110,7 @@ public class CachingTextExtractor implements TextExtractor {
     @Override
     public ParsedContent extractContent(InputStream inputStream, String contentType) throws Exception {
         byte[] bytes = IOUtils.toByteArray(inputStream);
-        String key = DigestUtils.sha256Hex(bytes);
+        String key = Hashing.sha256().hashBytes(bytes).toString();
 
         try {
             return cache.get(key, () -> retrieveAndUpdateWeight(bytes, contentType));

http://git-wip-us.apache.org/repos/asf/james-project/blob/18340831/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobId.java
----------------------------------------------------------------------
diff --git a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobId.java b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobId.java
index fedd734..d349b53 100644
--- a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobId.java
+++ b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobId.java
@@ -19,7 +19,6 @@
 
 package org.apache.james.blob.cassandra;
 
-import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.james.blob.api.BlobId;
 
 import com.google.common.annotations.VisibleForTesting;
@@ -27,6 +26,7 @@ import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
+import com.google.common.hash.Hashing;
 
 public class CassandraBlobId implements BlobId {
 
@@ -34,7 +34,7 @@ public class CassandraBlobId implements BlobId {
         @Override
         public CassandraBlobId forPayload(byte[] payload) {
             Preconditions.checkArgument(payload != null);
-            return new CassandraBlobId(DigestUtils.sha256Hex(payload));
+            return new CassandraBlobId(Hashing.sha256().hashBytes(payload).toString());
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/18340831/server/data/data-jpa/src/main/java/org/apache/james/user/jpa/model/JPAUser.java
----------------------------------------------------------------------
diff --git a/server/data/data-jpa/src/main/java/org/apache/james/user/jpa/model/JPAUser.java b/server/data/data-jpa/src/main/java/org/apache/james/user/jpa/model/JPAUser.java
index 07c9a1c..271ea38 100644
--- a/server/data/data-jpa/src/main/java/org/apache/james/user/jpa/model/JPAUser.java
+++ b/server/data/data-jpa/src/main/java/org/apache/james/user/jpa/model/JPAUser.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.user.jpa.model;
 
+import java.nio.charset.StandardCharsets;
+import java.util.Optional;
 import java.util.function.Function;
 
 import javax.persistence.Basic;
@@ -30,10 +32,11 @@ import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 import javax.persistence.Version;
 
-import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.james.user.api.model.User;
 
 import com.google.common.annotations.VisibleForTesting;
+import com.google.common.hash.HashFunction;
+import com.google.common.hash.Hashing;
 
 @Entity(name = "JamesUser")
 @Table(name = "JAMES_USER")
@@ -57,23 +60,28 @@ public class JPAUser implements User {
         return chooseHashFunction(alg).apply(password);
     }
 
-    interface HashFunction extends Function<String, String> {}
+    interface PasswordHashFunction extends Function<String, String> {}
 
-    private static HashFunction chooseHashFunction(String algorithm) {
-        if (algorithm == null) {
-            return DigestUtils::md5Hex;
-        }
+    private static PasswordHashFunction chooseHashFunction(String nullableAlgorithm) {
+        String algorithm = Optional.ofNullable(nullableAlgorithm).orElse("MD5");
         switch (algorithm) {
-            case "MD5":
-                return DigestUtils::md5Hex;
             case "NONE":
                 return (password) -> "password";
+            default:
+                return (password) -> chooseHashing(algorithm).hashString(password, StandardCharsets.UTF_8).toString();
+        }
+    }
+
+    private static HashFunction chooseHashing(String algorithm) {
+        switch (algorithm) {
+            case "MD5":
+                return Hashing.md5();
             case "SHA-256":
-                return DigestUtils::sha256Hex;
+                return Hashing.sha256();
             case "SHA-512":
-                return DigestUtils::sha512Hex;
+                return Hashing.sha512();
             default:
-                return DigestUtils::sha1Hex;
+                return Hashing.sha1();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/18340831/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/DockerClusterRabbitMQExtension.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/DockerClusterRabbitMQExtension.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/DockerClusterRabbitMQExtension.java
index 1f8cc0f..bbe9457 100644
--- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/DockerClusterRabbitMQExtension.java
+++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/DockerClusterRabbitMQExtension.java
@@ -18,7 +18,8 @@
  ****************************************************************/
 package org.apache.james.queue.rabbitmq;
 
-import org.apache.commons.codec.digest.DigestUtils;
+import java.nio.charset.StandardCharsets;
+
 import org.apache.james.util.Runnables;
 import org.junit.jupiter.api.extension.AfterEachCallback;
 import org.junit.jupiter.api.extension.BeforeEachCallback;
@@ -30,6 +31,7 @@ import org.testcontainers.containers.Network;
 
 import com.github.fge.lambdas.Throwing;
 import com.google.common.collect.ImmutableList;
+import com.google.common.hash.Hashing;
 import com.rabbitmq.client.Address;
 
 public class DockerClusterRabbitMQExtension implements BeforeEachCallback, AfterEachCallback, ParameterResolver {
@@ -42,7 +44,7 @@ public class DockerClusterRabbitMQExtension implements BeforeEachCallback, After
 
     @Override
     public void beforeEach(ExtensionContext context) {
-        String cookie = DigestUtils.sha1Hex("secret cookie here");
+        String cookie = Hashing.sha1().hashString("secret cookie here", StandardCharsets.UTF_8).toString();
 
         network = Network.NetworkImpl.builder()
             .enableIpv6(false)


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org