[FIX] auth_oauth: missing res_users.py diff from rev 33bfec2174

Most probably due to github migration
+  fix: directly redirect to login redirect paramas, instead of redirecting on the complete  web/login + redirect url
This commit is contained in:
Denis Ledoux 2014-06-02 18:47:41 +02:00
parent e035cc9105
commit 0a537dae91
2 changed files with 37 additions and 11 deletions

View File

@ -68,10 +68,13 @@ class OAuthLogin(Home):
return providers
def get_state(self, provider):
redirect = request.params.get('redirect', 'web')
if not redirect.startswith(('//', 'http://', 'https://')):
redirect = '%s%s' % (request.httprequest.url_root, redirect)
state = dict(
d=request.session.db,
p=provider['id'],
r=request.httprequest.full_path
r=redirect,
)
token = request.params.get('token')
if token:
@ -142,8 +145,7 @@ class OAuthController(http.Controller):
menu = state.get('m')
redirect = state.get('r')
url = '/web'
if redirect and not redirect.startswith('/auth_oauth/signin') and \
(not redirect.startswith('/web/login') or 'redirect' in urlparse.urlsplit(redirect).query):
if redirect:
url = redirect
elif action:
url = '/web#action=%s' % action

View File

@ -6,6 +6,7 @@ import urllib2
import simplejson
import openerp
from openerp.addons.auth_signup.res_users import SignupError
from openerp.osv import osv, fields
from openerp import SUPERUSER_ID
@ -55,14 +56,37 @@ class res_users(osv.Model):
This method can be overridden to add alternative signin methods.
"""
oauth_uid = validation['user_id']
user_ids = self.search(cr, uid, [("oauth_uid", "=", oauth_uid), ('oauth_provider_id', '=', provider)])
if not user_ids:
raise openerp.exceptions.AccessDenied()
assert len(user_ids) == 1
user = self.browse(cr, uid, user_ids[0], context=context)
user.write({'oauth_access_token': params['access_token']})
return user.login
try:
oauth_uid = validation['user_id']
user_ids = self.search(cr, uid, [("oauth_uid", "=", oauth_uid), ('oauth_provider_id', '=', provider)])
if not user_ids:
raise openerp.exceptions.AccessDenied()
assert len(user_ids) == 1
user = self.browse(cr, uid, user_ids[0], context=context)
user.write({'oauth_access_token': params['access_token']})
return user.login
except openerp.exceptions.AccessDenied, access_denied_exception:
if context and context.get('no_user_creation'):
return None
state = simplejson.loads(params['state'])
token = state.get('t')
oauth_uid = validation['user_id']
email = validation.get('email', 'provider_%s_user_%s' % (provider, oauth_uid))
name = validation.get('name', email)
values = {
'name': name,
'login': email,
'email': email,
'oauth_provider_id': provider,
'oauth_uid': oauth_uid,
'oauth_access_token': params['access_token'],
'active': True,
}
try:
_, login, _ = self.signup(cr, uid, values, token, context=context)
return login
except SignupError:
raise access_denied_exception
def auth_oauth(self, cr, uid, provider, params, context=None):
# Advice by Google (to avoid Confused Deputy Problem)