From 227e41fbd9a72e4cbd975cf9b93564afa0a4e5ed Mon Sep 17 00:00:00 2001 From: Ignasi Barrera Date: Mon, 20 Nov 2017 18:41:43 +0100 Subject: [PATCH 1/2] GUACAMOLE-437: Fix extraHeaders scope --- .../src/main/webapp/modules/Tunnel.js | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/guacamole-common-js/src/main/webapp/modules/Tunnel.js b/guacamole-common-js/src/main/webapp/modules/Tunnel.js index a4e399d4c..a36c14415 100644 --- a/guacamole-common-js/src/main/webapp/modules/Tunnel.js +++ b/guacamole-common-js/src/main/webapp/modules/Tunnel.js @@ -226,19 +226,22 @@ Guacamole.HTTPTunnel = function(tunnelURL, crossDomain, extraTunnelHeaders) { * * @private */ - var extraHeaders = extraTunnelHeaders || {} + var extraHeaders = extraTunnelHeaders || {}; /** * Adds the configured additional headers to the given request. * - * @params {XMLHttpRequest} request + * @param {XMLHttpRequest} request * The request where the configured extra headers will be added. * + * @param {Object} headers + * The headers to be added to the request. + * * @private */ - function addExtraHeaders(request) { - for (var name in tunnel.extraHeaders) { - request.setRequestHeader(name, tunnel.extraHeaders[name]); + function addExtraHeaders(request, headers) { + for (var name in headers) { + request.setRequestHeader(name, headers[name]); } } @@ -350,7 +353,7 @@ Guacamole.HTTPTunnel = function(tunnelURL, crossDomain, extraTunnelHeaders) { var message_xmlhttprequest = new XMLHttpRequest(); message_xmlhttprequest.open("POST", TUNNEL_WRITE + tunnel.uuid); message_xmlhttprequest.withCredentials = withCredentials; - addExtraHeaders(message_xmlhttprequest); + addExtraHeaders(message_xmlhttprequest, extraHeaders); message_xmlhttprequest.setRequestHeader("Content-type", "application/octet-stream"); // Once response received, send next queued event. @@ -582,7 +585,7 @@ Guacamole.HTTPTunnel = function(tunnelURL, crossDomain, extraTunnelHeaders) { var xmlhttprequest = new XMLHttpRequest(); xmlhttprequest.open("GET", TUNNEL_READ + tunnel.uuid + ":" + (request_id++)); xmlhttprequest.withCredentials = withCredentials; - addExtraHeaders(xmlhttprequest); + addExtraHeaders(xmlhttprequest, extraHeaders); xmlhttprequest.send(null); return xmlhttprequest; @@ -625,7 +628,7 @@ Guacamole.HTTPTunnel = function(tunnelURL, crossDomain, extraTunnelHeaders) { connect_xmlhttprequest.open("POST", TUNNEL_CONNECT, true); connect_xmlhttprequest.withCredentials = withCredentials; - addExtraHeaders(connect_xmlhttprequest); + addExtraHeaders(connect_xmlhttprequest, extraHeaders); connect_xmlhttprequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8"); connect_xmlhttprequest.send(data); From e12d5479732472d11c244b5b218160312b01533a Mon Sep 17 00:00:00 2001 From: Ignasi Barrera Date: Mon, 20 Nov 2017 18:43:14 +0100 Subject: [PATCH 2/2] GUACAMOLE-437: Fix extraHeaders in the StaticHTTPTunnel --- .../src/main/webapp/modules/Tunnel.js | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/guacamole-common-js/src/main/webapp/modules/Tunnel.js b/guacamole-common-js/src/main/webapp/modules/Tunnel.js index a36c14415..c8f8502b5 100644 --- a/guacamole-common-js/src/main/webapp/modules/Tunnel.js +++ b/guacamole-common-js/src/main/webapp/modules/Tunnel.js @@ -1091,8 +1091,13 @@ Guacamole.ChainedTunnel.prototype = new Guacamole.Tunnel(); * Whether tunnel requests will be cross-domain, and thus must use CORS * mechanisms and headers. By default, it is assumed that tunnel requests * will be made to the same domain. + * + * @param {Object} [extraTunnelHeaders={}] + * Key value pairs containing the header names and values of any additional + * headers to be sent in tunnel requests. By default, no extra headers will + * be added. */ -Guacamole.StaticHTTPTunnel = function StaticHTTPTunnel(url, crossDomain) { +Guacamole.StaticHTTPTunnel = function StaticHTTPTunnel(url, crossDomain, extraTunnelHeaders) { /** * Reference to this Guacamole.StaticHTTPTunnel. @@ -1110,6 +1115,32 @@ Guacamole.StaticHTTPTunnel = function StaticHTTPTunnel(url, crossDomain) { */ var xhr = null; + /** + * Additional headers to be sent in tunnel requests. This dictionary can be + * populated with key/value header pairs to pass information such as authentication + * tokens, etc. + * + * @private + */ + var extraHeaders = extraTunnelHeaders || {}; + + /** + * Adds the configured additional headers to the given request. + * + * @param {XMLHttpRequest} request + * The request where the configured extra headers will be added. + * + * @param {Object} headers + * The headers to be added to the request. + * + * @private + */ + function addExtraHeaders(request, headers) { + for (var name in headers) { + request.setRequestHeader(name, headers[name]); + } + } + /** * Returns the Guacamole protocol status code which most closely * represents the given HTTP status code. @@ -1171,7 +1202,7 @@ Guacamole.StaticHTTPTunnel = function StaticHTTPTunnel(url, crossDomain) { xhr = new XMLHttpRequest(); xhr.open('GET', url); xhr.withCredentials = !!crossDomain; - addExtraHeaders(xhr); + addExtraHeaders(xhr, extraHeaders); xhr.responseType = 'text'; xhr.send(null);