Add support for X-Forwarded-Proto/Front-End-Https headers

This commit is contained in:
kaso17
2017-09-01 17:28:56 +02:00
parent 05d5798046
commit 3790cbb894
3 changed files with 34 additions and 5 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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,6 +30,7 @@ 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();
string GetServerUrl(HttpRequestMessage Request);
List<string> notices { get; } List<string> notices { get; }
} }
@@ -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;
}
} }
} }