# HG changeset patch # User Johannes Bornhold # Date 2016-05-24 13:32:39 # Node ID dd346b2b1b7e7f616b52279249ea02de14cab901 # Parent 06f54f5cf7a3f37103514c392d5f657a73dc4bed login: Remove social auth code from login controller. This code will be moved to the EE edition. diff --git a/rhodecode/controllers/login.py b/rhodecode/controllers/login.py --- a/rhodecode/controllers/login.py +++ b/rhodecode/controllers/login.py @@ -42,7 +42,7 @@ from rhodecode.authentication.base impor from rhodecode.lib.base import BaseController, render from rhodecode.lib.exceptions import UserCreationError from rhodecode.lib.utils2 import safe_str -from rhodecode.model.db import User, ExternalIdentity +from rhodecode.model.db import User from rhodecode.model.forms import LoginForm, RegisterForm, PasswordResetForm from rhodecode.model.login_session import LoginSession from rhodecode.model.meta import Session @@ -122,7 +122,6 @@ class LoginController(BaseController): not_default = c.rhodecode_user.username != User.DEFAULT_USER ip_allowed = c.rhodecode_user.ip_allowed - c.social_plugins = self._get_active_social_plugins() # redirect if already logged in if c.rhodecode_user.is_authenticated and not_default and ip_allowed: @@ -176,17 +175,6 @@ class LoginController(BaseController): location=c.came_from, headers=headers) return render('/login.html') - # TODO: Move this to a better place. - def _get_active_social_plugins(self): - from rhodecode.authentication.base import AuthomaticBase - activated_plugins = SettingsModel().get_auth_plugins() - social_plugins = [] - for plugin_id in activated_plugins: - plugin = loadplugin(plugin_id) - if isinstance(plugin, AuthomaticBase) and plugin.is_active(): - social_plugins.append(plugin) - return social_plugins - @HasPermissionAnyDecorator('hg.admin', 'hg.register.auto_activate', 'hg.register.manual_activate') def register(self): @@ -198,16 +186,7 @@ class LoginController(BaseController): c.captcha_active = bool(captcha_private_key) c.captcha_public_key = settings.get('rhodecode_captcha_public_key') c.register_message = settings.get('rhodecode_register_message') or '' - - c.social_plugins = self._get_active_social_plugins() - - social_data = session.get('rhodecode.social_auth') c.form_data = {} - if social_data: - c.form_data = {'username': social_data['user'].get('user_name'), - 'password': str(uuid.uuid4()), - 'email': social_data['user'].get('email') - } if request.POST: register_form = RegisterForm()() @@ -228,15 +207,7 @@ class LoginController(BaseController): raise formencode.Invalid(_msg, _value, None, error_dict=error_dict) - new_user = UserModel().create_registration(form_result) - if social_data: - plugin_name = 'egg:rhodecode-enterprise-ee#{}'.format( - social_data['credentials.provider'] - ) - auth_plugin = loadplugin(plugin_name) - if auth_plugin: - auth_plugin.handle_social_data( - session, new_user.user_id, social_data) + UserModel().create_registration(form_result) h.flash(_('You have successfully registered with RhodeCode'), category='success') Session().commit() @@ -317,93 +288,3 @@ class LoginController(BaseController): def logout(self): LoginSession().destroy_user_session() return redirect(url('home')) - - def social_auth(self, provider_name): - plugin_name = 'egg:rhodecode-enterprise-ee#{}'.format( - provider_name - ) - auth_plugin = loadplugin(plugin_name) - if not auth_plugin: - return self._handle_social_auth_error(request, 'No auth plugin') - - result, response = auth_plugin.get_provider_result(request) - if result: - if result.error: - return self._handle_social_auth_error(request, result.error) - elif result.user: - return self._handle_social_auth_success(request, result) - return response - - def _handle_social_auth_error(self, request, result): - log.error(result) - h.flash(_('There was an error during OAuth processing.'), - category='error') - return redirect(url('home')) - - def _normalize_social_data(self, result): - social_data = { - 'user': {'data': result.user.data}, - 'credentials.provider': result.user.credentials.provider_name, - 'credentials.token': result.user.credentials.token, - 'credentials.token_secret': result.user.credentials.token_secret, - 'credentials.refresh_token': result.user.credentials.refresh_token - } - # normalize data - social_data['user']['id'] = result.user.id - user_name = result.user.username or '' - # use email name as username for google - if (social_data['credentials.provider'] == 'google' and - result.user.email): - user_name = result.user.email - - social_data['user']['user_name'] = user_name - social_data['user']['email'] = result.user.email or '' - return social_data - - def _handle_social_auth_success(self, request, result): - self._set_came_from() - - # Hooray, we have the user! - # OAuth 2.0 and OAuth 1.0a provide only limited user data on login, - # We need to update the user to get more info. - if result.user: - result.user.update() - - social_data = self._normalize_social_data(result) - - session['rhodecode.social_auth'] = social_data - - plugin_name = 'egg:rhodecode-enterprise-ee#{}'.format( - social_data['credentials.provider'] - ) - auth_plugin = loadplugin(plugin_name) - - # user is logged so bind his external identity with account - if request.user and request.user.username != User.DEFAULT_USER: - if auth_plugin: - auth_plugin.handle_social_data( - session, request.user.user_id, social_data) - session.pop('rhodecode.social_auth', None) - Session().commit() - return redirect(url('my_account_oauth')) - else: - user = ExternalIdentity.user_by_external_id_and_provider( - social_data['user']['id'], - social_data['credentials.provider'] - ) - - # user tokens are already found in our db - if user: - if auth_plugin: - auth_plugin.handle_social_data( - session, user.user_id, social_data) - session.pop('rhodecode.social_auth', None) - headers = self._store_user_in_session(user.username) - raise self._redirect_to_origin( - location=c.came_from, headers=headers) - else: - msg = _('You need to finish registration ' - 'process to bind your external identity to your ' - 'account or sign in to existing account') - h.flash(msg, category='success') - return redirect(url('register'))