diff --git a/src/addserver.html b/src/addserver.html index a5c67ddce..763f56851 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 ea4d05d0a..90a8d8339 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 93e9673a4..378b9cdef 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 45fa42742..6d596632b 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 c283cf44d..c0367a813 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 4ea44cee2..e55840482 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 2c7b98167..acfe3832b 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",