theme: add options for default authn appearance (#75139) #26
|
@ -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',
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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,
|
||||
)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue