mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-07 10:14:14 -04:00
commit
6121e67a07
@ -1931,13 +1931,13 @@ namespace Emby.Server.Implementations
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return SupportsHttps && ServerConfigurationManager.Configuration.EnableHttps;
|
return SupportsHttps && (ServerConfigurationManager.Configuration.EnableHttps || ServerConfigurationManager.Configuration.RequireHttps);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool SupportsHttps
|
public bool SupportsHttps
|
||||||
{
|
{
|
||||||
get { return Certificate != null; }
|
get { return Certificate != null || ServerConfigurationManager.Configuration.IsBehindProxy; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<string> GetLocalApiUrl()
|
public async Task<string> GetLocalApiUrl()
|
||||||
|
@ -48,7 +48,7 @@ namespace Emby.Server.Implementations.EntryPoints
|
|||||||
values.Add(config.PublicPort.ToString(CultureInfo.InvariantCulture));
|
values.Add(config.PublicPort.ToString(CultureInfo.InvariantCulture));
|
||||||
values.Add(_appHost.HttpPort.ToString(CultureInfo.InvariantCulture));
|
values.Add(_appHost.HttpPort.ToString(CultureInfo.InvariantCulture));
|
||||||
values.Add(_appHost.HttpsPort.ToString(CultureInfo.InvariantCulture));
|
values.Add(_appHost.HttpsPort.ToString(CultureInfo.InvariantCulture));
|
||||||
values.Add(config.EnableHttps.ToString());
|
values.Add((config.EnableHttps || config.RequireHttps).ToString());
|
||||||
values.Add(_appHost.EnableHttps.ToString());
|
values.Add(_appHost.EnableHttps.ToString());
|
||||||
|
|
||||||
return string.Join("|", values.ToArray(values.Count));
|
return string.Join("|", values.ToArray(values.Count));
|
||||||
|
@ -423,6 +423,19 @@ namespace Emby.Server.Implementations.HttpServer
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool ValidateSsl(string remoteIp)
|
||||||
|
{
|
||||||
|
if (_config.Configuration.RequireHttps && _appHost.EnableHttps)
|
||||||
|
{
|
||||||
|
if (!_networkManager.IsInLocalNetwork(remoteIp))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Overridable method that can be used to implement a custom hnandler
|
/// Overridable method that can be used to implement a custom hnandler
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -453,6 +466,12 @@ namespace Emby.Server.Implementations.HttpServer
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!ValidateSsl(httpReq.RemoteIp))
|
||||||
|
{
|
||||||
|
RedirectToUrl(httpRes, urlString.Replace("http://", "https://", StringComparison.OrdinalIgnoreCase));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (string.Equals(httpReq.Verb, "OPTIONS", StringComparison.OrdinalIgnoreCase))
|
if (string.Equals(httpReq.Verb, "OPTIONS", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
httpRes.StatusCode = 200;
|
httpRes.StatusCode = 200;
|
||||||
|
@ -346,7 +346,8 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
"Constrained High"
|
"Constrained High"
|
||||||
};
|
};
|
||||||
|
|
||||||
return Array.FindIndex(list.ToArray(), t => string.Equals(t, profile, StringComparison.OrdinalIgnoreCase));
|
// strip spaces because they may be stripped out on the query string
|
||||||
|
return Array.FindIndex(list.ToArray(), t => string.Equals(t.Replace(" ", ""), profile.Replace(" ", ""), StringComparison.OrdinalIgnoreCase));
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetInputPathArgument(EncodingJobInfo state)
|
public string GetInputPathArgument(EncodingJobInfo state)
|
||||||
@ -831,7 +832,7 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Source and target codecs must match
|
// Source and target codecs must match
|
||||||
if (string.IsNullOrEmpty(videoStream.Codec) || !state.SupportedVideoCodecs.Contains(videoStream.Codec, StringComparer.OrdinalIgnoreCase))
|
if (string.IsNullOrWhiteSpace(videoStream.Codec) || !state.SupportedVideoCodecs.Contains(videoStream.Codec, StringComparer.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -841,13 +842,14 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|||||||
// If client is requesting a specific video profile, it must match the source
|
// If client is requesting a specific video profile, it must match the source
|
||||||
if (requestedProfiles.Length > 0)
|
if (requestedProfiles.Length > 0)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(videoStream.Profile))
|
if (string.IsNullOrWhiteSpace(videoStream.Profile))
|
||||||
{
|
{
|
||||||
//return false;
|
//return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var requestedProfile = requestedProfiles[0];
|
var requestedProfile = requestedProfiles[0];
|
||||||
if (!string.IsNullOrEmpty(videoStream.Profile) && !string.Equals(requestedProfile, videoStream.Profile, StringComparison.OrdinalIgnoreCase))
|
// strip spaces because they may be stripped out on the query string as well
|
||||||
|
if (!string.IsNullOrWhiteSpace(videoStream.Profile) && !requestedProfiles.Contains(videoStream.Profile.Replace(" ", ""), StringComparer.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
var currentScore = GetVideoProfileScore(videoStream.Profile);
|
var currentScore = GetVideoProfileScore(videoStream.Profile);
|
||||||
var requestedScore = GetVideoProfileScore(requestedProfile);
|
var requestedScore = GetVideoProfileScore(requestedProfile);
|
||||||
|
@ -181,6 +181,8 @@ namespace MediaBrowser.Model.Configuration
|
|||||||
public string[] CodecsUsed { get; set; }
|
public string[] CodecsUsed { get; set; }
|
||||||
public bool EnableChannelView { get; set; }
|
public bool EnableChannelView { get; set; }
|
||||||
public bool EnableExternalContentInSuggestions { get; set; }
|
public bool EnableExternalContentInSuggestions { get; set; }
|
||||||
|
public bool RequireHttps { get; set; }
|
||||||
|
public bool IsBehindProxy { get; set; }
|
||||||
|
|
||||||
public int ImageExtractionTimeoutMs { get; set; }
|
public int ImageExtractionTimeoutMs { get; set; }
|
||||||
|
|
||||||
|
@ -1615,7 +1615,12 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
if (!string.IsNullOrWhiteSpace(value))
|
if (!string.IsNullOrWhiteSpace(value))
|
||||||
{
|
{
|
||||||
// change from split by | to comma
|
// change from split by | to comma
|
||||||
item.SetOption(qualifier, "profile", string.Join(",", value.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries)));
|
|
||||||
|
// strip spaces to avoid having to encode
|
||||||
|
var values = value
|
||||||
|
.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
|
||||||
|
item.SetOption(qualifier, "profile", string.Join(",", values));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -297,7 +297,10 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
// dlna needs to be update to support the qualified params
|
// dlna needs to be update to support the qualified params
|
||||||
var profile = item.GetOption("h264", "profile");
|
var profile = item.GetOption("h264", "profile");
|
||||||
|
|
||||||
list.Add(new NameValuePair("Profile", profile ?? string.Empty));
|
// Avoid having to encode
|
||||||
|
profile = (profile ?? string.Empty).Replace(" ", "");
|
||||||
|
|
||||||
|
list.Add(new NameValuePair("Profile", profile));
|
||||||
}
|
}
|
||||||
|
|
||||||
// no longer used
|
// no longer used
|
||||||
@ -372,7 +375,8 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
list.Add(new NameValuePair(pair.Key, pair.Value));
|
// strip spaces to avoid having to encode h264 profile names
|
||||||
|
list.Add(new NameValuePair(pair.Key, pair.Value.Replace(" ", "")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
[assembly: AssemblyVersion("3.2.32.11")]
|
[assembly: AssemblyVersion("3.2.32.12")]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user