Skip to content

Commit dd83a4a

Browse files
committed
Add "impersonator" field to WorkOSAuthenticationResponse
1 parent e65ec1e commit dd83a4a

File tree

2 files changed

+55
-6
lines changed

2 files changed

+55
-6
lines changed

tests/test_user_management.py

+34-6
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,19 @@ def mock_auth_response(self):
140140

141141
return {"user": user, "organization_id": "org_12345"}
142142

143+
@pytest.fixture
144+
def mock_auth_response_with_impersonator(self):
145+
user = MockUser("user_01H7ZGXFP5C6BBQY6Z7277ZCT0").to_dict()
146+
147+
return {
148+
"user": user,
149+
"organization_id": "org_12345",
150+
"impersonator": {
151+
"email": "[email protected]",
152+
"reason": "Debugging an account issue."
153+
}
154+
}
155+
143156
@pytest.fixture
144157
def mock_magic_auth_challenge_response(self):
145158
return {
@@ -532,7 +545,7 @@ def test_authenticate_with_password(
532545
assert request["json"]["user_agent"] == user_agent
533546
assert request["json"]["ip_address"] == ip_address
534547
assert request["json"]["client_id"] == "client_b27needthisforssotemxo"
535-
assert request["json"]["client_secret"] == "sk_abdsomecharactersm284"
548+
assert request["json"]["client_secret"] == "sk_test"
536549
assert request["json"]["grant_type"] == "password"
537550

538551
def test_authenticate_with_code(self, capture_and_mock_request, mock_auth_response):
@@ -555,9 +568,24 @@ def test_authenticate_with_code(self, capture_and_mock_request, mock_auth_respon
555568
assert request["json"]["user_agent"] == user_agent
556569
assert request["json"]["ip_address"] == ip_address
557570
assert request["json"]["client_id"] == "client_b27needthisforssotemxo"
558-
assert request["json"]["client_secret"] == "sk_abdsomecharactersm284"
571+
assert request["json"]["client_secret"] == "sk_test"
559572
assert request["json"]["grant_type"] == "authorization_code"
560573

574+
def test_authenticate_impersonator_with_code(self, capture_and_mock_request, mock_auth_response_with_impersonator):
575+
code = "test_code"
576+
577+
url, request = capture_and_mock_request("post", mock_auth_response_with_impersonator, 200)
578+
579+
response = self.user_management.authenticate_with_code(
580+
code=code,
581+
)
582+
583+
print (response)
584+
assert url[0].endswith("user_management/authenticate")
585+
assert response["user"]["id"] == "user_01H7ZGXFP5C6BBQY6Z7277ZCT0"
586+
assert response["impersonator"]["email"] == "[email protected]"
587+
assert response["impersonator"]["reason"] == "Debugging an account issue."
588+
561589
def test_authenticate_with_magic_auth(
562590
self, capture_and_mock_request, mock_auth_response
563591
):
@@ -583,7 +611,7 @@ def test_authenticate_with_magic_auth(
583611
assert request["json"]["email"] == email
584612
assert request["json"]["ip_address"] == ip_address
585613
assert request["json"]["client_id"] == "client_b27needthisforssotemxo"
586-
assert request["json"]["client_secret"] == "sk_abdsomecharactersm284"
614+
assert request["json"]["client_secret"] == "sk_test"
587615
assert (
588616
request["json"]["grant_type"]
589617
== "urn:workos:oauth:grant-type:magic-auth:code"
@@ -617,7 +645,7 @@ def test_authenticate_with_email_verification(
617645
)
618646
assert request["json"]["ip_address"] == ip_address
619647
assert request["json"]["client_id"] == "client_b27needthisforssotemxo"
620-
assert request["json"]["client_secret"] == "sk_abdsomecharactersm284"
648+
assert request["json"]["client_secret"] == "sk_test"
621649
assert (
622650
request["json"]["grant_type"]
623651
== "urn:workos:oauth:grant-type:email-verification:code"
@@ -655,7 +683,7 @@ def test_authenticate_with_totp(self, capture_and_mock_request, mock_auth_respon
655683
)
656684
assert request["json"]["ip_address"] == ip_address
657685
assert request["json"]["client_id"] == "client_b27needthisforssotemxo"
658-
assert request["json"]["client_secret"] == "sk_abdsomecharactersm284"
686+
assert request["json"]["client_secret"] == "sk_test"
659687
assert request["json"]["grant_type"] == "urn:workos:oauth:grant-type:mfa-totp"
660688

661689
def test_authenticate_with_organization_selection(
@@ -686,7 +714,7 @@ def test_authenticate_with_organization_selection(
686714
)
687715
assert request["json"]["ip_address"] == ip_address
688716
assert request["json"]["client_id"] == "client_b27needthisforssotemxo"
689-
assert request["json"]["client_secret"] == "sk_abdsomecharactersm284"
717+
assert request["json"]["client_secret"] == "sk_test"
690718
assert (
691719
request["json"]["grant_type"]
692720
== "urn:workos:oauth:grant-type:organization-selection"

workos/resources/user_management.py

+21
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@ def construct_from_response(cls, response):
2121
user = WorkOSUser.construct_from_response(response["user"])
2222
authentication_response.user = user
2323

24+
if "impersonator" in response:
25+
impersonator = WorkOSImpersonator.construct_from_response(response["impersonator"])
26+
authentication_response.impersonator = impersonator
27+
else:
28+
authentication_response.impersonator = None
29+
2430
return authentication_response
2531

2632
def to_dict(self):
@@ -31,6 +37,9 @@ def to_dict(self):
3137
user_dict = self.user.to_dict()
3238
authentication_response_dict["user"] = user_dict
3339

40+
if self.impersonator:
41+
authentication_response_dict["impersonator"] = self.impersonator.to_dict()
42+
3443
return authentication_response_dict
3544

3645

@@ -119,3 +128,15 @@ class WorkOSUser(WorkOSBaseResource):
119128
"created_at",
120129
"updated_at",
121130
]
131+
132+
class WorkOSImpersonator(WorkOSBaseResource):
133+
"""Representation of a WorkOS Dashboard member impersonating a user
134+
135+
Attributes:
136+
OBJECT_FIELDS (list): List of fields a WorkOSUser comprises.
137+
"""
138+
139+
OBJECT_FIELDS = [
140+
"email",
141+
"reason",
142+
]

0 commit comments

Comments
 (0)