Skip to content

Commit b5e31b1

Browse files
committed
1. Changing auth url from v2beta1 to v2
2. Integration tests for project and tenant wrt MFA config
1 parent 2a73f41 commit b5e31b1

File tree

5 files changed

+108
-6
lines changed

5 files changed

+108
-6
lines changed

firebase_admin/_auth_client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def __init__(self, app, tenant_id=None):
5050
if emulator_host:
5151
base_url = 'http://{0}/identitytoolkit.googleapis.com'.format(emulator_host)
5252
endpoint_urls['v1'] = base_url + '/v1'
53-
endpoint_urls['v2beta1'] = base_url + '/v2beta1'
53+
endpoint_urls['v2beta1'] = base_url + '/v2'
5454
credential = _utils.EmulatorAdminCredentials()
5555
self.emulated = True
5656
else:
@@ -67,7 +67,7 @@ def __init__(self, app, tenant_id=None):
6767
self._user_manager = _user_mgt.UserManager(
6868
http_client, app.project_id, tenant_id, url_override=endpoint_urls.get('v1'))
6969
self._provider_manager = _auth_providers.ProviderConfigClient(
70-
http_client, app.project_id, tenant_id, url_override=endpoint_urls.get('v2beta1'))
70+
http_client, app.project_id, tenant_id, url_override=endpoint_urls.get('v2'))
7171

7272
@property
7373
def tenant_id(self):

firebase_admin/_auth_providers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ def items(self):
176176
class ProviderConfigClient:
177177
"""Client for managing Auth provider configurations."""
178178

179-
PROVIDER_CONFIG_URL = 'https://identitytoolkit.googleapis.com/v2beta1'
179+
PROVIDER_CONFIG_URL = 'https://identitytoolkit.googleapis.com/v2'
180180

181181
def __init__(self, http_client, project_id, tenant_id=None, url_override=None):
182182
self.http_client = http_client

firebase_admin/tenant_mgt.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ def multi_factor_config(self):
245245
class _TenantManagementService:
246246
"""Firebase tenant management service."""
247247

248-
TENANT_MGT_URL = 'https://identitytoolkit.googleapis.com/v2beta1'
248+
TENANT_MGT_URL = 'https://identitytoolkit.googleapis.com/v2'
249249

250250
def __init__(self, app):
251251
credential = app.credential.get_credential()
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# Copyright 2023 Google Inc.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
"""Integration tests for firebase_admin.project_config_mgt module."""
16+
17+
import pytest
18+
19+
from firebase_admin import project_config_mgt
20+
from firebase_admin import multi_factor_config_mgt
21+
22+
23+
@pytest.fixture(scope='module')
24+
def sample_mfa_config():
25+
mfa_config = {
26+
'providerConfigs': [
27+
{
28+
'state': 'ENABLED',
29+
'totpProviderConfig': {
30+
'adjacentIntervals': 5
31+
}
32+
}
33+
]
34+
}
35+
return mfa_config
36+
37+
38+
def test_update_project_config():
39+
mfa_object = multi_factor_config_mgt.MultiFactorConfig(
40+
provider_configs=[
41+
multi_factor_config_mgt.ProviderConfig(
42+
state=multi_factor_config_mgt.ProviderConfig.State.ENABLED,
43+
totp_provider_config=multi_factor_config_mgt.TOTPProviderConfig(
44+
adjacent_intervals=5
45+
)
46+
)
47+
]
48+
)
49+
project_config = project_config_mgt.update_project_config(multi_factor_config=mfa_object)
50+
_assert_multi_factor_config(project_config.multi_factor_config)
51+
52+
53+
def test_get_project():
54+
project_config = project_config_mgt.get_project_config()
55+
assert isinstance(project_config, project_config_mgt.ProjectConfig)
56+
_assert_multi_factor_config(project_config.multi_factor_config)
57+
58+
def _assert_multi_factor_config(multi_factor_config):
59+
assert isinstance(multi_factor_config, multi_factor_config_mgt.MultiFactorServerConfig)
60+
assert len(multi_factor_config.provider_configs) == 1
61+
assert isinstance(multi_factor_config.provider_configs, list)
62+
for provider_config in multi_factor_config.provider_configs:
63+
assert isinstance(provider_config, multi_factor_config_mgt.MultiFactorServerConfig
64+
.ProviderConfigServerConfig)
65+
assert provider_config.state == 'ENABLED'
66+
assert isinstance(provider_config.totp_provider_config,
67+
multi_factor_config_mgt.MultiFactorServerConfig.ProviderConfigServerConfig
68+
.TOTPProviderServerConfig)
69+
assert provider_config.totp_provider_config.adjacent_intervals == 5

integration/test_tenant_mgt.py

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
from firebase_admin import auth
2727
from firebase_admin import tenant_mgt
28+
from firebase_admin import multi_factor_config_mgt
2829
from integration import test_auth
2930

3031

@@ -35,13 +36,34 @@
3536

3637
@pytest.fixture(scope='module')
3738
def sample_tenant():
39+
mfa_object = multi_factor_config_mgt.MultiFactorConfig(
40+
provider_configs=[multi_factor_config_mgt.ProviderConfig(
41+
state=multi_factor_config_mgt.ProviderConfig.State.ENABLED,
42+
totp_provider_config=multi_factor_config_mgt.TOTPProviderConfig(
43+
adjacent_intervals=5
44+
)
45+
)]
46+
)
3847
tenant = tenant_mgt.create_tenant(
3948
display_name='admin-python-tenant',
4049
allow_password_sign_up=True,
41-
enable_email_link_sign_in=True)
50+
enable_email_link_sign_in=True,
51+
multi_factor_config=mfa_object)
4252
yield tenant
4353
tenant_mgt.delete_tenant(tenant.tenant_id)
4454

55+
def _assert_multi_factor_config(mfa_config):
56+
assert isinstance(mfa_config, multi_factor_config_mgt.MultiFactorServerConfig)
57+
assert len(mfa_config.provider_configs) == 1
58+
assert isinstance(mfa_config.provider_configs, list)
59+
for provider_config in mfa_config.provider_configs:
60+
assert isinstance(provider_config, multi_factor_config_mgt.MultiFactorServerConfig.\
61+
ProviderConfigServerConfig)
62+
assert provider_config.state == 'ENABLED'
63+
assert isinstance(provider_config.totp_provider_config,
64+
multi_factor_config_mgt.MultiFactorServerConfig.ProviderConfigServerConfig
65+
.TOTPProviderServerConfig)
66+
assert provider_config.totp_provider_config.adjacent_intervals == 5
4567

4668
@pytest.fixture(scope='module')
4769
def tenant_user(sample_tenant):
@@ -59,6 +81,7 @@ def test_get_tenant(sample_tenant):
5981
assert tenant.display_name == 'admin-python-tenant'
6082
assert tenant.allow_password_sign_up is True
6183
assert tenant.enable_email_link_sign_in is True
84+
_assert_multi_factor_config(tenant.multi_factor_config)
6285

6386

6487
def test_list_tenants(sample_tenant):
@@ -76,8 +99,17 @@ def test_list_tenants(sample_tenant):
7699

77100

78101
def test_update_tenant():
102+
mfa_object = multi_factor_config_mgt.MultiFactorConfig(
103+
provider_configs=[multi_factor_config_mgt.ProviderConfig(
104+
state=multi_factor_config_mgt.ProviderConfig.State.ENABLED,
105+
totp_provider_config=multi_factor_config_mgt.TOTPProviderConfig(
106+
adjacent_intervals=5
107+
)
108+
)]
109+
)
79110
tenant = tenant_mgt.create_tenant(
80-
display_name='py-update-test', allow_password_sign_up=True, enable_email_link_sign_in=True)
111+
display_name='py-update-test', allow_password_sign_up=True, enable_email_link_sign_in=True,
112+
multi_factor_config=mfa_object)
81113
try:
82114
tenant = tenant_mgt.update_tenant(
83115
tenant.tenant_id, display_name='updated-py-tenant', allow_password_sign_up=False,
@@ -87,6 +119,7 @@ def test_update_tenant():
87119
assert tenant.display_name == 'updated-py-tenant'
88120
assert tenant.allow_password_sign_up is False
89121
assert tenant.enable_email_link_sign_in is False
122+
_assert_multi_factor_config(tenant.multi_factor_config)
90123
finally:
91124
tenant_mgt.delete_tenant(tenant.tenant_id)
92125

0 commit comments

Comments
 (0)