From a48e79335509f96f9dd386b8ca08f6f7de494f52 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Thu, 7 Nov 2013 15:32:12 +0100 Subject: [FIX] web: correct cookie parsing. avoid reading wrong cookie by matching the whole cookie name bzr revid: chs@openerp.com-20131107143212-50hrpvkaw3gxxlop --- addons/web/static/src/js/openerpframework.js | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'addons/web/static/src/js/openerpframework.js') diff --git a/addons/web/static/src/js/openerpframework.js b/addons/web/static/src/js/openerpframework.js index 1d688505a06..9f3a6352511 100644 --- a/addons/web/static/src/js/openerpframework.js +++ b/addons/web/static/src/js/openerpframework.js @@ -1209,15 +1209,14 @@ openerp.TranslationDataBase = openerp.Class.extend(/** @lends instance.Translati openerp._t = new openerp.TranslationDataBase().build_translation_function(); openerp.get_cookie = function(c_name) { - if (document.cookie.length > 0) { - var c_start = document.cookie.indexOf(c_name + "="); - if (c_start != -1) { - c_start = c_start + c_name.length + 1; - var c_end = document.cookie.indexOf(";", c_start); - if (c_end == -1) { - c_end = document.cookie.length; - } - return unescape(document.cookie.substring(c_start, c_end)); + var cookies = document.cookie ? document.cookie.split('; ') : []; + for (var i = 0, l = cookies.length; i < l; i++) { + var parts = cookies[i].split('='); + var name = parts.shift(); + var cookie = parts.join('='); + + if (c_name && c_name === name) { + return cookie; } } return ""; -- cgit v1.2.3 From 8214e291a9eafeb39b61dd923dce00b3cce1dccc Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Thu, 31 Oct 2013 08:39:20 -0500 Subject: [FIX] web: correct date and datetime parsing. When creating a new Date object at a specific date, this date is treated as a UTC datetime then normalized to the browser timezone. This can lead to a change of Year/Month/Day depending of the chosen date. Using a date of a leap year date for date parsing and forcing UTC date for datetime parsing correct the month-switch errors in all timezones bzr revid: chs@openerp.com-20131031133920-yl5z4oz939smwvz8 --- addons/web/static/src/js/openerpframework.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'addons/web/static/src/js/openerpframework.js') diff --git a/addons/web/static/src/js/openerpframework.js b/addons/web/static/src/js/openerpframework.js index 9f3a6352511..1704856886b 100644 --- a/addons/web/static/src/js/openerpframework.js +++ b/addons/web/static/src/js/openerpframework.js @@ -1264,7 +1264,10 @@ openerp.str_to_datetime = function(str) { if ( !res ) { throw new Error("'" + str + "' is not a valid datetime"); } - var tmp = new Date(0); + var tmp = new Date(2000,0,1); + tmp.setUTCMonth(1970); + tmp.setUTCMonth(0); + tmp.setUTCDate(1); tmp.setUTCFullYear(parseFloat(res[1])); tmp.setUTCMonth(parseFloat(res[2]) - 1); tmp.setUTCDate(parseFloat(res[3])); @@ -1296,7 +1299,7 @@ openerp.str_to_date = function(str) { if ( !res ) { throw new Error("'" + str + "' is not a valid date"); } - var tmp = new Date(0); + var tmp = new Date(2000,0,1); tmp.setFullYear(parseFloat(res[1])); tmp.setMonth(parseFloat(res[2]) - 1); tmp.setDate(parseFloat(res[3])); -- cgit v1.2.3 From a3e4cdef515469a5988fe97b03bc89c58e9655f5 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 13 Nov 2013 16:19:11 +0100 Subject: [ADD] hacky abort() proxy for json requests bzr revid: xmo@openerp.com-20131113151911-l4f7vlzkcht38nuc --- addons/web/static/src/js/openerpframework.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'addons/web/static/src/js/openerpframework.js') diff --git a/addons/web/static/src/js/openerpframework.js b/addons/web/static/src/js/openerpframework.js index e986a2f4112..a2e4c06d67d 100644 --- a/addons/web/static/src/js/openerpframework.js +++ b/addons/web/static/src/js/openerpframework.js @@ -809,7 +809,8 @@ var genericJsonRpc = function(fct_name, params, fct) { params: params, id: Math.floor(Math.random() * 1000 * 1000 * 1000) }; - return fct(data).pipe(function(result) { + var xhr = fct(data); + var result = xhr.pipe(function(result) { if (result.error !== undefined) { console.error("Server application error", result.error); return $.Deferred().reject("server", result.error); @@ -821,6 +822,9 @@ var genericJsonRpc = function(fct_name, params, fct) { var def = $.Deferred(); return def.reject.apply(def, ["communication"].concat(_.toArray(arguments))); }); + // FIXME: jsonp? + result.abort = function () { xhr.abort && xhr.abort(); }; + return result; }; openerp.jsonRpc = function(url, fct_name, params, settings) { -- cgit v1.2.3 From e9c633cb7e8053d63a31d1d1f375dc10347a0389 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Wed, 13 Nov 2013 19:40:00 +0100 Subject: [IMP] web: call call_kw with full route to help debugging bzr revid: chs@openerp.com-20131113184000-3k3dnwl5ftllq2rv --- addons/web/static/src/js/openerpframework.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'addons/web/static/src/js/openerpframework.js') diff --git a/addons/web/static/src/js/openerpframework.js b/addons/web/static/src/js/openerpframework.js index 1704856886b..99d11b58ca9 100644 --- a/addons/web/static/src/js/openerpframework.js +++ b/addons/web/static/src/js/openerpframework.js @@ -1128,7 +1128,8 @@ openerp.Model = openerp.Class.extend({ kwargs = args; args = []; } - return this.session().rpc('/web/dataset/call_kw', { + var call_kw = _.str.sprintf('/web/dataset/call_kw/%s/%s', this.name, method); + return this.session().rpc(call_kw, { model: this.name, method: method, args: args, -- cgit v1.2.3 From 7e8a5f7697dfc63360ecce55ac71f493a5bcd3ac Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Tue, 3 Dec 2013 14:29:37 +0100 Subject: [FIX] web: openerpframework.js: do not use _.str openerpframework.js can be used as standalone library (im_livechat uses it this way) and do not depend on underscore.string.js bzr revid: chs@openerp.com-20131203132937-ss7hx1gligzai5ch --- addons/web/static/src/js/openerpframework.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js/openerpframework.js') diff --git a/addons/web/static/src/js/openerpframework.js b/addons/web/static/src/js/openerpframework.js index 99d11b58ca9..ca046543861 100644 --- a/addons/web/static/src/js/openerpframework.js +++ b/addons/web/static/src/js/openerpframework.js @@ -1128,7 +1128,7 @@ openerp.Model = openerp.Class.extend({ kwargs = args; args = []; } - var call_kw = _.str.sprintf('/web/dataset/call_kw/%s/%s', this.name, method); + var call_kw = '/web/dataset/call_kw/' + this.name + '/' + method; return this.session().rpc(call_kw, { model: this.name, method: method, -- cgit v1.2.3 From 36eedfab43a28b72a6dd6375c0f71828f238fc37 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 22 Jan 2014 14:54:26 +0100 Subject: [ADD] JSONify Date objects to a UTC datetime in OpenERP server format This way, the client can send genuine local Date objects without caring too much, the server will get them in an expected format. This can then be used by leaving Date objects in domains, and have these date objects end up correctly in the server without creators of domains having to manually serialize them to UTC from a local datetime somehow. bzr revid: xmo@openerp.com-20140122135426-zm80cj5wm9iebs76 --- addons/web/static/src/js/openerpframework.js | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'addons/web/static/src/js/openerpframework.js') diff --git a/addons/web/static/src/js/openerpframework.js b/addons/web/static/src/js/openerpframework.js index 22ca70ebbf7..71f45899f5f 100644 --- a/addons/web/static/src/js/openerpframework.js +++ b/addons/web/static/src/js/openerpframework.js @@ -823,13 +823,33 @@ var genericJsonRpc = function(fct_name, params, fct) { }); }; +/** + * Replacer function for JSON.stringify, serializes Date objects to UTC + * datetime in the OpenERP Server format. + * + * However, if a serialized value has a toJSON method that method is called + * *before* the replacer is invoked. Date#toJSON exists, and thus the value + * passed to the replacer is a string, the original Date has to be fetched + * on the parent object (which is provided as the replacer's context). + * + * @param {String} k + * @param {Object} v + * @returns {Object} + */ +function date_to_utc(k, v) { + var value = this[k]; + if (!(value instanceof Date)) { return v; } + + return openerp.datetime_to_str(value); +} + openerp.jsonRpc = function(url, fct_name, params, settings) { return genericJsonRpc(fct_name, params, function(data) { return $.ajax(url, _.extend({}, settings, { url: url, dataType: 'json', type: 'POST', - data: JSON.stringify(data), + data: JSON.stringify(data, date_to_utc), contentType: 'application/json' })); }); @@ -838,7 +858,7 @@ openerp.jsonRpc = function(url, fct_name, params, settings) { openerp.jsonpRpc = function(url, fct_name, params, settings) { settings = settings || {}; return genericJsonRpc(fct_name, params, function(data) { - var payload_str = JSON.stringify(data); + var payload_str = JSON.stringify(data, date_to_utc); var payload_url = $.param({r:payload_str}); var force2step = settings.force2step || false; delete settings.force2step; -- cgit v1.2.3 From b0fa27dc7c9eda1005dd969e8d91a977fe3dbd31 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 30 Jan 2014 16:11:46 +0100 Subject: [IMP] Quick fix for cros support in webclient bzr revid: fme@openerp.com-20140130151146-twct15ruxq179ryu --- addons/web/static/src/js/openerpframework.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'addons/web/static/src/js/openerpframework.js') diff --git a/addons/web/static/src/js/openerpframework.js b/addons/web/static/src/js/openerpframework.js index 71f45899f5f..dfe7b1ebdb6 100644 --- a/addons/web/static/src/js/openerpframework.js +++ b/addons/web/static/src/js/openerpframework.js @@ -970,6 +970,7 @@ openerp.Session = openerp.Class.extend(openerp.PropertiesMixin, { this.session_id = options.session_id || null; this.override_session = options.override_session || !!options.session_id || false; this.avoid_recursion = false; + this.use_cors = options.use_cors || false; this.setup(origin); }, setup: function(origin) { @@ -1013,7 +1014,7 @@ openerp.Session = openerp.Class.extend(openerp.PropertiesMixin, { }, check_session_id: function() { var self = this; - if (this.avoid_recursion) + if (this.avoid_recursion || self.use_cors) return $.when(); if (this.session_id) return $.when(); // we already have the session id @@ -1070,6 +1071,15 @@ openerp.Session = openerp.Class.extend(openerp.PropertiesMixin, { "X-Openerp-Session-Id": self.override_session ? self.session_id || '' : '' }); } + } else if (self.use_cors) { + fct = openerp.jsonRpc; + url = self.url(url, null); + options.session_id = self.session_id || ''; + if (self.override_session) { + options.headers = _.extend({}, options.headers, { + "X-Openerp-Session-Id": self.override_session ? self.session_id || '' : '' + }); + } } else { fct = openerp.jsonpRpc; url = self.url(url, null); -- cgit v1.2.3