Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 46 additions & 2 deletions duo_client/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -178,10 +178,11 @@
import time
import urllib.parse
import warnings
from typing import List, Optional
from datetime import datetime, timedelta, timezone
from typing import List, Optional

from . import Accounts, client

USER_STATUS_ACTIVE = "active"
USER_STATUS_BYPASS = "bypass"
USER_STATUS_DISABLED = "disabled"
Expand Down Expand Up @@ -3760,6 +3761,49 @@ def update_passport_config(self, enabled_status, enabled_groups: Optional[List[s
)
return response

def start_idv(self, user_id):
"""
Start identity verification process

Args:
user_id (str) - The ID of the Duo user (required)

Returns (dict) - Dictionary containing details of IDV process
"""
path = f"/admin/v2/identity_verification/{user_id}/start"
return self.json_api_call(
"POST",
path,
{}
)

def cancel_idv(self, user_id, inquiry_id):
"""
Cancel identity verification process

Args:
user_id (str) - The ID of the Duo user (required)
inquiry_id (str) - The inquiry_id of the request to cancel (required)
"""
path = f"/admin/v2/identity_verification/{user_id}/cancel"
return self.json_api_call(
"POST",
path,
{"inquiry_id": inquiry_id}
)

def get_idv_status(self, user_id):
"""
Get the status of a identity verification process

Args:
user_id (str) - The ID of the Duo user (required)

Returns (dict) - Dictionary containing details of the identity verification process status
"""
path = f"/admin/v2/identity_verification/{user_id}/status"
return self.json_api_call("GET", path, {})


class AccountAdmin(Admin):
"""AccountAdmin manages a child account using an Accounts API integration."""
Expand Down Expand Up @@ -3849,4 +3893,4 @@ def set_telephony_credits(self, credits):
}
return self.json_api_call('POST',
'/admin/v1/billing/telephony_credits',
params)
params)
26 changes: 26 additions & 0 deletions tests/admin/test_idv.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import json

from .base import TestAdmin


class TestIDV(TestAdmin):
def test_start_idv(self):
""" Test start identity verification process
"""
response = self.client.start_idv('DU012345678901234567')
self.assertEqual(response['uri'], '/admin/v2/identity_verification/DU012345678901234567/start')

def test_get_idv_status(self):
""" Test get identity verification process status
"""
response = self.client.get_idv_status('DU012345678901234567')
(uri, args) = response['uri'].split('?')
self.assertEqual(uri, '/admin/v2/identity_verification/DU012345678901234567/status')

def test_cancel_idv(self):
""" Test cancel identity verification process
"""
response = self.client.cancel_idv('DU012345678901234567', 'inq_PY3skN8RKxPKBPdpbpdtZfHy6rwJ')
body = json.loads(response["body"])
self.assertEqual(response['uri'], '/admin/v2/identity_verification/DU012345678901234567/cancel')
self.assertEqual(body['inquiry_id'], 'inq_PY3skN8RKxPKBPdpbpdtZfHy6rwJ')