From dc60aaeb77575bc261331ba1ea288d18c330f160 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Wed, 12 Feb 2020 11:38:53 +0100 Subject: [PATCH] luci-base: fs.js: exec_direct(): add ability to encode command as latin1 Signed-off-by: Jo-Philipp Wich --- .../luci-base/htdocs/luci-static/resources/fs.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/modules/luci-base/htdocs/luci-static/resources/fs.js b/modules/luci-base/htdocs/luci-static/resources/fs.js index df3a14b75..8d2760dd5 100644 --- a/modules/luci-base/htdocs/luci-static/resources/fs.js +++ b/modules/luci-base/htdocs/luci-static/resources/fs.js @@ -390,12 +390,17 @@ var FileSystem = L.Class.extend(/** @lends LuCI.fs.prototype */ { * `text` to interpret the output as string, `json` to parse the output * as JSON or `blob` to return the output as Blob instance. * + * @param {boolean} [latin1=false] + * Whether to encode the command line as Latin1 instead of UTF-8. This + * is usually not needed but can be useful for programs that cannot + * handle UTF-8 input. + * * @returns {Promise<*>} * Returns a promise resolving with the command stdout output interpreted * according to the specified type or rejecting with an error stating the * failure reason. */ - exec_direct: function(command, params, type) { + exec_direct: function(command, params, type, latin1) { var cmdstr = String(command) .replace(/\\/g, '\\\\').replace(/(\s)/g, '\\$1'); @@ -404,8 +409,13 @@ var FileSystem = L.Class.extend(/** @lends LuCI.fs.prototype */ { cmdstr += ' ' + String(params[i]) .replace(/\\/g, '\\\\').replace(/(\s)/g, '\\$1'); + if (latin1) + cmdstr = escape(cmdstr).replace(/\+/g, '%2b'); + else + cmdstr = encodeURIComponent(cmdstr); + var postdata = 'sessionid=%s&command=%s' - .format(encodeURIComponent(L.env.sessionid), encodeURIComponent(cmdstr)); + .format(encodeURIComponent(L.env.sessionid), cmdstr); return L.Request.post(L.env.cgi_base + '/cgi-exec', postdata, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, -- 2.25.1