aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Emby.Server.Implementations/Syncplay/SyncplayManager.cs41
-rw-r--r--MediaBrowser.Model/Configuration/SyncplayAccess.cs23
-rw-r--r--MediaBrowser.Model/Users/UserPolicy.cs7
3 files changed, 71 insertions, 0 deletions
diff --git a/Emby.Server.Implementations/Syncplay/SyncplayManager.cs b/Emby.Server.Implementations/Syncplay/SyncplayManager.cs
index f76d243d5..f6311d098 100644
--- a/Emby.Server.Implementations/Syncplay/SyncplayManager.cs
+++ b/Emby.Server.Implementations/Syncplay/SyncplayManager.cs
@@ -7,6 +7,7 @@ using Microsoft.Extensions.Logging;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Session;
using MediaBrowser.Controller.Syncplay;
+using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Syncplay;
namespace Emby.Server.Implementations.Syncplay
@@ -22,6 +23,11 @@ namespace Emby.Server.Implementations.Syncplay
private readonly ILogger _logger;
/// <summary>
+ /// The user manager.
+ /// </summary>
+ private readonly IUserManager _userManager;
+
+ /// <summary>
/// The session manager.
/// </summary>
private readonly ISessionManager _sessionManager;
@@ -42,9 +48,11 @@ namespace Emby.Server.Implementations.Syncplay
public SyncplayManager(
ILogger<SyncplayManager> logger,
+ IUserManager userManager,
ISessionManager sessionManager)
{
_logger = logger;
+ _userManager = userManager;
_sessionManager = sessionManager;
_sessionManager.SessionEnded += _sessionManager_SessionEnded;
@@ -125,8 +133,16 @@ namespace Emby.Server.Implementations.Syncplay
/// <inheritdoc />
public void NewGroup(SessionInfo session)
{
+ var user = _userManager.GetUserById(session.UserId);
+
+ if (user.Policy.SyncplayAccess != SyncplayAccess.CreateAndJoinGroups)
{
+ // TODO: shall an error message be sent back to the client?
+ return;
+ }
+
if (IsSessionInGroup(session))
+ {
LeaveGroup(session);
}
@@ -139,6 +155,14 @@ namespace Emby.Server.Implementations.Syncplay
/// <inheritdoc />
public void JoinGroup(SessionInfo session, string groupId)
{
+ var user = _userManager.GetUserById(session.UserId);
+
+ if (user.Policy.SyncplayAccess == SyncplayAccess.None)
+ {
+ // TODO: shall an error message be sent back to the client?
+ return;
+ }
+
if (IsSessionInGroup(session))
{
if (GetSessionGroup(session).Equals(groupId)) return;
@@ -163,6 +187,8 @@ namespace Emby.Server.Implementations.Syncplay
/// <inheritdoc />
public void LeaveGroup(SessionInfo session)
{
+ // TODO: what happens to users that are in a group and get their permissions revoked?
+
ISyncplayController group;
_sessionToGroupMap.TryGetValue(session.Id, out group);
@@ -186,6 +212,13 @@ namespace Emby.Server.Implementations.Syncplay
/// <inheritdoc />
public List<GroupInfoView> ListGroups(SessionInfo session)
{
+ var user = _userManager.GetUserById(session.UserId);
+
+ if (user.Policy.SyncplayAccess == SyncplayAccess.None)
+ {
+ return new List<GroupInfoView>();
+ }
+
// Filter by playing item if the user is viewing something already
if (session.NowPlayingItem != null)
{
@@ -207,6 +240,14 @@ namespace Emby.Server.Implementations.Syncplay
/// <inheritdoc />
public void HandleRequest(SessionInfo session, SyncplayRequestInfo request)
{
+ var user = _userManager.GetUserById(session.UserId);
+
+ if (user.Policy.SyncplayAccess == SyncplayAccess.None)
+ {
+ // TODO: same as LeaveGroup
+ return;
+ }
+
ISyncplayController group;
_sessionToGroupMap.TryGetValue(session.Id, out group);
diff --git a/MediaBrowser.Model/Configuration/SyncplayAccess.cs b/MediaBrowser.Model/Configuration/SyncplayAccess.cs
new file mode 100644
index 000000000..cddf68c42
--- /dev/null
+++ b/MediaBrowser.Model/Configuration/SyncplayAccess.cs
@@ -0,0 +1,23 @@
+namespace MediaBrowser.Model.Configuration
+{
+ /// <summary>
+ /// Enum SyncplayAccess.
+ /// </summary>
+ public enum SyncplayAccess
+ {
+ /// <summary>
+ /// User can create groups and join them.
+ /// </summary>
+ CreateAndJoinGroups,
+
+ /// <summary>
+ /// User can only join already existing groups.
+ /// </summary>
+ JoinGroups,
+
+ /// <summary>
+ /// Syncplay is disabled for the user.
+ /// </summary>
+ None
+ }
+}
diff --git a/MediaBrowser.Model/Users/UserPolicy.cs b/MediaBrowser.Model/Users/UserPolicy.cs
index ae2b3fd4e..cf576c358 100644
--- a/MediaBrowser.Model/Users/UserPolicy.cs
+++ b/MediaBrowser.Model/Users/UserPolicy.cs
@@ -80,6 +80,12 @@ namespace MediaBrowser.Model.Users
public string AuthenticationProviderId { get; set; }
public string PasswordResetProviderId { get; set; }
+ /// <summary>
+ /// Gets or sets a value indicating what Syncplay features the user can access.
+ /// </summary>
+ /// <value>Access level to Syncplay features.</value>
+ public SyncplayAccess SyncplayAccess { get; set; }
+
public UserPolicy()
{
IsHidden = true;
@@ -125,6 +131,7 @@ namespace MediaBrowser.Model.Users
EnableContentDownloading = true;
EnablePublicSharing = true;
EnableRemoteAccess = true;
+ SyncplayAccess = SyncplayAccess.CreateAndJoinGroups;
}
}
}