diff --git a/addons/auth_signup/__openerp__.py b/addons/auth_signup/__openerp__.py
index 7318ecfd8ef..50402207018 100644
--- a/addons/auth_signup/__openerp__.py
+++ b/addons/auth_signup/__openerp__.py
@@ -43,6 +43,5 @@ Allow users to sign up and reset their password
'views/auth_signup_login.xml',
],
'js': ['static/src/js/auth_signup.js'],
- 'qweb': ['static/src/xml/auth_signup.xml'],
'bootstrap': True,
}
diff --git a/addons/auth_signup/controllers/main.py b/addons/auth_signup/controllers/main.py
index 7948e737327..4cb8e5b75f0 100644
--- a/addons/auth_signup/controllers/main.py
+++ b/addons/auth_signup/controllers/main.py
@@ -21,77 +21,71 @@
import logging
import openerp
+import openerp.addons.web.controllers.main as webmain
from openerp import http
from openerp.http import request, LazyResponse
-from openerp.modules.registry import RegistryManager
-from ..res_users import SignupError
+from openerp.tools.translate import _
_logger = logging.getLogger(__name__)
class Home(openerp.addons.web.controllers.main.Home):
- @http.route('/web/login', type='http', auth="none")
+ @http.route()
def web_login(self, *args, **kw):
- response = super(Home, self).web_login(*args, **kw)
- if isinstance(response, LazyResponse):
- config = self.get_auth_signup_config(request.session.db)
- response.params['values'].update(config)
- if request.params.get('signup', None) and config['signup']:
- response.params['template'] = 'auth_signup.signup'
- if request.params.get('reset', None) and config['signup']:
- response.params['template'] = 'auth_signup.reset'
+ # TODO: ensure_db()
+ request.disable_db = False
+
+ mode = request.params.get('mode')
+ qcontext = request.params.copy()
+ response = webmain.render_bootstrap_template(request.session.db, 'auth_signup.signup', qcontext, lazy=True)
+ token = qcontext.get('token', None)
+ token_infos = None
+ if token:
+ try:
+ # retrieve the user info (name, login or email) corresponding to a signup token
+ res_partner = request.registry.get('res.partner')
+ token_infos = res_partner.signup_retrieve_info(request.cr, openerp.SUPERUSER_ID, token)
+ for k, v in token_infos.items():
+ qcontext.setdefault(k, v)
+ except:
+ qcontext['error'] = _("Invalid signup token")
+ response.params['template'] = 'web.login'
+ return response
+
+ # retrieve the module config (which features are enabled) for the login page
+ icp = request.registry.get('ir.config_parameter')
+ config = {
+ 'signup': icp.get_param(request.cr, openerp.SUPERUSER_ID, 'auth_signup.allow_uninvited') == 'True',
+ 'reset': icp.get_param(request.cr, openerp.SUPERUSER_ID, 'auth_signup.reset_password') == 'True',
+ }
+ qcontext.update(config)
+
+ if 'error' in qcontext or mode not in ('reset', 'signup') or (not token and not config[mode]):
+ response = super(Home, self).web_login(*args, **kw)
+ if isinstance(response, LazyResponse):
+ response.params['values'].update(config)
+ return response
+
+ if request.httprequest.method == 'GET':
+ if token_infos:
+ qcontext.update(token_infos)
+ else:
+ res_users = request.registry.get('res.users')
+ login = request.params.get('login')
+ if mode == 'reset' and not token:
+ try:
+ res_users.reset_password(request.cr, openerp.SUPERUSER_ID, login)
+ qcontext['message'] = _("An email has been sent with credentials to reset your password")
+ response.params['template'] = 'web.login'
+ except:
+ qcontext['error'] = _("Could not reset your password")
+ _logger.exception('error when resetting password')
+ else:
+ values = {key: qcontext.get(key) for key in ('login', 'name', 'password')}
+ res_users.signup(request.cr, openerp.SUPERUSER_ID, values, token)
+ request.cr.commit()
+ return super(Home, self).web_login(*args, **kw)
+
return response
- def get_auth_signup_config(self, dbname):
- """ retrieve the module config (which features are enabled) for the login page """
- registry = RegistryManager.get(dbname)
- with registry.cursor() as cr:
- icp = registry.get('ir.config_parameter')
- config = {
- 'signup': icp.get_param(cr, openerp.SUPERUSER_ID, 'auth_signup.allow_uninvited') == 'True',
- 'reset_password': icp.get_param(cr, openerp.SUPERUSER_ID, 'auth_signup.reset_password') == 'True',
- }
- return config
-
-class Controller(http.Controller):
-
- @http.route('/auth_signup/retrieve', type='json', auth="none")
- def retrieve(self, dbname, token):
- """ retrieve the user info (name, login or email) corresponding to a signup token """
- registry = RegistryManager.get(dbname)
- with registry.cursor() as cr:
- res_partner = registry.get('res.partner')
- user_info = res_partner.signup_retrieve_info(cr, openerp.SUPERUSER_ID, token)
- return user_info
-
- @http.route('/auth_signup/signup', type='json', auth="none")
- def signup(self, dbname, token, **values):
- """ sign up a user (new or existing)"""
- try:
- self._signup_with_values(dbname, token, values)
- except SignupError, e:
- return {'error': openerp.tools.exception_to_unicode(e)}
- return {}
-
- def _signup_with_values(self, dbname, token, values):
- registry = RegistryManager.get(dbname)
- with registry.cursor() as cr:
- res_users = registry.get('res.users')
- res_users.signup(cr, openerp.SUPERUSER_ID, values, token)
-
- @http.route('/auth_signup/reset_password', type='json', auth="none")
- def reset_password(self, dbname, login):
- """ retrieve user, and perform reset password """
- registry = RegistryManager.get(dbname)
- with registry.cursor() as cr:
- try:
- res_users = registry.get('res.users')
- res_users.reset_password(cr, openerp.SUPERUSER_ID, login)
- cr.commit()
- except Exception as e:
- # signup error
- _logger.exception('error when resetting password')
- raise(e)
- return True
-
# vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/auth_signup/res_users.py b/addons/auth_signup/res_users.py
index 0379cd2c0c1..37ad9f68fe4 100644
--- a/addons/auth_signup/res_users.py
+++ b/addons/auth_signup/res_users.py
@@ -69,7 +69,8 @@ class res_partner(osv.Model):
# the parameters to encode for the query
query = dict(db=cr.dbname)
signup_type = context.get('signup_force_type_in_url', partner.signup_type or '')
- query[signup_type] = 1
+ if signup_type:
+ query['mode'] = signup_type
if partner.signup_token and signup_type:
query['token'] = partner.signup_token
diff --git a/addons/auth_signup/static/src/js/auth_signup.js b/addons/auth_signup/static/src/js/auth_signup.js
index b5e6f91b139..a317440fd6b 100644
--- a/addons/auth_signup/static/src/js/auth_signup.js
+++ b/addons/auth_signup/static/src/js/auth_signup.js
@@ -1,188 +1,19 @@
openerp.auth_signup = function(instance) {
- instance.auth_signup = instance.auth_signup || {};
- var _t = instance.web._t;
-
- return;
-
- instance.web.Login.include({
- start: function() {
+ openerp.web.LoginForm.include({
+ start: function () {
var self = this;
- this.signup_enabled = false;
- this.reset_password_enabled = false;
- return this._super().always(function() {
-
- // Switches the login box to the select mode whith mode == [default|signup|reset]
- self.on('change:login_mode', self, function() {
- var mode = self.get('login_mode') || 'default';
- self.$('*[data-modes]').each(function() {
- var modes = $(this).data('modes').split(/\s+/);
- $(this).toggle(modes.indexOf(mode) > -1);
- });
- self.$('a.oe_signup_signup:visible').toggle(self.signup_enabled);
- self.$('a.oe_signup_reset_password:visible').toggle(self.reset_password_enabled);
- });
-
- // to switch between the signup and regular login form
- self.$('a.oe_signup_signup').click(function(ev) {
- self.set('login_mode', 'signup');
+ this.$el.on('submit', function () {
+ var password = self.get_password_field('password');
+ var confirm_password = self.get_password_field('confirm_password');
+ if (password && confirm_password && (password.value != confirm_password.value)) {
+ alert("Passwords do not match; please retype them.");
return false;
- });
- self.$('a.oe_signup_back').click(function(ev) {
- self.set('login_mode', 'default');
- delete self.params.token;
- return false;
- });
-
- var dbname = self.selected_db;
-
- // if there is an error message in params, show it then forget it
- if (self.params.error_message) {
- self.show_error(self.params.error_message);
- delete self.params.error_message;
- }
-
- if (dbname && self.params.login) {
- self.$("form input[name=login]").val(self.params.login);
- }
-
- // bind reset password link
- self.$('a.oe_signup_reset_password').click(self.do_reset_password);
-
- if (dbname) {
- self.rpc("/auth_signup/get_config", {dbname: dbname}).then(function(result) {
- self.signup_enabled = result.signup;
- self.reset_password_enabled = result.reset_password;
- if (!self.signup_enabled || self.$("form input[name=login]").val()){
- self.set('login_mode', self.params.type || 'default');
- } else {
- self.set('login_mode', 'signup');
- }
-
- // in case of a signup, retrieve the user information from the token
- if (self.params.token) {
- self.rpc("/auth_signup/retrieve", {dbname: dbname, token: self.params.token})
- .then(self.on_token_loaded, self.on_token_failed);
- }
-
- });
- } else {
- // TODO: support multiple database mode
- self.set('login_mode', self.params.type || 'default');
}
});
},
-
- on_token_loaded: function(result) {
- // select the right the database
- this.selected_db = result.db;
- this.on_db_loaded([result.db]);
- if (result.token) {
- // switch to signup mode, set user name and login
- this.set('login_mode', (this.params.type === 'reset' ? 'reset' : 'signup'));
- this.$("form input[name=name]").val(result.name).attr("readonly", "readonly");
- if (result.login) {
- this.$("form input[name=login]").val(result.login).attr("readonly", "readonly");
- } else {
- this.$("form input[name=login]").val(result.email);
- }
- } else {
- // remain in login mode, set login if present
- delete this.params.token;
- this.set('login_mode', 'default');
- this.$("form input[name=login]").val(result.login || "");
- }
- },
-
- on_token_failed: function(result, ev) {
- if (ev) {
- ev.preventDefault();
- }
- this.show_error(_t("Invalid signup token"));
- delete this.params.db;
- delete this.params.token;
- this.set('login_mode', 'default');
- },
-
- get_params: function(){
- // signup user (or reset password)
- var db = this.$("form [name=db]").val();
- var name = this.$("form input[name=name]").val();
- var login = this.$("form input[name=login]").val();
- var password = this.$("form input[name=password]").val();
- var confirm_password = this.$("form input[name=confirm_password]").val();
- if (!db) {
- this.do_warn(_t("Login"), _t("No database selected !"));
- return false;
- } else if (!name) {
- this.do_warn(_t("Login"), _t("Please enter a name."));
- return false;
- } else if (!login) {
- this.do_warn(_t("Login"), _t("Please enter a username."));
- return false;
- } else if (!password || !confirm_password) {
- this.do_warn(_t("Login"), _t("Please enter a password and confirm it."));
- return false;
- } else if (password !== confirm_password) {
- this.do_warn(_t("Login"), _t("Passwords do not match; please retype them."));
- return false;
- }
- var params = {
- dbname : db,
- token: this.params.token || "",
- name: name,
- login: login,
- password: password,
- };
- return params;
- },
-
- on_submit: function(ev) {
- if (ev) {
- ev.preventDefault();
- }
- var login_mode = this.get('login_mode');
- if (login_mode === 'signup' || login_mode === 'reset') {
- var params = this.get_params();
- if (_.isEmpty(params)){
- return false;
- }
- var self = this,
- super_ = this._super;
- this.rpc('/auth_signup/signup', params)
- .done(function(result) {
- if (result.error) {
- self.show_error(result.error);
- } else {
- super_.apply(self, [ev]);
- }
- });
- } else {
- // regular login
- this._super(ev);
- }
- },
-
- do_reset_password: function(ev) {
- if (ev) {
- ev.preventDefault();
- }
- var self = this;
- var db = this.$("form [name=db]").val();
- var login = this.$("form input[name=login]").val();
- if (!db) {
- this.do_warn(_t("Login"), _t("No database selected !"));
- return $.Deferred().reject();
- } else if (!login) {
- this.do_warn(_t("Login"), _t("Please enter a username or email address."));
- return $.Deferred().reject();
- }
- return self.rpc("/auth_signup/reset_password", { dbname: db, login: login }).done(function(result) {
- self.show_error(_t("An email has been sent with credentials to reset your password"));
- self.set('login_mode', 'default');
- }).fail(function(result, ev) {
- ev.preventDefault();
- self.show_error(result.message);
- });
+ get_password_field: function (field) {
+ var selector = 'input[name="' + field + '"][type="password"]:visible';
+ return this.$(selector)[0];
},
});
};
diff --git a/addons/auth_signup/static/src/xml/auth_signup.xml b/addons/auth_signup/static/src/xml/auth_signup.xml
deleted file mode 100644
index 1c41dbed181..00000000000
--- a/addons/auth_signup/static/src/xml/auth_signup.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
-
- Name
-
-
-
- Username
- Username (Email)
-
-
- this.attr('data-modes', 'default signup reset');
-
-
- Confirm Password
-
-
-
-
-
- Sign Up
- Back to Login
- Reset password
-
-
-
- this.attr('data-modes', 'default');
-
-
-
-
diff --git a/addons/auth_signup/views/auth_signup_login.xml b/addons/auth_signup/views/auth_signup_login.xml
index 38aef1e2099..9f5d88eb33a 100644
--- a/addons/auth_signup/views/auth_signup_login.xml
+++ b/addons/auth_signup/views/auth_signup_login.xml
@@ -5,8 +5,8 @@
- Sign up
- Reset Password
+ Sign up
+ Reset Password
@@ -20,40 +20,58 @@
+
+
+