|
- //
- // File.swift
- //
- //
- // Created by Michiel Carman on 9/24/24.
- //
-
- import Vapor
- import Fluent
-
- enum SessionSource: Int, Content {
- case signup
- case login
- }
-
- final class Token: Model {
- static let schema = "token"
-
- @ID()
- var id: UUID?
-
- @Parent(key: "user_id")
- var user: User
-
- @Field(key: "value")
- var value: String
-
- @Field(key: "source")
- var source: SessionSource
-
- @Field(key: "expires_at")
- var expiresAt: Date?
-
- @Timestamp(key: "created_at", on: .create)
- var createdAt: Date?
-
- init() {}
-
- init(id: UUID? = nil, userId: User.IDValue, token: String,
- source: SessionSource, expiresAt: Date?) {
- self.id = id
- self.$user.id = userId
- self.value = token
- self.source = source
- self.expiresAt = expiresAt
- }
- }
-
- extension Token: ModelTokenAuthenticatable {
- static let valueKey = \Token.$value
- static let userKey = \Token.$user
-
- var isValid: Bool {
- guard let expiryDate = expiresAt else {
- return true
- }
-
- return expiryDate > Date()
- }
- }
|