Skip to content

Commit 160ae58

Browse files
authored
Merge pull request #5799 from getsentry/feat/data-collection-resolver
feat(core): [Data Collection 3] Add policy resolver
2 parents c4a43d9 + 140a666 commit 160ae58

4 files changed

Lines changed: 404 additions & 0 deletions

File tree

‎sentry/api/sentry.api‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,22 @@ public final class io/sentry/DataCollection$HttpHeaders {
415415
public fun setResponse (Lio/sentry/KeyValueCollectionBehavior;)V
416416
}
417417

418+
public final class io/sentry/DataCollectionResolver {
419+
public fun getCookies ()Lio/sentry/KeyValueCollectionBehavior;
420+
public fun getHttpRequestHeaders ()Lio/sentry/KeyValueCollectionBehavior;
421+
public fun getHttpResponseHeaders ()Lio/sentry/KeyValueCollectionBehavior;
422+
public fun getUrlQueryParams ()Lio/sentry/KeyValueCollectionBehavior;
423+
public fun isDataCollectionConfigured ()Z
424+
public fun isDatabaseQueryData ()Z
425+
public fun isGraphqlDocument ()Z
426+
public fun isGraphqlVariables ()Z
427+
public fun isIncomingRequestBody ()Z
428+
public fun isIncomingResponseBody ()Z
429+
public fun isOutgoingRequestBody ()Z
430+
public fun isOutgoingResponseBody ()Z
431+
public fun isUserInfo ()Z
432+
}
433+
418434
public final class io/sentry/DateUtils {
419435
public static fun dateToSeconds (Ljava/util/Date;)D
420436
public static fun doubleToBigDecimal (D)Ljava/math/BigDecimal;
@@ -3696,6 +3712,7 @@ public class io/sentry/SentryOptions {
36963712
public fun getContinuousProfiler ()Lio/sentry/IContinuousProfiler;
36973713
public fun getCron ()Lio/sentry/SentryOptions$Cron;
36983714
public fun getDataCollection ()Lio/sentry/DataCollection;
3715+
public fun getDataCollectionResolver ()Lio/sentry/DataCollectionResolver;
36993716
public fun getDateProvider ()Lio/sentry/SentryDateProvider;
37003717
public fun getDeadlineTimeout ()J
37013718
public fun getDebugMetaLoader ()Lio/sentry/internal/debugmeta/IDebugMetaLoader;
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package io.sentry;
2+
3+
import java.util.Set;
4+
import org.jetbrains.annotations.ApiStatus;
5+
import org.jetbrains.annotations.NotNull;
6+
import org.jetbrains.annotations.Nullable;
7+
8+
/** Resolves effective Data Collection policies for SDK integrations. */
9+
@ApiStatus.Internal
10+
public final class DataCollectionResolver {
11+
12+
private static final @NotNull KeyValueCollectionBehavior OFF = KeyValueCollectionBehavior.off();
13+
private static final @NotNull KeyValueCollectionBehavior EMPTY_DENY_LIST =
14+
KeyValueCollectionBehavior.denyList();
15+
16+
private final @NotNull SentryOptions options;
17+
18+
DataCollectionResolver(final @NotNull SentryOptions options) {
19+
this.options = options;
20+
}
21+
22+
public boolean isDataCollectionConfigured() {
23+
return options.getDataCollection().isExplicitlyConfigured();
24+
}
25+
26+
public boolean isUserInfo() {
27+
return explicitOrSendDefaultPii(options.getDataCollection().getUserInfo(), true);
28+
}
29+
30+
public boolean isDatabaseQueryData() {
31+
return explicitOrSendDefaultPii(options.getDataCollection().getDatabaseQueryData(), true);
32+
}
33+
34+
public boolean isGraphqlDocument() {
35+
return explicitOrSendDefaultPii(options.getDataCollection().getGraphql().getDocument(), true);
36+
}
37+
38+
public boolean isGraphqlVariables() {
39+
return explicitOrSendDefaultPii(options.getDataCollection().getGraphql().getVariables(), true);
40+
}
41+
42+
public @NotNull KeyValueCollectionBehavior getCookies() {
43+
final @NotNull DataCollection dataCollection = options.getDataCollection();
44+
final @Nullable KeyValueCollectionBehavior cookies = dataCollection.getCookies();
45+
46+
if (cookies != null) {
47+
return cookies;
48+
}
49+
if (isDataCollectionConfigured()) {
50+
return EMPTY_DENY_LIST;
51+
}
52+
return options.isSendDefaultPii() ? EMPTY_DENY_LIST : OFF;
53+
}
54+
55+
public @NotNull KeyValueCollectionBehavior getUrlQueryParams() {
56+
return explicitOrEmptyDenyList(options.getDataCollection().getUrlQueryParams());
57+
}
58+
59+
public @NotNull KeyValueCollectionBehavior getHttpRequestHeaders() {
60+
return explicitOrEmptyDenyList(options.getDataCollection().getHttpHeaders().getRequest());
61+
}
62+
63+
public @NotNull KeyValueCollectionBehavior getHttpResponseHeaders() {
64+
return explicitOrEmptyDenyList(options.getDataCollection().getHttpHeaders().getResponse());
65+
}
66+
67+
public boolean isIncomingRequestBody() {
68+
return isHttpBodyEnabled(HttpBodyType.INCOMING_REQUEST, options.isSendDefaultPii());
69+
}
70+
71+
public boolean isOutgoingRequestBody() {
72+
return isHttpBodyEnabled(HttpBodyType.OUTGOING_REQUEST, true);
73+
}
74+
75+
public boolean isIncomingResponseBody() {
76+
return isHttpBodyEnabled(HttpBodyType.INCOMING_RESPONSE, true);
77+
}
78+
79+
public boolean isOutgoingResponseBody() {
80+
return isHttpBodyEnabled(HttpBodyType.OUTGOING_RESPONSE, options.isSendDefaultPii());
81+
}
82+
83+
private boolean explicitOrSendDefaultPii(
84+
final @Nullable Boolean explicit, final boolean defaultValue) {
85+
if (explicit != null) {
86+
return explicit;
87+
}
88+
return isDataCollectionConfigured() ? defaultValue : options.isSendDefaultPii();
89+
}
90+
91+
private @NotNull KeyValueCollectionBehavior explicitOrEmptyDenyList(
92+
final @Nullable KeyValueCollectionBehavior explicit) {
93+
return explicit != null ? explicit : EMPTY_DENY_LIST;
94+
}
95+
96+
private boolean isHttpBodyEnabled(
97+
final @NotNull HttpBodyType bodyType, final boolean legacyFallback) {
98+
final @NotNull DataCollection dataCollection = options.getDataCollection();
99+
final @Nullable Set<HttpBodyType> httpBodies = dataCollection.getHttpBodies();
100+
if (httpBodies != null) {
101+
return httpBodies.contains(bodyType);
102+
}
103+
return isDataCollectionConfigured() || legacyFallback;
104+
}
105+
}

‎sentry/src/main/java/io/sentry/SentryOptions.java‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,9 @@ public class SentryOptions {
340340

341341
private @NotNull DataCollection dataCollection = new DataCollection(false);
342342

343+
private final @NotNull DataCollectionResolver dataCollectionResolver =
344+
new DataCollectionResolver(this);
345+
343346
/** SSLSocketFactory for self-signed certificate trust * */
344347
private @Nullable SSLSocketFactory sslSocketFactory;
345348

@@ -1720,6 +1723,12 @@ public void setDataCollection(final @NotNull DataCollection dataCollection) {
17201723
}
17211724
}
17221725

1726+
/** Returns the Data Collection policy resolver used by SDK integrations. */
1727+
@ApiStatus.Internal
1728+
public @NotNull DataCollectionResolver getDataCollectionResolver() {
1729+
return dataCollectionResolver;
1730+
}
1731+
17231732
/**
17241733
* Adds a Scope observer
17251734
*

0 commit comments

Comments
 (0)