Advertisement
Guest User

Untitled

a guest
Jan 26th, 2017
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.69 KB | None | 0 0
  1. static func authenticate(credentials: Credentials) throws -> Auth.User {
  2. switch credentials {
  3. case let id as Identifier:
  4. guard let user = try User.find(id.id) else {
  5. throw Abort.custom(status: .forbidden, message: "Invalid user identifier.")
  6. }
  7. return user
  8.  
  9. case let usernamePassword as UsernamePassword:
  10. let fetchedUser = try User.query().filter("username", usernamePassword.username).first()
  11. guard let user = fetchedUser else {
  12. throw Abort.custom(status: .networkAuthenticationRequired, message: "User does not exist")
  13. }
  14. if try BCrypt.verify(password: usernamePassword.password, matchesHash: fetchedUser!.password) {
  15. return user
  16. } else {
  17. throw Abort.custom(status: .networkAuthenticationRequired, message: "Invalid user name or password.")
  18. }
  19.  
  20. case let credentials as FacebookAccount:
  21. if let existing = try DemoUser.query().filter("facebook_id", credentials.uniqueID).first() {
  22. user = existing
  23. } else {
  24. throw Abort.custom(status: .networkAuthenticationRequired, message: "User does not exist")
  25. }
  26.  
  27. case let credentials as GoogleAccount:
  28. if let existing = try DemoUser.query().filter("google_id", credentials.uniqueID).first() {
  29. user = existing
  30. } else
  31. throw Abort.custom(status: .networkAuthenticationRequired, message: "User does not exist")
  32. }
  33.  
  34. default:
  35. let type = type(of: credentials)
  36. throw Abort.custom(status: .forbidden, message: "Unsupported credential type: \(type).")
  37. }
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement