diff options
Diffstat (limited to 'VPNAuth.Server/Database')
-rw-r--r-- | VPNAuth.Server/Database/GarbageCollector.cs | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/VPNAuth.Server/Database/GarbageCollector.cs b/VPNAuth.Server/Database/GarbageCollector.cs new file mode 100644 index 0000000..c15f5a6 --- /dev/null +++ b/VPNAuth.Server/Database/GarbageCollector.cs @@ -0,0 +1,52 @@ +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(); +} |