add hook for Factors to show user settings. closes #5
This commit is contained in:
parent
da5568b571
commit
986fed3e7c
|
@ -74,6 +74,12 @@ class Factor(PolicyModel):
|
||||||
type = ''
|
type = ''
|
||||||
form = ''
|
form = ''
|
||||||
|
|
||||||
|
def has_user_settings(self):
|
||||||
|
"""Entrypoint to integrate with User settings. Can either return False if no
|
||||||
|
user settings are available, or a tuple or string, string, string where the first string
|
||||||
|
is the name the item has, the second string is the icon and the third is the view-name."""
|
||||||
|
return False
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "Factor %s" % self.slug
|
return "Factor %s" % self.slug
|
||||||
|
|
||||||
|
@ -85,6 +91,9 @@ class PasswordFactor(Factor):
|
||||||
type = 'passbook.core.auth.factors.password.PasswordFactor'
|
type = 'passbook.core.auth.factors.password.PasswordFactor'
|
||||||
form = 'passbook.core.forms.factors.PasswordFactorForm'
|
form = 'passbook.core.forms.factors.PasswordFactorForm'
|
||||||
|
|
||||||
|
def has_user_settings(self):
|
||||||
|
return _('Change Password'), 'pficon-key', 'passbook_core:user-change-password'
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "Password Factor %s" % self.slug
|
return "Password Factor %s" % self.slug
|
||||||
|
|
||||||
|
|
|
@ -2,25 +2,28 @@
|
||||||
|
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% load is_active %}
|
{% load is_active %}
|
||||||
|
{% load passbook_user_settings %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="col-md-3 ">
|
<div class="col-md-3 ">
|
||||||
<div class="nav-category">
|
<div class="nav-category">
|
||||||
<h2>{% trans 'User Profile'%}</h2>
|
<h2>{% trans 'User Settings'%}</h2>
|
||||||
<ul class="nav nav-pills nav-stacked">
|
<ul class="nav nav-pills nav-stacked">
|
||||||
<li class="{% is_active 'passbook_core:user-settings' %}">
|
<li class="{% is_active 'passbook_core:user-settings' %}">
|
||||||
<a href="{% url 'passbook_core:user-settings' %}">
|
<a href="{% url 'passbook_core:user-settings' %}">
|
||||||
<i class="fa fa-desktop"></i> {% trans 'Details' %}
|
<i class="fa pficon-edit"></i> {% trans 'Details' %}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="{% is_active 'passbook_core:user-change-password' %}">
|
<li class="nav-divider"></li>
|
||||||
<a href="{% url 'passbook_core:user-change-password' %}">
|
{% user_factors as uf %}
|
||||||
<i class="pficon pficon-locked"></i> {% trans 'Change Password' %}
|
{% for name, icon, link in uf %}
|
||||||
|
<li class="{% is_active link %}">
|
||||||
|
<a href="{% url link %}">
|
||||||
|
<i class="{{ icon }}"></i> {{ name }}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#"><i class="fa fa-file-text-o"></i> Journal</a></li>
|
{% endfor %}
|
||||||
<li><a href="#"><i class="fa fa-cloud"></i> Storage</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
0
passbook/core/templatetags/__init__.py
Normal file
0
passbook/core/templatetags/__init__.py
Normal file
19
passbook/core/templatetags/passbook_user_settings.py
Normal file
19
passbook/core/templatetags/passbook_user_settings.py
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
"""passbook user settings template tags"""
|
||||||
|
|
||||||
|
from django import template
|
||||||
|
|
||||||
|
from passbook.core.models import Factor
|
||||||
|
|
||||||
|
register = template.Library()
|
||||||
|
|
||||||
|
@register.simple_tag(takes_context=True)
|
||||||
|
def user_factors(context):
|
||||||
|
"""Return list of all factors which apply to user"""
|
||||||
|
user = context.get('request').user
|
||||||
|
_all_factors = Factor.objects.filter(enabled=True).order_by('order').select_subclasses()
|
||||||
|
matching_factors = []
|
||||||
|
for factor in _all_factors:
|
||||||
|
_link = factor.has_user_settings()
|
||||||
|
if factor.passes(user) and _link:
|
||||||
|
matching_factors.append(_link)
|
||||||
|
return matching_factors
|
|
@ -15,6 +15,9 @@ class OTPFactor(Factor):
|
||||||
type = 'passbook.otp.factors.OTPFactor'
|
type = 'passbook.otp.factors.OTPFactor'
|
||||||
form = 'passbook.otp.forms.OTPFactorForm'
|
form = 'passbook.otp.forms.OTPFactorForm'
|
||||||
|
|
||||||
|
def has_user_settings(self):
|
||||||
|
return _('OTP'), 'pficon-locked', 'passbook_otp:otp-user-settings'
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "OTP Factor %s" % self.slug
|
return "OTP Factor %s" % self.slug
|
||||||
|
|
||||||
|
|
Reference in a new issue