From 8ea70767451be1a1776e28b559775184d6fabeb2 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Fri, 23 Nov 2012 16:35:38 +0100 Subject: [PATCH 1/2] [IMP] auth_signup: generalize the signup method in order to allow signup via oauth bzr revid: rco@openerp.com-20121123153538-cqnuvqjhp4g44sef --- addons/auth_signup/res_users.py | 47 +++++++++---------- .../auth_signup/static/src/js/auth_signup.js | 1 - 2 files changed, 23 insertions(+), 25 deletions(-) diff --git a/addons/auth_signup/res_users.py b/addons/auth_signup/res_users.py index d936cb0f328..69ec45b80e5 100644 --- a/addons/auth_signup/res_users.py +++ b/addons/auth_signup/res_users.py @@ -163,43 +163,39 @@ class res_users(osv.Model): - create a new user (no token), or - create a user for a partner (with token, but no user for partner), or - change the password of a user (with token, and existing user). - :param values: a dictionary with field values + :param values: a dictionary with field values that are written on user :param token: signup token (optional) :return: (dbname, login, password) for the signed up user """ - assert values.get('login') and values.get('password') - result = (cr.dbname, values['login'], values['password']) - if token: # signup with a token: find the corresponding partner id res_partner = self.pool.get('res.partner') - partner = res_partner._signup_retrieve_partner(cr, uid, token, - check_validity=True, raise_exception=True, context=None) + partner = res_partner._signup_retrieve_partner( + cr, uid, token, check_validity=True, raise_exception=True, context=None) # invalidate signup token partner.write({'signup_token': False, 'signup_expiration': False}) - if partner.user_ids: - # user exists, modify its password - partner.user_ids[0].write({'password': values['password']}) + + partner_user = partner.user_ids and partner.user_ids[0] or False + if partner_user: + # user exists, modify it according to values + values.pop('login', None) + values.pop('name', None) + partner_user.write(values) + return (cr.dbname, partner_user.login, values.get('password')) else: # user does not exist: sign up invited user - self._signup_create_user(cr, uid, { + values.update({ 'name': partner.name, - 'login': values['login'], - 'password': values['password'], - 'email': values['login'], 'partner_id': partner.id, - }, context=context) - return result + 'email': values.get('email') or values.get('login'), + }) + self._signup_create_user(cr, uid, values, context=context) + else: + # no token, sign up an external user + values['email'] = values.get('email') or values.get('login') + self._signup_create_user(cr, uid, values, context=context) - # sign up an external user - assert values.get('name'), 'Signup: no name given for new user' - self._signup_create_user(cr, uid, { - 'name': values['name'], - 'login': values['login'], - 'password': values['password'], - 'email': values['login'], - }, context=context) - return result + return (cr.dbname, values.get('login'), values.get('password')) def _signup_create_user(self, cr, uid, values, context=None): """ create a new user from the template user """ @@ -212,6 +208,9 @@ class res_users(osv.Model): if not safe_eval(ir_config_parameter.get_param(cr, uid, 'auth_signup.allow_uninvited', 'False')): raise SignupError('Signup is not allowed for uninvited users') + assert values.get('login'), "Signup: no login given for new user" + assert values.get('partner_id') or values.get('name'), "Signup: no name or partner given for new user" + # create a copy of the template user (attached to a specific partner_id if given) values['active'] = True return self.copy(cr, uid, template_user_id, values, context=context) diff --git a/addons/auth_signup/static/src/js/auth_signup.js b/addons/auth_signup/static/src/js/auth_signup.js index 9642a15f5c9..962a54f5920 100644 --- a/addons/auth_signup/static/src/js/auth_signup.js +++ b/addons/auth_signup/static/src/js/auth_signup.js @@ -100,7 +100,6 @@ openerp.auth_signup = function(instance) { name: name, login: login, password: password, - //state: $.param(this.params) }; var self = this, From 48a854522a166724c0f5fbf46790da1147bbac59 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Fri, 23 Nov 2012 17:00:48 +0100 Subject: [PATCH 2/2] [IMP] auth_signup: split controller method to allow overridding bzr revid: rco@openerp.com-20121123160048-vaeiyeok9x430dku --- addons/auth_signup/controllers/main.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/addons/auth_signup/controllers/main.py b/addons/auth_signup/controllers/main.py index 8a2e966e931..888d2131f42 100644 --- a/addons/auth_signup/controllers/main.py +++ b/addons/auth_signup/controllers/main.py @@ -42,10 +42,13 @@ class Controller(openerp.addons.web.http.Controller): @openerp.addons.web.http.jsonrequest def signup(self, req, dbname, token, name, login, password): """ sign up a user (new or existing)""" + values = {'name': name, 'login': login, 'password': password} + return self._signup_with_values(req, dbname, token, values) + + def _signup_with_values(self, req, dbname, token, values): registry = RegistryManager.get(dbname) with registry.cursor() as cr: res_users = registry.get('res.users') - values = {'name': name, 'login': login, 'password': password} try: res_users.signup(cr, openerp.SUPERUSER_ID, values, token) except SignupError, e: