mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-07-25 23:18:54 +02:00
Merge pull request #1406 from DrPandemic/fix-pin-update
Format the PIN when updating it
This commit is contained in:
commit
75260a960b
|
@ -165,6 +165,34 @@ namespace Emby.Server.Implementations.Library
|
||||||
return user.Password;
|
return user.Password;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ChangeEasyPassword(User user, string newPassword, string newPasswordHash)
|
||||||
|
{
|
||||||
|
ConvertPasswordFormat(user);
|
||||||
|
|
||||||
|
if (newPassword != null)
|
||||||
|
{
|
||||||
|
newPasswordHash = string.Format("$SHA1${0}", GetHashedString(user, newPassword));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(newPasswordHash))
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(newPasswordHash));
|
||||||
|
}
|
||||||
|
|
||||||
|
user.EasyPassword = newPasswordHash;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetEasyPasswordHash(User user)
|
||||||
|
{
|
||||||
|
// This should be removed in the future. This was added to let user login after
|
||||||
|
// Jellyfin 10.3.3 failed to save a well formatted PIN.
|
||||||
|
ConvertPasswordFormat(user);
|
||||||
|
|
||||||
|
return string.IsNullOrEmpty(user.EasyPassword)
|
||||||
|
? null
|
||||||
|
: (new PasswordHash(user.EasyPassword)).Hash;
|
||||||
|
}
|
||||||
|
|
||||||
public string GetHashedStringChangeAuth(string newPassword, PasswordHash passwordHash)
|
public string GetHashedStringChangeAuth(string newPassword, PasswordHash passwordHash)
|
||||||
{
|
{
|
||||||
passwordHash.HashBytes = Encoding.UTF8.GetBytes(newPassword);
|
passwordHash.HashBytes = Encoding.UTF8.GetBytes(newPassword);
|
||||||
|
|
|
@ -471,7 +471,7 @@ namespace Emby.Server.Implementations.Library
|
||||||
if (password == null)
|
if (password == null)
|
||||||
{
|
{
|
||||||
// legacy
|
// legacy
|
||||||
success = string.Equals(_defaultAuthenticationProvider.GetPasswordHash(user), hashedPassword.Replace("-", string.Empty), StringComparison.OrdinalIgnoreCase);
|
success = string.Equals(GetAuthenticationProvider(user).GetPasswordHash(user), hashedPassword.Replace("-", string.Empty), StringComparison.OrdinalIgnoreCase);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -497,11 +497,11 @@ namespace Emby.Server.Implementations.Library
|
||||||
if (password == null)
|
if (password == null)
|
||||||
{
|
{
|
||||||
// legacy
|
// legacy
|
||||||
success = string.Equals(GetLocalPasswordHash(user), hashedPassword.Replace("-", string.Empty), StringComparison.OrdinalIgnoreCase);
|
success = string.Equals(GetAuthenticationProvider(user).GetEasyPasswordHash(user), hashedPassword.Replace("-", string.Empty), StringComparison.OrdinalIgnoreCase);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
success = string.Equals(GetLocalPasswordHash(user), _defaultAuthenticationProvider.GetHashedString(user, password), StringComparison.OrdinalIgnoreCase);
|
success = string.Equals(GetAuthenticationProvider(user).GetEasyPasswordHash(user), _defaultAuthenticationProvider.GetHashedString(user, password), StringComparison.OrdinalIgnoreCase);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -546,13 +546,6 @@ namespace Emby.Server.Implementations.Library
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetLocalPasswordHash(User user)
|
|
||||||
{
|
|
||||||
return string.IsNullOrEmpty(user.EasyPassword)
|
|
||||||
? null
|
|
||||||
: (new PasswordHash(user.EasyPassword)).Hash;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Loads the users from the repository
|
/// Loads the users from the repository
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -596,7 +589,7 @@ namespace Emby.Server.Implementations.Library
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hasConfiguredPassword = GetAuthenticationProvider(user).HasPassword(user).Result;
|
bool hasConfiguredPassword = GetAuthenticationProvider(user).HasPassword(user).Result;
|
||||||
bool hasConfiguredEasyPassword = !string.IsNullOrEmpty(GetLocalPasswordHash(user));
|
bool hasConfiguredEasyPassword = !string.IsNullOrEmpty(GetAuthenticationProvider(user).GetEasyPasswordHash(user));
|
||||||
|
|
||||||
bool hasPassword = user.Configuration.EnableLocalPassword && !string.IsNullOrEmpty(remoteEndPoint) && _networkManager.IsInLocalNetwork(remoteEndPoint) ?
|
bool hasPassword = user.Configuration.EnableLocalPassword && !string.IsNullOrEmpty(remoteEndPoint) && _networkManager.IsInLocalNetwork(remoteEndPoint) ?
|
||||||
hasConfiguredEasyPassword :
|
hasConfiguredEasyPassword :
|
||||||
|
@ -884,17 +877,7 @@ namespace Emby.Server.Implementations.Library
|
||||||
throw new ArgumentNullException(nameof(user));
|
throw new ArgumentNullException(nameof(user));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newPassword != null)
|
GetAuthenticationProvider(user).ChangeEasyPassword(user, newPassword, newPasswordHash);
|
||||||
{
|
|
||||||
newPasswordHash = _defaultAuthenticationProvider.GetHashedString(user, newPassword);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(newPasswordHash))
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(newPasswordHash));
|
|
||||||
}
|
|
||||||
|
|
||||||
user.EasyPassword = newPasswordHash;
|
|
||||||
|
|
||||||
UpdateUser(user);
|
UpdateUser(user);
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,9 @@ namespace MediaBrowser.Controller.Authentication
|
||||||
Task<ProviderAuthenticationResult> Authenticate(string username, string password);
|
Task<ProviderAuthenticationResult> Authenticate(string username, string password);
|
||||||
Task<bool> HasPassword(User user);
|
Task<bool> HasPassword(User user);
|
||||||
Task ChangePassword(User user, string newPassword);
|
Task ChangePassword(User user, string newPassword);
|
||||||
|
void ChangeEasyPassword(User user, string newPassword, string newPasswordHash);
|
||||||
|
string GetPasswordHash(User user);
|
||||||
|
string GetEasyPasswordHash(User user);
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IRequiresResolvedUser
|
public interface IRequiresResolvedUser
|
||||||
|
|
Loading…
Reference in a new issue