aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-02-03 16:06:56 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-02-03 16:06:56 -0500
commit655c9ea7a173add232c737d1a648ad697c19f297 (patch)
treef3bd54c05a3f8dcad241f7c38d99307460f8d587
parent256990ac7ba8cd9efa7f37896c7e1f20d325cda8 (diff)
enforce user access to offline items
-rw-r--r--MediaBrowser.Controller/Entities/BaseItem.cs17
-rw-r--r--MediaBrowser.Model/Sync/SyncDataRequest.cs2
-rw-r--r--MediaBrowser.Model/Sync/SyncDataResponse.cs2
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs6
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncManager.cs47
-rw-r--r--MediaBrowser.Server.Implementations/Sync/SyncRepository.cs6
-rw-r--r--Nuget/MediaBrowser.Common.Internal.nuspec4
-rw-r--r--Nuget/MediaBrowser.Common.nuspec2
-rw-r--r--Nuget/MediaBrowser.Model.Signed.nuspec2
-rw-r--r--Nuget/MediaBrowser.Server.Core.nuspec4
10 files changed, 80 insertions, 12 deletions
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs
index 1e46aa9e5..4925bcd8a 100644
--- a/MediaBrowser.Controller/Entities/BaseItem.cs
+++ b/MediaBrowser.Controller/Entities/BaseItem.cs
@@ -1083,6 +1083,23 @@ namespace MediaBrowser.Controller.Entities
return IsParentalAllowed(user);
}
+ public virtual bool IsVisibleStandalone(User user)
+ {
+ if (!IsVisible(user))
+ {
+ return false;
+ }
+
+ if (Parents.Any(i => !i.IsVisible(user)))
+ {
+ return false;
+ }
+
+ // TODO: Need some work here, e.g. is in user library, for channels, can user access channel, etc.
+
+ return true;
+ }
+
/// <summary>
/// Gets a value indicating whether this instance is folder.
/// </summary>
diff --git a/MediaBrowser.Model/Sync/SyncDataRequest.cs b/MediaBrowser.Model/Sync/SyncDataRequest.cs
index 3eb447b3f..dc33239a0 100644
--- a/MediaBrowser.Model/Sync/SyncDataRequest.cs
+++ b/MediaBrowser.Model/Sync/SyncDataRequest.cs
@@ -5,12 +5,14 @@ namespace MediaBrowser.Model.Sync
public class SyncDataRequest
{
public List<string> LocalItemIds { get; set; }
+ public List<string> OfflineUserIds { get; set; }
public string TargetId { get; set; }
public SyncDataRequest()
{
LocalItemIds = new List<string>();
+ OfflineUserIds = new List<string>();
}
}
}
diff --git a/MediaBrowser.Model/Sync/SyncDataResponse.cs b/MediaBrowser.Model/Sync/SyncDataResponse.cs
index ac7ff5c84..3799e9455 100644
--- a/MediaBrowser.Model/Sync/SyncDataResponse.cs
+++ b/MediaBrowser.Model/Sync/SyncDataResponse.cs
@@ -5,10 +5,12 @@ namespace MediaBrowser.Model.Sync
public class SyncDataResponse
{
public List<string> ItemIdsToRemove { get; set; }
+ public Dictionary<string, List<string>> ItemUserAccess { get; set; }
public SyncDataResponse()
{
ItemIdsToRemove = new List<string>();
+ ItemUserAccess = new Dictionary<string, List<string>>();
}
}
}
diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
index 74069e580..33c3b97dc 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
@@ -147,7 +147,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
var currentUser = user;
channels = channels
- .Where(i => i.IsParentalAllowed(currentUser))
+ .Where(i => i.IsVisible(currentUser))
.OrderBy(i =>
{
double number = 0;
@@ -679,7 +679,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
{
// Avoid implicitly captured closure
var currentUser = user;
- programs = programs.Where(i => i.IsParentalAllowed(currentUser));
+ programs = programs.Where(i => i.IsVisible(currentUser));
}
var programList = programs.ToList();
@@ -714,7 +714,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
// Avoid implicitly captured closure
var currentUser = user;
- programs = programs.Where(i => i.IsParentalAllowed(currentUser));
+ programs = programs.Where(i => i.IsVisible(currentUser));
if (query.IsAiring.HasValue)
{
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
index 6a4bc9cc4..749730f82 100644
--- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
+++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs
@@ -315,6 +315,10 @@ namespace MediaBrowser.Server.Implementations.Sync
{
_fileSystem.DeleteDirectory(path, true);
}
+ catch (DirectoryNotFoundException)
+ {
+
+ }
catch (Exception ex)
{
_logger.ErrorException("Error deleting directory {0}", ex, path);
@@ -664,9 +668,48 @@ namespace MediaBrowser.Server.Implementations.Sync
response.ItemIdsToRemove = response.ItemIdsToRemove.Distinct(StringComparer.OrdinalIgnoreCase).ToList();
+ var itemsOnDevice = request.LocalItemIds
+ .Except(response.ItemIdsToRemove)
+ .ToList();
+
+ SetUserAccess(request, response, itemsOnDevice);
+
return response;
}
+ private void SetUserAccess(SyncDataRequest request, SyncDataResponse response, List<string> itemIds)
+ {
+ var users = request.OfflineUserIds
+ .Select(_userManager.GetUserById)
+ .Where(i => i != null)
+ .ToList();
+
+ foreach (var itemId in itemIds)
+ {
+ var item = _libraryManager.GetItemById(itemId);
+
+ if (item != null)
+ {
+ var usersWithAccess = new List<User>();
+
+ foreach (var user in users)
+ {
+ if (IsUserVisible(item, user))
+ {
+ usersWithAccess.Add(user);
+ }
+ }
+
+ response.ItemUserAccess[itemId] = users.Select(i => i.Id.ToString("N")).ToList();
+ }
+ }
+ }
+
+ private bool IsUserVisible(BaseItem item, User user)
+ {
+ return item.IsVisibleStandalone(user);
+ }
+
private bool IsLibraryItemAvailable(BaseItem item)
{
if (item == null)
@@ -724,6 +767,10 @@ namespace MediaBrowser.Server.Implementations.Sync
{
_fileSystem.DeleteDirectory(path, true);
}
+ catch (DirectoryNotFoundException)
+ {
+
+ }
catch (Exception ex)
{
_logger.ErrorException("Error deleting directory {0}", ex, path);
diff --git a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs
index a101f13eb..85317cb23 100644
--- a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs
+++ b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs
@@ -407,7 +407,6 @@ namespace MediaBrowser.Server.Implementations.Sync
if (!string.IsNullOrWhiteSpace(query.TargetId))
{
whereClauses.Add("TargetId=@TargetId");
- cmd.Parameters.Add(cmd, "@TargetId", DbType.String).Value = query.TargetId;
}
if (!string.IsNullOrWhiteSpace(query.UserId))
{
@@ -422,7 +421,7 @@ namespace MediaBrowser.Server.Implementations.Sync
var startIndex = query.StartIndex ?? 0;
if (startIndex > 0)
{
- whereClauses.Add(string.Format("Id NOT IN (SELECT Id FROM SyncJobs ORDER BY DateLastModified DESC LIMIT {0})",
+ whereClauses.Add(string.Format("Id NOT IN (SELECT Id FROM SyncJobs ORDER BY (Select Max(DateLastModified) from SyncJobs where TargetId=@TargetId) DESC, DateLastModified DESC LIMIT {0})",
startIndex.ToString(_usCulture)));
}
@@ -431,7 +430,8 @@ namespace MediaBrowser.Server.Implementations.Sync
cmd.CommandText += " where " + string.Join(" AND ", whereClauses.ToArray());
}
- cmd.CommandText += " ORDER BY DateLastModified DESC";
+ cmd.CommandText += " ORDER BY (Select Max(DateLastModified) from SyncJobs where TargetId=@TargetId) DESC, DateLastModified DESC";
+ cmd.Parameters.Add(cmd, "@TargetId", DbType.String).Value = query.TargetId;
if (query.Limit.HasValue)
{
diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec
index 271bc7864..3a5cf888d 100644
--- a/Nuget/MediaBrowser.Common.Internal.nuspec
+++ b/Nuget/MediaBrowser.Common.Internal.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MediaBrowser.Common.Internal</id>
- <version>3.0.551</version>
+ <version>3.0.552</version>
<title>MediaBrowser.Common.Internal</title>
<authors>Luke</authors>
<owners>ebr,Luke,scottisafool</owners>
@@ -12,7 +12,7 @@
<description>Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption.</description>
<copyright>Copyright © Media Browser 2013</copyright>
<dependencies>
- <dependency id="MediaBrowser.Common" version="3.0.551" />
+ <dependency id="MediaBrowser.Common" version="3.0.552" />
<dependency id="NLog" version="3.1.0.0" />
<dependency id="SimpleInjector" version="2.6.1" />
</dependencies>
diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec
index 31d2c918c..d879b37f1 100644
--- a/Nuget/MediaBrowser.Common.nuspec
+++ b/Nuget/MediaBrowser.Common.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MediaBrowser.Common</id>
- <version>3.0.551</version>
+ <version>3.0.552</version>
<title>MediaBrowser.Common</title>
<authors>Media Browser Team</authors>
<owners>ebr,Luke,scottisafool</owners>
diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec
index e202c66fa..04b6126bb 100644
--- a/Nuget/MediaBrowser.Model.Signed.nuspec
+++ b/Nuget/MediaBrowser.Model.Signed.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MediaBrowser.Model.Signed</id>
- <version>3.0.551</version>
+ <version>3.0.552</version>
<title>MediaBrowser.Model - Signed Edition</title>
<authors>Media Browser Team</authors>
<owners>ebr,Luke,scottisafool</owners>
diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec
index 34df8a854..443e07efe 100644
--- a/Nuget/MediaBrowser.Server.Core.nuspec
+++ b/Nuget/MediaBrowser.Server.Core.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>MediaBrowser.Server.Core</id>
- <version>3.0.551</version>
+ <version>3.0.552</version>
<title>Media Browser.Server.Core</title>
<authors>Media Browser Team</authors>
<owners>ebr,Luke,scottisafool</owners>
@@ -12,7 +12,7 @@
<description>Contains core components required to build plugins for Media Browser Server.</description>
<copyright>Copyright © Media Browser 2013</copyright>
<dependencies>
- <dependency id="MediaBrowser.Common" version="3.0.551" />
+ <dependency id="MediaBrowser.Common" version="3.0.552" />
</dependencies>
</metadata>
<files>