summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeny Fadeev <evgeny.fadeev@gmail.com>2011-05-11 17:03:57 -0400
committerEvgeny Fadeev <evgeny.fadeev@gmail.com>2011-05-11 17:03:57 -0400
commitef90a9f3daafee349a4ca433cb647922a6b03acd (patch)
tree59c6b0af54d4b10129283dbbe7a1f1d05ee400db
parente70caf9b1dd07202af3e52bb4a39c1330aee61ed (diff)
downloadaskbot-ef90a9f3daafee349a4ca433cb647922a6b03acd.tar.gz
askbot-ef90a9f3daafee349a4ca433cb647922a6b03acd.tar.bz2
askbot-ef90a9f3daafee349a4ca433cb647922a6b03acd.zip
fixed a bug preventing password login when all "social" login providers are disabled
-rw-r--r--askbot/__init__.py2
-rw-r--r--askbot/conf/login_providers.py1
-rw-r--r--askbot/deps/django_authopenid/backends.py4
-rw-r--r--askbot/deps/django_authopenid/forms.py6
-rw-r--r--askbot/deps/django_authopenid/util.py57
-rw-r--r--askbot/deps/django_authopenid/views.py28
-rw-r--r--askbot/skins/default/templates/authopenid/macros.html6
-rw-r--r--askbot/skins/default/templates/authopenid/signin.html12
8 files changed, 78 insertions, 38 deletions
diff --git a/askbot/__init__.py b/askbot/__init__.py
index 7b1765e5..bc2b93b5 100644
--- a/askbot/__init__.py
+++ b/askbot/__init__.py
@@ -9,7 +9,7 @@ import smtplib
import sys
import logging
-VERSION = (0, 6, 83)
+VERSION = (0, 6, 84)
#necessary for interoperability of django and coffin
try:
diff --git a/askbot/conf/login_providers.py b/askbot/conf/login_providers.py
index 132562d5..68ab6a52 100644
--- a/askbot/conf/login_providers.py
+++ b/askbot/conf/login_providers.py
@@ -40,6 +40,7 @@ providers = (
'Twitter',
'LinkedIn',
'LiveJournal',
+ #'myOpenID',
'OpenID',
'Technorati',
'Wordpress',
diff --git a/askbot/deps/django_authopenid/backends.py b/askbot/deps/django_authopenid/backends.py
index cac1ce02..72cc6e4f 100644
--- a/askbot/deps/django_authopenid/backends.py
+++ b/askbot/deps/django_authopenid/backends.py
@@ -35,7 +35,7 @@ class AuthBackend(object):
just which method it is going to use it determined
from the signature of the function call
"""
- login_providers = util.get_login_providers()
+ login_providers = util.get_enabled_login_providers()
if method == 'password':
if login_providers[provider_name]['type'] != 'password':
raise ImproperlyConfigured('login provider must use password')
@@ -150,7 +150,7 @@ class AuthBackend(object):
any for any login provider that uses password
and allows the password change function
"""
- login_providers = util.get_login_providers()
+ login_providers = util.get_enabled_login_providers()
if login_providers[provider_name]['type'] != 'password':
raise ImproperlyConfigured('login provider must use password')
diff --git a/askbot/deps/django_authopenid/forms.py b/askbot/deps/django_authopenid/forms.py
index 30674eb6..91534221 100644
--- a/askbot/deps/django_authopenid/forms.py
+++ b/askbot/deps/django_authopenid/forms.py
@@ -69,7 +69,7 @@ class LoginProviderField(forms.CharField):
"""makes sure that login provider name
exists is in the list of accepted providers
"""
- providers = util.get_login_providers()
+ providers = util.get_enabled_login_providers()
if value in providers:
return value
else:
@@ -87,7 +87,7 @@ class PasswordLoginProviderField(LoginProviderField):
one of the known password login providers
"""
value = super(PasswordLoginProviderField, self).clean(value)
- providers = util.get_login_providers()
+ providers = util.get_enabled_login_providers()
if providers[value]['type'] != 'password':
raise forms.ValidationError(
'provider %s must accept password' % value
@@ -192,7 +192,7 @@ class LoginForm(forms.Form):
contents of cleaned_data depends on the type
of login
"""
- providers = util.get_login_providers()
+ providers = util.get_enabled_login_providers()
if 'login_provider_name' in self.cleaned_data:
provider_name = self.cleaned_data['login_provider_name']
diff --git a/askbot/deps/django_authopenid/util.py b/askbot/deps/django_authopenid/util.py
index a913400f..809c6103 100644
--- a/askbot/deps/django_authopenid/util.py
+++ b/askbot/deps/django_authopenid/util.py
@@ -167,9 +167,28 @@ def use_password_login():
else:
return True
-def get_major_login_providers():
+def filter_enabled_providers(data):
+ """deletes data about disabled providers from
+ the input dictionary
+ """
+ delete_list = list()
+ for provider_key, provider_settings in data.items():
+ name = provider_settings['name']
+ is_enabled = getattr(askbot_settings, 'SIGNIN_' + name.upper() + '_ENABLED')
+ if is_enabled == False:
+ delete_list.append(provider_key)
+
+ for provider_key in delete_list:
+ del data[provider_key]
+
+ return data
+
+
+def get_enabled_major_login_providers():
"""returns a dictionary with data about login providers
whose icons are to be shown in large format
+
+ disabled providers are excluded
items of the dictionary are dictionaries with keys:
@@ -299,23 +318,25 @@ def get_major_login_providers():
'icon_media_path': '/jquery-openid/images/openid.gif',
'openid_endpoint': None,
}
- return data
+ return filter_enabled_providers(data)
-def get_minor_login_providers():
- """same as get_major_login_providers
+def get_enabled_minor_login_providers():
+ """same as get_enabled_major_login_providers
but those that are to be displayed with small buttons
- structure of dictionary values is the same as in get_major_login_providers
+ disabled providers are excluded
+
+ structure of dictionary values is the same as in get_enabled_major_login_providers
"""
data = SortedDict()
- data['myopenid'] = {
- 'name': 'myopenid',
- 'display_name': 'MyOpenid',
- 'type': 'openid-username',
- 'extra_token_name': _('MyOpenid user name'),
- 'icon_media_path': '/jquery-openid/images/myopenid-2.png',
- 'openid_endpoint': 'http://%(username)s.myopenid.com'
- }
+ #data['myopenid'] = {
+ # 'name': 'myopenid',
+ # 'display_name': 'MyOpenid',
+ # 'type': 'openid-username',
+ # 'extra_token_name': _('MyOpenid user name'),
+ # 'icon_media_path': '/jquery-openid/images/myopenid-2.png',
+ # 'openid_endpoint': 'http://%(username)s.myopenid.com'
+ #}
data['flickr'] = {
'name': 'flickr',
'display_name': 'Flickr',
@@ -380,13 +401,13 @@ def get_minor_login_providers():
'icon_media_path': '/jquery-openid/images/verisign-2.png',
'openid_endpoint': 'http://%(username)s.pip.verisignlabs.com/'
}
- return data
+ return filter_enabled_providers(data)
-def get_login_providers():
+def get_enabled_login_providers():
"""return all login providers in one sorted dict
"""
- data = get_major_login_providers()
- data.update(get_minor_login_providers())
+ data = get_enabled_major_login_providers()
+ data.update(get_enabled_minor_login_providers())
return data
def set_login_provider_tooltips(provider_dict, active_provider_names = None):
@@ -447,7 +468,7 @@ def get_oauth_parameters(provider_name):
it should not be called at compile time
otherwise there may be strange errors
"""
- providers = get_login_providers()
+ providers = get_enabled_login_providers()
data = providers[provider_name]
if data['type'] != 'oauth':
raise ValueError('oauth provider expected, %s found' % data['type'])
diff --git a/askbot/deps/django_authopenid/views.py b/askbot/deps/django_authopenid/views.py
index 14def205..2ab856d2 100644
--- a/askbot/deps/django_authopenid/views.py
+++ b/askbot/deps/django_authopenid/views.py
@@ -537,10 +537,27 @@ def show_signin_view(
'use_password_login': util.use_password_login(),
}
- major_login_providers = util.get_major_login_providers()
- minor_login_providers = util.get_minor_login_providers()
+ major_login_providers = util.get_enabled_major_login_providers()
+ minor_login_providers = util.get_enabled_minor_login_providers()
+
+ #determine if we are only using password login
+ active_provider_names = [p['name'] for p in major_login_providers.values()]
+ active_provider_names.extend([p['name'] for p in minor_login_providers.values()])
+
+ have_buttons = True
+ if (len(active_provider_names) == 1 and active_provider_names[0] == 'local'):
+ if askbot_settings.SIGNIN_ALWAYS_SHOW_LOCAL_LOGIN == True:
+ #in this case the form is not using javascript, so set initial values
+ #here
+ have_buttons = False
+ login_form.initial['login_provider_name'] = 'local'
+ if request.user.is_authenticated():
+ login_form.initial['password_action'] = 'change_password'
+ else:
+ login_form.initial['password_action'] = 'login'
+
+ data['have_buttons'] = have_buttons
- active_provider_names = None
if request.user.is_authenticated():
data['existing_login_methods'] = existing_login_methods
active_provider_names = [
@@ -926,8 +943,9 @@ def signup_with_password(request):
email_feeds_form = askbot_forms.SimpleEmailSubscribeForm()
logging.debug('printing legacy signup form')
- major_login_providers = util.get_major_login_providers()
- minor_login_providers = util.get_minor_login_providers()
+ major_login_providers = util.get_enabled_major_login_providers()
+ minor_login_providers = util.get_enabled_minor_login_providers()
+
context_data = {
'form': form,
'page_class': 'openid-signin',
diff --git a/askbot/skins/default/templates/authopenid/macros.html b/askbot/skins/default/templates/authopenid/macros.html
index 534fb42f..33ef793b 100644
--- a/askbot/skins/default/templates/authopenid/macros.html
+++ b/askbot/skins/default/templates/authopenid/macros.html
@@ -17,14 +17,12 @@
settings = None
)
%}
- {{login_form.login_provider_name}}
- {{ login_form.next }}
<div id="login-icons">
<ul class="login-icons large">
{% for login_provider in major_login_providers %}
{% if login_provider.name == 'local' and hide_local_login == True %}
{# do nothing here, left if statement this way for simplicity #}
- {% elif settings['SIGNIN_' + login_provider.name.upper() + '_ENABLED'] == True %}
+ {% else %}
<li>
{{ login_provider_input(login_provider) }}
</li>
@@ -33,11 +31,9 @@
</ul>
<ul class="login-icons small">
{% for login_provider in minor_login_providers %}
- {% if settings['SIGNIN_' + login_provider.name.upper() + '_ENABLED'] == True %}
<li>
{{ login_provider_input(login_provider) }}
</li>
- {% endif %}
{% endfor %}
</ul>
</div>
diff --git a/askbot/skins/default/templates/authopenid/signin.html b/askbot/skins/default/templates/authopenid/signin.html
index 9316255a..6b43b4b0 100644
--- a/askbot/skins/default/templates/authopenid/signin.html
+++ b/askbot/skins/default/templates/authopenid/signin.html
@@ -6,7 +6,9 @@
<link rel="stylesheet" type="text/css" media="screen" href="{{"/jquery-openid/openid.css"|media}}"/>
{% endblock %}
{% block content %}
-<h1>{{page_title}}</h1>
+{% if have_buttons or view_subtype == 'email_sent' %}
+ <h1>{{page_title}}</h1>
+{% endif %}
{% if answer %}
<div class="message">
{% trans title=answer.question.title, summary=answer.summary %}
@@ -22,15 +24,15 @@
</div>
{% endif %}
<p id='login-intro'>
- {% if view_subtype == 'default' %}
+ {% if view_subtype == 'default' and have_buttons %}
{% trans %}Take a pick of your favorite service below to sign in using secure OpenID or similar technology. Your external service password always stays confidential and you don't have to rememeber or create another one.{% endtrans %}
- {% elif view_subtype == 'add_openid' %}
+ {% elif view_subtype == 'add_openid' and have_buttons %}
{% if existing_login_methods %}
{% trans %}It's a good idea to make sure that your existing login methods still work, or add a new one. Please click any of the icons below to check/change or add new login methods.{% endtrans %}
{% else %}
{% trans %}Please add a more permanent login method by clicking one of the icons below, to avoid logging in via email each time.{% endtrans %}
{% endif %}
- {% elif view_subtype == 'change_openid' %}
+ {% elif view_subtype == 'change_openid' and have_buttons %}
{% if existing_login_methods %}
{% trans %}Click on one of the icons below to add a new login method or re-validate an existing one.{% endtrans %}
{% else %}
@@ -50,6 +52,8 @@
wants to always show the password login form - then
the button is useless.
#}
+ {{ login_form.login_provider_name }}
+ {{ login_form.next }}
{{
login_macros.provider_buttons(
login_form = login_form,