From 5868d9969a2efa654822a1083bde134c85098462 Mon Sep 17 00:00:00 2001
From: sergey-signal <116032710+sergey-signal@users.noreply.github.com>
Date: Tue, 25 Oct 2022 08:48:56 -0700
Subject: [PATCH] minor changes to utility classes (#1127)
---
.../textsecuregcm/util/ByteUtil.java | 26 -------------------
.../textsecuregcm/util/ForwardedIpUtil.java | 24 ++++++++++++-----
.../util/ForwardedIpUtilTest.java | 2 ++
3 files changed, 19 insertions(+), 33 deletions(-)
delete mode 100644 service/src/main/java/org/whispersystems/textsecuregcm/util/ByteUtil.java
diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/util/ByteUtil.java b/service/src/main/java/org/whispersystems/textsecuregcm/util/ByteUtil.java
deleted file mode 100644
index 19aaed8aa..000000000
--- a/service/src/main/java/org/whispersystems/textsecuregcm/util/ByteUtil.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright 2013-2020 Signal Messenger, LLC
- * SPDX-License-Identifier: AGPL-3.0-only
- */
-
-package org.whispersystems.textsecuregcm.util;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
-public class ByteUtil {
-
- public static byte[] combine(byte[]... elements) {
- try {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
- for (byte[] element : elements) {
- baos.write(element);
- }
-
- return baos.toByteArray();
- } catch (IOException e) {
- throw new AssertionError(e);
- }
- }
-}
diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/util/ForwardedIpUtil.java b/service/src/main/java/org/whispersystems/textsecuregcm/util/ForwardedIpUtil.java
index 1dadb2ec6..2251d31e9 100644
--- a/service/src/main/java/org/whispersystems/textsecuregcm/util/ForwardedIpUtil.java
+++ b/service/src/main/java/org/whispersystems/textsecuregcm/util/ForwardedIpUtil.java
@@ -5,15 +5,21 @@
package org.whispersystems.textsecuregcm.util;
-import org.apache.commons.lang3.StringUtils;
import java.util.Optional;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import org.apache.commons.lang3.StringUtils;
/**
* Tools for working with chains of IP addresses in forwarding lists in HTTP headers.
*
* @see X-Forwarded-For - HTTP | MDN
*/
-public class ForwardedIpUtil {
+public final class ForwardedIpUtil {
+
+ private ForwardedIpUtil() {
+ // utility class
+ }
/**
* Returns the most recent proxy in a chain described by an {@code X-Forwarded-For} header.
@@ -23,11 +29,15 @@ public class ForwardedIpUtil {
* @return the IP address of the most recent proxy in the forwarding chain, or empty if none was found or
* {@code forwardedFor} was null
*/
- public static Optional getMostRecentProxy(final String forwardedFor) {
+ @Nonnull
+ public static Optional getMostRecentProxy(@Nullable final String forwardedFor) {
return Optional.ofNullable(forwardedFor)
- .filter(StringUtils::isNotBlank)
- .map(proxies -> proxies.split(","))
- .map(proxyArray -> proxyArray[proxyArray.length - 1])
- .map(String::trim);
+ .map(ff -> {
+ final int idx = forwardedFor.lastIndexOf(',') + 1;
+ return idx < forwardedFor.length()
+ ? forwardedFor.substring(idx).trim()
+ : null;
+ })
+ .filter(StringUtils::isNotBlank);
}
}
diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/util/ForwardedIpUtilTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/util/ForwardedIpUtilTest.java
index 6c5a8a71f..39dde54a6 100644
--- a/service/src/test/java/org/whispersystems/textsecuregcm/util/ForwardedIpUtilTest.java
+++ b/service/src/test/java/org/whispersystems/textsecuregcm/util/ForwardedIpUtilTest.java
@@ -28,6 +28,8 @@ class ForwardedIpUtilTest {
arguments(null, Optional.empty()),
arguments("", Optional.empty()),
arguments(" ", Optional.empty()),
+ arguments("203.0.113.195,", Optional.empty()),
+ arguments("203.0.113.195, ", Optional.empty()),
arguments("203.0.113.195", Optional.of("203.0.113.195")),
arguments("203.0.113.195, 70.41.3.18, 150.172.238.178", Optional.of("150.172.238.178"))
);