login: Remove social auth code from login controller.
This code will be moved to the EE edition.
This commit is contained in:
parent
ce2aa59dea
commit
efe2b61b49
1 changed files with 2 additions and 121 deletions
|
|
@ -42,7 +42,7 @@ from rhodecode.authentication.base import loadplugin
|
|||
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'))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue