mirror of
https://github.com/Jackett/Jackett.git
synced 2025-09-17 17:34:09 +02:00
Add support for X-Forwarded-Proto/Front-End-Https headers
This commit is contained in:
@@ -154,7 +154,7 @@ namespace Jackett.Controllers.V20
|
|||||||
|
|
||||||
private void ConfigureCacheResults(IEnumerable<TrackerCacheResult> results)
|
private void ConfigureCacheResults(IEnumerable<TrackerCacheResult> results)
|
||||||
{
|
{
|
||||||
var serverUrl = string.Format("{0}://{1}:{2}{3}", Request.RequestUri.Scheme, Request.RequestUri.Host, Request.RequestUri.Port, serverService.BasePath());
|
var serverUrl = serverService.GetServerUrl(Request);
|
||||||
foreach (var result in results)
|
foreach (var result in results)
|
||||||
{
|
{
|
||||||
var link = result.Link;
|
var link = result.Link;
|
||||||
|
@@ -306,7 +306,7 @@ namespace Jackett.Controllers.V20
|
|||||||
|
|
||||||
logger.Info(logBuilder.ToString());
|
logger.Info(logBuilder.ToString());
|
||||||
|
|
||||||
var serverUrl = string.Format("{0}://{1}:{2}{3}", Request.RequestUri.Scheme, Request.RequestUri.Host, Request.RequestUri.Port, serverService.BasePath());
|
var serverUrl = serverService.GetServerUrl(Request);
|
||||||
var resultPage = new ResultPage(new ChannelInfo
|
var resultPage = new ResultPage(new ChannelInfo
|
||||||
{
|
{
|
||||||
Title = CurrentIndexer.DisplayName,
|
Title = CurrentIndexer.DisplayName,
|
||||||
@@ -368,7 +368,7 @@ namespace Jackett.Controllers.V20
|
|||||||
else
|
else
|
||||||
logger.Info($"Found {result.Releases.Count()} torrentpotato releases from {CurrentIndexer.DisplayName} for: {CurrentQuery.GetQueryString()}");
|
logger.Info($"Found {result.Releases.Count()} torrentpotato releases from {CurrentIndexer.DisplayName} for: {CurrentQuery.GetQueryString()}");
|
||||||
|
|
||||||
var serverUrl = string.Format("{0}://{1}:{2}{3}", Request.RequestUri.Scheme, Request.RequestUri.Host, Request.RequestUri.Port, serverService.BasePath());
|
var serverUrl = serverService.GetServerUrl(Request);
|
||||||
var potatoReleases = result.Releases.Where(r => r.Link != null || r.MagnetUri != null).Select(r =>
|
var potatoReleases = result.Releases.Where(r => r.Link != null || r.MagnetUri != null).Select(r =>
|
||||||
{
|
{
|
||||||
var release = AutoMapper.Mapper.Map<ReleaseInfo>(r);
|
var release = AutoMapper.Mapper.Map<ReleaseInfo>(r);
|
||||||
@@ -400,7 +400,7 @@ namespace Jackett.Controllers.V20
|
|||||||
|
|
||||||
private void ConfigureCacheResults(IEnumerable<TrackerCacheResult> results)
|
private void ConfigureCacheResults(IEnumerable<TrackerCacheResult> results)
|
||||||
{
|
{
|
||||||
var serverUrl = string.Format("{0}://{1}:{2}{3}", Request.RequestUri.Scheme, Request.RequestUri.Host, Request.RequestUri.Port, serverService.BasePath());
|
var serverUrl = serverService.GetServerUrl(Request);
|
||||||
foreach (var result in results)
|
foreach (var result in results)
|
||||||
{
|
{
|
||||||
var link = result.Link;
|
var link = result.Link;
|
||||||
|
@@ -10,6 +10,7 @@ using System.Globalization;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
|
using System.Net.Http;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
@@ -29,7 +30,8 @@ namespace Jackett.Services
|
|||||||
void SaveConfig();
|
void SaveConfig();
|
||||||
Uri ConvertToProxyLink(Uri link, string serverUrl, string indexerId, string action = "dl", string file = "t.torrent");
|
Uri ConvertToProxyLink(Uri link, string serverUrl, string indexerId, string action = "dl", string file = "t.torrent");
|
||||||
string BasePath();
|
string BasePath();
|
||||||
List<string> notices { get; }
|
string GetServerUrl(HttpRequestMessage Request);
|
||||||
|
List<string> notices { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ServerService : IServerService
|
public class ServerService : IServerService
|
||||||
@@ -352,5 +354,32 @@ namespace Jackett.Services
|
|||||||
_server.Dispose();
|
_server.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string GetServerUrl(HttpRequestMessage Request)
|
||||||
|
{
|
||||||
|
var scheme = Request.RequestUri.Scheme;
|
||||||
|
var port = Request.RequestUri.Port;
|
||||||
|
|
||||||
|
// Check for protocol headers added by reverse proxys
|
||||||
|
// X-Forwarded-Proto: A de facto standard for identifying the originating protocol of an HTTP request
|
||||||
|
var X_Forwarded_Proto = Request.Headers.Where(x => x.Key == "X-Forwarded-Proto").Select(x => x.Value).FirstOrDefault();
|
||||||
|
if (X_Forwarded_Proto != null)
|
||||||
|
{
|
||||||
|
scheme = X_Forwarded_Proto.First();
|
||||||
|
|
||||||
|
}
|
||||||
|
// Front-End-Https: Non-standard header field used by Microsoft applications and load-balancers
|
||||||
|
else if (Request.Headers.Where(x => x.Key == "Front-End-Https" && x.Value.FirstOrDefault() == "on").Any())
|
||||||
|
{
|
||||||
|
scheme = "https";
|
||||||
|
}
|
||||||
|
|
||||||
|
// default to 443 if the Host header doesn't contain the port (needed for reverse proxy setups)
|
||||||
|
if (scheme == "https" && !Request.RequestUri.Host.Contains(":"))
|
||||||
|
port = 443;
|
||||||
|
|
||||||
|
var serverUrl = string.Format("{0}://{1}:{2}{3}", scheme, Request.RequestUri.Host, port, BasePath());
|
||||||
|
return serverUrl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user