diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations/Library/UserManager.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Library/UserManager.cs | 72 |
1 files changed, 54 insertions, 18 deletions
diff --git a/MediaBrowser.Server.Implementations/Library/UserManager.cs b/MediaBrowser.Server.Implementations/Library/UserManager.cs index 3b6de5998..b51a9ee7c 100644 --- a/MediaBrowser.Server.Implementations/Library/UserManager.cs +++ b/MediaBrowser.Server.Implementations/Library/UserManager.cs @@ -1,7 +1,9 @@ using MediaBrowser.Common.Events; using MediaBrowser.Common.Extensions; +using MediaBrowser.Common.IO; using MediaBrowser.Common.Net; using MediaBrowser.Controller; +using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Connect; using MediaBrowser.Controller.Drawing; @@ -11,6 +13,7 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Channels; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Connect; using MediaBrowser.Model.Dto; @@ -69,9 +72,11 @@ namespace MediaBrowser.Server.Implementations.Library private readonly Func<IImageProcessor> _imageProcessorFactory; private readonly Func<IDtoService> _dtoServiceFactory; private readonly Func<IConnectManager> _connectFactory; + private readonly Func<IChannelManager> _channelManager; private readonly IServerApplicationHost _appHost; + private readonly IFileSystem _fileSystem; - public UserManager(ILogger logger, IServerConfigurationManager configurationManager, IUserRepository userRepository, IXmlSerializer xmlSerializer, INetworkManager networkManager, Func<IImageProcessor> imageProcessorFactory, Func<IDtoService> dtoServiceFactory, Func<IConnectManager> connectFactory, IServerApplicationHost appHost, IJsonSerializer jsonSerializer) + public UserManager(ILogger logger, IServerConfigurationManager configurationManager, IUserRepository userRepository, IXmlSerializer xmlSerializer, INetworkManager networkManager, Func<IImageProcessor> imageProcessorFactory, Func<IDtoService> dtoServiceFactory, Func<IConnectManager> connectFactory, IServerApplicationHost appHost, IJsonSerializer jsonSerializer, IFileSystem fileSystem, Func<IChannelManager> channelManager) { _logger = logger; UserRepository = userRepository; @@ -82,6 +87,8 @@ namespace MediaBrowser.Server.Implementations.Library _connectFactory = connectFactory; _appHost = appHost; _jsonSerializer = jsonSerializer; + _fileSystem = fileSystem; + _channelManager = channelManager; ConfigurationManager = configurationManager; Users = new List<User>(); @@ -165,6 +172,7 @@ namespace MediaBrowser.Server.Implementations.Library foreach (var user in users) { await DoPolicyMigration(user).ConfigureAwait(false); + await DoChannelMigration(user).ConfigureAwait(false); } // If there are no local users with admin rights, make them all admins @@ -204,7 +212,7 @@ namespace MediaBrowser.Server.Implementations.Library { return username; } - + // Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and periods (.) var builder = new StringBuilder(); @@ -329,22 +337,12 @@ namespace MediaBrowser.Server.Implementations.Library { if (!user.Configuration.HasMigratedToPolicy) { - user.Policy.AccessSchedules = user.Configuration.AccessSchedules; - user.Policy.BlockedChannels = user.Configuration.BlockedChannels; - user.Policy.BlockedMediaFolders = user.Configuration.BlockedMediaFolders; - user.Policy.BlockedTags = user.Configuration.BlockedTags; user.Policy.BlockUnratedItems = user.Configuration.BlockUnratedItems; user.Policy.EnableContentDeletion = user.Configuration.EnableContentDeletion; user.Policy.EnableLiveTvAccess = user.Configuration.EnableLiveTvAccess; user.Policy.EnableLiveTvManagement = user.Configuration.EnableLiveTvManagement; user.Policy.EnableMediaPlayback = user.Configuration.EnableMediaPlayback; - user.Policy.EnableRemoteControlOfOtherUsers = user.Configuration.EnableRemoteControlOfOtherUsers; - user.Policy.EnableSharedDeviceControl = user.Configuration.EnableSharedDeviceControl; - user.Policy.EnableUserPreferenceAccess = user.Configuration.EnableUserPreferenceAccess; user.Policy.IsAdministrator = user.Configuration.IsAdministrator; - user.Policy.IsDisabled = user.Configuration.IsDisabled; - user.Policy.IsHidden = user.Configuration.IsHidden; - user.Policy.MaxParentalRating = user.Configuration.MaxParentalRating; await UpdateUserPolicy(user, user.Policy, false); @@ -353,6 +351,44 @@ namespace MediaBrowser.Server.Implementations.Library } } + private async Task DoChannelMigration(User user) + { + if (user.Policy.BlockedChannels != null) + { + if (user.Policy.BlockedChannels.Length > 0) + { + user.Policy.EnableAllChannels = false; + + try + { + var channelResult = await _channelManager().GetChannelsInternal(new ChannelQuery + { + UserId = user.Id.ToString("N") + + }, CancellationToken.None).ConfigureAwait(false); + + user.Policy.EnabledChannels = channelResult.Items + .Select(i => i.Id.ToString("N")) + .Except(user.Policy.BlockedChannels) + .ToArray(); + } + catch + { + user.Policy.EnabledChannels = new string[] { }; + } + } + else + { + user.Policy.EnableAllChannels = true; + user.Policy.EnabledChannels = new string[] { }; + } + + user.Policy.BlockedChannels = null; + + await UpdateUserPolicy(user, user.Policy, false); + } + } + public UserDto GetUserDto(User user, string remoteEndPoint = null) { if (user == null) @@ -591,7 +627,7 @@ namespace MediaBrowser.Server.Implementations.Library try { - File.Delete(configPath); + _fileSystem.DeleteFile(configPath); } catch (IOException ex) { @@ -817,7 +853,7 @@ namespace MediaBrowser.Server.Implementations.Library { try { - File.Delete(PasswordResetFile); + _fileSystem.DeleteFile(PasswordResetFile); } catch { @@ -881,7 +917,7 @@ namespace MediaBrowser.Server.Implementations.Library var json = _jsonSerializer.SerializeToString(userPolicy); userPolicy = _jsonSerializer.DeserializeFromString<UserPolicy>(json); } - + var path = GetPolifyFilePath(user); Directory.CreateDirectory(Path.GetDirectoryName(path)); @@ -909,7 +945,7 @@ namespace MediaBrowser.Server.Implementations.Library { lock (_policySyncLock) { - File.Delete(path); + _fileSystem.DeleteFile(path); } } catch (IOException) @@ -971,14 +1007,14 @@ namespace MediaBrowser.Server.Implementations.Library var path = GetConfigurationFilePath(user); // The xml serializer will output differently if the type is not exact - if (config.GetType() != typeof (UserConfiguration)) + if (config.GetType() != typeof(UserConfiguration)) { var json = _jsonSerializer.SerializeToString(config); config = _jsonSerializer.DeserializeFromString<UserConfiguration>(json); } Directory.CreateDirectory(Path.GetDirectoryName(path)); - + lock (_configSyncLock) { _xmlSerializer.SerializeToFile(config, path); |
