DeviceAccessEntryPoint.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #nullable enable
  2. #pragma warning disable CS1591
  3. using System.Threading.Tasks;
  4. using Jellyfin.Data.Entities;
  5. using Jellyfin.Data.Enums;
  6. using Jellyfin.Data.Events;
  7. using MediaBrowser.Controller.Devices;
  8. using MediaBrowser.Controller.Library;
  9. using MediaBrowser.Controller.Plugins;
  10. using MediaBrowser.Controller.Security;
  11. using MediaBrowser.Controller.Session;
  12. namespace Jellyfin.Server.Implementations.Users
  13. {
  14. public sealed class DeviceAccessEntryPoint : IServerEntryPoint
  15. {
  16. private readonly IUserManager _userManager;
  17. private readonly IAuthenticationRepository _authRepo;
  18. private readonly IDeviceManager _deviceManager;
  19. private readonly ISessionManager _sessionManager;
  20. public DeviceAccessEntryPoint(IUserManager userManager, IAuthenticationRepository authRepo, IDeviceManager deviceManager, ISessionManager sessionManager)
  21. {
  22. _userManager = userManager;
  23. _authRepo = authRepo;
  24. _deviceManager = deviceManager;
  25. _sessionManager = sessionManager;
  26. }
  27. public Task RunAsync()
  28. {
  29. _userManager.OnUserUpdated += OnUserUpdated;
  30. return Task.CompletedTask;
  31. }
  32. public void Dispose()
  33. {
  34. }
  35. private void OnUserUpdated(object? sender, GenericEventArgs<User> e)
  36. {
  37. var user = e.Argument;
  38. if (!user.HasPermission(PermissionKind.EnableAllDevices))
  39. {
  40. UpdateDeviceAccess(user);
  41. }
  42. }
  43. private void UpdateDeviceAccess(User user)
  44. {
  45. var existing = _authRepo.Get(new AuthenticationInfoQuery
  46. {
  47. UserId = user.Id
  48. }).Items;
  49. foreach (var authInfo in existing)
  50. {
  51. if (!string.IsNullOrEmpty(authInfo.DeviceId) && !_deviceManager.CanAccessDevice(user, authInfo.DeviceId))
  52. {
  53. _sessionManager.Logout(authInfo);
  54. }
  55. }
  56. }
  57. }
  58. }