Bond_009 6 år sedan
förälder
incheckning
edfd2d0cd9

+ 6 - 5
Emby.Server.Implementations/ApplicationHost.cs

@@ -754,10 +754,6 @@ namespace Emby.Server.Implementations
             UserDataManager = new UserDataManager(LoggerFactory, ServerConfigurationManager, () => UserManager);
             serviceCollection.AddSingleton(UserDataManager);
 
-            UserRepository = GetUserRepository();
-            // This is only needed for disposal purposes. If removing this, make sure to have the manager handle disposing it
-            serviceCollection.AddSingleton(UserRepository);
-
             var displayPreferencesRepo = new SqliteDisplayPreferencesRepository(LoggerFactory, JsonSerializer, ApplicationPaths, FileSystemManager);
             serviceCollection.AddSingleton<IDisplayPreferencesRepository>(displayPreferencesRepo);
 
@@ -767,6 +763,8 @@ namespace Emby.Server.Implementations
             AuthenticationRepository = GetAuthenticationRepository();
             serviceCollection.AddSingleton(AuthenticationRepository);
 
+            UserRepository = GetUserRepository();
+
             UserManager = new UserManager(LoggerFactory, ServerConfigurationManager, UserRepository, XmlSerializer, NetworkManager, () => ImageProcessor, () => DtoService, this, JsonSerializer, FileSystemManager);
             serviceCollection.AddSingleton(UserManager);
 
@@ -807,7 +805,6 @@ namespace Emby.Server.Implementations
             serviceCollection.AddSingleton(TVSeriesManager);
 
             DeviceManager = new DeviceManager(AuthenticationRepository, JsonSerializer, LibraryManager, LocalizationManager, UserManager, FileSystemManager, LibraryMonitor, ServerConfigurationManager);
-
             serviceCollection.AddSingleton(DeviceManager);
 
             MediaSourceManager = new MediaSourceManager(ItemRepository, ApplicationPaths, LocalizationManager, UserManager, LibraryManager, LoggerFactory, JsonSerializer, FileSystemManager, UserDataManager, () => MediaEncoder);
@@ -1893,8 +1890,12 @@ namespace Emby.Server.Implementations
                         Logger.LogError(ex, "Error disposing {Type}", part.GetType().Name);
                     }
                 }
+
+                UserRepository.Dispose();
             }
 
+            UserRepository = null;
+
             _disposed = true;
         }
     }

+ 12 - 15
Emby.Server.Implementations/Data/SqliteUserRepository.cs

@@ -56,7 +56,7 @@ namespace Emby.Server.Implementations.Data
                     TryMigrateToLocalUsersTable(connection);
                 }
 
-                RemoveEmptyPasswordHashes();
+                RemoveEmptyPasswordHashes(connection);
             }
         }
 
@@ -75,10 +75,12 @@ namespace Emby.Server.Implementations.Data
             }
         }
 
-        private void RemoveEmptyPasswordHashes()
+        private void RemoveEmptyPasswordHashes(ManagedConnection connection)
         {
-            foreach (var user in RetrieveAllUsers())
+            foreach (var row in connection.Query("select id,guid,data from LocalUsersv2"))
             {
+                var user = GetUser(row);
+
                 // If the user password is the sha1 hash of the empty string, remove it
                 if (!string.Equals(user.Password, "DA39A3EE5E6B4B0D3255BFEF95601890AFD80709", StringComparison.Ordinal)
                     && !string.Equals(user.Password, "$SHA1$DA39A3EE5E6B4B0D3255BFEF95601890AFD80709", StringComparison.Ordinal))
@@ -89,21 +91,16 @@ namespace Emby.Server.Implementations.Data
                 user.Password = null;
                 var serialized = _jsonSerializer.SerializeToBytes(user);
 
-                using (var connection = GetConnection())
+                connection.RunInTransaction(db =>
                 {
-                    connection.RunInTransaction(db =>
+                    using (var statement = db.PrepareStatement("update LocalUsersv2 set data=@data where Id=@InternalId"))
                     {
-                        using (var statement = db.PrepareStatement("update LocalUsersv2 set data=@data where Id=@InternalId"))
-                        {
-                            statement.TryBind("@InternalId", user.InternalId);
-                            statement.TryBind("@data", serialized);
-                            statement.MoveNext();
-                        }
-
-                    }, TransactionMode);
-                }
+                        statement.TryBind("@InternalId", user.InternalId);
+                        statement.TryBind("@data", serialized);
+                        statement.MoveNext();
+                    }
+                }, TransactionMode);
             }
-
         }
 
         /// <summary>