theme: add options for default authn appearance (#75139) #26

Closed
pmarillonnet wants to merge 1 commits from wip/75139-default-sso-appearance-screen into main
6 changed files with 83 additions and 5 deletions

View File

@ -52,6 +52,10 @@ AUTO_VARIABLES = (
'meta_keywords',
'sms_url',
'sms_sender',
'default_service_colour',
'default_service_logo_url',
'default_service_name',
'default_service_home_url',
)

View File

@ -201,8 +201,15 @@ class TemplateVars(FileBaseSettingsLoader):
tenant_settings.DEFAULT_FROM_EMAIL = variables['default_from_email']
tenant_settings.USER_PROFILE_CONFIG = hobo_json.get('profile')
tenant_settings.SMS_URL = variables.get('sms_url', '')
tenant_settings.SMS_SENDER = variables.get('sms_sender', '')
for setting in (
'sms_url',
'sms_sender',
'default_service_colour',
'default_service_logo_url',
'default_service_name',
'default_service_home_url',
):
setattr(tenant_settings, setting.upper(), variables.get(setting, ''))
class SettingsVars(SettingsDictUpdateMixin, FileBaseSettingsLoader):

View File

@ -20,3 +20,23 @@ from django.utils.translation import ugettext_lazy as _
class ThemeOptionsForm(forms.Form):
global_title = forms.CharField(label=_('Global Title'))
default_service_name = forms.CharField(
label=_('Default service name at authentication time'),
help_text=_('Leave empty if no default name is required.'),
required=False,
)
default_service_home_url = forms.URLField(
label=_('Default service home URL at authentication time'),
help_text=_('Leave empty if no default home URL is required.'),
required=False,
)
default_service_logo_url = forms.URLField(
label=_('Default service logo URL at authentication time'),
help_text=_('Leave empty if no default logo is required.'),
required=False,
)
default_service_colour = forms.CharField(
widget=forms.TextInput(attrs={'type': 'color'}),
label=_('Default service colour at authentication time'),
required=False,
)

View File

@ -71,7 +71,13 @@ select = SelectView.as_view()
class OptionsView(VariablesFormMixin, TemplateView):
template_name = 'hobo/theme_options.html'
variables = ['global_title']
variables = [
'global_title',
'default_service_colour',
'default_service_logo_url',
'default_service_name',
'default_service_home_url',
]
form_class = ThemeOptionsForm

View File

@ -169,3 +169,23 @@ def test_sms_update_settings_from_path(tmpdir):
loader.update_settings_from_path(tenant_settings, path)
assert tenant_settings.SMS_URL == 'https://example.com/send/'
assert tenant_settings.SMS_SENDER == 'Sender'
def test_default_service_appearance_update_settings_from_path(tmpdir):
tenant_settings = UserSettingsHolder({})
loader = TemplateVars()
variables = {
'default_service_name': 'Third-party authentication',
'default_service_home_url': 'https://default.example.com/',
'default_service_logo_url': 'https://default.example.com/logo.jpg',
'default_service_colour': '#d4d4d4',
}
env = {'services': [], 'variables': variables}
path = os.path.join(str(tmpdir), 'hobo.json')
json.dump(env, open(path, 'w'))
loader.update_settings_from_path(tenant_settings, path)
assert tenant_settings.DEFAULT_SERVICE_NAME == 'Third-party authentication'
assert tenant_settings.DEFAULT_SERVICE_HOME_URL == 'https://default.example.com/'
assert tenant_settings.DEFAULT_SERVICE_LOGO_URL == 'https://default.example.com/logo.jpg'
assert tenant_settings.DEFAULT_SERVICE_COLOUR == '#d4d4d4'

View File

@ -48,14 +48,35 @@ def test_theme_option_view(app, admin_user, fake_themes):
resp = resp.click('Options')
assert resp.html.find('label').text == 'Global Title:'
resp.form['global_title'] = 'foo'
resp.form['default_service_name'] = 'Third-party authentication'
resp.form['default_service_home_url'] = 'https://default.example.com/'
resp.form['default_service_logo_url'] = 'https://default.example.com/logo.jpg'
resp.form['default_service_colour'] = '#d4d4d4'
resp = resp.form.submit()
assert Variable.objects.all()[0].name == 'global_title'
assert Variable.objects.all()[0].value == 'foo'
assert Variable.objects.get(name='global_title').value == 'foo'
assert Variable.objects.get(name='default_service_name').value == 'Third-party authentication'
assert Variable.objects.get(name='default_service_home_url').value == 'https://default.example.com/'
assert (
Variable.objects.get(name='default_service_logo_url').value == 'https://default.example.com/logo.jpg'
)
assert Variable.objects.get(name='default_service_colour').value == '#d4d4d4'
assert resp.location == '.'
resp = resp.follow()
assert resp.html.find('li').text == 'foo'
resp = app.get('/theme').follow()
resp = resp.click('Options')
resp.form['default_service_name'] = ''
resp.form['default_service_home_url'] = ''
resp.form['default_service_logo_url'] = ''
resp.form['default_service_colour'] = ''
resp = resp.form.submit()
assert Variable.objects.get(name='default_service_name').value == ''
assert Variable.objects.get(name='default_service_home_url').value == ''
assert Variable.objects.get(name='default_service_logo_url').value == ''
assert Variable.objects.get(name='default_service_colour').value == ''
def test_theme_select_view_without_theme_selected(app, admin_user, fake_themes):
assert Variable.objects.filter(name='theme').count() == 0