aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api')
-rw-r--r--MediaBrowser.Api/ConfigurationService.cs24
-rw-r--r--MediaBrowser.Api/ItemUpdateService.cs11
-rw-r--r--MediaBrowser.Api/UserService.cs71
3 files changed, 82 insertions, 24 deletions
diff --git a/MediaBrowser.Api/ConfigurationService.cs b/MediaBrowser.Api/ConfigurationService.cs
index c83028bb2..29848cfc0 100644
--- a/MediaBrowser.Api/ConfigurationService.cs
+++ b/MediaBrowser.Api/ConfigurationService.cs
@@ -122,42 +122,44 @@ namespace MediaBrowser.Api
return ToOptimizedResult(result);
}
+ const string XbmcMetadata = "Xbmc Nfo";
+ const string MediaBrowserMetadata = "Media Browser Xml";
+
public void Post(AutoSetMetadataOptions request)
{
var service = AutoDetectMetadataService();
Logger.Info("Setting preferred metadata format to " + service);
- _configurationManager.SetPreferredMetadataService(service);
+ var serviceToDisable = string.Equals(service, XbmcMetadata) ?
+ MediaBrowserMetadata :
+ XbmcMetadata;
+
+ _configurationManager.DisableMetadataService(serviceToDisable);
_configurationManager.SaveConfiguration();
}
private string AutoDetectMetadataService()
{
- const string xbmc = "Xbmc Nfo";
- const string mb = "Media Browser Xml";
-
var paths = _libraryManager.GetDefaultVirtualFolders()
.SelectMany(i => i.Locations)
.Distinct(StringComparer.OrdinalIgnoreCase)
.Select(i => new DirectoryInfo(i))
.ToList();
- if (paths.Select(i => i.EnumerateFiles("*.xml", SearchOption.AllDirectories))
- .SelectMany(i => i)
+ if (paths.SelectMany(i => i.EnumerateFiles("*.xml", SearchOption.AllDirectories))
.Any())
{
- return xbmc;
+ return XbmcMetadata;
}
- if (paths.Select(i => i.EnumerateFiles("*.xml", SearchOption.AllDirectories))
- .SelectMany(i => i)
+ if (paths.SelectMany(i => i.EnumerateFiles("*.xml", SearchOption.AllDirectories))
.Any(i => string.Equals(i.Name, "series.xml", StringComparison.OrdinalIgnoreCase) || string.Equals(i.Name, "movie.xml", StringComparison.OrdinalIgnoreCase)))
{
- return mb;
+ return MediaBrowserMetadata;
}
- return xbmc;
+ return XbmcMetadata;
}
/// <summary>
diff --git a/MediaBrowser.Api/ItemUpdateService.cs b/MediaBrowser.Api/ItemUpdateService.cs
index db6c6ce53..1fa1a5509 100644
--- a/MediaBrowser.Api/ItemUpdateService.cs
+++ b/MediaBrowser.Api/ItemUpdateService.cs
@@ -65,6 +65,11 @@ namespace MediaBrowser.Api
}
}
+ private DateTime NormalizeDateTime(DateTime val)
+ {
+ return DateTime.SpecifyKind(val, DateTimeKind.Utc);
+ }
+
private void UpdateItem(BaseItemDto request, BaseItem item)
{
item.Name = request.Name;
@@ -140,11 +145,11 @@ namespace MediaBrowser.Api
if (request.DateCreated.HasValue)
{
- item.DateCreated = request.DateCreated.Value.ToUniversalTime();
+ item.DateCreated = NormalizeDateTime(request.DateCreated.Value);
}
- item.EndDate = request.EndDate.HasValue ? request.EndDate.Value.ToUniversalTime() : (DateTime?)null;
- item.PremiereDate = request.PremiereDate.HasValue ? request.PremiereDate.Value.ToUniversalTime() : (DateTime?)null;
+ item.EndDate = request.EndDate.HasValue ? NormalizeDateTime(request.EndDate.Value) : (DateTime?)null;
+ item.PremiereDate = request.PremiereDate.HasValue ? NormalizeDateTime(request.PremiereDate.Value) : (DateTime?)null;
item.ProductionYear = request.ProductionYear;
item.OfficialRating = request.OfficialRating;
item.CustomRating = request.CustomRating;
diff --git a/MediaBrowser.Api/UserService.cs b/MediaBrowser.Api/UserService.cs
index 178199b22..df4bc06ba 100644
--- a/MediaBrowser.Api/UserService.cs
+++ b/MediaBrowser.Api/UserService.cs
@@ -1,4 +1,5 @@
using MediaBrowser.Common.Extensions;
+using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Library;
@@ -11,6 +12,7 @@ using ServiceStack.Text.Controller;
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Net;
using System.Threading.Tasks;
namespace MediaBrowser.Api
@@ -168,6 +170,7 @@ namespace MediaBrowser.Api
private readonly IDtoService _dtoService;
private readonly ISessionManager _sessionMananger;
private readonly IServerConfigurationManager _config;
+ private readonly INetworkManager _networkManager;
public IAuthorizationContext AuthorizationContext { get; set; }
@@ -178,12 +181,13 @@ namespace MediaBrowser.Api
/// <param name="dtoService">The dto service.</param>
/// <param name="sessionMananger">The session mananger.</param>
/// <exception cref="System.ArgumentNullException">xmlSerializer</exception>
- public UserService(IUserManager userManager, IDtoService dtoService, ISessionManager sessionMananger, IServerConfigurationManager config)
+ public UserService(IUserManager userManager, IDtoService dtoService, ISessionManager sessionMananger, IServerConfigurationManager config, INetworkManager networkManager)
{
_userManager = userManager;
_dtoService = dtoService;
_sessionMananger = sessionMananger;
_config = config;
+ _networkManager = networkManager;
}
public object Get(GetPublicUsers request)
@@ -200,18 +204,65 @@ namespace MediaBrowser.Api
});
}
- // TODO: Add or is authenticated
- if (_sessionMananger.IsInLocalNetwork(Request.RemoteIp))
+ // TODO: Uncomment this once all clients can handle an empty user list.
+ return Get(new GetUsers
{
- return Get(new GetUsers
+ IsHidden = false,
+ IsDisabled = false
+ });
+
+ //// TODO: Add or is authenticated
+ //if (Request.IsLocal || IsInLocalNetwork(Request.RemoteIp))
+ //{
+ // return Get(new GetUsers
+ // {
+ // IsHidden = false,
+ // IsDisabled = false
+ // });
+ //}
+
+ //// Return empty when external
+ //return ToOptimizedResult(new List<UserDto>());
+ }
+
+ private bool IsInLocalNetwork(string remoteEndpoint)
+ {
+ if (string.IsNullOrWhiteSpace(remoteEndpoint))
+ {
+ throw new ArgumentNullException("remoteEndpoint");
+ }
+
+ IPAddress address;
+ if (!IPAddress.TryParse(remoteEndpoint, out address))
+ {
+ return true;
+ }
+
+ const int lengthMatch = 4;
+
+ if (remoteEndpoint.Length >= lengthMatch)
+ {
+ var prefix = remoteEndpoint.Substring(0, lengthMatch);
+
+ if (_networkManager.GetLocalIpAddresses()
+ .Any(i => i.StartsWith(prefix, StringComparison.OrdinalIgnoreCase)))
{
- IsHidden = false,
- IsDisabled = false
- });
+ return true;
+ }
}
- // Return empty when external
- return ToOptimizedResult(new List<UserDto>());
+ // Private address space:
+ // http://en.wikipedia.org/wiki/Private_network
+
+ return
+
+ // If url was requested with computer name, we may see this
+ remoteEndpoint.IndexOf("::", StringComparison.OrdinalIgnoreCase) != -1 ||
+
+ remoteEndpoint.StartsWith("10.", StringComparison.OrdinalIgnoreCase) ||
+ remoteEndpoint.StartsWith("192.", StringComparison.OrdinalIgnoreCase) ||
+ remoteEndpoint.StartsWith("172.", StringComparison.OrdinalIgnoreCase) ||
+ remoteEndpoint.StartsWith("169.", StringComparison.OrdinalIgnoreCase);
}
/// <summary>
@@ -307,7 +358,7 @@ namespace MediaBrowser.Api
var auth = AuthorizationContext.GetAuthorizationInfo(Request);
var result = _sessionMananger.AuthenticateNewSession(request.Username, request.Password, auth.Client, auth.Version,
- auth.DeviceId, auth.Device, Request.RemoteIp).Result;
+ auth.DeviceId, auth.Device, Request.RemoteIp, Request.IsLocal).Result;
return ToOptimizedResult(result);
}