diff --git a/src/addserver.html b/src/addserver.html index a5c67ddcee..763f56851b 100644 --- a/src/addserver.html +++ b/src/addserver.html @@ -1,20 +1,16 @@
-
-

${HeaderConnectToServer}

+ +

${HeaderConnectToServer}

-
${LabelServerHostHelp}
-
-
-
- +
${LabelServerHostHelp}

-
diff --git a/src/bower_components/apiclient/apiclientcore.js b/src/bower_components/apiclient/apiclientcore.js index ea4d05d0ab..90a8d83392 100644 --- a/src/bower_components/apiclient/apiclientcore.js +++ b/src/bower_components/apiclient/apiclientcore.js @@ -242,7 +242,7 @@ define(["events", "appStorage"], function(events, appStorage) { var url = serverAddress || this._serverAddress; if (!url) throw new Error("serverAddress is yet not set"); var lowered = url.toLowerCase(); - return -1 === lowered.indexOf("/emby") && -1 === lowered.indexOf("/mediabrowser") && (url += "/emby"), "/" !== name.charAt(0) && (url += "/"), url += name, params && (params = paramsToString(params)) && (url += "?" + params), url + return "/" !== name.charAt(0) && (url += "/"), url += name, params && (params = paramsToString(params)) && (url += "?" + params), url }, ApiClient.prototype.fetchWithFailover = function(request, enableReconnection) { console.log("Requesting " + request.url), request.timeout = 3e4; var instance = this; diff --git a/src/bower_components/apiclient/connectionmanager.js b/src/bower_components/apiclient/connectionmanager.js index 93e9673a46..378b9cdefc 100644 --- a/src/bower_components/apiclient/connectionmanager.js +++ b/src/bower_components/apiclient/connectionmanager.js @@ -40,7 +40,7 @@ define(["events", "apiclient", "appStorage"], function(events, apiClientFactory, } function getEmbyServerUrl(baseUrl, handler) { - return baseUrl + "/emby/" + handler + return baseUrl + "/" + handler } function getFetchPromise(request) { diff --git a/src/controllers/addserver.js b/src/controllers/addserver.js index 45fa427420..6d596632b2 100644 --- a/src/controllers/addserver.js +++ b/src/controllers/addserver.js @@ -6,7 +6,8 @@ define(["appSettings", "loading", "browser", "emby-button"], function(appSetting switch (result.State) { case "SignedIn": var apiClient = result.ApiClient; - Dashboard.onServerChanged(apiClient.getCurrentUserId(), apiClient.accessToken(), apiClient), Dashboard.navigate("home.html"); + Dashboard.onServerChanged(apiClient.getCurrentUserId(), apiClient.accessToken(), apiClient); + Dashboard.navigate("home.html"); break; case "ServerSignIn": Dashboard.navigate("login.html?serverid=" + result.Servers[0].Id, false, "none"); @@ -27,14 +28,9 @@ define(["appSettings", "loading", "browser", "emby-button"], function(appSetting } } - function submitManualServer(page) { - var host = page.querySelector("#txtServerHost").value; - var port = page.querySelector("#txtServerPort").value; - if (port) { - host += ":" + port; - } - + function submitServer(page) { loading.show(); + var host = page.querySelector("#txtServerHost").value; ConnectionManager.connectToAddress(host, { enableAutoLogin: appSettings.enableAutoLogin() }).then(function(result) { @@ -47,11 +43,11 @@ define(["appSettings", "loading", "browser", "emby-button"], function(appSetting } return function(view, params) { - view.querySelector(".manualServerForm").addEventListener("submit", onManualServerSubmit); - view.querySelector(".btnCancelManualServer").addEventListener("click", goBack); + view.querySelector(".addServerForm").addEventListener("submit", onServerSubmit); + view.querySelector(".btnCancel").addEventListener("click", goBack); - function onManualServerSubmit(e) { - submitManualServer(view); + function onServerSubmit(e) { + submitServer(view); e.preventDefault(); return false; } diff --git a/src/controllers/networking.js b/src/controllers/networking.js index c283cf44d1..c0367a8136 100644 --- a/src/controllers/networking.js +++ b/src/controllers/networking.js @@ -2,25 +2,62 @@ define(["loading", "libraryMenu", "globalize", "emby-checkbox", "emby-select"], "use strict"; function onSubmit(e) { - var form = this, - localAddress = form.querySelector("#txtLocalAddress").value, - enableUpnp = form.querySelector("#chkEnableUpnp").checked; + var form = this; + var localAddress = form.querySelector("#txtLocalAddress").value; + var enableUpnp = form.querySelector("#chkEnableUpnp").checked; confirmSelections(localAddress, enableUpnp, function() { var validationResult = getValidationAlert(form); if (validationResult) return void alertText(validationResult); validateHttps(form).then(function() { - loading.show(), ApiClient.getServerConfiguration().then(function(config) { + loading.show(); + ApiClient.getServerConfiguration().then(function(config) { config.LocalNetworkSubnets = form.querySelector("#txtLanNetworks").value.split(",").map(function(s) { return s.trim() }).filter(function(s) { return s.length > 0 - }), config.RemoteIPFilter = form.querySelector("#txtExternalAddressFilter").value.split(",").map(function(s) { + }); + + config.RemoteIPFilter = form.querySelector("#txtExternalAddressFilter").value.split(",").map(function(s) { return s.trim() }).filter(function(s) { return s.length > 0 - }), config.IsRemoteIPFilterBlacklist = "blacklist" === form.querySelector("#selectExternalAddressFilterMode").value, config.PublicPort = form.querySelector("#txtPublicPort").value, config.PublicHttpsPort = form.querySelector("#txtPublicHttpsPort").value; + }); + + config.IsRemoteIPFilterBlacklist = "blacklist" === form.querySelector("#selectExternalAddressFilterMode").value; + config.PublicPort = form.querySelector("#txtPublicPort").value; + config.PublicHttpsPort = form.querySelector("#txtPublicHttpsPort").value; var httpsMode = form.querySelector("#selectHttpsMode").value; - "proxy" === httpsMode ? (config.EnableHttps = !0, config.RequireHttps = !1, config.IsBehindProxy = !0) : "required" === httpsMode ? (config.EnableHttps = !0, config.RequireHttps = !0, config.IsBehindProxy = !1) : "enabled" === httpsMode ? (config.EnableHttps = !0, config.RequireHttps = !1, config.IsBehindProxy = !1) : (config.EnableHttps = !1, config.RequireHttps = !1, config.IsBehindProxy = !1), config.HttpsPortNumber = form.querySelector("#txtHttpsPort").value, config.HttpServerPortNumber = form.querySelector("#txtPortNumber").value, config.EnableUPnP = enableUpnp, config.WanDdns = form.querySelector("#txtDdns").value, config.EnableRemoteAccess = form.querySelector("#chkRemoteAccess").checked, config.CertificatePath = form.querySelector("#txtCertificatePath").value || null, config.CertificatePassword = form.querySelector("#txtCertPassword").value || null, config.LocalNetworkAddresses = localAddress ? [localAddress] : [], ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult, Dashboard.processErrorResponse) + switch (httpsMode) { + case "proxy": + config.EnableHttps = true; + config.RequireHttps = false; + config.IsBehindProxy = true; + break; + case "required": + config.EnableHttps = true; + config.RequireHttps = true; + config.IsBehindProxy = false; + break; + case "enabled": + config.EnableHttps = true; + config.RequireHttps = false; + config.IsBehindProxy = false; + break; + default: + config.EnableHttps = false; + config.RequireHttps = false; + config.IsBehindProxy = false; + } + config.HttpsPortNumber = form.querySelector("#txtHttpsPort").value; + config.HttpServerPortNumber = form.querySelector("#txtPortNumber").value; + config.EnableUPnP = enableUpnp; + config.WanDdns = form.querySelector("#txtDdns").value; + config.BaseUrl = form.querySelector("#txtBaseUrl").value; + config.EnableRemoteAccess = form.querySelector("#chkRemoteAccess").checked; + config.CertificatePath = form.querySelector("#txtCertificatePath").value || null; + config.CertificatePassword = form.querySelector("#txtCertPassword").value || null; + config.LocalNetworkAddresses = localAddress ? [localAddress] : []; + ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult, Dashboard.processErrorResponse); }) }) }), e.preventDefault() @@ -63,11 +100,26 @@ define(["loading", "libraryMenu", "globalize", "emby-checkbox", "emby-select"], return function(view, params) { function loadPage(page, config) { - page.querySelector("#txtPortNumber").value = config.HttpServerPortNumber, page.querySelector("#txtPublicPort").value = config.PublicPort, page.querySelector("#txtPublicHttpsPort").value = config.PublicHttpsPort, page.querySelector("#txtLocalAddress").value = config.LocalNetworkAddresses[0] || "", page.querySelector("#txtLanNetworks").value = (config.LocalNetworkSubnets || []).join(", "), page.querySelector("#txtExternalAddressFilter").value = (config.RemoteIPFilter || []).join(", "), page.querySelector("#selectExternalAddressFilterMode").value = config.IsRemoteIPFilterBlacklist ? "blacklist" : "whitelist", page.querySelector("#chkRemoteAccess").checked = null == config.EnableRemoteAccess || config.EnableRemoteAccess; + page.querySelector("#txtPortNumber").value = config.HttpServerPortNumber; + page.querySelector("#txtPublicPort").value = config.PublicPort; + page.querySelector("#txtPublicHttpsPort").value = config.PublicHttpsPort; + page.querySelector("#txtLocalAddress").value = config.LocalNetworkAddresses[0] || ""; + page.querySelector("#txtLanNetworks").value = (config.LocalNetworkSubnets || []).join(", "); + page.querySelector("#txtExternalAddressFilter").value = (config.RemoteIPFilter || []).join(", "); + page.querySelector("#selectExternalAddressFilterMode").value = config.IsRemoteIPFilterBlacklist ? "blacklist" : "whitelist"; + page.querySelector("#chkRemoteAccess").checked = null == config.EnableRemoteAccess || config.EnableRemoteAccess; var selectHttpsMode = page.querySelector("#selectHttpsMode"); - config.IsBehindProxy ? selectHttpsMode.value = "proxy" : config.RequireHttps ? selectHttpsMode.value = "required" : config.EnableHttps ? selectHttpsMode.value = "enabled" : selectHttpsMode.value = "disabled", page.querySelector("#txtHttpsPort").value = config.HttpsPortNumber, page.querySelector("#txtDdns").value = config.WanDdns || ""; + config.IsBehindProxy ? selectHttpsMode.value = "proxy" : config.RequireHttps ? selectHttpsMode.value = "required" : config.EnableHttps ? selectHttpsMode.value = "enabled" : selectHttpsMode.value = "disabled"; + page.querySelector("#txtHttpsPort").value = config.HttpsPortNumber; + page.querySelector("#txtDdns").value = config.WanDdns || ""; + page.querySelector("#txtBaseUrl").value = config.BaseUrl || ""; var txtCertificatePath = page.querySelector("#txtCertificatePath"); - txtCertificatePath.value = config.CertificatePath || "", page.querySelector("#txtCertPassword").value = config.CertificatePassword || "", page.querySelector("#chkEnableUpnp").checked = config.EnableUPnP, onCertPathChange.call(txtCertificatePath), triggerChange(page.querySelector("#chkRemoteAccess")), loading.hide() + txtCertificatePath.value = config.CertificatePath || ""; + page.querySelector("#txtCertPassword").value = config.CertificatePassword || ""; + page.querySelector("#chkEnableUpnp").checked = config.EnableUPnP; + onCertPathChange.call(txtCertificatePath); + triggerChange(page.querySelector("#chkRemoteAccess")); + loading.hide(); } function onCertPathChange() { diff --git a/src/networking.html b/src/networking.html index 4ea44cee24..e55840482c 100644 --- a/src/networking.html +++ b/src/networking.html @@ -56,6 +56,11 @@
${LabelExternalDDNSHelp}
+
+ +
${LabelBaseUrlHelp}
+
+
diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 2c7b98167f..acfe3832ba 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -632,6 +632,8 @@ "LabelEveryXMinutes": "Every:", "LabelExternalDDNS": "External domain:", "LabelExternalDDNSHelp": "If you have a dynamic DNS enter it here for clients to use when connecting remotely. This field is required when used with a custom SSL certificate. Example: mydomain.com.", + "LabelBaseUrl": "Base URL:", + "LabelBaseUrlHelp": "You can add a custom subdirectory here to access the server from a more unique URL.", "LabelExtractChaptersDuringLibraryScan": "Extract chapter images during the library scan", "LabelExtractChaptersDuringLibraryScanHelp": "If enabled, chapter images will be extracted when videos are imported during the library scan. If disabled they will be extracted during the chapter images scheduled task, allowing the regular library scan to complete faster.", "LabelFailed": "Failed",