namespace VPNAuth.Server.Database; public static class GarbageCollector { private static void CollectAuthRequests(Database db) { foreach (var authRequest in db.AuthRequests) { if ((DateTime.Now - authRequest.InitTime).TotalMinutes >= 5) db.AuthRequests.Remove(authRequest); } } private static void CollectTokens(Database db) { foreach (var accessToken in db.AccessTokens) { if ((DateTime.Now - accessToken.CreationTime).TotalDays >= 7) db.AccessTokens.Remove(accessToken); } } private static void CollectUserInformation(Database db) { Config config = Config.Read(); foreach (var dbUser in db.UserInformation) { if (config.Users!.All(configUser => configUser.Username != dbUser.Sub)) db.UserInformation.Remove(dbUser); } } public static void StartLoop() { while (true) { using (var db = new Database()) { CollectAuthRequests(db); CollectTokens(db); CollectUserInformation(db); db.SaveChanges(); } Task.Delay(60000).Wait(); // Wait 1 minute } } public static void StartLoopAsync() => new Task(StartLoop).Start(); }