Guest User

Untitled

a guest
Nov 24th, 2017
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.25 KB | None | 0 0
  1. @ApiOperation(value = "Register and get authentication token", response = classOf[Token])
  2. @ApiImplicitParams(
  3. Array(
  4. new ApiImplicitParam(
  5. value = "SignUp",
  6. required = true,
  7. dataType = "models.security.SignUp",
  8. paramType = "body"
  9. )
  10. )
  11. )
  12. def signUp = Action.async(parse.json) { implicit request =>
  13. request.body.validate[SignUp].map { signUp =>
  14. val loginInfo = LoginInfo(CredentialsProvider.ID, signUp.identifier)
  15. userService.retrieve(loginInfo).flatMap {
  16. case None => /* user not already exists */
  17. val user = User(None, loginInfo, loginInfo.providerKey, signUp.email, signUp.firstName, signUp.lastName, None, true)
  18. // val plainPassword = UUID.randomUUID().toString.replaceAll("-", "")
  19. val authInfo = passwordHasherRegistry.current.hash(signUp.password)
  20. for {
  21. avatar <- avatarService.retrieveURL(signUp.email)
  22. userToSave <- userService.save(user.copy(avatarURL = avatar))
  23. authInfo <- authInfoRepository.add(loginInfo, authInfo)
  24. authenticator <- silhouette.env.authenticatorService.create(loginInfo)
  25. token <- silhouette.env.authenticatorService.init(authenticator)
  26. result <- silhouette.env.authenticatorService.embed(token,
  27. Ok(Json.toJson(Token(token = token, expiresOn = authenticator.expirationDateTime)))
  28. )
  29. } yield {
  30. val url = routes.ApplicationController.index().absoluteURL()
  31. mailerClient.send(Email(
  32. subject = Messages("email.sign.up.subject"),
  33. from = Messages("email.from"),
  34. to = Seq(user.email),
  35. bodyText = Some(views.txt.emails.signUp(user, url).body),
  36. bodyHtml = Some(views.html.emails.signUp(user, url).body)
  37. ))
  38. silhouette.env.eventBus.publish(SignUpEvent(user, request))
  39. silhouette.env.eventBus.publish(LoginEvent(user, request))
  40. result
  41. }
  42. case Some(_) => /* user already exists! */
  43. Future(Conflict(Json.toJson(Bad(message = "user already exists"))))
  44. }
  45. }.recoverTotal {
  46. case error =>
  47. Future.successful(BadRequest(Json.toJson(Bad(message = JsError.toJson(error)))))
  48. }
  49. }
Add Comment
Please, Sign In to add comment