diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ec6671b8bc..891afe0c0e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,9 +12,10 @@ * Fix: Initialize Logback after context refreshes (#1129) * Ref: Return NoOpTransaction instead of null (#1126) * Fix: Do not crash when passing null values to @Nullable methods, eg User and Scope -* Enhancement: Send user.ip_address = {{auto}} when sendDefaultPii is true +* Enhancement: Send user.ip_address = {{auto}} when sendDefaultPii is true (#1015) * Fix: Resolving dashed properties from external configuration -* Feat: Read `uncaught.handler.enabled` property from the external configuration +* Feat: Read `uncaught.handler.enabled` property from the external configuration +* Fix: Consider {{ auto }} as a default ip address (#1015) # 4.0.0-alpha.2 diff --git a/sentry-spring/src/main/java/io/sentry/spring/SentryUserProviderEventProcessor.java b/sentry-spring/src/main/java/io/sentry/spring/SentryUserProviderEventProcessor.java index f44a17ffda3..300fc2d3b2a 100644 --- a/sentry-spring/src/main/java/io/sentry/spring/SentryUserProviderEventProcessor.java +++ b/sentry-spring/src/main/java/io/sentry/spring/SentryUserProviderEventProcessor.java @@ -1,7 +1,7 @@ package io.sentry.spring; import io.sentry.EventProcessor; -import io.sentry.MainEventProcessor; +import io.sentry.IpAddressUtils; import io.sentry.SentryEvent; import io.sentry.SentryOptions; import io.sentry.protocol.User; @@ -46,8 +46,7 @@ public SentryEvent process(final @NotNull SentryEvent event, final @Nullable Obj } if (options.isSendDefaultPii()) { final User existingUser = event.getUser(); - if (existingUser != null - && MainEventProcessor.DEFAULT_IP_ADDRESS.equals(existingUser.getIpAddress())) { + if (existingUser != null && IpAddressUtils.isDefault(existingUser.getIpAddress())) { // unset {{auto}} as it would set the server's ip address as a user ip address existingUser.setIpAddress(null); } diff --git a/sentry/api/sentry.api b/sentry/api/sentry.api index 7d153a8a272..a48ff370cf5 100644 --- a/sentry/api/sentry.api +++ b/sentry/api/sentry.api @@ -310,6 +310,10 @@ public abstract interface class io/sentry/Integration { public abstract fun register (Lio/sentry/IHub;Lio/sentry/SentryOptions;)V } +public final class io/sentry/IpAddressUtils { + public static fun isDefault (Ljava/lang/String;)Z +} + public final class io/sentry/MainEventProcessor : io/sentry/EventProcessor { public static final field DEFAULT_IP_ADDRESS Ljava/lang/String; public fun process (Lio/sentry/SentryEvent;Ljava/lang/Object;)Lio/sentry/SentryEvent; diff --git a/sentry/src/main/java/io/sentry/IpAddressUtils.java b/sentry/src/main/java/io/sentry/IpAddressUtils.java new file mode 100644 index 00000000000..7562ddf7a6e --- /dev/null +++ b/sentry/src/main/java/io/sentry/IpAddressUtils.java @@ -0,0 +1,19 @@ +package io.sentry; + +import java.util.Arrays; +import java.util.List; +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.Nullable; + +@ApiStatus.Internal +public final class IpAddressUtils { + static final String DEFAULT_IP_ADDRESS = "{{auto}}"; + private static final List DEFAULT_IP_ADDRESS_VALID_VALUES = + Arrays.asList(DEFAULT_IP_ADDRESS, "{{ auto }}"); + + private IpAddressUtils() {} + + public static boolean isDefault(final @Nullable String ipAddress) { + return ipAddress != null && DEFAULT_IP_ADDRESS_VALID_VALUES.contains(ipAddress); + } +} diff --git a/sentry/src/main/java/io/sentry/MainEventProcessor.java b/sentry/src/main/java/io/sentry/MainEventProcessor.java index 6440a88ba88..034bcb4a143 100644 --- a/sentry/src/main/java/io/sentry/MainEventProcessor.java +++ b/sentry/src/main/java/io/sentry/MainEventProcessor.java @@ -133,10 +133,10 @@ private void processNonCachedEvent(final @NotNull SentryEvent event) { if (options.isSendDefaultPii()) { if (event.getUser() == null) { final User user = new User(); - user.setIpAddress(DEFAULT_IP_ADDRESS); + user.setIpAddress(IpAddressUtils.DEFAULT_IP_ADDRESS); event.setUser(user); } else if (event.getUser().getIpAddress() == null) { - event.getUser().setIpAddress(DEFAULT_IP_ADDRESS); + event.getUser().setIpAddress(IpAddressUtils.DEFAULT_IP_ADDRESS); } } } diff --git a/sentry/src/test/java/io/sentry/IpAddressUtilsTest.kt b/sentry/src/test/java/io/sentry/IpAddressUtilsTest.kt new file mode 100644 index 00000000000..56dd1bb5f4b --- /dev/null +++ b/sentry/src/test/java/io/sentry/IpAddressUtilsTest.kt @@ -0,0 +1,23 @@ +package io.sentry + +import kotlin.test.Test +import kotlin.test.assertFalse +import kotlin.test.assertTrue + +class IpAddressUtilsTest { + + @Test + fun `{{auto}} is considered a default address`() { + assertTrue(IpAddressUtils.isDefault("{{auto}}")) + } + + @Test + fun `{{ auto }} is considered a default address`() { + assertTrue(IpAddressUtils.isDefault("{{ auto }}")) + } + + @Test + fun `real ip address is considered not a default address`() { + assertFalse(IpAddressUtils.isDefault("192.168.0.1")) + } +}