diff --git a/firebase_admin/multi_factor_config_mgt.py b/firebase_admin/multi_factor_config_mgt.py index 3f3153bc..61d4a134 100644 --- a/firebase_admin/multi_factor_config_mgt.py +++ b/firebase_admin/multi_factor_config_mgt.py @@ -44,17 +44,17 @@ class MultiFactorServerConfig: def __init__(self, data): if not isinstance(data, dict): raise ValueError( - 'Invalid data argument in MultiFactorConfig constructor: {0}'.format(data)) + 'Invalid data argument in MultiFactorServerConfig constructor: {0}'.format(data)) self._data = data @property def provider_configs(self): data = self._data.get('providerConfigs', None) if data is not None: - return [self.ProviderConfigServerConfig(d) for d in data] + return [self.ProviderServerConfig(d) for d in data] return None - class ProviderConfigServerConfig: + class ProviderServerConfig: """Represents provider configuration response received from the server and converts it to user format. """ @@ -62,7 +62,7 @@ class ProviderConfigServerConfig: def __init__(self, data): if not isinstance(data, dict): raise ValueError( - 'Invalid data argument in ProviderConfig constructor: {0}'.format(data)) + 'Invalid data argument in ProviderServerConfig constructor: {0}'.format(data)) self._data = data @property @@ -84,7 +84,8 @@ class TOTPProviderServerConfig: def __init__(self, data): if not isinstance(data, dict): raise ValueError( - 'Invalid data argument in TOTPProviderConfig constructor: {0}'.format(data)) + 'Invalid data argument in TOTPProviderServerConfig' + ' constructor: {0}'.format(data)) self._data = data @property diff --git a/firebase_admin/project_config_mgt.py b/firebase_admin/project_config_mgt.py index df123e26..851a3499 100644 --- a/firebase_admin/project_config_mgt.py +++ b/firebase_admin/project_config_mgt.py @@ -29,7 +29,6 @@ __all__ = [ 'ProjectConfig', - 'get_project_config', 'update_project_config', ] diff --git a/firebase_admin/tenant_mgt.py b/firebase_admin/tenant_mgt.py index af222ff0..4f943b3e 100644 --- a/firebase_admin/tenant_mgt.py +++ b/firebase_admin/tenant_mgt.py @@ -25,10 +25,11 @@ import firebase_admin from firebase_admin import auth -from firebase_admin import multi_factor_config_mgt from firebase_admin import _auth_utils from firebase_admin import _http_client from firebase_admin import _utils +from firebase_admin.multi_factor_config_mgt import MultiFactorConfig +from firebase_admin.multi_factor_config_mgt import MultiFactorServerConfig _TENANT_MGT_ATTRIBUTE = '_tenant_mgt' @@ -93,7 +94,7 @@ def get_tenant(tenant_id, app=None): def create_tenant( display_name, allow_password_sign_up=None, enable_email_link_sign_in=None, - multi_factor_config: multi_factor_config_mgt.MultiFactorConfig = None, app=None): + multi_factor_config: MultiFactorConfig = None, app=None): """Creates a new tenant from the given options. Args: @@ -122,7 +123,7 @@ def create_tenant( def update_tenant( tenant_id, display_name=None, allow_password_sign_up=None, enable_email_link_sign_in=None, - multi_factor_config: multi_factor_config_mgt.MultiFactorConfig = None, app=None): + multi_factor_config: MultiFactorConfig = None, app=None): """Updates an existing tenant with the given options. Args: @@ -189,6 +190,7 @@ def list_tenants(page_token=None, max_results=_MAX_LIST_TENANTS_RESULTS, app=Non FirebaseError: If an error occurs while retrieving the user accounts. """ tenant_mgt_service = _get_tenant_mgt_service(app) + def download(page_token, max_results): return tenant_mgt_service.list_tenants(page_token, max_results) return ListTenantsPage(download, page_token, max_results) @@ -211,7 +213,8 @@ class Tenant: def __init__(self, data): if not isinstance(data, dict): - raise ValueError('Invalid data argument in Tenant constructor: {0}'.format(data)) + raise ValueError( + 'Invalid data argument in Tenant constructor: {0}'.format(data)) if not 'name' in data: raise ValueError('Tenant response missing required keys.') @@ -238,7 +241,7 @@ def enable_email_link_sign_in(self): def multi_factor_config(self): data = self._data.get('mfaConfig', None) if data is not None: - return multi_factor_config_mgt.MultiFactorServerConfig(data) + return MultiFactorServerConfig(data) return None @@ -250,7 +253,8 @@ class _TenantManagementService: def __init__(self, app): credential = app.credential.get_credential() version_header = 'Python/Admin/{0}'.format(firebase_admin.__version__) - base_url = '{0}/projects/{1}'.format(self.TENANT_MGT_URL, app.project_id) + base_url = '{0}/projects/{1}'.format( + self.TENANT_MGT_URL, app.project_id) self.app = app self.client = _http_client.JsonHttpClient( credential=credential, base_url=base_url, headers={'X-Client-Version': version_header}) @@ -269,7 +273,7 @@ def auth_for_tenant(self, tenant_id): client = auth.Client(self.app, tenant_id=tenant_id) self.tenant_clients[tenant_id] = client - return client + return client def get_tenant(self, tenant_id): """Gets the tenant corresponding to the given ``tenant_id``.""" @@ -286,7 +290,7 @@ def get_tenant(self, tenant_id): def create_tenant( self, display_name, allow_password_sign_up=None, enable_email_link_sign_in=None, - multi_factor_config: multi_factor_config_mgt.MultiFactorConfig = None): + multi_factor_config: MultiFactorConfig = None): """Creates a new tenant from the given parameters.""" payload = {'displayName': _validate_display_name(display_name)} @@ -297,7 +301,7 @@ def create_tenant( payload['enableEmailLinkSignin'] = _auth_utils.validate_boolean( enable_email_link_sign_in, 'enableEmailLinkSignin') if multi_factor_config is not None: - if not isinstance(multi_factor_config, multi_factor_config_mgt.MultiFactorConfig): + if not isinstance(multi_factor_config, MultiFactorConfig): raise ValueError( 'multi_factor_config must be of type MultiFactorConfig.') payload['mfaConfig'] = multi_factor_config.build_server_request() @@ -311,7 +315,7 @@ def create_tenant( def update_tenant( self, tenant_id, display_name=None, allow_password_sign_up=None, enable_email_link_sign_in=None, - multi_factor_config: multi_factor_config_mgt.MultiFactorConfig = None): + multi_factor_config: MultiFactorConfig = None): """Updates the specified tenant with the given parameters.""" if not isinstance(tenant_id, str) or not tenant_id: raise ValueError('Tenant ID must be a non-empty string.') @@ -326,12 +330,14 @@ def update_tenant( payload['enableEmailLinkSignin'] = _auth_utils.validate_boolean( enable_email_link_sign_in, 'enableEmailLinkSignin') if multi_factor_config is not None: - if not isinstance(multi_factor_config, multi_factor_config_mgt.MultiFactorConfig): - raise ValueError('multi_factor_config must be of type MultiFactorConfig.') + if not isinstance(multi_factor_config, MultiFactorConfig): + raise ValueError( + 'multi_factor_config must be of type MultiFactorConfig.') payload['mfaConfig'] = multi_factor_config.build_server_request() if not payload: - raise ValueError('At least one parameter must be specified for update.') + raise ValueError( + 'At least one parameter must be specified for update.') url = '/tenants/{0}'.format(tenant_id) update_mask = ','.join(_auth_utils.build_update_mask(payload)) diff --git a/integration/test_project_config_mgt.py b/integration/test_project_config_mgt.py index e7c79a07..a7ca2c5f 100644 --- a/integration/test_project_config_mgt.py +++ b/integration/test_project_config_mgt.py @@ -19,6 +19,7 @@ from firebase_admin import project_config_mgt from firebase_admin import multi_factor_config_mgt +ADJACENT_INTERVALS = 5 @pytest.fixture(scope='module') def sample_mfa_config(): @@ -27,7 +28,7 @@ def sample_mfa_config(): { 'state': 'ENABLED', 'totpProviderConfig': { - 'adjacentIntervals': 5 + 'adjacentIntervals': ADJACENT_INTERVALS } } ] @@ -61,9 +62,9 @@ def _assert_multi_factor_config(multi_factor_config): assert isinstance(multi_factor_config.provider_configs, list) for provider_config in multi_factor_config.provider_configs: assert isinstance(provider_config, multi_factor_config_mgt.MultiFactorServerConfig - .ProviderConfigServerConfig) + .ProviderServerConfig) assert provider_config.state == 'ENABLED' assert isinstance(provider_config.totp_provider_config, - multi_factor_config_mgt.MultiFactorServerConfig.ProviderConfigServerConfig + multi_factor_config_mgt.MultiFactorServerConfig.ProviderServerConfig .TOTPProviderServerConfig) - assert provider_config.totp_provider_config.adjacent_intervals == 5 + assert provider_config.totp_provider_config.adjacent_intervals == ADJACENT_INTERVALS diff --git a/integration/test_tenant_mgt.py b/integration/test_tenant_mgt.py index 96578d1b..1766b2b1 100644 --- a/integration/test_tenant_mgt.py +++ b/integration/test_tenant_mgt.py @@ -58,10 +58,10 @@ def _assert_multi_factor_config(mfa_config): assert isinstance(mfa_config.provider_configs, list) for provider_config in mfa_config.provider_configs: assert isinstance(provider_config, multi_factor_config_mgt.MultiFactorServerConfig.\ - ProviderConfigServerConfig) + ProviderServerConfig) assert provider_config.state == 'ENABLED' assert isinstance(provider_config.totp_provider_config, - multi_factor_config_mgt.MultiFactorServerConfig.ProviderConfigServerConfig + multi_factor_config_mgt.MultiFactorServerConfig.ProviderServerConfig .TOTPProviderServerConfig) assert provider_config.totp_provider_config.adjacent_intervals == 5 diff --git a/tests/test_multi_factor_config.py b/tests/test_multi_factor_config.py index 7e4190ba..b14b395f 100644 --- a/tests/test_multi_factor_config.py +++ b/tests/test_multi_factor_config.py @@ -135,22 +135,22 @@ def test_invalid_multi_factor_config_response(self): test_config = 'invalid' with pytest.raises(ValueError) as excinfo: multi_factor_config_mgt.MultiFactorServerConfig(test_config) - assert str(excinfo.value).startswith('Invalid data argument in MultiFactorConfig' + assert str(excinfo.value).startswith('Invalid data argument in MultiFactorServerConfig' ' constructor: {0}'.format(test_config)) def test_invalid_provider_config_response(self): test_config = 'invalid' with pytest.raises(ValueError) as excinfo: - multi_factor_config_mgt.MultiFactorServerConfig.ProviderConfigServerConfig(test_config) - assert str(excinfo.value).startswith('Invalid data argument in ProviderConfig' + multi_factor_config_mgt.MultiFactorServerConfig.ProviderServerConfig(test_config) + assert str(excinfo.value).startswith('Invalid data argument in ProviderServerConfig' ' constructor: {0}'.format(test_config)) def test_invalid_totp_provider_config_response(self): test_config = 'invalid' with pytest.raises(ValueError) as excinfo: - multi_factor_config_mgt.MultiFactorServerConfig.ProviderConfigServerConfig.\ + multi_factor_config_mgt.MultiFactorServerConfig.ProviderServerConfig.\ TOTPProviderServerConfig(test_config) - assert str(excinfo.value).startswith('Invalid data argument in TOTPProviderConfig' + assert str(excinfo.value).startswith('Invalid data argument in TOTPProviderServerConfig' ' constructor: {0}'.format(test_config)) def test_valid_server_response(self): @@ -173,9 +173,9 @@ def _assert_multi_factor_config(mfa_config): for provider_config in mfa_config.provider_configs: assert isinstance( provider_config, - multi_factor_config_mgt.MultiFactorServerConfig.ProviderConfigServerConfig) + multi_factor_config_mgt.MultiFactorServerConfig.ProviderServerConfig) assert provider_config.state == 'ENABLED' assert isinstance(provider_config.totp_provider_config, - multi_factor_config_mgt.MultiFactorServerConfig.ProviderConfigServerConfig + multi_factor_config_mgt.MultiFactorServerConfig.ProviderServerConfig .TOTPProviderServerConfig) assert provider_config.totp_provider_config.adjacent_intervals == 5 diff --git a/tests/test_project_config_mgt.py b/tests/test_project_config_mgt.py index 6cba6648..8d477531 100644 --- a/tests/test_project_config_mgt.py +++ b/tests/test_project_config_mgt.py @@ -25,6 +25,8 @@ from firebase_admin import multi_factor_config_mgt +ADJACENT_INTERVALS = 5 + GET_PROJECT_RESPONSE = """{ "mfaConfig":{ "providerConfigs":[ @@ -75,7 +77,7 @@ def test_project_config(self): { 'state': 'ENABLED', 'totpProviderConfig': { - 'adjacentIntervals': 5, + 'adjacentIntervals': ADJACENT_INTERVALS, } } ] @@ -129,7 +131,7 @@ def test_update_project_config(self, project_config_mgt_app): multi_factor_config_mgt.ProviderConfig( state=multi_factor_config_mgt.ProviderConfig.State.ENABLED, totp_provider_config=multi_factor_config_mgt.TOTPProviderConfig( - adjacent_intervals=5 + adjacent_intervals=ADJACENT_INTERVALS ) ) ] @@ -146,7 +148,7 @@ def test_update_project_config(self, project_config_mgt_app): { 'state': 'ENABLED', 'totpProviderConfig': { - 'adjacentIntervals': 5, + 'adjacentIntervals': ADJACENT_INTERVALS, } } ] @@ -168,12 +170,12 @@ def _assert_multi_factor_config(multi_factor_config): assert isinstance(multi_factor_config.provider_configs, list) for provider_config in multi_factor_config.provider_configs: assert isinstance(provider_config, multi_factor_config_mgt.MultiFactorServerConfig - .ProviderConfigServerConfig) + .ProviderServerConfig) assert provider_config.state == 'ENABLED' assert isinstance(provider_config.totp_provider_config, - multi_factor_config_mgt.MultiFactorServerConfig.ProviderConfigServerConfig + multi_factor_config_mgt.MultiFactorServerConfig.ProviderServerConfig .TOTPProviderServerConfig) - assert provider_config.totp_provider_config.adjacent_intervals == 5 + assert provider_config.totp_provider_config.adjacent_intervals == ADJACENT_INTERVALS def _assert_project_config(project_config): if project_config.multi_factor_config is not None: diff --git a/tests/test_tenant_mgt.py b/tests/test_tenant_mgt.py index e964c540..1a4a0372 100644 --- a/tests/test_tenant_mgt.py +++ b/tests/test_tenant_mgt.py @@ -31,6 +31,8 @@ from tests import test_token_gen +ADJACENT_INTERVALS = 5 + GET_TENANT_RESPONSE = """{ "name": "projects/mock-project-id/tenants/tenant-id", "displayName": "Test Tenant", @@ -260,7 +262,7 @@ def test_create_tenant(self, tenant_mgt_app): multi_factor_config_mgt.ProviderConfig( state=multi_factor_config_mgt.ProviderConfig.State.ENABLED, totp_provider_config=multi_factor_config_mgt.TOTPProviderConfig( - adjacent_intervals=5 + adjacent_intervals=ADJACENT_INTERVALS ) ) ] @@ -279,7 +281,7 @@ def test_create_tenant(self, tenant_mgt_app): { 'state': 'ENABLED', 'totpProviderConfig': { - 'adjacentIntervals': 5 + 'adjacentIntervals': ADJACENT_INTERVALS } } ] @@ -379,7 +381,7 @@ def test_update_tenant(self, tenant_mgt_app): multi_factor_config_mgt.ProviderConfig( state=multi_factor_config_mgt.ProviderConfig.State.ENABLED, totp_provider_config=multi_factor_config_mgt.TOTPProviderConfig( - adjacent_intervals=5 + adjacent_intervals=ADJACENT_INTERVALS ) ) ] @@ -399,7 +401,7 @@ def test_update_tenant(self, tenant_mgt_app): { 'state': 'ENABLED', 'totpProviderConfig': { - 'adjacentIntervals': 5 + 'adjacentIntervals': ADJACENT_INTERVALS } } ] @@ -1068,12 +1070,12 @@ def _assert_multi_factor_config(mfa_config): assert isinstance(mfa_config.provider_configs, list) for provider_config in mfa_config.provider_configs: assert isinstance(provider_config, multi_factor_config_mgt.MultiFactorServerConfig.\ - ProviderConfigServerConfig) + ProviderServerConfig) assert provider_config.state == 'ENABLED' assert isinstance(provider_config.totp_provider_config, - multi_factor_config_mgt.MultiFactorServerConfig.ProviderConfigServerConfig + multi_factor_config_mgt.MultiFactorServerConfig.ProviderServerConfig .TOTPProviderServerConfig) - assert provider_config.totp_provider_config.adjacent_intervals == 5 + assert provider_config.totp_provider_config.adjacent_intervals == ADJACENT_INTERVALS def _assert_tenant(tenant, tenant_id='tenant-id'): assert isinstance(tenant, tenant_mgt.Tenant)