Advertisement
Guest User

Untitled

a guest
Nov 25th, 2016
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.52 KB | None | 0 0
  1. import Vapor
  2. import Auth
  3. import Turnstile
  4. import TurnstileCrypto
  5.  
  6. final class User: Model{
  7. var id: Node?
  8. var name: String?
  9. var exists: Bool = false
  10. var username: String
  11. var password: String
  12.  
  13. enum Error: Swift.Error {
  14. case userNotFound
  15. case registerNotSupported
  16. case unsupportedCredentials
  17. }
  18.  
  19. init(credentials: UsernamePassword){
  20. self.username = credentials.username
  21. self.password = BCrypt.hash(password: credentials.password)
  22. }
  23.  
  24.  
  25. init(node: Node, in context: Context) throws {
  26. self.id = nil
  27. self.name = try node.extract("name")
  28. self.username = try node.extract("username")
  29. self.password = try node.extract("password")
  30.  
  31.  
  32. }
  33.  
  34. func makeNode(context: Context) throws -> Node {
  35. return try Node(node: [
  36. "id": id,
  37. "name": name,
  38. "username": username,
  39. "password": password
  40. ])
  41. }
  42.  
  43. static func prepare(_ database: Database) throws {
  44. try database.create("users"){ users in
  45. users.id()
  46. users.string("name", optional:true)
  47. users.string("password")
  48. users.string("username")
  49. }
  50. }
  51.  
  52. static func revert(_ database: Database) throws {
  53. try database.delete("users")
  54. }
  55. }
  56.  
  57. import Auth
  58.  
  59. extension User: Auth.User {
  60.  
  61.  
  62.  
  63. static func register(credentials: Credentials) throws -> Auth.User {
  64. var newUser: User
  65.  
  66. switch credentials {
  67. case let credentials as UsernamePassword:
  68. newUser = User(credentials: credentials)
  69. print(newUser)
  70. default:
  71. let type1 = type(of: credentials)
  72.  
  73. throw Abort.custom(status: .forbidden, message: "Unsupported credential type: \(type1).")
  74. }
  75.  
  76. if try User.query().filter("username", newUser.username).first() == nil {
  77. print(newUser.username)
  78.  
  79. try newUser.save()
  80. return newUser
  81. } else {
  82. throw AccountTakenError()
  83. }
  84.  
  85. }
  86.  
  87. static func authenticate(credentials: Credentials) throws -> Auth.User {
  88. var user: User?
  89. switch credentials {
  90. case let credentials as UsernamePassword:
  91. let fetchedUser = try User.query()
  92. .filter("username", credentials.username)
  93. .first()
  94. if let password = fetchedUser?.password,
  95. password != "",
  96. (try? BCrypt.verify(password: credentials.password, matchesHash: password)) == true {
  97. user = fetchedUser
  98.  
  99. print(fetchedUser!.username)
  100. print("gggg")
  101. }
  102. case let credentials as Identifier:
  103. user = try User.find(credentials.id)
  104.  
  105. default:
  106. throw UnsupportedCredentialsError()
  107. }
  108.  
  109.  
  110.  
  111. guard let u = user else {
  112. throw Abort.custom(status: .badRequest, message: "User not found")
  113. }
  114. print(u.username)
  115. return u
  116. }
  117.  
  118.  
  119.  
  120.  
  121. }
  122.  
  123. import HTTP
  124.  
  125. extension Request {
  126. func user() throws -> User {
  127. guard let user = try auth.user() as? User else {
  128. throw Abort.custom(status: .badRequest, message: "Invalid user type.")
  129. }
  130.  
  131. return user
  132. }
  133.  
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement