[FIX] auth_signup: make reset_password a jsonrequest + display correct buttons in reset mode
lp bug: https://launchpad.net/bugs/1104070 fixed bzr revid: fme@openerp.com-20130228164516-pzwtv7z1objow6wj
This commit is contained in:
commit
a176ef579e
|
@ -19,9 +19,6 @@
|
|||
#
|
||||
##############################################################################
|
||||
import logging
|
||||
import urllib
|
||||
|
||||
import werkzeug
|
||||
|
||||
import openerp
|
||||
from openerp.modules.registry import RegistryManager
|
||||
|
@ -69,7 +66,7 @@ class Controller(openerp.addons.web.http.Controller):
|
|||
res_users = registry.get('res.users')
|
||||
res_users.signup(cr, openerp.SUPERUSER_ID, values, token)
|
||||
|
||||
@openerp.addons.web.http.httprequest
|
||||
@openerp.addons.web.http.jsonrequest
|
||||
def reset_password(self, req, dbname, login):
|
||||
""" retrieve user, and perform reset password """
|
||||
registry = RegistryManager.get(dbname)
|
||||
|
@ -78,12 +75,10 @@ class Controller(openerp.addons.web.http.Controller):
|
|||
res_users = registry.get('res.users')
|
||||
res_users.reset_password(cr, openerp.SUPERUSER_ID, login)
|
||||
cr.commit()
|
||||
message = 'An email has been sent with credentials to reset your password'
|
||||
except Exception as e:
|
||||
# signup error
|
||||
_logger.exception('error when resetting password')
|
||||
message = e.message
|
||||
params = [('action', 'login'), ('error_message', message)]
|
||||
return werkzeug.utils.redirect("/#" + urllib.urlencode(params))
|
||||
raise(e)
|
||||
return True
|
||||
|
||||
# vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -5,26 +5,28 @@ openerp.auth_signup = function(instance) {
|
|||
instance.web.Login.include({
|
||||
start: function() {
|
||||
var self = this;
|
||||
var d = this._super();
|
||||
d.done(function() {
|
||||
self.$(".oe_signup_show").hide();
|
||||
this.signup_enabled = false;
|
||||
this.reset_password_enabled = false;
|
||||
return this._super().then(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) {
|
||||
if (ev) {
|
||||
ev.preventDefault();
|
||||
}
|
||||
self.$el.addClass("oe_login_signup");
|
||||
self.$(".oe_signup_show").show();
|
||||
self.$(".oe_signup_hide").hide();
|
||||
self.set('login_mode', 'signup');
|
||||
return false;
|
||||
});
|
||||
self.$('a.oe_signup_back').click(function(ev) {
|
||||
if (ev) {
|
||||
ev.preventDefault();
|
||||
}
|
||||
self.$el.removeClass("oe_login_signup");
|
||||
self.$(".oe_signup_show").hide();
|
||||
self.$(".oe_signup_hide").show();
|
||||
self.set('login_mode', 'default');
|
||||
delete self.params.token;
|
||||
return false;
|
||||
});
|
||||
|
@ -42,7 +44,7 @@ openerp.auth_signup = function(instance) {
|
|||
if (dbname && self.params.token) {
|
||||
self.rpc("/auth_signup/retrieve", {dbname: dbname, token: self.params.token})
|
||||
.done(self.on_token_loaded)
|
||||
.fail(self.on_token_failed)
|
||||
.fail(self.on_token_failed);
|
||||
}
|
||||
if (dbname && self.params.login) {
|
||||
self.$("form input[name=login]").val(self.params.login);
|
||||
|
@ -51,23 +53,17 @@ openerp.auth_signup = function(instance) {
|
|||
// bind reset password link
|
||||
self.$('a.oe_signup_reset_password').click(self.do_reset_password);
|
||||
|
||||
// make signup link and reset password link visible only when enabled
|
||||
self.$('a.oe_signup_signup').hide();
|
||||
self.$('a.oe_signup_reset_password').hide();
|
||||
if (dbname) {
|
||||
self.rpc("/auth_signup/get_config", {dbname: dbname})
|
||||
.done(function(result) {
|
||||
if (result.signup) {
|
||||
self.$('a.oe_signup_signup').show();
|
||||
}
|
||||
if (result.reset_password) {
|
||||
self.$('a.oe_signup_reset_password').show();
|
||||
}
|
||||
});
|
||||
self.rpc("/auth_signup/get_config", {dbname: dbname}).done(function(result) {
|
||||
self.signup_enabled = result.signup;
|
||||
self.reset_password_enabled = result.reset_password;
|
||||
self.set('login_mode', 'default');
|
||||
});
|
||||
} else {
|
||||
// TODO: support multiple database mode
|
||||
self.set('login_mode', 'default');
|
||||
}
|
||||
});
|
||||
|
||||
return d;
|
||||
},
|
||||
|
||||
on_token_loaded: function(result) {
|
||||
|
@ -76,9 +72,7 @@ openerp.auth_signup = function(instance) {
|
|||
this.on_db_loaded([result.db]);
|
||||
if (result.token) {
|
||||
// switch to signup mode, set user name and login
|
||||
this.$el.addClass("oe_login_signup");
|
||||
self.$(".oe_signup_show").show();
|
||||
self.$(".oe_signup_hide").hide();
|
||||
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");
|
||||
|
@ -88,6 +82,7 @@ openerp.auth_signup = function(instance) {
|
|||
} 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 || "");
|
||||
}
|
||||
},
|
||||
|
@ -99,13 +94,15 @@ openerp.auth_signup = function(instance) {
|
|||
this.show_error(_t("Invalid signup token"));
|
||||
delete this.params.db;
|
||||
delete this.params.token;
|
||||
this.set('login_mode', 'default');
|
||||
},
|
||||
|
||||
on_submit: function(ev) {
|
||||
if (ev) {
|
||||
ev.preventDefault();
|
||||
}
|
||||
if (this.$el.hasClass("oe_login_signup")) {
|
||||
var login_mode = this.get('login_mode');
|
||||
if (login_mode === 'signup' || login_mode === 'reset') {
|
||||
// signup user (or reset password)
|
||||
var db = this.$("form [name=db]").val();
|
||||
var name = this.$("form input[name=name]").val();
|
||||
|
@ -156,21 +153,23 @@ openerp.auth_signup = function(instance) {
|
|||
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 false;
|
||||
return $.Deferred().reject();
|
||||
} else if (!login) {
|
||||
this.do_warn(_t("Login"), _t("Please enter a username or email address."))
|
||||
return false;
|
||||
this.do_warn(_t("Login"), _t("Please enter a username or email address."));
|
||||
return $.Deferred().reject();
|
||||
}
|
||||
var params = {
|
||||
dbname : db,
|
||||
login: login,
|
||||
};
|
||||
var url = "/auth_signup/reset_password?" + $.param(params);
|
||||
window.location = url;
|
||||
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);
|
||||
});
|
||||
},
|
||||
});
|
||||
};
|
||||
|
|
|
@ -5,26 +5,32 @@
|
|||
|
||||
<t t-extend="Login">
|
||||
<t t-jquery="form ul:first li:contains('Username')" t-operation="before">
|
||||
<li class="oe_signup_show">Name</li>
|
||||
<li class="oe_signup_show"><input name="name" type="text"/></li>
|
||||
<li data-modes="signup reset">Name</li>
|
||||
<li data-modes="signup reset"><input name="name" type="text"/></li>
|
||||
</t>
|
||||
<t t-jquery="form ul:first li:contains('Username')" t-operation="replace">
|
||||
<li class="oe_signup_hide">Username</li>
|
||||
<li class="oe_signup_show">Username (Email)</li>
|
||||
<li data-modes="default">Username</li>
|
||||
<li data-modes="signup reset">Username (Email)</li>
|
||||
</t>
|
||||
<t t-jquery="form ul:first li:has(input[name=password])" t-operation="after">
|
||||
<li class="oe_signup_show">Confirm Password</li>
|
||||
<li class="oe_signup_show"><input name="confirm_password" type="password"/></li>
|
||||
<li data-modes="signup reset">Confirm Password</li>
|
||||
<li data-modes="signup reset"><input name="confirm_password" type="password"/></li>
|
||||
</t>
|
||||
<t t-jquery="form ul:first li:has(button[name=submit])" t-operation="replace">
|
||||
<li>
|
||||
<button class="oe_signup_hide" name="submit">Log in</button>
|
||||
<button class="oe_signup_show" name="submit">Sign up</button>
|
||||
<a class="oe_signup_hide oe_signup_signup" href="#">Sign Up</a>
|
||||
<a class="oe_signup_show oe_signup_back" href="#">Back to Login</a>
|
||||
<a class="oe_signup_reset_password" href="#">Reset password</a>
|
||||
<button name="submit">
|
||||
<span data-modes="default">Log in</span>
|
||||
<span data-modes="signup">Sign Up</span>
|
||||
<span data-modes="reset">Reset password</span>
|
||||
</button>
|
||||
<a class="oe_signup_signup" data-modes="default" href="#">Sign Up</a>
|
||||
<a class="oe_signup_back" data-modes="signup reset" href="#">Back to Login</a>
|
||||
<a class="oe_signup_reset_password" data-modes="default" href="#">Reset password</a>
|
||||
</li>
|
||||
</t>
|
||||
<t t-jquery=".oe_login_manage_db">
|
||||
this.attr('data-modes', 'default');
|
||||
</t>
|
||||
</t>
|
||||
|
||||
</templates>
|
||||
|
|
Loading…
Reference in New Issue