From b36bad85481d4f763daa10225bad0713a2371497 Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Wed, 17 Sep 2014 15:34:36 +0700 Subject: added selection of OpenID/g-Plus/none method for Google login --- askbot/conf/login_providers.py | 23 ++++++++++- askbot/deps/django_authopenid/util.py | 46 ++++++++++++++++------ .../templates/authopenid/providers_javascript.html | 28 ++++++------- 3 files changed, 68 insertions(+), 29 deletions(-) diff --git a/askbot/conf/login_providers.py b/askbot/conf/login_providers.py index e664fe52..dd269f14 100644 --- a/askbot/conf/login_providers.py +++ b/askbot/conf/login_providers.py @@ -126,7 +126,7 @@ providers = ( 'ClaimID', 'Facebook', 'Flickr', - 'Google Plus', + #'Google Plus', 'Mozilla Persona', 'Twitter', 'LinkedIn', @@ -146,6 +146,12 @@ DISABLED_BY_DEFAULT = ('LaunchPad', 'Mozilla Persona') NEED_EXTRA_SETUP = ('Google Plus', 'Twitter', 'Facebook', 'LinkedIn', 'identi.ca',) +GOOGLE_METHOD_CHOICES = ( + ('openid', 'OpenID (deprecated)'), + ('google-plus', 'Google Plus'), + ('disabled', _('disable')), +) + for provider in providers: if provider == 'local': provider_string = unicode(_('local password')) @@ -171,3 +177,18 @@ for provider in providers: **kwargs ) ) + + if provider == 'local': + #add Google settings here as one-off + settings.register( + livesettings.StringValue( + LOGIN_PROVIDERS, + 'SIGNIN_GOOGLE_METHOD', + default='openid', + choices=GOOGLE_METHOD_CHOICES, + description=_('Google login'), + help_text=_( + 'To enable Google-Plus login, OAuth keys are required in the "External keys" section' + ) + ) + ) diff --git a/askbot/deps/django_authopenid/util.py b/askbot/deps/django_authopenid/util.py index f05aba31..b1c67b3d 100644 --- a/askbot/deps/django_authopenid/util.py +++ b/askbot/deps/django_authopenid/util.py @@ -176,6 +176,19 @@ def use_password_login(): return True return False +def is_login_method_enabled(name): + name_key = name.upper().replace('-', '_') + setting = getattr(askbot_settings, 'SIGNIN_' + name_key + '_ENABLED', None) + if setting is not None: + return setting + + google_method = askbot_settings.SIGNIN_GOOGLE_METHOD + if name == 'google': + return google_method == 'openid' + elif name == 'google-plus': + return google_method == 'google-plus' + return False + def filter_enabled_providers(data): """deletes data about disabled providers from the input dictionary @@ -183,9 +196,7 @@ def filter_enabled_providers(data): delete_list = list() for provider_key, provider_settings in data.items(): name = provider_settings['name'] - name_key = name.upper().replace('-', '_') - is_enabled = getattr(askbot_settings, 'SIGNIN_' + name_key + '_ENABLED') - if is_enabled == False: + if not is_login_method_enabled(name): delete_list.append(provider_key) for provider_key in delete_list: @@ -499,18 +510,29 @@ def get_enabled_major_login_providers(): def get_google_user_id(client): return client.request('me')['id'] - if askbot_settings.GOOGLE_PLUS_KEY and askbot_settings.GOOGLE_PLUS_SECRET: - data['google-plus'] = { - 'name': 'google-plus', + google_method = askbot_settings.SIGNIN_GOOGLE_METHOD + if google_method == 'google-plus': + if askbot_settings.GOOGLE_PLUS_KEY and askbot_settings.GOOGLE_PLUS_SECRET: + data['google-plus'] = { + 'name': 'google-plus', + 'display_name': 'Google', + 'type': 'oauth2', + 'auth_endpoint': 'https://accounts.google.com/o/oauth2/auth', + 'token_endpoint': 'https://accounts.google.com/o/oauth2/token', + 'resource_endpoint': 'https://www.googleapis.com/plus/v1/people/', + 'icon_media_path': '/jquery-openid/images/google.gif', + 'get_user_id_function': get_google_user_id, + 'extra_auth_params': {'scope': ('profile', 'email', 'openid'), 'openid.realm': askbot_settings.APP_URL} + } + elif google_method == 'openid': + data['google'] = { + 'name': 'google', 'display_name': 'Google', - 'type': 'oauth2', - 'auth_endpoint': 'https://accounts.google.com/o/oauth2/auth', - 'token_endpoint': 'https://accounts.google.com/o/oauth2/token', - 'resource_endpoint': 'https://www.googleapis.com/plus/v1/people/', + 'type': 'openid-direct', 'icon_media_path': '/jquery-openid/images/google.gif', - 'get_user_id_function': get_google_user_id, - 'extra_auth_params': {'scope': ('profile', 'email', 'openid'), 'openid.realm': askbot_settings.APP_URL} + 'openid_endpoint': 'https://www.google.com/accounts/o8/id', } + data['mozilla-persona'] = { 'name': 'mozilla-persona', 'display_name': 'Mozilla Persona', diff --git a/askbot/templates/authopenid/providers_javascript.html b/askbot/templates/authopenid/providers_javascript.html index d20f052f..0900d014 100644 --- a/askbot/templates/authopenid/providers_javascript.html +++ b/askbot/templates/authopenid/providers_javascript.html @@ -12,25 +12,21 @@ var siteName = '{{settings.APP_SHORT_NAME}}'; var provider_count = {{existing_login_methods|length}}; {% for login_provider in major_login_providers %} - {%if settings['SIGNIN_' + login_provider.name.upper() + '_ENABLED'] == True %} - {% if login_provider.extra_token_name %} - extra_token_name['{{login_provider.name}}'] = '{{ login_provider.extra_token_name|escapejs }}'; - {% endif %} - {% if login_provider.type == 'password' %} - create_pw_text['{{login_provider.name}}'] = '{{ login_provider.create_password_prompt|escapejs }}'; - change_pw_text['{{login_provider.name}}'] = '{{ login_provider.change_password_prompt|escapejs }}'; - {% endif %} + {% if login_provider.extra_token_name %} + extra_token_name['{{login_provider.name}}'] = '{{ login_provider.extra_token_name|escapejs }}'; + {% endif %} + {% if login_provider.type == 'password' %} + create_pw_text['{{login_provider.name}}'] = '{{ login_provider.create_password_prompt|escapejs }}'; + change_pw_text['{{login_provider.name}}'] = '{{ login_provider.change_password_prompt|escapejs }}'; {% endif %} {% endfor %} {% for login_provider in minor_login_providers %} - {% if settings['SIGNIN_' + login_provider.name.upper() + '_ENABLED'] == True %} -{% if login_provider.extra_token_name %} - extra_token_name['{{login_provider.name}}'] = '{{ login_provider.extra_token_name|escapejs }}'; - {% endif %} - {% if login_provider.type == 'password' %} - create_pw_text['{{login_provider.name}}'] = '{{ login_provider.create_password_prompt|escapejs }}'; - change_pw_text['{{login_provider.name}}'] = '{{ login_provider.change_password_prompt|escapejs }}'; - {% endif %} + {% if login_provider.extra_token_name %} + extra_token_name['{{login_provider.name}}'] = '{{ login_provider.extra_token_name|escapejs }}'; + {% endif %} + {% if login_provider.type == 'password' %} + create_pw_text['{{login_provider.name}}'] = '{{ login_provider.create_password_prompt|escapejs }}'; + change_pw_text['{{login_provider.name}}'] = '{{ login_provider.change_password_prompt|escapejs }}'; {% endif %} {% endfor %} {% if user.is_authenticated() %} -- cgit v1.2.3-1-g7c22