[FIX] web: edited password fields should not contain '*'

Before this commit, when someone was editing a password, the stored
password may not be the expected one by the user.

Steps to reproduce:

	1. Open "Outgoing Mail Servers" form.
	2. Set a password (e.g. "yop").
	3. Save, then edit.
	4. Add "y" at the end of the password field.

	> Expected value: "yopy"
	> Actual value: "***y"

This is due to the use of the char field formatter, which displays passwords
by replacing the characters with '*'. It is not necessary to do this in edit
mode, because it uses an input field of type 'password'. The browser
automatically hides the value of such inputs.

Any changes on a input field in edit mode uses the value of the input, so the
value of an password input should contain the password, without '*'.

This commit fixes the issue by using the formatter in edit mode for the input
of type 'password'.

Task-ID 1869565
This commit is contained in:
Alexandre Kühn
2018-07-27 15:02:49 +02:00
parent 2b3017974b
commit 4b3588feb2
3 changed files with 46 additions and 12 deletions
@@ -243,14 +243,20 @@ var InputField = DebouncedField.extend({
_prepareInput: function ($input) {
this.$input = $input || $("<input/>");
this.$input.addClass('o_input');
this.$input.attr({
type: this.nodeOptions.isPassword ? 'password' : 'text',
placeholder: this.attrs.placeholder || "",
autocomplete: this.nodeOptions.isPassword ?
'new-password' :
this.attrs.autocomplete,
});
this.$input.val(this._formatValue(this.value));
var inputAttrs = { placeholder: this.attrs.placeholder || "" };
var inputVal;
if (this.nodeOptions.isPassword) {
inputAttrs = _.extend(inputAttrs, { type: 'password', autocomplete: 'new-password' });
inputVal = this.value;
} else {
inputAttrs = _.extend(inputAttrs, { type: 'text', autocomplete: this.attrs.autocomplete });
inputVal = this._formatValue(this.value);
}
this.$input.attr(inputAttrs);
this.$input.val(inputVal);
return this.$input;
},
/**