From cea29e0c0176657f094ab80b460be503affe8a1b Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 23 Sep 2015 15:55:24 +0200 Subject: [ADD] client-side CSRF support * add CSRF token as core.csrf_token * add CSRF tokens to client-generated and/or JS-submitted forms * remove broken "compatibility" mode of web.ajax.post /cc @dmo-odoo I've no idea how that was supposed to work, from looking things up all modern browsers seem to support FormData, and old IEs which don't don't support fallbacks either and would require submitting an actual form as fallback so... --- addons/web/static/src/js/framework/ajax.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'addons/web/static/src/js/framework') diff --git a/addons/web/static/src/js/framework/ajax.js b/addons/web/static/src/js/framework/ajax.js index f8392287b26..d6619449a0f 100644 --- a/addons/web/static/src/js/framework/ajax.js +++ b/addons/web/static/src/js/framework/ajax.js @@ -1,6 +1,7 @@ odoo.define('web.ajax', function (require) { "use strict"; +var core = require('web.core'); var time = require('web.time'); var utils = require('web.utils'); @@ -238,6 +239,11 @@ function get_file(options) { method: 'POST' }).appendTo(document.body); } + if (core.csrf_token) { + $('') + .val(core.csrf_token) + .appendTo($form_data); + } var hparams = _.extend({}, options.data || {}, {token: token}); _.each(hparams, function (value, key) { @@ -292,19 +298,16 @@ function post (controller_url, data) { }; var Def = $.Deferred(); - var compatibility = !(typeof(FormData)); - var postData = compatibility ? new FormDataCompatibility() : new FormData(); + var postData = new FormData(); $.each(data, function(i,val) { postData.append(i, val); }); - - var xhr = new XMLHttpRequest(); - if(compatibility) { - postData.setContentTypeHeader(xhr); - postData = postData.buildBody(); + if (core.csrf_token) { + postData.append('csrf_token', core.csrf_token); } + var xhr = new XMLHttpRequest(); if(xhr.upload) xhr.upload.addEventListener('progress', progressHandler(Def), false); var ajaxDef = $.ajax(controller_url, { -- cgit v1.2.3