diff --git a/src/Jackett.Common/Content/custom.css b/src/Jackett.Common/Content/custom.css
index 1f4ae8bac..00d5a48a1 100644
--- a/src/Jackett.Common/Content/custom.css
+++ b/src/Jackett.Common/Content/custom.css
@@ -177,7 +177,7 @@ hr {
text-align: center;
}
-#jackett-allowext, #jackett-allowupdate, #jackett-logging, #jackett-prerelease, #jackett-cache-enabled {
+#jackett-allowext, #jackett-allowcors, #jackett-allowupdate, #jackett-logging, #jackett-prerelease, #jackett-cache-enabled {
width: 25px;
}
diff --git a/src/Jackett.Common/Content/custom.js b/src/Jackett.Common/Content/custom.js
index a94a77b09..73aa6061e 100644
--- a/src/Jackett.Common/Content/custom.js
+++ b/src/Jackett.Common/Content/custom.js
@@ -125,6 +125,7 @@ function loadJackettSettings() {
$("#jackett-savedir").val(data.blackholedir);
$("#jackett-allowext").attr('checked', data.external);
+ $("#jackett-allowcors").attr('checked', data.cors);
$("#jackett-allowupdate").attr('checked', data.updatedisabled);
$("#jackett-prerelease").attr('checked', data.prerelease);
$("#jackett-logging").attr('checked', data.logging);
@@ -1528,6 +1529,7 @@ function bindUIButtons() {
var jackett_basepathoverride = $("#jackett-basepathoverride").val();
var jackett_baseurloverride = $("#jackett-baseurloverride").val();
var jackett_external = $("#jackett-allowext").is(':checked');
+ var jackett_cors = $("#jackett-allowcors").is(':checked');
var jackett_update = $("#jackett-allowupdate").is(':checked');
var jackett_prerelease = $("#jackett-prerelease").is(':checked');
var jackett_logging = $("#jackett-logging").is(':checked');
@@ -1548,6 +1550,7 @@ function bindUIButtons() {
var jsonObject = {
port: jackett_port,
external: jackett_external,
+ cors: jackett_cors,
updatedisabled: jackett_update,
prerelease: jackett_prerelease,
blackholedir: $("#jackett-savedir").val(),
diff --git a/src/Jackett.Common/Content/custom_mobile.css b/src/Jackett.Common/Content/custom_mobile.css
index 49d583c03..17d104c0a 100644
--- a/src/Jackett.Common/Content/custom_mobile.css
+++ b/src/Jackett.Common/Content/custom_mobile.css
@@ -161,7 +161,7 @@ hr {
text-align: center;
}
-#jackett-allowext, #jackett-allowupdate, #jackett-logging, #jackett-prerelease, #jackett-cache-enabled {
+#jackett-allowext, #jackett-allowcors, #jackett-allowupdate, #jackett-logging, #jackett-prerelease, #jackett-cache-enabled {
width: 25px;
}
diff --git a/src/Jackett.Common/Content/index.html b/src/Jackett.Common/Content/index.html
index 110f535ee..8af24404a 100644
--- a/src/Jackett.Common/Content/index.html
+++ b/src/Jackett.Common/Content/index.html
@@ -28,8 +28,8 @@
-
-
+
+
@@ -178,6 +178,10 @@
+
+
+
+
diff --git a/src/Jackett.Common/Content/login.html b/src/Jackett.Common/Content/login.html
index 26fe156b6..88947dc4d 100644
--- a/src/Jackett.Common/Content/login.html
+++ b/src/Jackett.Common/Content/login.html
@@ -16,7 +16,7 @@
-
+
Jackett
diff --git a/src/Jackett.Common/Models/Config/ServerConfig.cs b/src/Jackett.Common/Models/Config/ServerConfig.cs
index 4bd02c42e..f2e6f9e9e 100644
--- a/src/Jackett.Common/Models/Config/ServerConfig.cs
+++ b/src/Jackett.Common/Models/Config/ServerConfig.cs
@@ -33,6 +33,7 @@ namespace Jackett.Common.Models.Config
public int Port { get; set; }
public bool AllowExternal { get; set; }
+ public bool AllowCORS { get; set; }
public string APIKey { get; set; }
public string AdminPassword { get; set; }
public string InstanceId { get; set; }
diff --git a/src/Jackett.Common/Models/DTO/ServerConfig.cs b/src/Jackett.Common/Models/DTO/ServerConfig.cs
index 9a02428cd..84df88b0f 100644
--- a/src/Jackett.Common/Models/DTO/ServerConfig.cs
+++ b/src/Jackett.Common/Models/DTO/ServerConfig.cs
@@ -14,6 +14,8 @@ namespace Jackett.Common.Models.DTO
[DataMember]
public bool external { get; set; }
[DataMember]
+ public bool cors { get; set; }
+ [DataMember]
public string api_key { get; set; }
[DataMember]
public string blackholedir { get; set; }
@@ -66,6 +68,7 @@ namespace Jackett.Common.Models.DTO
this.notices = notices;
port = config.Port;
external = config.AllowExternal;
+ cors = config.AllowCORS;
api_key = config.APIKey;
blackholedir = config.BlackholeDir;
updatedisabled = config.UpdateDisabled;
diff --git a/src/Jackett.Server/Controllers/ServerConfigurationController.cs b/src/Jackett.Server/Controllers/ServerConfigurationController.cs
index 6da0d4671..521cb8274 100644
--- a/src/Jackett.Server/Controllers/ServerConfigurationController.cs
+++ b/src/Jackett.Server/Controllers/ServerConfigurationController.cs
@@ -79,6 +79,7 @@ namespace Jackett.Server.Controllers
var originalAllowExternal = serverConfig.AllowExternal;
var port = config.port;
var external = config.external;
+ var cors = config.cors;
var saveDir = config.blackholedir;
var updateDisabled = config.updatedisabled;
var preRelease = config.prerelease;
@@ -113,10 +114,12 @@ namespace Jackett.Server.Controllers
var omdbApiUrl = config.omdburl;
if (config.basepathoverride != serverConfig.BasePathOverride)
- {
webHostRestartNeeded = true;
- }
+ if (config.cors != serverConfig.AllowCORS)
+ webHostRestartNeeded = true;
+
+ serverConfig.AllowCORS = cors;
serverConfig.UpdateDisabled = updateDisabled;
serverConfig.UpdatePrerelease = preRelease;
serverConfig.BasePathOverride = basePathOverride;
diff --git a/src/Jackett.Server/Startup.cs b/src/Jackett.Server/Startup.cs
index 64949b2a4..785ddc240 100644
--- a/src/Jackett.Server/Startup.cs
+++ b/src/Jackett.Server/Startup.cs
@@ -30,6 +30,8 @@ namespace Jackett.Server
{
public class Startup
{
+ private const string AllowAllOrigins = "AllowAllOrigins";
+
public Startup(IConfiguration configuration) => Configuration = configuration;
public IConfiguration Configuration { get; }
@@ -37,9 +39,14 @@ namespace Jackett.Server
// This method gets called by the runtime. Use this method to add services to the container.
public IServiceProvider ConfigureServices(IServiceCollection services)
{
- services.AddResponseCompression();
+ services.AddResponseCompression()
+ .AddCors(
+ options =>
+ {
+ options.AddPolicy(name: AllowAllOrigins, corsPolicyBuilder => corsPolicyBuilder.AllowAnyOrigin());
- services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
+ })
+ .AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
options =>
{
@@ -49,8 +56,6 @@ namespace Jackett.Server
options.Cookie.Name = "Jackett";
});
-
-
#if NET461
services.AddMvc(
config => config.Filters.Add(
@@ -141,6 +146,9 @@ namespace Jackett.Server
app.UseAuthentication();
+ if (Helper.ServerConfiguration.AllowCORS)
+ app.UseCors(AllowAllOrigins);
+
app.UseMvc();
}
#else
@@ -183,6 +191,9 @@ namespace Jackett.Server
app.UseRouting();
+ if (Helper.ServerConfiguration.AllowCORS)
+ app.UseCors(AllowAllOrigins);
+
app.UseEndpoints(endpoints => endpoints.MapControllers());
}
#endif