aboutsummaryrefslogtreecommitdiff
path: root/VPNAuth.Server/Database
diff options
context:
space:
mode:
Diffstat (limited to 'VPNAuth.Server/Database')
-rw-r--r--VPNAuth.Server/Database/AccessToken.cs1
-rw-r--r--VPNAuth.Server/Database/AuthRequest.cs1
-rw-r--r--VPNAuth.Server/Database/GarbageCollector.cs52
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();
+}