From 667ed37f77d0ca2557243a488822dad61ed6f625 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak <alec@alec.pl> Date: Sun, 01 May 2016 10:39:10 -0400 Subject: [PATCH] Fix bug where Encrypt button appears when switching editor to HTML (#5235) --- program/js/app.js | 47 +++++++++++++++++++++++++++++------------------ 1 files changed, 29 insertions(+), 18 deletions(-) diff --git a/program/js/app.js b/program/js/app.js index 36b6d1d..e6203de 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -1024,7 +1024,7 @@ break; } - this.goto_url('get', qstring+'&_download=1', false); + this.goto_url('get', qstring+'&_download=1', false, true); break; case 'select-all': @@ -1230,10 +1230,10 @@ case 'download': if (this.env.action == 'get') { - location.href = location.href.replace(/_frame=/, '_download='); + location.href = this.secure_url(location.href.replace(/_frame=/, '_download=')); } else if (uid = this.get_single_uid()) { - this.goto_url('viewsource', this.params_from_uid(uid, {_save: 1})); + this.goto_url('viewsource', this.params_from_uid(uid, {_save: 1}), false, true); } break; @@ -1321,13 +1321,13 @@ case 'export': if (this.contact_list.rowcount > 0) { - this.goto_url('export', { _source: this.env.source, _gid: this.env.group, _search: this.env.search_request }); + this.goto_url('export', { _source: this.env.source, _gid: this.env.group, _search: this.env.search_request }, false, true); } break; case 'export-selected': if (this.contact_list.rowcount > 0) { - this.goto_url('export', { _source: this.env.source, _gid: this.env.group, _cid: this.contact_list.get_selection().join(',') }); + this.goto_url('export', { _source: this.env.source, _gid: this.env.group, _cid: this.contact_list.get_selection().join(',') }, false, true); } break; @@ -1362,7 +1362,7 @@ if (!aborted && this.triggerEvent('after'+command, props) === false) ret = false; - this.triggerEvent('actionafter', { props:props, action:command, aborted:aborted }); + this.triggerEvent('actionafter', { props:props, action:command, aborted:aborted, ret:ret }); return ret === false ? false : obj ? false : true; }; @@ -1442,7 +1442,7 @@ if (task == 'mail') url += '&_mbox=INBOX'; else if (task == 'logout' && !this.env.server_error) { - url += '&_token=' + this.env.request_token; + url = this.secure_url(url); this.clear_compose_data(); } @@ -1490,6 +1490,12 @@ return url + '?' + name + '=' + value; }; + + // append CSRF protection token to the given url + this.secure_url = function(url) + { + return this.add_url(url, '_token', this.env.request_token); + }, this.is_framed = function() { @@ -3471,6 +3477,12 @@ // enable encrypted compose toggle this.enable_command('compose-encrypted', !is_html); } + + // make sure to disable encryption button after toggling editor into HTML mode + this.addEventListener('actionafter', function(args) { + if (args.ret && args.action == 'toggle-editor') + ref.enable_command('compose-encrypted', !args.props.html); + }); } }; @@ -4288,8 +4300,6 @@ if (result) { // update internal format flag $("input[name='_is_html']").val(props.html ? 1 : 0); - // enable encrypted compose toggle - this.enable_command('compose-encrypted', !props.html); } return result; @@ -7824,8 +7834,6 @@ var url = '?_task=utils&_action=' + (format == 'html' ? 'html2text' : 'text2html'), lock = this.set_busy(true, 'converting'); - this.log('HTTP POST: ' + url); - $.ajax({ type: 'POST', url: url, data: text, contentType: 'application/octet-stream', error: function(o, status, err) { ref.http_error(o, status, err, lock); }, success: function(data) { @@ -7899,9 +7907,11 @@ } }; - this.goto_url = function(action, query, lock) + this.goto_url = function(action, query, lock, secure) { - this.redirect(this.url(action, query), lock); + var url = this.url(action, query) + if (secure) url = this.secure_url(url); + this.redirect(url, lock); }; this.location_href = function(url, target, frame) @@ -8005,22 +8015,23 @@ if (response.env) this.set_env(response.env); + var i; + // we have labels to add if (typeof response.texts === 'object') { - for (var name in response.texts) - if (typeof response.texts[name] === 'string') - this.add_label(name, response.texts[name]); + for (i in response.texts) + if (typeof response.texts[i] === 'string') + this.add_label(i, response.texts[i]); } // if we get javascript code from server -> execute it if (response.exec) { - this.log(response.exec); eval(response.exec); } // execute callback functions of plugins if (response.callbacks && response.callbacks.length) { - for (var i=0; i < response.callbacks.length; i++) + for (i=0; i < response.callbacks.length; i++) this.triggerEvent(response.callbacks[i][0], response.callbacks[i][1]); } -- Gitblit v1.9.1