From 642543f367852b37cb1ba97cf6f9964133c6f48c Mon Sep 17 00:00:00 2001 From: Ivan Tustanivskyi Date: Tue, 4 Nov 2025 15:22:40 +0200 Subject: [PATCH 1/3] feat: add runtime API to query user consent requirement --- include/sentry.h | 10 ++++++++++ src/sentry_core.c | 10 ++++++++++ tests/unit/test_consent.c | 31 +++++++++++++++++++++++++++++++ tests/unit/tests.inc | 1 + 4 files changed, 52 insertions(+) diff --git a/include/sentry.h b/include/sentry.h index 7e69e0105..1ba6ec2ec 100644 --- a/include/sentry.h +++ b/include/sentry.h @@ -1711,6 +1711,16 @@ SENTRY_API void sentry_user_consent_reset(void); */ SENTRY_API sentry_user_consent_t sentry_user_consent_get(void); +/** + * Checks whether user consent is required. + * + * This returns the value that was configured via + * `sentry_options_set_require_user_consent` during initialization. + * + * Returns 1 if user consent is required, 0 otherwise. + */ +SENTRY_API int sentry_user_consent_is_required(void); + /** * A sentry Scope. * diff --git a/src/sentry_core.c b/src/sentry_core.c index 85b6185ed..a5f8c6004 100644 --- a/src/sentry_core.c +++ b/src/sentry_core.c @@ -456,6 +456,16 @@ sentry_user_consent_get(void) return rv; } +int +sentry_user_consent_is_required(void) +{ + int required = 0; + SENTRY_WITH_OPTIONS (options) { + required = options->require_user_consent; + } + return required; +} + void sentry__capture_envelope( sentry_transport_t *transport, sentry_envelope_t *envelope) diff --git a/tests/unit/test_consent.c b/tests/unit/test_consent.c index 7986fc9d3..fbe9a5910 100644 --- a/tests/unit/test_consent.c +++ b/tests/unit/test_consent.c @@ -11,6 +11,16 @@ init_consenting_sentry(void) sentry_init(opts); } +static void +init_not_consenting_sentry(void) +{ + sentry_options_t *opts = sentry_options_new(); + sentry_options_set_database_path(opts, SENTRY_TEST_PATH_PREFIX ".test-db"); + sentry_options_set_dsn(opts, "http://foo@127.0.0.1/42"); + sentry_options_set_require_user_consent(opts, false); + sentry_init(opts); +} + SENTRY_TEST(basic_consent_tracking) { sentry_path_t *path @@ -54,3 +64,24 @@ SENTRY_TEST(basic_consent_tracking) sentry__path_remove_all(path); sentry__path_free(path); } + +SENTRY_TEST(query_consent_requirement) +{ + sentry_path_t *path + = sentry__path_from_str(SENTRY_TEST_PATH_PREFIX ".test-db"); + TEST_ASSERT(!!path); + sentry__path_remove_all(path); + + // Test when consent is NOT required + init_not_consenting_sentry(); + TEST_CHECK_INT_EQUAL(sentry_user_consent_is_required(), 0); + sentry_close(); + + // Test when consent IS required + init_consenting_sentry(); + TEST_CHECK_INT_EQUAL(sentry_user_consent_is_required(), 1); + sentry_close(); + + sentry__path_remove_all(path); + sentry__path_free(path); +} diff --git a/tests/unit/tests.inc b/tests/unit/tests.inc index cdce6a715..01e18bc7c 100644 --- a/tests/unit/tests.inc +++ b/tests/unit/tests.inc @@ -8,6 +8,7 @@ XX(attachments_bytes) XX(attachments_extend) XX(background_worker) XX(basic_consent_tracking) +XX(query_consent_requirement) XX(basic_function_transport) XX(basic_function_transport_transaction) XX(basic_function_transport_transaction_ts) From 6867435301971a7dec18799b5ca6f951cb0831bd Mon Sep 17 00:00:00 2001 From: Ivan Tustanivskyi Date: Tue, 4 Nov 2025 15:24:56 +0200 Subject: [PATCH 2/3] update changelog --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 356b9ede8..d533b0b15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Unreleased + +**Features**: + +- Add runtime API to query user consent requirement ([#1443](https://github.com/getsentry/sentry-native/pull/1443)) + ## 0.12.1 **Fixes**: From 9ad717ab2bee61608d53e170ea69530959384796 Mon Sep 17 00:00:00 2001 From: Ivan Tustanivskyi Date: Wed, 5 Nov 2025 08:53:20 +0200 Subject: [PATCH 3/3] Add test for init without explicit consent configuration --- tests/unit/test_consent.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tests/unit/test_consent.c b/tests/unit/test_consent.c index fbe9a5910..2d4b20388 100644 --- a/tests/unit/test_consent.c +++ b/tests/unit/test_consent.c @@ -72,7 +72,15 @@ SENTRY_TEST(query_consent_requirement) TEST_ASSERT(!!path); sentry__path_remove_all(path); - // Test when consent is NOT required + // Test default behavior when require_user_consent is not set + sentry_options_t *opts = sentry_options_new(); + sentry_options_set_database_path(opts, SENTRY_TEST_PATH_PREFIX ".test-db"); + sentry_options_set_dsn(opts, "http://foo@127.0.0.1/42"); + sentry_init(opts); + TEST_CHECK_INT_EQUAL(sentry_user_consent_is_required(), 0); + sentry_close(); + + // Test when consent is explicitly NOT required init_not_consenting_sentry(); TEST_CHECK_INT_EQUAL(sentry_user_consent_is_required(), 0); sentry_close();