diff options
Diffstat (limited to 'VPNAuth.Server/Database')
-rw-r--r-- | VPNAuth.Server/Database/AccessToken.cs | 1 | ||||
-rw-r--r-- | VPNAuth.Server/Database/AuthRequest.cs | 1 | ||||
-rw-r--r-- | VPNAuth.Server/Database/GarbageCollector.cs | 52 |
3 files changed, 54 insertions, 0 deletions
diff --git a/VPNAuth.Server/Database/AccessToken.cs b/VPNAuth.Server/Database/AccessToken.cs index 3cdc3ba..bb8fe7d 100644 --- a/VPNAuth.Server/Database/AccessToken.cs +++ b/VPNAuth.Server/Database/AccessToken.cs @@ -7,4 +7,5 @@ public class AccessToken public string ClientId { get; set; } public DateTime CreationTime { get; set; } public List<string> Scopes { get; set; } + public string Username { get; set; } } diff --git a/VPNAuth.Server/Database/AuthRequest.cs b/VPNAuth.Server/Database/AuthRequest.cs index 98fe001..11c05dc 100644 --- a/VPNAuth.Server/Database/AuthRequest.cs +++ b/VPNAuth.Server/Database/AuthRequest.cs @@ -11,4 +11,5 @@ public class AuthRequest public string CodeChallenge { get; set; } public string CodeChallengeMethod { get; set; } public bool Accepted { get; set; } + public string Username { get; set; } } 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(); +} |