[FIX] mass_mailing: avoid too long URIs by blacklisting fields in editor call

The call to the web_editor is made through an iframe with some get
parameters. While not really a problem in itself, this has the
disadvantage of generating long URIs. In some case, since all the
fields in the views are included as a GET parameter, URIs can be
generated that go up to several thousand characters. Most servers will
return a 414 for such URIs, preventing the edition of the mail
template in the view.

To avoid this problem, this commit extends the 'html_frame' widget and
blacklist 2 fields that can get too long once encoded.

Ideally, it would probably be better to stop sending all the fields and
simply add the *needed* fields one by one, but since it's difficult to
know exactly what fields might be needed and this is stable, I'm gonna
go with this 'workaround' but conservative fix.

opw-685646
This commit is contained in:
Damien Bouvy
2016-08-19 17:13:34 +02:00
parent 58cbcbae31
commit d7939282e9
2 changed files with 27 additions and 2 deletions
@@ -1,6 +1,7 @@
odoo.define('mass_mailing.mass_mailing', function (require) {
var core = require('web.core');
var FieldTextHtml = require('web_editor.backend').FieldTextHtml;
var KanbanRecord = require('web_kanban.Record');
var KanbanView = require('web_kanban.KanbanView');
@@ -25,4 +26,21 @@ KanbanView.include({
},
});
FieldTextHtml.include({
get_datarecord: function() {
/* Avoid extremely long URIs by whitelisting fields in the datarecord
that get set as a get parameter */
var datarecord = this._super();
if (this.view.model === 'mail.mass_mailing') {
// these fields can potentially get very long, let's remove them
var blacklist = ['mailing_domain', 'contact_list_ids'];
for (var k in blacklist) {
delete datarecord[blacklist[k]];
}
delete datarecord[this.name];
}
return datarecord;
},
});
});
+9 -2
View File
@@ -220,9 +220,12 @@ var FieldTextHtml = widget.extend({
this.$translate = $();
return def;
},
get_datarecord: function() {
return this.view.get_fields_values();
},
get_url: function (_attr) {
var src = this.options.editor_url || "/web_editor/field/html";
var datarecord = this.view.get_fields_values();
var datarecord = this.get_datarecord();
var attr = {
'model': this.view.model,
@@ -269,7 +272,6 @@ var FieldTextHtml = widget.extend({
delete datarecord[this.name];
src += "&datarecord="+ encodeURIComponent(JSON.stringify(datarecord));
return src;
},
initialize_content: function() {
@@ -384,4 +386,9 @@ core.form_widget_registry
.add('html', FieldTextHtmlSimple)
.add('html_frame', FieldTextHtml);
return {
FieldTextHtmlSimple: FieldTextHtmlSimple,
FieldTextHtml: FieldTextHtml,
};
});