Skip to content

Commit 12cb3c6

Browse files
Tracking user account creation event in posthog (#2237)
* capture user account creation in posthog via apisix middleware * capture user account creation in posthog via apisix middleware * add $current_url * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Add PostHogEvents constant * update PostHogEvents to use Enum * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix flaky test * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * forgot value --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent 4c8d68d commit 12cb3c6

File tree

3 files changed

+34
-0
lines changed

3 files changed

+34
-0
lines changed

main/constants.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
"""main constants"""
22

3+
from enum import Enum
4+
35
from rest_framework import status
46

57
PERMISSION_DENIED_ERROR_TYPE = "PermissionDenied"
@@ -38,3 +40,11 @@
3840
"ul",
3941
}
4042
ALLOWED_HTML_ATTRIBUTES = {}
43+
44+
45+
class PostHogEvents(Enum):
46+
"""
47+
Enum for PostHog events
48+
"""
49+
50+
ACCOUNT_CREATED = "user_account_created"

main/middleware/apisix_user.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
from django.contrib.auth import get_user_model, login, logout
99
from django.contrib.auth.middleware import RemoteUserMiddleware
1010
from django.db.models import Q
11+
from posthog import Posthog
1112

1213
from authentication.api import user_created_actions
14+
from main.constants import PostHogEvents
1315

1416
log = logging.getLogger(__name__)
1517

@@ -99,6 +101,22 @@ def get_user_from_apisix_headers(request, decoded_headers, original_header):
99101
"get_user_from_apisix_headers: User %s not found, created new",
100102
global_id,
101103
)
104+
# Send user creation event to PostHog
105+
posthog = Posthog(
106+
settings.POSTHOG_PROJECT_API_KEY, host=settings.POSTHOG_API_HOST
107+
)
108+
posthog.capture(
109+
user.id,
110+
event=PostHogEvents.ACCOUNT_CREATED.value,
111+
properties={
112+
"$current_url": request.build_absolute_uri(),
113+
"global_id": global_id,
114+
"email": email,
115+
"first_name": decoded_headers.get("first_name", ""),
116+
"last_name": decoded_headers.get("last_name", ""),
117+
},
118+
)
119+
102120
user.set_unusable_password()
103121
user.is_active = True
104122
user.save()

main/middleware/apisix_user_test.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ def setup_test_database():
4444
def test_get_request(mocker, mock_login):
4545
"""Test that a valid request creates a new user."""
4646
close_old_connections()
47+
mocker.patch(
48+
"main.middleware.apisix_user.Posthog",
49+
mocker.Mock(
50+
capture=mocker.ANY,
51+
),
52+
)
4753
mock_request = mocker.Mock(
4854
META={
4955
"HTTP_X_USERINFO": b64encode(json.dumps(apisix_user_info).encode()),

0 commit comments

Comments
 (0)