25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

61 lines
1.0 KiB

  1. //
  2. // File.swift
  3. //
  4. //
  5. // Created by Michiel Carman on 9/24/24.
  6. //
  7. import Vapor
  8. import Fluent
  9. enum SessionSource: Int, Content {
  10. case signup
  11. case login
  12. }
  13. final class Token: Model {
  14. static let schema = "token"
  15. @ID()
  16. var id: UUID?
  17. @Parent(key: "user_id")
  18. var user: User
  19. @Field(key: "value")
  20. var value: String
  21. @Field(key: "source")
  22. var source: SessionSource
  23. @Field(key: "expires_at")
  24. var expiresAt: Date?
  25. @Timestamp(key: "created_at", on: .create)
  26. var createdAt: Date?
  27. init() {}
  28. init(id: UUID? = nil, userId: User.IDValue, token: String,
  29. source: SessionSource, expiresAt: Date?) {
  30. self.id = id
  31. self.$user.id = userId
  32. self.value = token
  33. self.source = source
  34. self.expiresAt = expiresAt
  35. }
  36. }
  37. extension Token: ModelTokenAuthenticatable {
  38. static let valueKey = \Token.$value
  39. static let userKey = \Token.$user
  40. var isValid: Bool {
  41. guard let expiryDate = expiresAt else {
  42. return true
  43. }
  44. return expiryDate > Date()
  45. }
  46. }