From f5b04a783e01d90bd6e9a75ad93b08ffb20fa1c5 Mon Sep 17 00:00:00 2001 From: Athou Date: Wed, 12 Jun 2024 16:09:30 +0200 Subject: [PATCH] remove commons-codec since we already have guava --- commafeed-server/pom.xml | 4 --- .../java/com/commafeed/backend/Digests.java | 29 +++++++++++++++++++ .../commafeed/backend/cache/CacheService.java | 5 ++-- .../commafeed/backend/feed/FeedFetcher.java | 4 +-- .../backend/feed/FeedRefreshUpdater.java | 4 +-- .../service/FeedEntryContentService.java | 6 ++-- .../backend/service/FeedEntryService.java | 5 ++-- .../backend/service/FeedService.java | 6 ++-- .../backend/service/UserService.java | 6 ++-- .../commafeed/frontend/resource/UserREST.java | 4 +-- .../com/commafeed/backend/DigestsTest.java | 18 ++++++++++++ .../backend/feed/FeedFetcherTest.java | 4 +-- .../commafeed/integration/rest/FeverIT.java | 4 +-- 13 files changed, 70 insertions(+), 29 deletions(-) create mode 100644 commafeed-server/src/main/java/com/commafeed/backend/Digests.java create mode 100644 commafeed-server/src/test/java/com/commafeed/backend/DigestsTest.java diff --git a/commafeed-server/pom.xml b/commafeed-server/pom.xml index f6d47f0e..eef47bbd 100644 --- a/commafeed-server/pom.xml +++ b/commafeed-server/pom.xml @@ -306,10 +306,6 @@ commons-collections4 4.4 - - commons-codec - commons-codec - org.apache.commons commons-math3 diff --git a/commafeed-server/src/main/java/com/commafeed/backend/Digests.java b/commafeed-server/src/main/java/com/commafeed/backend/Digests.java new file mode 100644 index 00000000..09369a14 --- /dev/null +++ b/commafeed-server/src/main/java/com/commafeed/backend/Digests.java @@ -0,0 +1,29 @@ +package com.commafeed.backend; + +import java.nio.charset.StandardCharsets; + +import com.google.common.hash.HashFunction; +import com.google.common.hash.Hashing; + +import lombok.experimental.UtilityClass; + +@UtilityClass +@SuppressWarnings("deprecation") +public class Digests { + + public static String sha1Hex(byte[] input) { + return hashBytesToHex(Hashing.sha1(), input); + } + + public static String sha1Hex(String input) { + return hashBytesToHex(Hashing.sha1(), input.getBytes(StandardCharsets.UTF_8)); + } + + public static String md5Hex(String input) { + return hashBytesToHex(Hashing.md5(), input.getBytes(StandardCharsets.UTF_8)); + } + + private static String hashBytesToHex(HashFunction function, byte[] input) { + return function.hashBytes(input).toString(); + } +} diff --git a/commafeed-server/src/main/java/com/commafeed/backend/cache/CacheService.java b/commafeed-server/src/main/java/com/commafeed/backend/cache/CacheService.java index dfa574f0..106927ef 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/cache/CacheService.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/cache/CacheService.java @@ -3,8 +3,7 @@ package com.commafeed.backend.cache; import java.util.List; import java.util.Set; -import org.apache.commons.codec.digest.DigestUtils; - +import com.commafeed.backend.Digests; import com.commafeed.backend.feed.parser.FeedParserResult.Entry; import com.commafeed.backend.model.Feed; import com.commafeed.backend.model.FeedSubscription; @@ -20,7 +19,7 @@ public abstract class CacheService { public abstract void setLastEntries(Feed feed, List entries); public String buildUniqueEntryKey(Entry entry) { - return DigestUtils.sha1Hex(entry.guid() + entry.url()); + return Digests.sha1Hex(entry.guid() + entry.url()); } // user categories diff --git a/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedFetcher.java b/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedFetcher.java index 7352930e..18f9f2a0 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedFetcher.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedFetcher.java @@ -5,8 +5,8 @@ import java.time.Instant; import java.util.Set; import org.apache.commons.codec.binary.StringUtils; -import org.apache.commons.codec.digest.DigestUtils; +import com.commafeed.backend.Digests; import com.commafeed.backend.HttpGetter; import com.commafeed.backend.HttpGetter.HttpResult; import com.commafeed.backend.HttpGetter.NotModifiedException; @@ -68,7 +68,7 @@ public class FeedFetcher { boolean lastModifiedHeaderValueChanged = !StringUtils.equals(lastModified, result.getLastModifiedSince()); boolean etagHeaderValueChanged = !StringUtils.equals(eTag, result.getETag()); - String hash = DigestUtils.sha1Hex(content); + String hash = Digests.sha1Hex(content); if (lastContentHash != null && lastContentHash.equals(hash)) { log.debug("content hash not modified: {}", feedUrl); throw new NotModifiedException("content hash not modified", diff --git a/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshUpdater.java b/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshUpdater.java index 2c33c90a..8f4424c7 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshUpdater.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshUpdater.java @@ -12,11 +12,11 @@ import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; -import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; import com.codahale.metrics.Meter; import com.codahale.metrics.MetricRegistry; +import com.commafeed.backend.Digests; import com.commafeed.backend.cache.CacheService; import com.commafeed.backend.dao.FeedSubscriptionDAO; import com.commafeed.backend.dao.UnitOfWork; @@ -89,7 +89,7 @@ public class FeedRefreshUpdater { // lock on content, make sure we are not updating the same entry // twice at the same time Content content = entry.content(); - String key2 = DigestUtils.sha1Hex(StringUtils.trimToEmpty(content.content() + content.title())); + String key2 = Digests.sha1Hex(StringUtils.trimToEmpty(content.content() + content.title())); Iterator iterator = locks.bulkGet(Arrays.asList(key1, key2)).iterator(); Lock lock1 = iterator.next(); diff --git a/commafeed-server/src/main/java/com/commafeed/backend/service/FeedEntryContentService.java b/commafeed-server/src/main/java/com/commafeed/backend/service/FeedEntryContentService.java index 0ada147a..1ad16ab5 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/service/FeedEntryContentService.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/service/FeedEntryContentService.java @@ -2,9 +2,9 @@ package com.commafeed.backend.service; import java.util.Optional; -import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; +import com.commafeed.backend.Digests; import com.commafeed.backend.dao.FeedEntryContentDAO; import com.commafeed.backend.feed.FeedUtils; import com.commafeed.backend.feed.parser.FeedParserResult.Content; @@ -42,8 +42,8 @@ public class FeedEntryContentService { private FeedEntryContent buildContent(Content content, String baseUrl) { FeedEntryContent entryContent = new FeedEntryContent(); - entryContent.setTitleHash(DigestUtils.sha1Hex(StringUtils.trimToEmpty(content.title()))); - entryContent.setContentHash(DigestUtils.sha1Hex(StringUtils.trimToEmpty(content.content()))); + entryContent.setTitleHash(Digests.sha1Hex(StringUtils.trimToEmpty(content.title()))); + entryContent.setContentHash(Digests.sha1Hex(StringUtils.trimToEmpty(content.content()))); entryContent.setTitle(FeedUtils.truncate(cleaningService.clean(content.title(), baseUrl, true), 2048)); entryContent.setContent(cleaningService.clean(content.content(), baseUrl, false)); entryContent.setAuthor(FeedUtils.truncate(cleaningService.clean(content.author(), baseUrl, true), 128)); diff --git a/commafeed-server/src/main/java/com/commafeed/backend/service/FeedEntryService.java b/commafeed-server/src/main/java/com/commafeed/backend/service/FeedEntryService.java index 1dc83198..c6762832 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/service/FeedEntryService.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/service/FeedEntryService.java @@ -3,8 +3,7 @@ package com.commafeed.backend.service; import java.time.Instant; import java.util.List; -import org.apache.commons.codec.digest.DigestUtils; - +import com.commafeed.backend.Digests; import com.commafeed.backend.cache.CacheService; import com.commafeed.backend.dao.FeedEntryDAO; import com.commafeed.backend.dao.FeedEntryStatusDAO; @@ -41,7 +40,7 @@ public class FeedEntryService { */ public FeedEntry findOrCreate(Feed feed, Entry entry) { String guid = FeedUtils.truncate(entry.guid(), 2048); - String guidHash = DigestUtils.sha1Hex(entry.guid()); + String guidHash = Digests.sha1Hex(entry.guid()); FeedEntry existing = feedEntryDAO.findExisting(guidHash, feed); if (existing != null) { return existing; diff --git a/commafeed-server/src/main/java/com/commafeed/backend/service/FeedService.java b/commafeed-server/src/main/java/com/commafeed/backend/service/FeedService.java index 02a34efb..c67c7148 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/service/FeedService.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/service/FeedService.java @@ -4,9 +4,9 @@ import java.io.IOException; import java.time.Instant; import java.util.Set; -import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.io.IOUtils; +import com.commafeed.backend.Digests; import com.commafeed.backend.dao.FeedDAO; import com.commafeed.backend.favicon.AbstractFaviconFetcher; import com.commafeed.backend.favicon.Favicon; @@ -39,7 +39,7 @@ public class FeedService { public synchronized Feed findOrCreate(String url) { String normalizedUrl = FeedUtils.normalizeURL(url); - String normalizedUrlHash = DigestUtils.sha1Hex(normalizedUrl); + String normalizedUrlHash = Digests.sha1Hex(normalizedUrl); Feed feed = feedDAO.findByUrl(normalizedUrl, normalizedUrlHash); if (feed == null) { feed = new Feed(); @@ -55,7 +55,7 @@ public class FeedService { public void save(Feed feed) { String normalized = FeedUtils.normalizeURL(feed.getUrl()); feed.setNormalizedUrl(normalized); - feed.setNormalizedUrlHash(DigestUtils.sha1Hex(normalized)); + feed.setNormalizedUrlHash(Digests.sha1Hex(normalized)); feed.setLastUpdated(Instant.now()); feed.setEtagHeader(FeedUtils.truncate(feed.getEtagHeader(), 255)); feedDAO.saveOrUpdate(feed); diff --git a/commafeed-server/src/main/java/com/commafeed/backend/service/UserService.java b/commafeed-server/src/main/java/com/commafeed/backend/service/UserService.java index d7cd1439..76a0df1c 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/service/UserService.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/service/UserService.java @@ -8,11 +8,11 @@ import java.util.Optional; import java.util.Set; import java.util.UUID; -import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; import com.commafeed.CommaFeedApplication; import com.commafeed.CommaFeedConfiguration; +import com.commafeed.backend.Digests; import com.commafeed.backend.dao.FeedCategoryDAO; import com.commafeed.backend.dao.FeedSubscriptionDAO; import com.commafeed.backend.dao.UserDAO; @@ -94,7 +94,7 @@ public class UserService { return Optional.empty(); } - String computedFeverApiKey = DigestUtils.md5Hex(user.getName() + ":" + user.getApiKey()); + String computedFeverApiKey = Digests.md5Hex(user.getName() + ":" + user.getApiKey()); if (!computedFeverApiKey.equals(feverApiKey)) { return Optional.empty(); } @@ -158,7 +158,7 @@ public class UserService { public String generateApiKey(User user) { byte[] key = encryptionService.getEncryptedPassword(UUID.randomUUID().toString(), user.getSalt()); - return DigestUtils.sha1Hex(key); + return Digests.sha1Hex(key); } public Set getRoles(User user) { diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/UserREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/UserREST.java index dac6c45d..3ab79050 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/UserREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/UserREST.java @@ -6,7 +6,6 @@ import java.util.Collections; import java.util.Optional; import java.util.UUID; -import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; import org.apache.hc.core5.net.URIBuilder; @@ -14,6 +13,7 @@ import org.apache.hc.core5.net.URIBuilder; import com.codahale.metrics.annotation.Timed; import com.commafeed.CommaFeedApplication; import com.commafeed.CommaFeedConfiguration; +import com.commafeed.backend.Digests; import com.commafeed.backend.dao.UserDAO; import com.commafeed.backend.dao.UserRoleDAO; import com.commafeed.backend.dao.UserSettingsDAO; @@ -292,7 +292,7 @@ public class UserREST { } try { - user.setRecoverPasswordToken(DigestUtils.sha1Hex(UUID.randomUUID().toString())); + user.setRecoverPasswordToken(Digests.sha1Hex(UUID.randomUUID().toString())); user.setRecoverPasswordTokenDate(Instant.now()); userDAO.saveOrUpdate(user); mailService.sendMail(user, "Password recovery", buildEmailContent(user)); diff --git a/commafeed-server/src/test/java/com/commafeed/backend/DigestsTest.java b/commafeed-server/src/test/java/com/commafeed/backend/DigestsTest.java new file mode 100644 index 00000000..c91a8845 --- /dev/null +++ b/commafeed-server/src/test/java/com/commafeed/backend/DigestsTest.java @@ -0,0 +1,18 @@ +package com.commafeed.backend; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class DigestsTest { + + @Test + void sha1Hex() { + Assertions.assertEquals("aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d", Digests.sha1Hex("hello")); + } + + @Test + void md5Hex() { + Assertions.assertEquals("5d41402abc4b2a76b9719d911017c592", Digests.md5Hex("hello")); + } + +} \ No newline at end of file diff --git a/commafeed-server/src/test/java/com/commafeed/backend/feed/FeedFetcherTest.java b/commafeed-server/src/test/java/com/commafeed/backend/feed/FeedFetcherTest.java index 24cafbf3..b47ed808 100644 --- a/commafeed-server/src/test/java/com/commafeed/backend/feed/FeedFetcherTest.java +++ b/commafeed-server/src/test/java/com/commafeed/backend/feed/FeedFetcherTest.java @@ -3,7 +3,6 @@ package com.commafeed.backend.feed; import java.time.Instant; import java.util.Set; -import org.apache.commons.codec.digest.DigestUtils; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -17,6 +16,7 @@ import com.commafeed.backend.HttpGetter.HttpResult; import com.commafeed.backend.HttpGetter.NotModifiedException; import com.commafeed.backend.feed.parser.FeedParser; import com.commafeed.backend.urlprovider.FeedURLProvider; +import com.google.gwt.thirdparty.guava.common.hash.Hashing; @ExtendWith(MockitoExtension.class) class FeedFetcherTest { @@ -43,7 +43,7 @@ class FeedFetcherTest { String lastModified = "last-modified-1"; String etag = "etag-1"; byte[] content = "content".getBytes(); - String lastContentHash = DigestUtils.sha1Hex(content); + String lastContentHash = Hashing.sha1().hashBytes(content).toString(); Mockito.when(getter.getBinary(url, lastModified, etag, 20000)) .thenReturn(new HttpResult(content, "content-type", "last-modified-2", "etag-2", 20, null)); diff --git a/commafeed-server/src/test/java/com/commafeed/integration/rest/FeverIT.java b/commafeed-server/src/test/java/com/commafeed/integration/rest/FeverIT.java index ea117494..28e69020 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/rest/FeverIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/rest/FeverIT.java @@ -1,10 +1,10 @@ package com.commafeed.integration.rest; -import org.apache.commons.codec.digest.DigestUtils; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import com.commafeed.backend.Digests; import com.commafeed.frontend.model.UserModel; import com.commafeed.frontend.model.request.ProfileModificationRequest; import com.commafeed.frontend.resource.fever.FeverResponse; @@ -64,7 +64,7 @@ class FeverIT extends BaseIT { private FeverResponse fetch(String what, String apiKey) { Form form = new Form(); - form.param("api_key", DigestUtils.md5Hex("admin:" + apiKey)); + form.param("api_key", Digests.md5Hex("admin:" + apiKey)); form.param(what, "1"); return getClient().target(getApiBaseUrl() + "fever/user/{userId}") .resolveTemplate("userId", userId)