summaryrefslogtreecommitdiff
path: root/addons/website/static/src
diff options
context:
space:
mode:
authorJeremy Kersten <jke@odoo.com>2020-03-02 14:14:18 +0000
committerMartin Trigaux <mat@odoo.com>2020-03-21 10:23:32 +0000
commit94f8f15036c3e5fec4aed9a7e50960bc7f190631 (patch)
treed926cb95ab4641af45d4e96644c38b8d981fd413 /addons/website/static/src
parent92f9d9b21b7bdde796e6105ee53f83d71fde3044 (diff)
[FIX] website: make handle_visibility private
This commit: - make handle_visibility a private function (even if not exploitable in rpc easily since it uses request.website) - encrypt the password in db (even if not critic, since this password could be shared on twitter, ... it doesn't cost anything to secure it a bit more) - remove useless sudo, since handle_visibility does a sudo itself. In the future, this notion of visibility should be handled on controller layer, and no more on the View layer (during rendering) closes odoo/odoo#48145 X-original-commit: 06e0e48217f25f17dff23331111f5dcb98e8cecd Signed-off-by: Martin Trigaux (mat) <mat@odoo.com> Signed-off-by: Christophe Monniez (moc) <moc@odoo.com>
Diffstat (limited to 'addons/website/static/src')
-rw-r--r--addons/website/static/src/js/menu/content.js26
-rw-r--r--addons/website/static/src/xml/website.pageProperties.xml5
2 files changed, 29 insertions, 2 deletions
diff --git a/addons/website/static/src/js/menu/content.js b/addons/website/static/src/js/menu/content.js
index d8be9ba80ff..8f949441224 100644
--- a/addons/website/static/src/js/menu/content.js
+++ b/addons/website/static/src/js/menu/content.js
@@ -22,6 +22,8 @@ var PagePropertiesDialog = weWidgets.Dialog.extend({
'keyup input#page_name': '_onNameChanged',
'keyup input#page_url': '_onUrlChanged',
'change input#create_redirect': '_onCreateRedirectChanged',
+ 'click input#visibility_password': '_onPasswordClicked',
+ 'change input#visibility_password': '_onPasswordChanged',
'change select#visibility': '_onVisibilityChanged',
}),
@@ -234,10 +236,19 @@ var PagePropertiesDialog = weWidgets.Dialog.extend({
redirect_type: this.$('#redirect_type').val(),
website_indexed: this.$('#is_indexed').prop('checked'),
visibility: this.$('#visibility').val(),
- visibility_password: this.$('#visibility').val() === 'password' ? this.$('#visibility_password').val() : false,
visibility_group: this.$('#visibility').val() === 'restricted_group' ? this.$('#visibility_group').data('group-id') : false,
date_publish: datePublish,
};
+ if (this.$('#visibility').val() === 'password') {
+ var field_pwd = $('#visibility_password');
+ if (!field_pwd.get(0).reportValidity()) {
+ return;
+ }
+ if (field_pwd.data('dirty')) {
+ params['visibility_pwd'] = field_pwd.val();
+ }
+ }
+
this._rpc({
model: 'website.page',
method: 'save_page_info',
@@ -408,6 +419,19 @@ var PagePropertiesDialog = weWidgets.Dialog.extend({
_onVisibilityChanged: function (ev) {
this.$('.show_visibility_password').toggleClass('d-none', ev.target.value !== 'password');
this.$('.show_visibility_group').toggleClass('d-none', ev.target.value !== 'restricted_group');
+ this.$('#visibility_password').attr('required', ev.target.value === 'password');
+ },
+ /**
+ * @private
+ */
+ _onPasswordClicked: function (ev) {
+ ev.target.value = '';
+ this._onPasswordChanged();
+ }, /**
+ * @private
+ */
+ _onPasswordChanged: function () {
+ this.$('#visibility_password').data('dirty', 1);
},
});
diff --git a/addons/website/static/src/xml/website.pageProperties.xml b/addons/website/static/src/xml/website.pageProperties.xml
index 54b204fa103..e38a9555826 100644
--- a/addons/website/static/src/xml/website.pageProperties.xml
+++ b/addons/website/static/src/xml/website.pageProperties.xml
@@ -152,7 +152,10 @@
<div class="ml-1 input-group-prepend show_visibility_password" >
<div class="input-group-text"><i class="fa fa-key"></i></div>
</div>
- <input type="text" t-att-value='widget.page.visibility_password ? widget.page.visibility_password : ""' class="form-control show_visibility_password" id="visibility_password"/>
+ <input type="password" id="visibility_password"
+ t-att-value='widget.page.visibility_password'
+ t-att-required="widget.page.visibility == 'password' ? 'required' : None"
+ class="form-control show_visibility_password"/>
<div class="ml-1 input-group-prepend show_visibility_group">
<div class="input-group-text"><i class="fa fa-group"></i></div>
</div>