diff --git a/src/Jackett.Common/Content/custom.js b/src/Jackett.Common/Content/custom.js index c22607fcd..c72a29f0f 100644 --- a/src/Jackett.Common/Content/custom.js +++ b/src/Jackett.Common/Content/custom.js @@ -1,4 +1,5 @@ var basePath = ''; +var baseUrl = ''; var indexers = []; var configuredIndexers = []; @@ -114,6 +115,12 @@ function loadJackettSettings() { basePath = ''; } + $("#jackett-baseurloverride").val(data.baseurloverride); + baseUrl = data.baseurloverride; + if (baseUrl === null || baseUrl === undefined) { + baseUrl = ''; + } + api.key = data.api_key; $("#jackett-savedir").val(data.blackholedir); @@ -163,9 +170,9 @@ function reloadIndexers() { availableFilters = []; for (var i = 0; i < data.length; i++) { var item = data[i]; - item.rss_host = resolveUrl(basePath + "/api/v2.0/indexers/" + item.id + "/results/torznab/api?apikey=" + api.key + "&t=search&cat=&q="); - item.torznab_host = resolveUrl(basePath + "/api/v2.0/indexers/" + item.id + "/results/torznab/"); - item.potato_host = resolveUrl(basePath + "/api/v2.0/indexers/" + item.id + "/results/potato/"); + item.rss_host = resolveUrl(baseUrl, basePath + "/api/v2.0/indexers/" + item.id + "/results/torznab/api?apikey=" + api.key + "&t=search&cat=&q="); + item.torznab_host = resolveUrl(baseUrl, basePath + "/api/v2.0/indexers/" + item.id + "/results/torznab/"); + item.potato_host = resolveUrl(baseUrl, basePath + "/api/v2.0/indexers/" + item.id + "/results/potato/"); if (item.last_error) item.state = "error"; @@ -922,10 +929,14 @@ function populateSetupForm(indexerId, name, config, caps, link, alternativesitel configForm.modal("show"); } -function resolveUrl(url) { - var a = document.createElement('a'); - a.href = url; - url = a.href; +function resolveUrl(baseUrl, url) { + if (baseUrl != '') { + url = baseUrl + url; + }else{ + var a = document.createElement('a'); + a.href = url; + url = a.href; + } return url; } @@ -1514,6 +1525,7 @@ function bindUIButtons() { $("#change-jackett-port").click(function () { var jackett_port = Number($("#jackett-port").val()); var jackett_basepathoverride = $("#jackett-basepathoverride").val(); + var jackett_baseurloverride = $("#jackett-baseurloverride").val(); var jackett_external = $("#jackett-allowext").is(':checked'); var jackett_update = $("#jackett-allowupdate").is(':checked'); var jackett_prerelease = $("#jackett-prerelease").is(':checked'); @@ -1540,6 +1552,7 @@ function bindUIButtons() { blackholedir: $("#jackett-savedir").val(), logging: jackett_logging, basepathoverride: jackett_basepathoverride, + baseurloverride: jackett_baseurloverride, logging: jackett_logging, cache_enabled: jackett_cache_enabled, cache_ttl: jackett_cache_ttl, diff --git a/src/Jackett.Common/Content/index.html b/src/Jackett.Common/Content/index.html index c02f36fdf..86211cbeb 100644 --- a/src/Jackett.Common/Content/index.html +++ b/src/Jackett.Common/Content/index.html @@ -130,6 +130,10 @@ Base path override: +
+ Base URL override: + +
Server port: diff --git a/src/Jackett.Common/Models/Config/ServerConfig.cs b/src/Jackett.Common/Models/Config/ServerConfig.cs index a2b6ec591..4bd02c42e 100644 --- a/src/Jackett.Common/Models/Config/ServerConfig.cs +++ b/src/Jackett.Common/Models/Config/ServerConfig.cs @@ -40,6 +40,7 @@ namespace Jackett.Common.Models.Config public bool UpdateDisabled { get; set; } public bool UpdatePrerelease { get; set; } public string BasePathOverride { get; set; } + public string BaseUrlOverride { get; set; } public bool CacheEnabled { get; set; } public long CacheTtl { get; set; } public long CacheMaxResultsPerIndexer { get; set; } diff --git a/src/Jackett.Common/Models/DTO/ServerConfig.cs b/src/Jackett.Common/Models/DTO/ServerConfig.cs index e803b831f..9a02428cd 100644 --- a/src/Jackett.Common/Models/DTO/ServerConfig.cs +++ b/src/Jackett.Common/Models/DTO/ServerConfig.cs @@ -28,6 +28,8 @@ namespace Jackett.Common.Models.DTO [DataMember] public string basepathoverride { get; set; } [DataMember] + public string baseurloverride { get; set; } + [DataMember] public bool cache_enabled { get; set; } [DataMember] public long cache_ttl { get; set; } @@ -71,6 +73,7 @@ namespace Jackett.Common.Models.DTO password = string.IsNullOrEmpty(config.AdminPassword) ? string.Empty : config.AdminPassword.Substring(0, 10); logging = config.RuntimeSettings.TracingEnabled; basepathoverride = config.BasePathOverride; + baseurloverride = config.BaseUrlOverride; cache_enabled = config.CacheEnabled; cache_ttl = config.CacheTtl; cache_max_results_per_indexer = config.CacheMaxResultsPerIndexer; diff --git a/src/Jackett.Server/Controllers/ServerConfigurationController.cs b/src/Jackett.Server/Controllers/ServerConfigurationController.cs index 5cbcd6566..857e00830 100644 --- a/src/Jackett.Server/Controllers/ServerConfigurationController.cs +++ b/src/Jackett.Server/Controllers/ServerConfigurationController.cs @@ -92,6 +92,15 @@ namespace Jackett.Server.Controllers throw new Exception("The Base Path Override must start with a /"); } + var baseUrlOverride = config.baseurloverride; + if (baseUrlOverride != null) + { + baseUrlOverride = baseUrlOverride.TrimEnd('/'); + if (!Uri.TryCreate(config.baseurloverride, UriKind.Absolute, out var uri) + || !(uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps)) + throw new Exception("Base URL Override is invalid. Example: http://jackett:9117"); + } + var cacheEnabled = config.cache_enabled; var cacheTtl = config.cache_ttl; var cacheMaxResultsPerIndexer = config.cache_max_results_per_indexer; @@ -106,6 +115,7 @@ namespace Jackett.Server.Controllers serverConfig.UpdateDisabled = updateDisabled; serverConfig.UpdatePrerelease = preRelease; serverConfig.BasePathOverride = basePathOverride; + serverConfig.BaseUrlOverride = baseUrlOverride; serverConfig.CacheEnabled = cacheEnabled; serverConfig.CacheTtl = cacheTtl; serverConfig.CacheMaxResultsPerIndexer = cacheMaxResultsPerIndexer;