agent/authentic: store portal-user url on correponding OU (#61029)

This commit is contained in:
Emmanuel Cazenave 2022-01-25 17:47:28 +01:00 committed by Benjamin Dauvergne
parent d4123343d8
commit 3c8927d8ee
2 changed files with 23 additions and 5 deletions

View File

@ -192,6 +192,9 @@ class Command(hobo_deploy.Command):
if service_created or not provider.ou:
provider.ou = ou
provision_target_ous[provider.ou.id] = provider.ou
if service.get('template_name') == 'portal-user':
provider.ou.base_url = service['base_url']
provider.ou.save()
provider.save()
if service_created:
service_provider = LibertyServiceProvider(

View File

@ -120,9 +120,10 @@ def test_hobo_deploy(monkeypatch, tenant_base, mocker, skeleton_dir, tmp_path):
</EntityDescriptor>'''
meta2 = meta1.replace('eservices', 'passerelle')
meta3 = meta1.replace('eservices', 'clapiers')
metadatas = [meta1, meta2, meta3]
meta4 = meta1.replace('eservices', 'portal')
metadatas = [meta1, meta2, meta3, meta4]
monkeypatch.setattr(HoboDeployCommand, 'backoff_factor', 0.0001)
side_effect_iter = iter([meta1, meta2, RequestException(), meta3])
side_effect_iter = iter([meta1, meta2, RequestException(), meta4, meta3])
def side_effect(*args, **kwargs):
for v in side_effect_iter:
@ -335,6 +336,14 @@ def test_hobo_deploy(monkeypatch, tenant_base, mocker, skeleton_dir, tmp_path):
'ou-slug': 'ou-slug',
},
},
{
'service-id': 'combo',
'template_name': 'portal-user',
'slug': 'portal',
'title': u'Portail Montpellier-Métropole',
'base_url': 'http://portal.example.net',
'saml-sp-metadata-url': 'http://portal.example.net/saml/metadata',
},
],
}
@ -358,7 +367,11 @@ def test_hobo_deploy(monkeypatch, tenant_base, mocker, skeleton_dir, tmp_path):
audiences = sorted([arg[0][0]['audience'] for arg in mock_notify.call_args_list])
assert audiences == [
['http://clapiers.example.net/saml/metadata'],
['http://eservices.example.net/saml/metadata', 'http://passerelle.example.net/saml/metadata'],
[
'http://eservices.example.net/saml/metadata',
'http://passerelle.example.net/saml/metadata',
'http://portal.example.net/saml/metadata',
],
]
assert [arg[0][0]['@type'] for arg in mock_notify.call_args_list] == ['provision', 'provision']
assert [arg[0][0]['objects']['@type'] for arg in mock_notify.call_args_list] == ['role', 'role']
@ -440,7 +453,7 @@ def test_hobo_deploy(monkeypatch, tenant_base, mocker, skeleton_dir, tmp_path):
).count()
== 1
)
assert LibertyProvider.objects.count() == 3
assert LibertyProvider.objects.count() == 4
services = tenant.get_hobo_json()['services']
from authentic2.a2_rbac.models import Role
from authentic2.a2_rbac.utils import get_default_ou
@ -464,6 +477,8 @@ def test_hobo_deploy(monkeypatch, tenant_base, mocker, skeleton_dir, tmp_path):
assert provider.name == service['title']
assert provider.federation_source == 'hobo'
assert provider.entity_id == service['saml-sp-metadata-url']
if service.get('template_name') == 'portal-user':
assert provider.ou.base_url == service['base_url']
assert LibertyServiceProvider.objects.filter(liberty_provider=provider).count() == 1
service_provider = LibertyServiceProvider.objects.get(liberty_provider=provider)
@ -525,7 +540,7 @@ def test_hobo_deploy(monkeypatch, tenant_base, mocker, skeleton_dir, tmp_path):
field = env['profile']['fields'][9]
assert field['name'] == 'mobile'
field['kind'] = 'phone_number'
side_effect_iter = iter([meta1, meta2, RequestException(), meta3])
side_effect_iter = iter([meta1, meta2, RequestException(), meta4, meta3])
with mock.patch('hobo.agent.authentic2.provisionning.notify_agents') as mock_notify, mock.patch(
'hobo.agent.authentic2.management.commands.hobo_deploy.sleep', wraps=time.sleep
) as sleep_mock: