Fix: WebUI port switch reconnect

The WebUI will get now the new port for next reconnect
It was necessary to add the Access-Control-Allow-Origin header with a wildcard for file serving
This commit is contained in:
brindosch 2019-07-18 22:32:06 +02:00
parent fcd11176f8
commit 7e324bb1d3
6 changed files with 26 additions and 15 deletions

View File

@ -26,6 +26,8 @@ performTranslation();
var connectionLost = false; var connectionLost = false;
var connectionTimer; var connectionTimer;
var count = 1; var count = 1;
var reconnectInterval = 4000;
var connURL = location.protocol+"//"+location.hostname+":"+window.jsonPort+location.pathname+location.hash;
function tryReconnect() function tryReconnect()
{ {
@ -34,12 +36,12 @@ function tryReconnect()
window.clearInterval(connectionTimer); window.clearInterval(connectionTimer);
$('.reconstop').toggle(); $('.reconstop').toggle();
} }
$('#counter').html(count+'/100'); $('#counter').html(count+'/100');
$.ajax({ url: "/" }).done(function(data) { $.ajax({ url: connURL }).done(function(data) {
window.clearInterval(connectionTimer); window.clearInterval(connectionTimer);
window.location.href ="/"; window.location.href = connURL;
}) })
.fail( function( jqXHR, textStatus ) { .fail( function( jqXHR, textStatus ) {
count++; count++;
@ -52,10 +54,13 @@ function connectionLostAction()
if(!connectionLost) if(!connectionLost)
{ {
connectionLost = true; connectionLost = true;
connectionTimer = window.setInterval(tryReconnect, 4000); // if we changed the webui port we connect faster
if(window.fastReconnect){
window.fastReconnect = false;
reconnectInterval = 2000;
}
connectionTimer = window.setInterval(tryReconnect, reconnectInterval);
} }
} }
</script> </script>

View File

@ -1,29 +1,32 @@
$(document).ready( function() { $(document).ready( function() {
performTranslation(); performTranslation();
var conf_editor = null; var conf_editor = null;
$('#conf_cont').append(createOptPanel('fa-wrench', $.i18n("edt_conf_webc_heading_title"), 'editor_container', 'btn_submit')); $('#conf_cont').append(createOptPanel('fa-wrench', $.i18n("edt_conf_webc_heading_title"), 'editor_container', 'btn_submit'));
if(window.showOptHelp) if(window.showOptHelp)
{ {
$('#conf_cont').append(createHelpTable(window.schema.webConfig.properties, $.i18n("edt_conf_webc_heading_title"))); $('#conf_cont').append(createHelpTable(window.schema.webConfig.properties, $.i18n("edt_conf_webc_heading_title")));
} }
conf_editor = createJsonEditor('editor_container', { conf_editor = createJsonEditor('editor_container', {
webConfig : window.schema.webConfig webConfig : window.schema.webConfig
}, true, true); }, true, true);
conf_editor.on('change',function() { conf_editor.on('change',function() {
conf_editor.validate().length ? $('#btn_submit').attr('disabled', true) : $('#btn_submit').attr('disabled', false); conf_editor.validate().length ? $('#btn_submit').attr('disabled', true) : $('#btn_submit').attr('disabled', false);
}); });
$('#btn_submit').off().on('click',function() { $('#btn_submit').off().on('click',function() {
requestWriteConfig(conf_editor.getValue()); // store the last webui port for correct reconnect url (connection_lost.html)
var val = conf_editor.getValue();
window.fastReconnect = true;
window.jsonPort = val.webConfig.port;
requestWriteConfig(val);
}); });
if(window.showOptHelp) if(window.showOptHelp)
createHint("intro", $.i18n('conf_webconfig_label_intro'), "editor_container"); createHint("intro", $.i18n('conf_webconfig_label_intro'), "editor_container");
removeOverlay(); removeOverlay();
}); });

View File

@ -14,7 +14,7 @@ window.serverSchema = {};
window.serverConfig = {}; window.serverConfig = {};
window.schema = {}; window.schema = {};
window.sysInfo = {}; window.sysInfo = {};
window.jsonPort = 19444; window.jsonPort = 8090;
window.websocket = null; window.websocket = null;
window.hyperion = {}; window.hyperion = {};
window.wsTan = 1; window.wsTan = 1;

View File

@ -30,6 +30,7 @@ const QByteArray & QtHttpHeader::Location = QByteArrayLiteral ("Loca
const QByteArray & QtHttpHeader::SetCookie = QByteArrayLiteral ("Set-Cookie"); const QByteArray & QtHttpHeader::SetCookie = QByteArrayLiteral ("Set-Cookie");
const QByteArray & QtHttpHeader::TransferEncoding = QByteArrayLiteral ("Transfer-Encoding"); const QByteArray & QtHttpHeader::TransferEncoding = QByteArrayLiteral ("Transfer-Encoding");
const QByteArray & QtHttpHeader::ContentDisposition = QByteArrayLiteral ("Content-Disposition"); const QByteArray & QtHttpHeader::ContentDisposition = QByteArrayLiteral ("Content-Disposition");
const QByteArray & QtHttpHeader::AccessControlAllow = QByteArrayLiteral ("Access-Control-Allow-Origin");
const QByteArray & QtHttpHeader::Upgrade = QByteArrayLiteral ("Upgrade"); const QByteArray & QtHttpHeader::Upgrade = QByteArrayLiteral ("Upgrade");
const QByteArray & QtHttpHeader::SecWebSocketKey = QByteArrayLiteral ("Sec-WebSocket-Key"); const QByteArray & QtHttpHeader::SecWebSocketKey = QByteArrayLiteral ("Sec-WebSocket-Key");
const QByteArray & QtHttpHeader::SecWebSocketProtocol = QByteArrayLiteral ("Sec-WebSocket-Protocol"); const QByteArray & QtHttpHeader::SecWebSocketProtocol = QByteArrayLiteral ("Sec-WebSocket-Protocol");

View File

@ -32,6 +32,7 @@ public:
static const QByteArray & SetCookie; static const QByteArray & SetCookie;
static const QByteArray & TransferEncoding; static const QByteArray & TransferEncoding;
static const QByteArray & ContentDisposition; static const QByteArray & ContentDisposition;
static const QByteArray & AccessControlAllow;
// Websocket specific headers // Websocket specific headers
static const QByteArray & Upgrade; static const QByteArray & Upgrade;
static const QByteArray & SecWebSocketKey; static const QByteArray & SecWebSocketKey;

View File

@ -135,6 +135,7 @@ void StaticFileServing::onRequestNeedsReply (QtHttpRequest * request, QtHttpRepl
if (file.open (QFile::ReadOnly)) { if (file.open (QFile::ReadOnly)) {
QByteArray data = file.readAll (); QByteArray data = file.readAll ();
reply->addHeader ("Content-Type", mime.name ().toLocal8Bit ()); reply->addHeader ("Content-Type", mime.name ().toLocal8Bit ());
reply->addHeader(QtHttpHeader::AccessControlAllow, "*" );
reply->appendRawData (data); reply->appendRawData (data);
file.close (); file.close ();
} }