From 1460a9efd82d5b325469d3035793677205d13f51 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 4 Jun 2024 20:46:13 +0000 Subject: [PATCH] better inject --- .../files/inject-trigger.sh | 69 ++++++++++++++----- 1 file changed, 52 insertions(+), 17 deletions(-) diff --git a/docker-guacamole-custom/files/inject-trigger.sh b/docker-guacamole-custom/files/inject-trigger.sh index b08294e..d6f75b7 100755 --- a/docker-guacamole-custom/files/inject-trigger.sh +++ b/docker-guacamole-custom/files/inject-trigger.sh @@ -1,25 +1,60 @@ #!/bin/bash if [ -f /home/guacamole/tomcat/webapps/guacamole/templates.js ]; then - cat <> /home/guacamole/tomcat/webapps/guacamole/templates.js - \$(window).on('load', function() { - function getHashParam(param) { - var hash = window.location.hash.substr(1); - var hashParams = new URLSearchParams(hash.split('?')[1]); - return hashParams.get(param); - } + cat <<'EOF' >> /home/guacamole/tomcat/webapps/guacamole/templates.js +$(window).on('load', function() { + function getHashParam(param) { + var hash = window.location.hash.substr(1); + var hashParams = new URLSearchParams(hash.split('?')[1]); + return hashParams.get(param); + } - setTimeout(function() { - var quickconnectValue = getHashParam('quickconnect'); - if (quickconnectValue) { - var \$field = \$('.quickconnect-field'); - \$field.val(quickconnectValue); - \$field.trigger('input'); - \$field.trigger('change'); - \$('.quickconnect-button').click(); + setTimeout(function() { + var quickconnectValue = getHashParam('quickconnect'); + if (quickconnectValue) { + // Extração dos componentes da URI sem decodificação completa + var baseUri = quickconnectValue.split('?')[0]; + var queryParams = quickconnectValue.split('?')[1]; + + // Manuseio manual dos parâmetros devido a caracteres especiais + var params = queryParams.split('&'); + var newParams = []; + var password = ''; + + for (var i = 0; i < params.length; i++) { + var param = params[i]; + var [key, value] = param.split('='); + + if (key === 'password') { + password = param.substring(param.indexOf('=') + 1); + // Trata o restante da string como parte do password + for (var j = i + 1; j < params.length; j++) { + password += '&' + params[j]; + } + break; // exit loop after password is captured + } else { + newParams.push(param); + } } - }, 500); - }); + + // Codificar novamente apenas o campo password + if (password) { + var encodedPassword = encodeURIComponent(password); + newParams.push(`password=${encodedPassword}`); + } + + // Construir a nova URI com o password codificado + var formattedValue = `${baseUri}?${newParams.join('&')}`; + + // Preencher o campo do formulário e disparar eventos + var $field = $('.quickconnect-field'); + $field.val(formattedValue); + $field.trigger('input'); + $field.trigger('change'); + $('.quickconnect-button').click(); + } + }, 500); +}); EOF fi