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 <[email protected]> Authored: Tue Jul 17 16:23:08 2018 +0200 Committer: Matthieu Baechler <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
