Переглянути джерело

Merge pull request #2925 from MediaBrowser/dev

Dev
Luke 7 роки тому
батько
коміт
6121e67a07

+ 2 - 2
Emby.Server.Implementations/ApplicationHost.cs

@@ -1931,13 +1931,13 @@ namespace Emby.Server.Implementations
         {
             get
             {
-                return SupportsHttps && ServerConfigurationManager.Configuration.EnableHttps;
+                return SupportsHttps && (ServerConfigurationManager.Configuration.EnableHttps || ServerConfigurationManager.Configuration.RequireHttps);
             }
         }
 
         public bool SupportsHttps
         {
-            get { return Certificate != null; }
+            get { return Certificate != null || ServerConfigurationManager.Configuration.IsBehindProxy; }
         }
 
         public async Task<string> GetLocalApiUrl()

+ 1 - 1
Emby.Server.Implementations/EntryPoints/ExternalPortForwarding.cs

@@ -48,7 +48,7 @@ namespace Emby.Server.Implementations.EntryPoints
             values.Add(config.PublicPort.ToString(CultureInfo.InvariantCulture));
             values.Add(_appHost.HttpPort.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());
 
             return string.Join("|", values.ToArray(values.Count));

+ 19 - 0
Emby.Server.Implementations/HttpServer/HttpListenerHost.cs

@@ -423,6 +423,19 @@ namespace Emby.Server.Implementations.HttpServer
             return true;
         }
 
+        private bool ValidateSsl(string remoteIp)
+        {
+            if (_config.Configuration.RequireHttps && _appHost.EnableHttps)
+            {
+                if (!_networkManager.IsInLocalNetwork(remoteIp))
+                {
+                    return false;
+                }
+            }
+
+            return true;
+        }
+
         /// <summary>
         /// Overridable method that can be used to implement a custom hnandler
         /// </summary>
@@ -453,6 +466,12 @@ namespace Emby.Server.Implementations.HttpServer
                     return;
                 }
 
+                if (!ValidateSsl(httpReq.RemoteIp))
+                {
+                    RedirectToUrl(httpRes, urlString.Replace("http://", "https://", StringComparison.OrdinalIgnoreCase));
+                    return;
+                }
+
                 if (string.Equals(httpReq.Verb, "OPTIONS", StringComparison.OrdinalIgnoreCase))
                 {
                     httpRes.StatusCode = 200;

+ 6 - 4
MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs

@@ -346,7 +346,8 @@ namespace MediaBrowser.Controller.MediaEncoding
                 "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)
@@ -831,7 +832,7 @@ namespace MediaBrowser.Controller.MediaEncoding
             }
 
             // 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;
             }
@@ -841,13 +842,14 @@ namespace MediaBrowser.Controller.MediaEncoding
             // If client is requesting a specific video profile, it must match the source
             if (requestedProfiles.Length > 0)
             {
-                if (string.IsNullOrEmpty(videoStream.Profile))
+                if (string.IsNullOrWhiteSpace(videoStream.Profile))
                 {
                     //return false;
                 }
 
                 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 requestedScore = GetVideoProfileScore(requestedProfile);

+ 2 - 0
MediaBrowser.Model/Configuration/ServerConfiguration.cs

@@ -181,6 +181,8 @@ namespace MediaBrowser.Model.Configuration
         public string[] CodecsUsed { get; set; }
         public bool EnableChannelView { get; set; }
         public bool EnableExternalContentInSuggestions { get; set; }
+        public bool RequireHttps { get; set; }
+        public bool IsBehindProxy { get; set; }
 
         public int ImageExtractionTimeoutMs { get; set; }
 

+ 6 - 1
MediaBrowser.Model/Dlna/StreamBuilder.cs

@@ -1615,7 +1615,12 @@ namespace MediaBrowser.Model.Dlna
                             if (!string.IsNullOrWhiteSpace(value))
                             {
                                 // 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;
                         }

+ 6 - 2
MediaBrowser.Model/Dlna/StreamInfo.cs

@@ -297,7 +297,10 @@ namespace MediaBrowser.Model.Dlna
                 // dlna needs to be update to support the qualified params
                 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
@@ -372,7 +375,8 @@ namespace MediaBrowser.Model.Dlna
                         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 - 1
SharedVersion.cs

@@ -1,3 +1,3 @@
 using System.Reflection;
 
-[assembly: AssemblyVersion("3.2.32.11")]
+[assembly: AssemblyVersion("3.2.32.12")]