diff options
author | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2011-05-11 17:03:57 -0400 |
---|---|---|
committer | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2011-05-11 17:03:57 -0400 |
commit | ef90a9f3daafee349a4ca433cb647922a6b03acd (patch) | |
tree | 59c6b0af54d4b10129283dbbe7a1f1d05ee400db | |
parent | e70caf9b1dd07202af3e52bb4a39c1330aee61ed (diff) | |
download | askbot-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__.py | 2 | ||||
-rw-r--r-- | askbot/conf/login_providers.py | 1 | ||||
-rw-r--r-- | askbot/deps/django_authopenid/backends.py | 4 | ||||
-rw-r--r-- | askbot/deps/django_authopenid/forms.py | 6 | ||||
-rw-r--r-- | askbot/deps/django_authopenid/util.py | 57 | ||||
-rw-r--r-- | askbot/deps/django_authopenid/views.py | 28 | ||||
-rw-r--r-- | askbot/skins/default/templates/authopenid/macros.html | 6 | ||||
-rw-r--r-- | askbot/skins/default/templates/authopenid/signin.html | 12 |
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,
|