diff --git a/Jellyfin.Data/Entities/Preference.cs b/Jellyfin.Data/Entities/Preference.cs
index 56a07d4401..0ca9d7eff4 100644
--- a/Jellyfin.Data/Entities/Preference.cs
+++ b/Jellyfin.Data/Entities/Preference.cs
@@ -35,30 +35,42 @@ namespace Jellyfin.Data.Entities
*************************************************************************/
///
- /// Identity, Indexed, Required
+ /// Gets or sets the id of this preference.
///
+ ///
+ /// Identity, Indexed, Required.
+ ///
[Key]
[Required]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; protected set; }
///
- /// Required
+ /// Gets or sets the type of this preference.
///
+ ///
+ /// Required.
+ ///
[Required]
- public PreferenceKind Kind { get; set; }
+ public PreferenceKind Kind { get; protected set; }
///
- /// Required, Max length = 65535
+ /// Gets or sets the value of this preference.
///
+ ///
+ /// Required, Max length = 65535.
+ ///
[Required]
[MaxLength(65535)]
[StringLength(65535)]
public string Value { get; set; }
///
- /// Required, ConcurrencyToken.
+ /// Gets or sets the row version.
///
+ ///
+ /// Required, ConcurrencyToken.
+ ///
[ConcurrencyCheck]
[Required]
public uint RowVersion { get; set; }
@@ -81,4 +93,3 @@ namespace Jellyfin.Data.Entities
}
}
}
-
diff --git a/Jellyfin.Data/Enums/PermissionKind.cs b/Jellyfin.Data/Enums/PermissionKind.cs
index df18261e61..8b1472f976 100644
--- a/Jellyfin.Data/Enums/PermissionKind.cs
+++ b/Jellyfin.Data/Enums/PermissionKind.cs
@@ -1,27 +1,113 @@
namespace Jellyfin.Data.Enums
{
+ ///
+ /// The types of user permissions.
+ ///
public enum PermissionKind
{
+ ///
+ /// Whether the user is an administrator.
+ ///
IsAdministrator,
+
+ ///
+ /// Whether the user is hidden.
+ ///
IsHidden,
+
+ ///
+ /// Whether the user is disabled.
+ ///
IsDisabled,
+
+ ///
+ /// Whether the user can control shared devices.
+ ///
EnableSharedDeviceControl,
+
+ ///
+ /// Whether the user can access the server remotely.
+ ///
EnableRemoteAccess,
+
+ ///
+ /// Whether the user can manage live tv.
+ ///
EnableLiveTvManagement,
+
+ ///
+ /// Whether the user can access live tv.
+ ///
EnableLiveTvAccess,
+
+ ///
+ /// Whether the user can play media.
+ ///
EnableMediaPlayback,
+
+ ///
+ /// Whether the server should transcode audio for the user if requested.
+ ///
EnableAudioPlaybackTranscoding,
+
+ ///
+ /// Whether the server should transcode video for the user if requested.
+ ///
EnableVideoPlaybackTranscoding,
+
+ ///
+ /// Whether the user can delete content.
+ ///
EnableContentDeletion,
+
+ ///
+ /// Whether the user can download content.
+ ///
EnableContentDownloading,
+
+ ///
+ /// Whether to enable sync transcoding for the user.
+ ///
EnableSyncTranscoding,
+
+ ///
+ /// Whether the user can do media conversion.
+ ///
EnableMediaConversion,
+
+ ///
+ /// Whether the user has access to all devices.
+ ///
EnableAllDevices,
+
+ ///
+ /// Whether the user has access to all channels.
+ ///
EnableAllChannels,
+
+ ///
+ /// Whether the user has access to all folders.
+ ///
EnableAllFolders,
+
+ ///
+ /// Whether to enable public sharing for the user.
+ ///
EnablePublicSharing,
+
+ ///
+ /// Whether the user can remotely control other users.
+ ///
EnableRemoteControlOfOtherUsers,
+
+ ///
+ /// Whether the user is permitted to do playback remuxing.
+ ///
EnablePlaybackRemuxing,
+
+ ///
+ /// Whether the server should force transcoding on remote connections for the user.
+ ///
ForceRemoteSourceTranscoding
}
}
diff --git a/Jellyfin.Data/Enums/PreferenceKind.cs b/Jellyfin.Data/Enums/PreferenceKind.cs
index ea1221e1af..e0e9cfe048 100644
--- a/Jellyfin.Data/Enums/PreferenceKind.cs
+++ b/Jellyfin.Data/Enums/PreferenceKind.cs
@@ -1,18 +1,68 @@
namespace Jellyfin.Data.Enums
{
+ ///
+ /// The types of user preferences.
+ ///
public enum PreferenceKind
{
+ ///
+ /// A list of blocked tags.
+ ///
BlockedTags,
+
+ ///
+ /// A list of blocked channels.
+ ///
BlockedChannels,
+
+ ///
+ /// A list of blocked media folders.
+ ///
BlockedMediaFolders,
+
+ ///
+ /// A list of enabled devices.
+ ///
EnabledDevices,
+
+ ///
+ /// A list of enabled channels
+ ///
EnabledChannels,
+
+ ///
+ /// A list of enabled folders.
+ ///
EnabledFolders,
+
+ ///
+ /// A list of folders to allow content deletion from.
+ ///
EnableContentDeletionFromFolders,
+
+ ///
+ /// A list of latest items to exclude.
+ ///
LatestItemExcludes,
+
+ ///
+ /// A list of media to exclude.
+ ///
MyMediaExcludes,
+
+ ///
+ /// A list of grouped folders.
+ ///
GroupedFolders,
+
+ ///
+ /// A list of unrated items to block.
+ ///
BlockUnratedItems,
+
+ ///
+ /// A list of ordered views.
+ ///
OrderedViews
}
}
diff --git a/Jellyfin.Server.Implementations/Users/UserManager.cs b/Jellyfin.Server.Implementations/Users/UserManager.cs
index 2d0caee296..2915741555 100644
--- a/Jellyfin.Server.Implementations/Users/UserManager.cs
+++ b/Jellyfin.Server.Implementations/Users/UserManager.cs
@@ -1,5 +1,4 @@
#pragma warning disable CA1307
-#pragma warning disable CS1591
using System;
using System.Collections.Generic;
@@ -26,6 +25,9 @@ using Microsoft.Extensions.Logging;
namespace Jellyfin.Server.Implementations.Users
{
+ ///
+ /// Manages the creation and retrieval of instances.
+ ///
public class UserManager : IUserManager
{
private readonly JellyfinDbProvider _dbProvider;
@@ -41,6 +43,15 @@ namespace Jellyfin.Server.Implementations.Users
private IPasswordResetProvider[] _passwordResetProviders;
private DefaultPasswordResetProvider _defaultPasswordResetProvider;
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The database provider.
+ /// The cryptography provider.
+ /// The network manager.
+ /// The application host.
+ /// The image processor.
+ /// The logger.
public UserManager(
JellyfinDbProvider dbProvider,
ICryptoProvider cryptoProvider,
@@ -57,6 +68,7 @@ namespace Jellyfin.Server.Implementations.Users
_logger = logger;
}
+ ///
public event EventHandler> OnUserPasswordChanged;
///
@@ -68,8 +80,10 @@ namespace Jellyfin.Server.Implementations.Users
///
public event EventHandler> OnUserDeleted;
+ ///
public event EventHandler> OnUserLockedOut;
+ ///
public IEnumerable Users
{
get
@@ -79,6 +93,7 @@ namespace Jellyfin.Server.Implementations.Users
}
}
+ ///
public IEnumerable UsersIds
{
get
@@ -88,6 +103,7 @@ namespace Jellyfin.Server.Implementations.Users
}
}
+ ///
public User GetUserById(Guid id)
{
if (id == Guid.Empty)
@@ -100,6 +116,7 @@ namespace Jellyfin.Server.Implementations.Users
return dbContext.Users.Find(id);
}
+ ///
public User GetUserByName(string name)
{
if (string.IsNullOrWhiteSpace(name))
@@ -114,6 +131,7 @@ namespace Jellyfin.Server.Implementations.Users
return dbContext.Users.FirstOrDefault(u => string.Equals(u.Username, name));
}
+ ///
public async Task RenameUser(User user, string newName)
{
if (user == null)
@@ -145,6 +163,7 @@ namespace Jellyfin.Server.Implementations.Users
OnUserUpdated?.Invoke(this, new GenericEventArgs(user));
}
+ ///
public void UpdateUser(User user)
{
var dbContext = _dbProvider.CreateContext();
@@ -152,6 +171,7 @@ namespace Jellyfin.Server.Implementations.Users
dbContext.SaveChanges();
}
+ ///
public async Task UpdateUserAsync(User user)
{
var dbContext = _dbProvider.CreateContext();
@@ -160,6 +180,7 @@ namespace Jellyfin.Server.Implementations.Users
await dbContext.SaveChangesAsync().ConfigureAwait(false);
}
+ ///
public User CreateUser(string name)
{
if (!IsValidUsername(name))
@@ -178,6 +199,7 @@ namespace Jellyfin.Server.Implementations.Users
return newUser;
}
+ ///
public void DeleteUser(User user)
{
if (user == null)
@@ -220,16 +242,19 @@ namespace Jellyfin.Server.Implementations.Users
OnUserDeleted?.Invoke(this, new GenericEventArgs(user));
}
+ ///
public Task ResetPassword(User user)
{
return ChangePassword(user, string.Empty);
}
+ ///
public void ResetEasyPassword(User user)
{
ChangeEasyPassword(user, string.Empty, null);
}
+ ///
public async Task ChangePassword(User user, string newPassword)
{
if (user == null)
@@ -243,6 +268,7 @@ namespace Jellyfin.Server.Implementations.Users
OnUserPasswordChanged?.Invoke(this, new GenericEventArgs(user));
}
+ ///
public void ChangeEasyPassword(User user, string newPassword, string newPasswordSha1)
{
GetAuthenticationProvider(user).ChangeEasyPassword(user, newPassword, newPasswordSha1);
@@ -251,6 +277,7 @@ namespace Jellyfin.Server.Implementations.Users
OnUserPasswordChanged?.Invoke(this, new GenericEventArgs(user));
}
+ ///
public UserDto GetUserDto(User user, string remoteEndPoint = null)
{
return new UserDto
@@ -321,6 +348,7 @@ namespace Jellyfin.Server.Implementations.Users
};
}
+ ///
public PublicUserDto GetPublicUserDto(User user, string remoteEndPoint = null)
{
if (user == null)
@@ -343,6 +371,7 @@ namespace Jellyfin.Server.Implementations.Users
};
}
+ ///
public async Task AuthenticateUser(
string username,
string password,
@@ -469,6 +498,7 @@ namespace Jellyfin.Server.Implementations.Users
return success ? user : null;
}
+ ///
public async Task StartForgotPasswordProcess(string enteredUsername, bool isInNetwork)
{
var user = string.IsNullOrWhiteSpace(enteredUsername) ? null : GetUserByName(enteredUsername);
@@ -488,6 +518,7 @@ namespace Jellyfin.Server.Implementations.Users
};
}
+ ///
public async Task RedeemPasswordResetPin(string pin)
{
foreach (var provider in _passwordResetProviders)
@@ -507,6 +538,7 @@ namespace Jellyfin.Server.Implementations.Users
};
}
+ ///
public void AddParts(IEnumerable authenticationProviders, IEnumerable passwordResetProviders)
{
_authenticationProviders = authenticationProviders.ToArray();
@@ -517,6 +549,7 @@ namespace Jellyfin.Server.Implementations.Users
_defaultPasswordResetProvider = _passwordResetProviders.OfType().First();
}
+ ///
public NameIdPair[] GetAuthenticationProviders()
{
return _authenticationProviders
@@ -531,6 +564,7 @@ namespace Jellyfin.Server.Implementations.Users
.ToArray();
}
+ ///
public NameIdPair[] GetPasswordResetProviders()
{
return _passwordResetProviders
@@ -545,6 +579,7 @@ namespace Jellyfin.Server.Implementations.Users
.ToArray();
}
+ ///
public void UpdateConfiguration(Guid userId, UserConfiguration config)
{
var user = GetUserById(userId);
@@ -568,6 +603,7 @@ namespace Jellyfin.Server.Implementations.Users
UpdateUser(user);
}
+ ///
public void UpdatePolicy(Guid userId, UserPolicy policy)
{
var user = GetUserById(userId);