1 openerp.auth_signup = function(instance) {
2 instance.auth_signup = instance.auth_signup || {};
3 var _t = instance.web._t;
5 instance.web.Login.include({
7 this._super.apply(this, arguments);
8 this.signup_enabled = false;
9 this.reset_password_enabled = false;
10 this.on('change:login-mode', this, function() {
12 * Switches the login box to the select mode
13 * whith mode == [default|signup|reset]
16 var mode = this.get('login-mode') || 'default';
17 self.$('*[data-modes]').each(function() {
18 var modes = $(this).data('modes').split(/\s+/);
19 $(this).toggle(modes.indexOf(mode) > -1);
21 self.$('a.oe_signup_signup:visible').toggle(this.signup_enabled);
22 self.$('a.oe_signup_reset_password:visible').toggle(this.reset_password_enabled);
27 return this._super().then(function() {
28 // to switch between the signup and regular login form
29 self.$('a.oe_signup_signup').click(function(ev) {
30 self.set('login-mode', 'signup');
33 self.$('a.oe_signup_back').click(function(ev) {
34 self.set('login-mode', 'default');
35 delete self.params.token;
39 var dblist = self.db_list || [];
40 var dbname = self.params.db || (dblist.length === 1 ? dblist[0] : null);
42 // if there is an error message in params, show it then forget it
43 if (self.params.error_message) {
44 self.show_error(self.params.error_message);
45 delete self.params.error_message;
48 // in case of a signup, retrieve the user information from the token
49 if (dbname && self.params.token) {
50 self.rpc("/auth_signup/retrieve", {dbname: dbname, token: self.params.token})
51 .done(self.on_token_loaded)
52 .fail(self.on_token_failed);
54 if (dbname && self.params.login) {
55 self.$("form input[name=login]").val(self.params.login);
58 // bind reset password link
59 self.$('a.oe_signup_reset_password').click(self.do_reset_password);
62 self.rpc("/auth_signup/get_config", {dbname: dbname}).done(function(result) {
63 self.signup_enabled = result.signup;
64 self.reset_password_enabled = result.reset_password;
65 self.set('login-mode', 'default');
68 // TODO: support multiple database mode
69 this.set('login-mode', 'default');
74 on_token_loaded: function(result) {
75 // select the right the database
76 this.selected_db = result.db;
77 this.on_db_loaded([result.db]);
79 // switch to signup mode, set user name and login
80 this.set('login-mode', (this.params.type === 'reset' ? 'reset' : 'signup'));
81 this.$("form input[name=name]").val(result.name).attr("readonly", "readonly");
83 this.$("form input[name=login]").val(result.login).attr("readonly", "readonly");
85 this.$("form input[name=login]").val(result.email);
88 // remain in login mode, set login if present
89 delete this.params.token;
90 this.set('login-mode', 'default');
91 this.$("form input[name=login]").val(result.login || "");
95 on_token_failed: function(result, ev) {
99 this.show_error(_t("Invalid signup token"));
100 delete this.params.db;
101 delete this.params.token;
102 this.set('login-mode', 'default');
105 on_submit: function(ev) {
109 var login_mode = this.get('login-mode');
110 if (login_mode === 'signup' || login_mode === 'reset') {
111 // signup user (or reset password)
112 var db = this.$("form [name=db]").val();
113 var name = this.$("form input[name=name]").val();
114 var login = this.$("form input[name=login]").val();
115 var password = this.$("form input[name=password]").val();
116 var confirm_password = this.$("form input[name=confirm_password]").val();
118 this.do_warn(_t("Login"), _t("No database selected !"));
121 this.do_warn(_t("Login"), _t("Please enter a name."));
124 this.do_warn(_t("Login"), _t("Please enter a username."));
126 } else if (!password || !confirm_password) {
127 this.do_warn(_t("Login"), _t("Please enter a password and confirm it."));
129 } else if (password !== confirm_password) {
130 this.do_warn(_t("Login"), _t("Passwords do not match; please retype them."));
135 token: this.params.token || "",
142 super_ = this._super;
143 this.rpc('/auth_signup/signup', params)
144 .done(function(result) {
146 self.show_error(result.error);
148 super_.apply(self, [ev]);
157 do_reset_password: function(ev) {
162 var db = this.$("form [name=db]").val();
163 var login = this.$("form input[name=login]").val();
165 this.do_warn(_t("Login"), _t("No database selected !"));
166 return $.Deferred().reject();
168 this.do_warn(_t("Login"), _t("Please enter a username or email address."));
169 return $.Deferred().reject();
171 return self.rpc("/auth_signup/reset_password", { dbname: db, login: login }).done(function(result) {
172 self.show_error(_t("An email has been sent with credentials to reset your password"));
173 self.set('login-mode', 'default');
174 }).fail(function(result, ev) {
176 self.show_error(result.message);