From: Simo Sorce Date: Mon, 27 Apr 2015 16:46:39 +0000 (-0400) Subject: Make availble a list of alternative aut methods X-Git-Tag: v1.0.0~41 X-Git-Url: http://git.cascardo.info/?p=cascardo%2Fipsilon.git;a=commitdiff_plain;h=c42a8dc97e454f66b5e3d1a99b259e38e8496f85 Make availble a list of alternative aut methods In the form case there is no way to automatically fallback to other auth methods or even repeat transparent methods. Add a simple list of alternative auth methods under the description box so that the user can easily switch back and forth between them if desired. Fixes: https://fedorahosted.org/ipsilon/ticket/96 Signed-off-by: Simo Sorce Reviewed-by: Patrick Uiterwijk --- diff --git a/ipsilon/login/common.py b/ipsilon/login/common.py index 9496a4b..3f2b007 100644 --- a/ipsilon/login/common.py +++ b/ipsilon/login/common.py @@ -142,6 +142,19 @@ class LoginManagerBase(ConfigHelper, PluginObject): except (ValueError, IndexError): return None + def other_login_stacks(self): + plugins = self._site[FACILITY] + stack = list() + try: + idx = plugins.enabled.index(self.name) + except (ValueError, IndexError): + idx = None + for i in range(0, len(plugins.enabled)): + if i == idx: + continue + stack.append(plugins.available[plugins.enabled[i]]) + return stack + def on_enable(self): # and add self to the root @@ -182,11 +195,14 @@ class LoginFormBase(LoginPageBase): return op(*args, **kwargs) def create_tmpl_context(self, **kwargs): - next_url = None - next_login = self.lm.next_login() - if next_login: - next_url = '%s?%s' % (next_login.path, - self.trans.get_GET_arg()) + other_stacks = None + other_login_stacks = self.lm.other_login_stacks() + if other_login_stacks: + other_stacks = list() + for ls in other_login_stacks: + url = '%s?%s' % (ls.path, self.trans.get_GET_arg()) + name = ls.name + other_stacks.append({'url': url, 'name': name}) cookie = SecureCookie(USERNAME_COOKIE) cookie.receive() @@ -210,7 +226,7 @@ class LoginFormBase(LoginPageBase): "username_text": self.lm.username_text, "password_text": self.lm.password_text, "description": self.lm.help_text, - "next_url": next_url, + "other_stacks": other_stacks, "username": username, "login_target": target, "cancel_url": '%s/login/cancel?%s' % (self.basepath, diff --git a/templates/login/form.html b/templates/login/form.html index 69a0cc7..fe99c5a 100644 --- a/templates/login/form.html +++ b/templates/login/form.html @@ -38,9 +38,6 @@ {% else %} Cancel {% endif %} - {% if next_url %} - Next method - {% endif %} @@ -49,6 +46,16 @@

{{description}}

+{% if other_stacks %} +
+

Other authentication methods: +

+

+{% endif %}
{% endblock %}