AuthenticationFailedLogger.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System;
  2. using System.Globalization;
  3. using System.Threading.Tasks;
  4. using Jellyfin.Data.Entities;
  5. using Jellyfin.Data.Events;
  6. using MediaBrowser.Controller.Events;
  7. using MediaBrowser.Controller.Session;
  8. using MediaBrowser.Model.Activity;
  9. using MediaBrowser.Model.Globalization;
  10. using Microsoft.Extensions.Logging;
  11. namespace Jellyfin.Server.Implementations.Events.Consumers.Security
  12. {
  13. /// <summary>
  14. /// Creates an entry in the activity log when there is a failed login attempt.
  15. /// </summary>
  16. public class AuthenticationFailedLogger : IEventConsumer<GenericEventArgs<AuthenticationRequest>>
  17. {
  18. private readonly ILocalizationManager _localizationManager;
  19. private readonly IActivityManager _activityManager;
  20. /// <summary>
  21. /// Initializes a new instance of the <see cref="AuthenticationFailedLogger"/> class.
  22. /// </summary>
  23. /// <param name="localizationManager">The localization manager.</param>
  24. /// <param name="activityManager">The activity manager.</param>
  25. public AuthenticationFailedLogger(ILocalizationManager localizationManager, IActivityManager activityManager)
  26. {
  27. _localizationManager = localizationManager;
  28. _activityManager = activityManager;
  29. }
  30. /// <inheritdoc />
  31. public async Task OnEvent(GenericEventArgs<AuthenticationRequest> eventArgs)
  32. {
  33. await _activityManager.CreateAsync(new ActivityLog(
  34. string.Format(
  35. CultureInfo.InvariantCulture,
  36. _localizationManager.GetLocalizedString("FailedLoginAttemptWithUserName"),
  37. eventArgs.Argument.Username),
  38. "AuthenticationFailed",
  39. Guid.Empty)
  40. {
  41. LogSeverity = LogLevel.Error,
  42. ShortOverview = string.Format(
  43. CultureInfo.InvariantCulture,
  44. _localizationManager.GetLocalizedString("LabelIpAddressValue"),
  45. eventArgs.Argument.RemoteEndPoint),
  46. }).ConfigureAwait(false);
  47. }
  48. }
  49. }