Advertisement
Guest User

Untitled

a guest
Jul 29th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.01 KB | None | 0 0
  1. extension ExampleUser: ResponseRepresentable {}
  2. extension ExampleUser: Timestampable {}
  3.  
  4. final class ExampleUser: Model, PasswordAuthenticatable {
  5. let storage = Storage()
  6. public static let hasher = BCryptHasher(cost: 10)
  7.  
  8. static let nameKey = "email" // Vapor expects this to be set to email, even though it is the username
  9. static let passwordKey = "password"
  10. static let confirmPasswordKey = "confirmPassword"
  11.  
  12. public static let passwordVerifier: PasswordVerifier? = ExampleUser.hasher
  13.  
  14. var username: String
  15. var password: Bytes
  16.  
  17. var hashedPassword: String? {
  18. return password.makeString()
  19. }
  20.  
  21. init(username: String, password: Bytes) throws {
  22. self.username = username
  23. self.password = password
  24. }
  25.  
  26. init(row: Row) throws {
  27. username = try row.get(ExampleUser.nameKey)
  28. let passwordAsString:String = try row.get(ExampleUser.passwordKey)
  29. password = passwordAsString.makeBytes()
  30. }
  31.  
  32. func makeRow() throws -> Row {
  33. var row = Row()
  34. try row.set(ExampleUser.nameKey, username)
  35. try row.set(ExampleUser.passwordKey, hashedPassword)
  36. return row
  37. }
  38. }
  39.  
  40. extension ExampleUser: Preparation {
  41. static func prepare(_ database: Database) throws {
  42. try database.create(self) { builder in
  43. builder.id()
  44. builder.string(ExampleUser.nameKey)
  45. builder.string(ExampleUser.passwordKey)
  46. }
  47. }
  48.  
  49. /// Undoes what was done in `prepare`
  50. static func revert(_ database: Database) throws {
  51. try database.delete(self)
  52. }
  53. }
  54.  
  55.  
  56. extension ExampleUser: JSONConvertible {
  57. convenience init(json: JSON) throws {
  58. let passwordAsString: String = try json.get(ExampleUser.passwordKey)
  59. try self.init(username: json.get(ExampleUser.nameKey), password: ExampleUser.hasher.make(passwordAsString))
  60. }
  61.  
  62. func makeJSON() throws -> JSON {
  63. var json = JSON()
  64. try json.set(ExampleUser.nameKey, username)
  65. return json
  66. }
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement