Skip to content

Commit

Permalink
feat(Integrations): update user login and signup events collection (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
Leiyks authored Jan 20, 2025
1 parent 6b3218e commit 7a0d358
Show file tree
Hide file tree
Showing 94 changed files with 1,537 additions and 483 deletions.
582 changes: 423 additions & 159 deletions appsec/src/extension/tags.c

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions appsec/src/extension/user_tracking.c
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ bool dd_parse_user_collection_mode(
return true;
}

zend_string *nullable dd_user_id_anonymize(zend_string *nonnull user_id)
zend_string *nullable dd_user_info_anonymize(zend_string *nonnull user_info)
{
zend_string *digest;
const php_hash_ops *ops;
Expand Down Expand Up @@ -215,7 +215,7 @@ zend_string *nullable dd_user_id_anonymize(zend_string *nonnull user_id)
#endif

ops->hash_update(
context, (unsigned char *)ZSTR_VAL(user_id), ZSTR_LEN(user_id));
context, (unsigned char *)ZSTR_VAL(user_info), ZSTR_LEN(user_info));

digest = zend_string_alloc(ops->digest_size, 0);
ops->hash_final((unsigned char *)ZSTR_VAL(digest), context);
Expand Down
2 changes: 1 addition & 1 deletion appsec/src/extension/user_tracking.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ void dd_find_and_apply_verdict_for_user(zend_string *nonnull user_id);
bool dd_parse_user_collection_mode(
zai_str value, zval *nonnull decoded_value, bool persistent);

zend_string*nullable dd_user_id_anonymize(zend_string *nonnull user_id);
zend_string *nullable dd_user_info_anonymize(zend_string *nonnull user_info);

user_collection_mode dd_get_user_collection_mode(void);
zend_string *nonnull dd_get_user_collection_mode_zstr(void);
2 changes: 1 addition & 1 deletion appsec/tests/extension/headers_collection_03.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ $helper = Helper::createInitedRun([
rinit();
$helper->get_commands(); //ignore

track_user_signup_event("1234", [], false);
track_user_signup_event("1234", []);

rshutdown();
$helper->get_commands(); //ignore
Expand Down
2 changes: 1 addition & 1 deletion appsec/tests/extension/headers_collection_04.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ $helper = Helper::createInitedRun([
rinit();
$helper->get_commands(); //ignore

track_user_login_success_event("1234", [], false);
track_user_login_success_event("1234", []);

rshutdown();
$helper->get_commands(); //ignore
Expand Down
2 changes: 1 addition & 1 deletion appsec/tests/extension/headers_collection_05.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ $helper = Helper::createInitedRun([
rinit();
$helper->get_commands(); //ignore

track_user_login_failure_event("1234", true, ['email' => 'some@email.com'], false);
track_user_login_failure_event("1234", true, ['email' => 'some@email.com']);

rshutdown();
$helper->get_commands(); //ignore
Expand Down
2 changes: 1 addition & 1 deletion appsec/tests/extension/headers_collection_06.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ $helper = Helper::createInitedRun([
rinit();
$helper->get_commands(); //ignore

track_user_signup_event("1234", [], true);
track_user_signup_event("1234", []);

rshutdown();
$helper->get_commands(); //ignore
Expand Down
2 changes: 1 addition & 1 deletion appsec/tests/extension/headers_collection_07.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ $helper = Helper::createInitedRun([
rinit();
$helper->get_commands(); //ignore

track_user_login_success_event("1234", [], true);
track_user_login_success_event("1234", []);

rshutdown();
$helper->get_commands(); //ignore
Expand Down
2 changes: 1 addition & 1 deletion appsec/tests/extension/headers_collection_08.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ $helper = Helper::createInitedRun([
rinit();
$helper->get_commands(); //ignore

track_user_login_failure_event("1234", true, ['email' => 'some@email.com'], true);
track_user_login_failure_event("1234", true, ['email' => 'some@email.com']);

rshutdown();
$helper->get_commands(); //ignore
Expand Down
2 changes: 1 addition & 1 deletion appsec/tests/extension/headers_collection_09.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ $helper = Helper::createInitedRun([
rinit();
$helper->get_commands(); //ignore

track_user_signup_event("1234", [], true);
track_user_signup_event("1234", []);

rshutdown();
$helper->get_commands(); //ignore
Expand Down
2 changes: 1 addition & 1 deletion appsec/tests/extension/headers_collection_10.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ $helper = Helper::createInitedRun([
rinit();
$helper->get_commands(); //ignore

track_user_login_success_event("1234", [], true);
track_user_login_success_event("1234", []);

rshutdown();
$helper->get_commands(); //ignore
Expand Down
2 changes: 1 addition & 1 deletion appsec/tests/extension/headers_collection_11.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ $helper = Helper::createInitedRun([
rinit();
$helper->get_commands(); //ignore

track_user_login_failure_event("1234", true, ['email' => 'some@email.com'], true);
track_user_login_failure_event("1234", true, ['email' => 'some@email.com']);

rshutdown();
$helper->get_commands(); //ignore
Expand Down
4 changes: 2 additions & 2 deletions appsec/tests/extension/headers_collection_12.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ $helper = Helper::createInitedRun([
rinit();
$helper->get_commands(); //ignore

track_user_login_failure_event("1234", true, ['email' => 'some@email.com'], false);
track_user_login_failure_event("1234", true, ['email' => 'some@email.com'], true);
track_user_login_failure_event("1234", true, ['email' => 'some@email.com']);
track_user_login_failure_event("1234", true, ['email' => 'some@email.com']);

rshutdown();
$helper->get_commands(); //ignore
Expand Down
4 changes: 2 additions & 2 deletions appsec/tests/extension/headers_collection_13.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ $helper = Helper::createInitedRun([
rinit();
$helper->get_commands(); //ignore

track_user_login_failure_event("1234", true, ['email' => 'some@email.com'], true);
track_user_login_failure_event("1234", true, ['email' => 'some@email.com'], false);
track_user_login_failure_event("1234", true, ['email' => 'some@email.com']);
track_user_login_failure_event("1234", true, ['email' => 'some@email.com']);

rshutdown();
$helper->get_commands(); //ignore
Expand Down
6 changes: 4 additions & 2 deletions appsec/tests/extension/track_user_login_failure_event.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ include __DIR__ . '/inc/ddtrace_version.php';

ddtrace_version_at_least('0.79.0');

track_user_login_failure_event("Admin", false,
track_user_login_failure_event("sdkID", false,
[
"value" => "something",
"metadata" => "some other metadata",
Expand All @@ -34,13 +34,15 @@ root_span_get_meta():
Array
(
[runtime-id] => %s
[appsec.events.users.login.failure.usr.id] => Admin
[appsec.events.users.login.failure.usr.id] => sdkID
[appsec.events.users.login.failure.usr.login] => sdkID
[appsec.events.users.login.failure.track] => true
[_dd.appsec.events.users.login.failure.sdk] => true
[appsec.events.users.login.failure.value] => something
[appsec.events.users.login.failure.metadata] => some other metadata
[appsec.events.users.login.failure.email] => noneofyour@business.com
[appsec.events.users.login.failure.usr.exists] => false
[server.business_logic.users.login.failure] => null
[_dd.runtime_family] => php
[_dd.p.dm] => -4
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,18 @@ DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE=anon
--FILE--
<?php
use function datadog\appsec\testing\root_span_get_meta;
use function datadog\appsec\track_user_login_failure_event;
use function datadog\appsec\track_user_login_failure_event_automated;
include __DIR__ . '/inc/ddtrace_version.php';

ddtrace_version_at_least('0.79.0');

track_user_login_failure_event("1234",
track_user_login_failure_event_automated("login", "automatedID",
true,
[
"value" => "something",
"metadata" => "some other metadata",
"email" => "noneofyour@business.com"
]
, true
);

echo "root_span_get_meta():\n";
Expand All @@ -31,8 +30,12 @@ root_span_get_meta():
Array
(
[runtime-id] => %s
[appsec.events.users.login.failure.usr.id] => anon_03ac674216f3e15c761ee1a5e255f067
[appsec.events.users.login.failure.track] => true
[appsec.events.users.login.failure.usr.id] => anon_b3ddafd7029d645b44fb990eea55b003
[_dd.appsec.usr.id] => anon_b3ddafd7029d645b44fb990eea55b003
[_dd.appsec.events.users.login.failure.auto.mode] => anonymization
[appsec.events.users.login.failure.usr.login] => anon_428821350e9691491f616b754cd8315f
[_dd.appsec.usr.login] => anon_428821350e9691491f616b754cd8315f
[appsec.events.users.login.failure.track] => true
[appsec.events.users.login.failure.usr.exists] => true
[server.business_logic.users.login.failure] => null
)
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,18 @@ DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING=safe
--FILE--
<?php
use function datadog\appsec\testing\root_span_get_meta;
use function datadog\appsec\track_user_login_failure_event;
use function datadog\appsec\track_user_login_failure_event_automated;
include __DIR__ . '/inc/ddtrace_version.php';

ddtrace_version_at_least('0.79.0');

track_user_login_failure_event("1234",
track_user_login_failure_event_automated("login", "automatedID",
true,
[
"value" => "something",
"metadata" => "some other metadata",
"email" => "noneofyour@business.com"
]
, true
);

echo "root_span_get_meta():\n";
Expand All @@ -31,8 +30,12 @@ root_span_get_meta():
Array
(
[runtime-id] => %s
[appsec.events.users.login.failure.usr.id] => anon_03ac674216f3e15c761ee1a5e255f067
[appsec.events.users.login.failure.track] => true
[appsec.events.users.login.failure.usr.id] => anon_b3ddafd7029d645b44fb990eea55b003
[_dd.appsec.usr.id] => anon_b3ddafd7029d645b44fb990eea55b003
[_dd.appsec.events.users.login.failure.auto.mode] => anonymization
[appsec.events.users.login.failure.usr.login] => anon_428821350e9691491f616b754cd8315f
[_dd.appsec.usr.login] => anon_428821350e9691491f616b754cd8315f
[appsec.events.users.login.failure.track] => true
[appsec.events.users.login.failure.usr.exists] => true
[server.business_logic.users.login.failure] => null
)
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,18 @@ DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE=anonymization
--FILE--
<?php
use function datadog\appsec\testing\root_span_get_meta;
use function datadog\appsec\track_user_login_failure_event;
use function datadog\appsec\track_user_login_failure_event_automated;
include __DIR__ . '/inc/ddtrace_version.php';

ddtrace_version_at_least('0.79.0');

track_user_login_failure_event("1234",
track_user_login_failure_event_automated("login", "automatedID",
true,
[
"value" => "something",
"metadata" => "some other metadata",
"email" => "noneofyour@business.com"
]
, true
);

echo "root_span_get_meta():\n";
Expand All @@ -31,8 +30,12 @@ root_span_get_meta():
Array
(
[runtime-id] => %s
[appsec.events.users.login.failure.usr.id] => anon_03ac674216f3e15c761ee1a5e255f067
[appsec.events.users.login.failure.track] => true
[appsec.events.users.login.failure.usr.id] => anon_b3ddafd7029d645b44fb990eea55b003
[_dd.appsec.usr.id] => anon_b3ddafd7029d645b44fb990eea55b003
[_dd.appsec.events.users.login.failure.auto.mode] => anonymization
[appsec.events.users.login.failure.usr.login] => anon_428821350e9691491f616b754cd8315f
[_dd.appsec.usr.login] => anon_428821350e9691491f616b754cd8315f
[appsec.events.users.login.failure.track] => true
[appsec.events.users.login.failure.usr.exists] => true
[server.business_logic.users.login.failure] => null
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
--TEST--
Track automated user login failure with anonymization mode and verify the tags in the root span
--INI--
extension=ddtrace.so
--ENV--
DD_APPSEC_ENABLED=1
DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE=anon
--FILE--
<?php
use function datadog\appsec\testing\root_span_get_meta;
use function datadog\appsec\track_user_login_failure_event_automated;
include __DIR__ . '/inc/ddtrace_version.php';

ddtrace_version_at_least('0.79.0');

track_user_login_failure_event_automated("", "automatedID",
true,
[
"value" => "something",
"metadata" => "some other metadata",
"email" => "noneofyour@business.com"
]
);

echo "root_span_get_meta():\n";
print_r(root_span_get_meta());
?>
--EXPECTF--
root_span_get_meta():
Array
(
[runtime-id] => %s
[appsec.events.users.login.failure.usr.id] => anon_b3ddafd7029d645b44fb990eea55b003
[_dd.appsec.usr.id] => anon_b3ddafd7029d645b44fb990eea55b003
[_dd.appsec.events.users.login.failure.auto.mode] => anonymization
[appsec.events.users.login.failure.track] => true
[appsec.events.users.login.failure.usr.exists] => true
[server.business_logic.users.login.failure] => null
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
--TEST--
Track automated user login failure with anonymization mode and verify the tags in the root span
--INI--
extension=ddtrace.so
--ENV--
DD_APPSEC_ENABLED=1
DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE=anon
--FILE--
<?php
use function datadog\appsec\testing\root_span_get_meta;
use function datadog\appsec\track_user_login_failure_event_automated;
include __DIR__ . '/inc/ddtrace_version.php';

ddtrace_version_at_least('0.79.0');

track_user_login_failure_event_automated("login", "",
true,
[
"value" => "something",
"metadata" => "some other metadata",
"email" => "noneofyour@business.com"
]
);

echo "root_span_get_meta():\n";
print_r(root_span_get_meta());
?>
--EXPECTF--
root_span_get_meta():
Array
(
[runtime-id] => %s
[_dd.appsec.events.users.login.failure.auto.mode] => anonymization
[appsec.events.users.login.failure.usr.login] => anon_428821350e9691491f616b754cd8315f
[_dd.appsec.usr.login] => anon_428821350e9691491f616b754cd8315f
[appsec.events.users.login.failure.track] => true
[appsec.events.users.login.failure.usr.exists] => true
[server.business_logic.users.login.failure] => null
)
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ DD_APPSEC_ENABLED=1
--FILE--
<?php
use function datadog\appsec\testing\root_span_get_meta;
use function datadog\appsec\track_user_login_failure_event;
use function datadog\appsec\track_user_login_failure_event_automated;
include __DIR__ . '/inc/ddtrace_version.php';

ddtrace_version_at_least('0.79.0');

track_user_login_failure_event("1234", true, ['something' => 'discarded'], true);
track_user_login_failure_event_automated("login", "automatedID", true, ['something' => 'discarded']);

echo "root_span_get_meta():\n";
print_r(root_span_get_meta());
Expand All @@ -22,8 +22,12 @@ root_span_get_meta():
Array
(
[runtime-id] => %s
[appsec.events.users.login.failure.usr.id] => 1234
[appsec.events.users.login.failure.track] => true
[appsec.events.users.login.failure.usr.id] => automatedID
[_dd.appsec.usr.id] => automatedID
[_dd.appsec.events.users.login.failure.auto.mode] => identification
[appsec.events.users.login.failure.usr.login] => login
[_dd.appsec.usr.login] => login
[appsec.events.users.login.failure.track] => true
[appsec.events.users.login.failure.usr.exists] => true
[server.business_logic.users.login.failure] => null
)
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,17 @@ DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING_ENABLED=0
--FILE--
<?php
use function datadog\appsec\testing\root_span_get_meta;
use function datadog\appsec\track_user_login_failure_event;
use function datadog\appsec\track_user_login_failure_event_automated;
include __DIR__ . '/inc/ddtrace_version.php';

ddtrace_version_at_least('0.79.0');

track_user_login_failure_event("Admin", true,
track_user_login_failure_event_automated("login", "automatedID", true,
[
"value" => "something",
"metadata" => "some other metadata",
"email" => "noneofyour@business.com"
], true);
]);

echo "root_span_get_meta():\n";
print_r(root_span_get_meta());
Expand Down
Loading

0 comments on commit 7a0d358

Please sign in to comment.