summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2015-04-27 12:46:39 -0400
committerSimo Sorce <simo@redhat.com>2015-04-27 12:46:39 -0400
commit4ace945df3dee4b81012c3d14554139a4d03fc34 (patch)
treeefff770439fa567375351feb53828e0141b9ae4b
parente5a7774427adf44c2100c5535aca569f938e7c2d (diff)
downloadipsilon-login_stacks.zip
ipsilon-login_stacks.tar.gz
ipsilon-login_stacks.tar.xz
Make availble a list of alternative aut methodslogin_stacks
In the form case there is no way to automatically fallback to ther 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 froth between them if desired. Fixes: https://fedorahosted.org/ipsilon/ticket/96 Signed-off-by: Simo Sorce <simo@redhat.com>
-rw-r--r--ipsilon/login/common.py28
-rw-r--r--templates/login/form.html13
2 files changed, 32 insertions, 9 deletions
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 %}
<a href="{{ basepath }}" title="Cancel" class="btn btn-link" tabindex="4">Cancel</a>
{% endif %}
- {% if next_url %}
- <a href="{{ next_url }}" title="Next authentication method" class="btn btn-link" tabindex="5">Next method </a>
- {% endif %}
<button type="submit" value="login" class="btn btn-primary btn-lg" tabindex="3">Log In</button>
</div>
</div>
@@ -49,6 +46,16 @@
<div class="col-sm-5 col-md-6 col-lg-7 details">
<p>{{description}}</p>
+{% if other_stacks %}
+ <hr>
+ <p>Other authentication methods:
+ <ul>
+ {% for s in other_stacks %}
+ <li><a href="{{ s['url'] }}" class="btn btn-link" tabindex="5">{{ s['name'] }}</a></li>
+ {% endfor %}
+ </ul>
+ </p>
+{% endif %}
</div>
{% endblock %}