Skip to content

Commit cfc8655

Browse files
committed
Clear expired tokens
1 parent d362125 commit cfc8655

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
lines changed

Sources/Grodt/Application/routes.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,11 @@ func routes(_ app: Application) async throws {
8484
.daily()
8585
.at(3, 0)
8686
app.queues.add(LoggingJobEventDelegate(logger: app.logger))
87+
88+
let userTokenCleanerJob = UserTokenClearUpJob(userTokenClearing: UserTokenClearer(database: app.db))
89+
app.queues.schedule(userTokenCleanerJob)
90+
.hourly()
91+
8792
try app.queues.startScheduledJobs()
8893
try app.queues.startInProcessJobs()
8994
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import Vapor
2+
import Queues
3+
4+
struct UserTokenClearUpJob: AsyncScheduledJob, @unchecked Sendable {
5+
private let userTokenClearer: UserTokenClearing
6+
7+
init(userTokenClearing: UserTokenClearing) {
8+
self.userTokenClearer = userTokenClearing
9+
}
10+
11+
func run(context: Queues.QueueContext) async throws {
12+
try await userTokenClearer.clearExpiredTokens()
13+
}
14+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import Fluent
2+
import Foundation
3+
4+
protocol UserTokenClearing {
5+
func clearExpiredTokens() async throws
6+
}
7+
8+
class UserTokenClearer: UserTokenClearing {
9+
private let database: Database
10+
11+
init(database: Database) {
12+
self.database = database
13+
}
14+
15+
func clearExpiredTokens() async throws {
16+
let allTokens = try await UserToken.query(on: database).all()
17+
let expiredTokens = allTokens.filter { !$0.isValid }
18+
for token in expiredTokens {
19+
try await token.delete(on: database)
20+
}
21+
}
22+
}

0 commit comments

Comments
 (0)