support lockout after several unsuccessful login attempts

This commit is contained in:
Luke Pulverenti 2015-02-28 08:43:06 -05:00
parent 2bf2d5fd76
commit 42b07f0e03
2 changed files with 21 additions and 21 deletions

View File

@ -33,20 +33,12 @@ namespace MediaBrowser.Model.Configuration
public bool DisplayMissingEpisodes { get; set; } public bool DisplayMissingEpisodes { get; set; }
public bool DisplayUnairedEpisodes { get; set; } public bool DisplayUnairedEpisodes { get; set; }
public bool EnableLiveTvManagement { get; set; }
public bool EnableLiveTvAccess { get; set; }
public bool EnableMediaPlayback { get; set; }
public bool EnableContentDeletion { get; set; }
public bool GroupMoviesIntoBoxSets { get; set; } public bool GroupMoviesIntoBoxSets { get; set; }
public string[] DisplayChannelsWithinViews { get; set; } public string[] DisplayChannelsWithinViews { get; set; }
public string[] ExcludeFoldersFromGrouping { get; set; } public string[] ExcludeFoldersFromGrouping { get; set; }
public UnratedItem[] BlockUnratedItems { get; set; }
public SubtitlePlaybackMode SubtitleMode { get; set; } public SubtitlePlaybackMode SubtitleMode { get; set; }
public bool DisplayCollectionsView { get; set; } public bool DisplayCollectionsView { get; set; }
public bool DisplayFoldersView { get; set; } public bool DisplayFoldersView { get; set; }
@ -69,14 +61,10 @@ namespace MediaBrowser.Model.Configuration
public UserConfiguration() public UserConfiguration()
{ {
PlayDefaultAudioTrack = true; PlayDefaultAudioTrack = true;
EnableLiveTvManagement = true;
EnableMediaPlayback = true;
EnableLiveTvAccess = true;
LatestItemsExcludes = new string[] { }; LatestItemsExcludes = new string[] { };
OrderedViews = new string[] { }; OrderedViews = new string[] { };
DisplayChannelsWithinViews = new string[] { }; DisplayChannelsWithinViews = new string[] { };
BlockUnratedItems = new UnratedItem[] { };
ExcludeFoldersFromGrouping = new string[] { }; ExcludeFoldersFromGrouping = new string[] { };
DisplayCollectionsView = true; DisplayCollectionsView = true;

View File

@ -259,6 +259,11 @@ namespace MediaBrowser.Server.Implementations.Library
{ {
user.LastActivityDate = user.LastLoginDate = DateTime.UtcNow; user.LastActivityDate = user.LastLoginDate = DateTime.UtcNow;
await UpdateUser(user).ConfigureAwait(false); await UpdateUser(user).ConfigureAwait(false);
await UpdateInvalidLoginAttemptCount(user, 0).ConfigureAwait(false);
}
else
{
await UpdateInvalidLoginAttemptCount(user, user.Policy.InvalidLoginAttemptCount + 1).ConfigureAwait(false);
} }
_logger.Info("Authentication request for {0} {1}.", user.Name, (success ? "has succeeded" : "has been denied")); _logger.Info("Authentication request for {0} {1}.", user.Name, (success ? "has succeeded" : "has been denied"));
@ -266,6 +271,22 @@ namespace MediaBrowser.Server.Implementations.Library
return success; return success;
} }
private async Task UpdateInvalidLoginAttemptCount(User user, int newValue)
{
if (user.Policy.InvalidLoginAttemptCount != newValue || newValue > 0)
{
user.Policy.InvalidLoginAttemptCount = newValue;
if (newValue >= 3)
{
_logger.Debug("Disabling user {0} due to {1} unsuccessful login attempts.", user.Name, newValue.ToString(CultureInfo.InvariantCulture));
user.Policy.IsDisabled = true;
}
await UpdateUserPolicy(user, user.Policy, false).ConfigureAwait(false);
}
}
private string GetPasswordHash(User user) private string GetPasswordHash(User user)
{ {
return string.IsNullOrEmpty(user.Password) return string.IsNullOrEmpty(user.Password)
@ -332,11 +353,6 @@ namespace MediaBrowser.Server.Implementations.Library
{ {
if (!user.Configuration.HasMigratedToPolicy) if (!user.Configuration.HasMigratedToPolicy)
{ {
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.IsAdministrator = user.Configuration.IsAdministrator; user.Policy.IsAdministrator = user.Configuration.IsAdministrator;
await UpdateUserPolicy(user, user.Policy, false); await UpdateUserPolicy(user, user.Policy, false);
@ -915,10 +931,6 @@ namespace MediaBrowser.Server.Implementations.Library
} }
user.Configuration.IsAdministrator = user.Policy.IsAdministrator; user.Configuration.IsAdministrator = user.Policy.IsAdministrator;
user.Configuration.EnableLiveTvManagement = user.Policy.EnableLiveTvManagement;
user.Configuration.EnableLiveTvAccess = user.Policy.EnableLiveTvAccess;
user.Configuration.EnableMediaPlayback = user.Policy.EnableMediaPlayback;
user.Configuration.EnableContentDeletion = user.Policy.EnableContentDeletion;
await UpdateConfiguration(user, user.Configuration, true).ConfigureAwait(false); await UpdateConfiguration(user, user.Configuration, true).ConfigureAwait(false);
} }