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")) );