Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @ApiOperation(value = "Register and get authentication token", response = classOf[Token])
- @ApiImplicitParams(
- Array(
- new ApiImplicitParam(
- value = "SignUp",
- required = true,
- dataType = "models.security.SignUp",
- paramType = "body"
- )
- )
- )
- def signUp = Action.async(parse.json) { implicit request =>
- request.body.validate[SignUp].map { signUp =>
- val loginInfo = LoginInfo(CredentialsProvider.ID, signUp.identifier)
- userService.retrieve(loginInfo).flatMap {
- case None => /* user not already exists */
- val user = User(None, loginInfo, loginInfo.providerKey, signUp.email, signUp.firstName, signUp.lastName, None, true)
- // val plainPassword = UUID.randomUUID().toString.replaceAll("-", "")
- val authInfo = passwordHasherRegistry.current.hash(signUp.password)
- for {
- avatar <- avatarService.retrieveURL(signUp.email)
- userToSave <- userService.save(user.copy(avatarURL = avatar))
- authInfo <- authInfoRepository.add(loginInfo, authInfo)
- authenticator <- silhouette.env.authenticatorService.create(loginInfo)
- token <- silhouette.env.authenticatorService.init(authenticator)
- result <- silhouette.env.authenticatorService.embed(token,
- Ok(Json.toJson(Token(token = token, expiresOn = authenticator.expirationDateTime)))
- )
- } yield {
- val url = routes.ApplicationController.index().absoluteURL()
- mailerClient.send(Email(
- subject = Messages("email.sign.up.subject"),
- from = Messages("email.from"),
- to = Seq(user.email),
- bodyText = Some(views.txt.emails.signUp(user, url).body),
- bodyHtml = Some(views.html.emails.signUp(user, url).body)
- ))
- silhouette.env.eventBus.publish(SignUpEvent(user, request))
- silhouette.env.eventBus.publish(LoginEvent(user, request))
- result
- }
- case Some(_) => /* user already exists! */
- Future(Conflict(Json.toJson(Bad(message = "user already exists"))))
- }
- }.recoverTotal {
- case error =>
- Future.successful(BadRequest(Json.toJson(Bad(message = JsError.toJson(error)))))
- }
- }
Add Comment
Please, Sign In to add comment