class UsersClientTest(unittest.TestCase): def setUp(self): self.client = UsersClient(os.environ.get('OKTA_TEST_URL'), os.environ.get('OKTA_TEST_KEY')) def test_paging(self): users = self.client.get_paged_users(limit=1) first_page_hit = subsequent_page_hit = False for user in users.result: first_page_hit = True while not users.is_last_page(): users = self.client.get_paged_users(url=users.next_url) for user in users.result: subsequent_page_hit = True self.assertTrue(first_page_hit and subsequent_page_hit, "The first and subsequent pages weren't hit") def test_single_user(self): user = User(login='******' + str(random.random()) + '@asdf.com', email='*****@*****.**', firstName='Joe', lastName='Schmoe') user = self.client.create_user(user, activate=False) self.assertEqual(user.status, "STAGED", "User should be staged") user = User(login='******' + str(random.random()) + '@asdf.com', email='*****@*****.**', firstName='Joe', lastName='Schmoe') user = self.client.create_user(user, activate=True) self.assertEqual(user.status, "PROVISIONED", "User should be provisioned")
def _get_okta_users(user_client: UsersClient) -> List[Dict]: """ Get Okta users from Okta server :param user_client: user client :return: Array of user data """ user_list: List[Dict] = [] paged_users = user_client.get_paged_users() # TODO: Fix bug, we miss last page :( while True: user_list.extend(paged_users.result) if not paged_users.is_last_page(): # Keep on fetching pages of users until the last page paged_users = user_client.get_paged_users(url=paged_users.next_url) else: break return user_list
import time from okta import UsersClient from okta import FactorsClient site = 'Your Site' skey = 'Your Key' usersClient = UsersClient(site, skey) factorClient = FactorsClient(site, skey) currentDate = time.strftime('%Y%m%d') lst = [] users = usersClient.get_paged_users() while True: for user in users.result: if user.status == 'ACTIVE': # Get only active users lst.append(user) if not users.is_last_page(): # Keep on fetching pages of users until the last page users = usersClient.get_paged_users(url=users.next_url) else: break EnrolledUsers = open('C:\\temp\\EnrolledUsers' + currentDate + '.csv', 'w+') EnrolledUsers.write( "Username,FactorType,UserID,DateEnrolled,TimeEnrolled") # Set CSV Headers for user in lst: lifecycle = factorClient.get_lifecycle_factors(user_id=user.id)
class UsersClientTest(unittest.TestCase): def setUp(self): self.client = UsersClient("http://okta.mock.invalid", "mock-api-key") @requests_mock.Mocker() def test_paging(self, m): m.register_uri( "GET", "http://okta.mock.invalid/api/v1/users/?limit=1", json=[ { "id": "u0001mock", "status": "ACTIVE" }, ], headers={ "Link": '<http://okta.mock.invalid/api/v1/users/?limit=1&offset=1>; rel="next"' }) m.register_uri( "GET", "http://okta.mock.invalid/api/v1/users/?limit=1&offset=1", json=[ { "id": "u0002mock", "status": "ACTIVE" }, ]) users = self.client.get_paged_users(limit=1) first_page_hit = subsequent_page_hit = False for user in users.result: first_page_hit = True while not users.is_last_page(): users = self.client.get_paged_users(url=users.next_url) for user in users.result: subsequent_page_hit = True self.assertTrue(first_page_hit and subsequent_page_hit, "The first and subsequent pages weren't hit") @requests_mock.Mocker() def test_single_user(self, m): m.register_uri( "POST", "http://okta.mock.invalid/api/v1/users/?activate=false", complete_qs=True, json={ "id": "u0001mock", "status": "STAGED", }, ) user = User(login='******' + str(random.random()) + '@asdf.com', email='*****@*****.**', firstName='Joe', lastName='Schmoe') user = self.client.create_user(user, activate=False) self.assertEqual(user.status, "STAGED", "User should be staged") m.register_uri( "POST", "http://okta.mock.invalid/api/v1/users/?activate=true", complete_qs=True, json={ "id": "u0002mock", "status": "PROVISIONED", }, ) user = User(login='******' + str(random.random()) + '@asdf.com', email='*****@*****.**', firstName='Joe', lastName='Schmoe') user = self.client.create_user(user, activate=True) self.assertEqual(user.status, "PROVISIONED", "User should be provisioned")