Skip to content

Commit 23378a7

Browse files
Add delete_user and delete_user_authenticator method (#22)
* add delete_user method * Fix import * Add delete_user test * Update test * 2.0.5 * Add delete_user_authenticator method * Remove jwt import * Fix test_update_user test
1 parent 4881f01 commit 23378a7

File tree

4 files changed

+68
-3
lines changed

4 files changed

+68
-3
lines changed

authsignal/client.py

+40-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import decimal
2-
import jwt
32
from authsignal.version import VERSION
43

54
import humps
@@ -150,6 +149,46 @@ def get_user(self, user_id, redirect_url=None, path=None):
150149
except requests.exceptions.RequestException as e:
151150
raise ApiException(str(e), path) from e
152151

152+
def delete_user(self, user_id):
153+
_assert_non_empty_unicode(user_id, 'user_id')
154+
155+
user_id = urllib.parse.quote(user_id)
156+
path = f'{self.url}/v1/users/{user_id}'
157+
headers = self._default_headers()
158+
159+
try:
160+
response = self.session.delete(
161+
path,
162+
auth=requests.auth.HTTPBasicAuth(self.api_key, ''),
163+
headers=headers,
164+
timeout=self.timeout
165+
)
166+
response.raise_for_status()
167+
return humps.decamelize(response.json())
168+
except requests.exceptions.RequestException as e:
169+
raise ApiException(str(e), path) from e
170+
171+
def delete_user_authenticator(self, user_id: str, user_authenticator_id: str) -> Dict[str, Any]:
172+
_assert_non_empty_unicode(user_id, 'user_id')
173+
_assert_non_empty_unicode(user_authenticator_id, 'user_authenticator_id')
174+
175+
user_id = urllib.parse.quote(user_id)
176+
user_authenticator_id = urllib.parse.quote(user_authenticator_id)
177+
path = f'{self.url}/v1/users/{user_id}/authenticators/{user_authenticator_id}'
178+
headers = self._default_headers()
179+
180+
try:
181+
response = self.session.delete(
182+
path,
183+
auth=requests.auth.HTTPBasicAuth(self.api_key, ''),
184+
headers=headers,
185+
timeout=self.timeout
186+
)
187+
response.raise_for_status()
188+
return humps.decamelize(response.json())
189+
except requests.exceptions.RequestException as e:
190+
raise ApiException(str(e), path) from e
191+
153192
def update_user(self, user_id, data):
154193
user_id = urllib.parse.quote(user_id)
155194

authsignal/client_tests.py

+26
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,15 @@ def test_get_action(self):
8686
self.assertEqual(response["state"], "ALLOW")
8787
self.assertEqual(response["state_updated_at"], "2022-07-25T03:19:00.316Z")
8888

89+
@responses.activate
90+
def test_delete_user(self):
91+
responses.add(responses.DELETE, f"{base_url}/users/1234",
92+
json={"success": True}, status=200)
93+
94+
response = self.authsignal_client.delete_user(user_id="1234")
95+
96+
self.assertEqual(response["success"], True)
97+
8998
@responses.activate
9099
def test_update_user(self):
91100
user_id = "1234"
@@ -142,6 +151,23 @@ def test_it_returns_success_if_user_id_is_correct(self):
142151
self.assertEqual(response["state"], "CHALLENGE_SUCCEEDED")
143152
self.assertTrue(response["is_valid"])
144153

154+
155+
@responses.activate
156+
def test_delete_user_authenticator(self):
157+
self.authsignal_client = client.Client(api_key='test_api_key')
158+
user_id = 'test_user'
159+
user_authenticator_id = 'test_authenticator'
160+
expected_url = f'{self.authsignal_client.url}/v1/users/{user_id}/authenticators/{user_authenticator_id}'
161+
162+
responses.add(responses.DELETE, expected_url, json={"success": True}, status=200)
163+
164+
response = self.authsignal_client.delete_user_authenticator(user_id, user_authenticator_id)
165+
166+
self.assertEqual(response["success"], True)
167+
self.assertEqual(len(responses.calls), 1)
168+
self.assertEqual(responses.calls[0].request.url, expected_url)
169+
self.assertEqual(responses.calls[0].response.status_code, 200)
170+
145171
@responses.activate
146172
def test_it_returns_success_false_if_user_id_is_incorrect(self):
147173
responses.add(responses.POST, f"{base_challenge_url}/validate",

authsignal/version.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
VERSION = '2.0.4'
1+
VERSION = '2.0.5'

pyproject.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "authsignal"
3-
version = "2.0.4"
3+
version = "2.0.5"
44
description = "Authsignal Python SDK for Passwordless Step Up Authentication"
55
authors = ["justinsoong <[email protected]>"]
66
license = "MIT"

0 commit comments

Comments
 (0)