|
@@ -24,6 +24,7 @@ using MediaBrowser.Controller.Providers;
|
|
|
using MediaBrowser.Controller.Security;
|
|
|
using MediaBrowser.Controller.Session;
|
|
|
using MediaBrowser.Model.Configuration;
|
|
|
+using MediaBrowser.Model.Cryptography;
|
|
|
using MediaBrowser.Model.Dto;
|
|
|
using MediaBrowser.Model.Entities;
|
|
|
using MediaBrowser.Model.Events;
|
|
@@ -60,6 +61,7 @@ namespace Emby.Server.Implementations.Library
|
|
|
private readonly Func<IDtoService> _dtoServiceFactory;
|
|
|
private readonly IServerApplicationHost _appHost;
|
|
|
private readonly IFileSystem _fileSystem;
|
|
|
+ private readonly ICryptoProvider _cryptoProvider;
|
|
|
|
|
|
private ConcurrentDictionary<Guid, User> _users;
|
|
|
|
|
@@ -80,7 +82,8 @@ namespace Emby.Server.Implementations.Library
|
|
|
Func<IDtoService> dtoServiceFactory,
|
|
|
IServerApplicationHost appHost,
|
|
|
IJsonSerializer jsonSerializer,
|
|
|
- IFileSystem fileSystem)
|
|
|
+ IFileSystem fileSystem,
|
|
|
+ ICryptoProvider cryptoProvider)
|
|
|
{
|
|
|
_logger = logger;
|
|
|
_userRepository = userRepository;
|
|
@@ -91,6 +94,7 @@ namespace Emby.Server.Implementations.Library
|
|
|
_appHost = appHost;
|
|
|
_jsonSerializer = jsonSerializer;
|
|
|
_fileSystem = fileSystem;
|
|
|
+ _cryptoProvider = cryptoProvider;
|
|
|
_users = null;
|
|
|
}
|
|
|
|
|
@@ -475,24 +479,21 @@ namespace Emby.Server.Implementations.Library
|
|
|
|
|
|
if (!success
|
|
|
&& _networkManager.IsInLocalNetwork(remoteEndPoint)
|
|
|
- && user.Configuration.EnableLocalPassword)
|
|
|
+ && user.Configuration.EnableLocalPassword
|
|
|
+ && !string.IsNullOrEmpty(user.EasyPassword))
|
|
|
{
|
|
|
- success = string.Equals(
|
|
|
- GetLocalPasswordHash(user),
|
|
|
- _defaultAuthenticationProvider.GetHashedString(user, password),
|
|
|
- StringComparison.OrdinalIgnoreCase);
|
|
|
+ // Check easy password
|
|
|
+ var passwordHash = PasswordHash.Parse(user.EasyPassword);
|
|
|
+ var hash = _cryptoProvider.ComputeHash(
|
|
|
+ passwordHash.Id,
|
|
|
+ Encoding.UTF8.GetBytes(password),
|
|
|
+ passwordHash.Salt);
|
|
|
+ success = passwordHash.Hash.SequenceEqual(hash);
|
|
|
}
|
|
|
|
|
|
return (authenticationProvider, username, success);
|
|
|
}
|
|
|
|
|
|
- private string GetLocalPasswordHash(User user)
|
|
|
- {
|
|
|
- return string.IsNullOrEmpty(user.EasyPassword)
|
|
|
- ? null
|
|
|
- : ToHexString(PasswordHash.Parse(user.EasyPassword).Hash);
|
|
|
- }
|
|
|
-
|
|
|
private void ResetInvalidLoginAttemptCount(User user)
|
|
|
{
|
|
|
user.Policy.InvalidLoginAttemptCount = 0;
|