|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- //
- // File.swift
- //
- //
- // Created by Michiel Carman on 9/24/24.
- //
-
- import Vapor
- import Fluent
-
-
-
- final class Token: Model, Content, @unchecked Sendable {
- static let schema = "token"
-
- @ID()
- var id: UUID?
-
- @Parent(key: "user_id")
- var user: User
-
- @Field(key: "value")
- var value: String
-
-
- init() {}
-
- init(id: UUID? = nil, userId: User.IDValue, token: String) {
- self.id = id
- self.$user.id = userId
- self.value = token
- }
- }
-
- extension Token {
- static func generate(for user: User) throws -> Token {
- let random = [UInt8].random(count: 32).base64
- return try Token( userId: user.requireID(), token: random)
- }
- }
-
- extension Token: ModelTokenAuthenticatable {
- typealias User = App.User
-
- static var valueKey: KeyPath<Token, Field<String>> {
- return \Token.$value
- }
-
- static var userKey: KeyPath<Token, Parent<User>> {
- return \Token.$user
- }
-
- var isValid: Bool { true }
- }
|