multitenant: add loader to define MELLON_LOGIN_HINTS setting (#42191)

This commit is contained in:
Serghei Mihai 2020-05-01 16:09:01 +02:00
parent 8b1c24db2b
commit 5370064071
3 changed files with 61 additions and 1 deletions

View File

@ -316,6 +316,7 @@ if PROJECT_NAME != 'wcs':
'hobo.multitenant.settings_loaders.CookieNames',
'hobo.multitenant.settings_loaders.SettingsJSON',
'hobo.multitenant.settings_loaders.SettingsVars',
'hobo.multitenant.settings_loaders.BackofficeLoginHint',
)
# templates in <tenant>/templates

View File

@ -416,3 +416,19 @@ class SettingsPy(FileBaseSettingsLoader):
def update_settings_from_path(self, tenant_settings, path):
execfile(path, DictAdapter(tenant_settings)) # yep, it's dangerous
class BackofficeLoginHint(FileBaseSettingsLoader):
FILENAME = 'hobo.json'
def update_settings_from_path(self, tenant_settings, path):
with open(path) as f:
hobo_json = json.load(f)
for service in hobo_json.get('services'):
if service.get('this'):
if service.get('service-id') in ('welco', 'bijoe', 'hobo') or \
'portal-agent' in service.get('template_name', ''):
tenant_settings.MELLON_LOGIN_HINTS = ['always_backoffice']
else:
tenant_settings.MELLON_LOGIN_HINTS = ['backoffice']
break

View File

@ -5,8 +5,9 @@ import pytest
from django.conf import UserSettingsHolder
from hobo.deploy.utils import get_hobo_json
from hobo.environment.models import Authentic
from hobo.environment.models import Authentic, Combo
from hobo.multitenant.settings_loaders import Authentic as AuthenticLoader
from hobo.multitenant.settings_loaders import BackofficeLoginHint
from hobo.profile.models import AttributeDefinition
pytestmark = pytest.mark.django_db
@ -55,3 +56,45 @@ def test_authentic_update_settings_from_path(tmpdir):
assert tenant_settings.A2_PROFILE_FIELDS == profile_fields
assert tenant_settings.A2_REQUIRED_FIELDS == [u'first_name', u'last_name', u'email']
assert tenant_settings.A2_REGISTRATION_FIELDS == [u'first_name', u'last_name']
def test_mellon_backoffice_login_hint_setting_from_path(tmpdir):
c = Combo(title='combo', slug='portal', base_url='http://portal.example.net')
c.save()
env = get_hobo_json()
# simulate hobo.json for this instance
env['services'][0]['this'] = True
path = os.path.join(str(tmpdir), 'hobo.json')
json.dump(env, open(path, 'w'))
# call settings loaders
tenant_settings = UserSettingsHolder({})
assert not getattr(tenant_settings, 'MELLON_LOGIN_HINTS', False)
loader = BackofficeLoginHint()
loader.update_settings_from_path(tenant_settings, path)
assert tenant_settings.MELLON_LOGIN_HINTS == ['backoffice']
def test_mellon_always_backoffice_login_hint_setting_from_path(tmpdir):
c = Combo(title='combo', slug='portal-agent', base_url='http://agent.example.net',
template_name='portal-agent')
c.save()
env = get_hobo_json()
# simulate hobo.json for this instance
env['services'][0]['this'] = True
path = os.path.join(str(tmpdir), 'hobo.json')
json.dump(env, open(path, 'w'))
# call settings loaders
tenant_settings = UserSettingsHolder({})
assert not getattr(tenant_settings, 'MELLON_LOGIN_HINTS', False)
loader = BackofficeLoginHint()
loader.update_settings_from_path(tenant_settings, path)
assert tenant_settings.MELLON_LOGIN_HINTS == ['always_backoffice']