Skip to content

Commit 7c5b115

Browse files
authored
Update the update_settings with new helpdesk enrollment email param (#147)
* Update the update_settings with new helpdesk enrollment email param, and mark legacy params as deprecated * Remove extra files and try to fix tests * Remove unneeded files
1 parent 338c385 commit 7c5b115

5 files changed

Lines changed: 95 additions & 21 deletions

File tree

duo_client/admin.py

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1733,6 +1733,7 @@ def update_settings(self,
17331733
helpdesk_bypass=None,
17341734
helpdesk_bypass_expiration=None,
17351735
helpdesk_message=None,
1736+
helpdesk_can_send_enroll_email=None,
17361737
reactivation_url=None,
17371738
reactivation_integration_key=None,
17381739
security_checkup_enabled=None,
@@ -1755,11 +1756,11 @@ def update_settings(self,
17551756
timezone - <str:IANA timezone>|None
17561757
telephony_warning_min - <int:credits>
17571758
caller_id - <str:phone number>
1758-
push_enabled - True|False|None
1759-
sms_enabled - True|False|None
1760-
voice_enabled - True|False|None
1761-
mobile_otp_enabled - True|False|None
1762-
u2f_enabled - True|False|None
1759+
push_enabled - Deprecated; ignored if specified.
1760+
sms_enabled - Deprecated; ignored if specified.
1761+
voice_enabled - Deprecated; ignored if specified.
1762+
mobile_otp_enabled - Deprecated; ignored if specified.
1763+
u2f_enabled - Deprecated; ignored if specified.
17631764
user_telephony_cost_max - <int:positive number of credits>
17641765
minimum_password_length - <int:length>|None
17651766
password_requires_upper_alpha - True|False|None
@@ -1769,6 +1770,7 @@ def update_settings(self,
17691770
helpdesk_bypass - "allow"|"limit"|"deny"|None
17701771
helpdesk_bypass_expiration - <int:minutes>|0
17711772
helpdesk_message - <str:message|None>
1773+
helpdesk_can_send_enroll_email - True|False|None
17721774
reactivation_url - <str:url>|None
17731775
reactivation_integration_key - <str:url>|None
17741776
security_checkup_enabled - True|False|None
@@ -1798,7 +1800,8 @@ def update_settings(self,
17981800
if fraud_email is not None:
17991801
params['fraud_email'] = fraud_email
18001802
if fraud_email_enabled is not None:
1801-
params['fraud_email_enabled'] = fraud_email_enabled
1803+
params['fraud_email_enabled'] = ('1' if
1804+
fraud_email_enabled else '0')
18021805
if keypress_confirm is not None:
18031806
params['keypress_confirm'] = keypress_confirm
18041807
if keypress_fraud is not None:
@@ -1809,16 +1812,6 @@ def update_settings(self,
18091812
params['telephony_warning_min'] = str(telephony_warning_min)
18101813
if caller_id is not None:
18111814
params['caller_id'] = caller_id
1812-
if push_enabled is not None:
1813-
params['push_enabled'] = '1' if push_enabled else '0'
1814-
if sms_enabled is not None:
1815-
params['sms_enabled'] = '1' if sms_enabled else '0'
1816-
if voice_enabled is not None:
1817-
params['voice_enabled'] = '1' if voice_enabled else '0'
1818-
if mobile_otp_enabled is not None:
1819-
params['mobile_otp_enabled'] = '1' if mobile_otp_enabled else '0'
1820-
if u2f_enabled is not None:
1821-
params['u2f_enabled'] = '1' if u2f_enabled else '0'
18221815
if user_telephony_cost_max is not None:
18231816
params['user_telephony_cost_max'] = str(user_telephony_cost_max)
18241817
if minimum_password_length is not None:
@@ -1841,12 +1834,16 @@ def update_settings(self,
18411834
params['helpdesk_bypass_expiration'] = str(helpdesk_bypass_expiration)
18421835
if helpdesk_message is not None:
18431836
params['helpdesk_message'] = str(helpdesk_message)
1837+
if helpdesk_can_send_enroll_email is not None:
1838+
params['helpdesk_can_send_enroll_email'] = ('1' if
1839+
helpdesk_can_send_enroll_email else '0')
18441840
if reactivation_url is not None:
18451841
params['reactivation_url'] = reactivation_url
18461842
if reactivation_integration_key is not None:
18471843
params['reactivation_integration_key'] = reactivation_integration_key
18481844
if security_checkup_enabled is not None:
1849-
params['security_checkup_enabled'] = security_checkup_enabled
1845+
params['security_checkup_enabled'] = ('1' if
1846+
security_checkup_enabled else '0')
18501847

18511848
if not params:
18521849
raise TypeError("No settings were provided")

tests/admin/test_settings.py

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
from .. import util
2+
import duo_client.admin
3+
from .base import TestAdmin
4+
5+
6+
class TestSettings(TestAdmin):
7+
8+
def test_update_settings(self):
9+
""" Test updating settings
10+
"""
11+
response = self.client_list.update_settings(
12+
lockout_threshold=10,
13+
lockout_expire_duration=60,
14+
inactive_user_expiration=30,
15+
log_retention_days=180,
16+
sms_batch=5,
17+
sms_expiration=60,
18+
sms_refresh=True,
19+
sms_message='test_message',
20+
fraud_email='test@example.com',
21+
fraud_email_enabled=True,
22+
keypress_confirm='0',
23+
keypress_fraud='9',
24+
timezone='UTC',
25+
telephony_warning_min=50,
26+
caller_id='+15035551000',
27+
user_telephony_cost_max=10,
28+
minimum_password_length=12,
29+
password_requires_upper_alpha=True,
30+
password_requires_lower_alpha=True,
31+
password_requires_numeric=True,
32+
password_requires_special=True,
33+
helpdesk_bypass="allow",
34+
helpdesk_bypass_expiration=60,
35+
helpdesk_message="test_message",
36+
helpdesk_can_send_enroll_email=True,
37+
reactivation_url="https://www.example.com",
38+
reactivation_integration_key='DINTEGRATIONKEYTEST0',
39+
security_checkup_enabled=True,
40+
)
41+
response = response[0]
42+
self.assertEqual(response['method'], 'POST')
43+
self.assertEqual(response['uri'], '/admin/v1/settings')
44+
self.assertEqual(
45+
util.params_to_dict(response['body']),
46+
{
47+
'account_id': [self.client.account_id],
48+
'lockout_threshold': ['10'],
49+
'lockout_expire_duration': ['60'],
50+
'inactive_user_expiration': ['30'],
51+
'log_retention_days': ['180'],
52+
'sms_batch': ['5'],
53+
'sms_expiration': ['60'],
54+
'sms_refresh': ['1'],
55+
'sms_message': ['test_message'],
56+
'fraud_email': ['test@example.com'],
57+
'fraud_email_enabled': ['1'],
58+
'keypress_confirm': ['0'],
59+
'keypress_fraud': ['9'],
60+
'timezone': ['UTC'],
61+
'telephony_warning_min': ['50'],
62+
'caller_id': ['+15035551000'],
63+
'user_telephony_cost_max': ['10'],
64+
'minimum_password_length': ['12'],
65+
'password_requires_upper_alpha': ['1'],
66+
'password_requires_lower_alpha': ['1'],
67+
'password_requires_numeric': ['1'],
68+
'password_requires_special': ['1'],
69+
'helpdesk_bypass': ['allow'],
70+
'helpdesk_bypass_expiration': ['60'],
71+
'helpdesk_message': ['test_message'],
72+
'helpdesk_can_send_enroll_email': ['1'],
73+
'reactivation_url': ['https://www.example.com'],
74+
'reactivation_integration_key': ['DINTEGRATIONKEYTEST0'],
75+
'security_checkup_enabled': ['1'],
76+
})

tests/admin/test_users.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ def test_add_user(self):
117117
'notes': ['notes'],
118118
'username': ['foo'],
119119
'status': ['active'],
120-
'email': ['foobar%40baz.com'],
120+
'email': ['foobar@baz.com'],
121121
'firstname': ['fName'],
122122
'lastname': ['lName'],
123123
'account_id': [self.client.account_id],
@@ -151,7 +151,7 @@ def test_update_user(self):
151151
'notes': ['notes'],
152152
'username': ['foo'],
153153
'status': ['active'],
154-
'email': ['foobar%40baz.com'],
154+
'email': ['foobar@baz.com'],
155155
'firstname': ['fName'],
156156
'lastname': ['lName'],
157157
'account_id': [self.client.account_id],

tests/test_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ class TestRequest(unittest.TestCase):
284284
'foo':['bar'],
285285
'baz':['qux', 'quux=quuux', 'foobar=foobar&barbaz=barbaz']}
286286
args_out = dict(
287-
(key, [six.moves.urllib.parse.quote(v) for v in val])
287+
(key, [v for v in val])
288288
for (key, val) in list(args_in.items()))
289289

290290
def setUp(self):

tests/util.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import absolute_import
22
import json
33
import collections
4+
import urllib
45

56
from json import JSONEncoder
67
import duo_client
@@ -14,7 +15,7 @@ def default(self, obj):
1415
def params_to_dict(param_str):
1516
param_dict = collections.defaultdict(list)
1617
for (key, val) in (param.split('=') for param in param_str.split('&')):
17-
param_dict[key].append(val)
18+
param_dict[key].append(six.moves.urllib.parse.unquote(val))
1819
return param_dict
1920

2021

0 commit comments

Comments
 (0)