mirror of
https://github.com/OpenBankProject/OBP-API.git
synced 2026-02-06 17:37:00 +00:00
feature/User Invitation Flow - POW
This commit is contained in:
parent
65937f1c05
commit
c54518d5af
@ -26,15 +26,17 @@ TESOBE (http://www.tesobe.com/)
|
||||
*/
|
||||
package code.snippet
|
||||
|
||||
import code.api.util.ErrorMessages
|
||||
import code.users.UserInvitationProvider
|
||||
import code.model.dataAccess.{AuthUser, ResourceUser}
|
||||
import code.users.{UserInvitationProvider, Users}
|
||||
import code.util.Helper
|
||||
import code.util.Helper.MdcLoggable
|
||||
import code.webuiprops.MappedWebUiPropsProvider.getWebUiPropsValue
|
||||
import com.openbankproject.commons.model.BankId
|
||||
import com.openbankproject.commons.model.User
|
||||
import net.liftweb.common.Box
|
||||
import net.liftweb.http.{RequestVar, S, SHtml}
|
||||
import net.liftweb.util.CssSel
|
||||
import net.liftweb.util.Helpers._
|
||||
import org.apache.commons.lang3.StringUtils
|
||||
|
||||
import scala.collection.immutable.List
|
||||
|
||||
@ -45,41 +47,94 @@ class UserInvitation extends MdcLoggable {
|
||||
private object companyVar extends RequestVar("")
|
||||
private object countryVar extends RequestVar("None")
|
||||
private object devEmailVar extends RequestVar("")
|
||||
private object usernameVar extends RequestVar("")
|
||||
|
||||
// Can be used to show link to an online form to collect more information about the App / Startup
|
||||
val registrationMoreInfoUrl = getWebUiPropsValue("webui_post_user_invitation_more_info_url", "")
|
||||
|
||||
val registrationConsumerButtonValue: String = getWebUiPropsValue("webui_post_user_invitation_submit_button_value", "Proceed")
|
||||
val registrationConsumerButtonValue: String = getWebUiPropsValue("webui_post_user_invitation_submit_button_value", "Register as a Developer")
|
||||
|
||||
|
||||
def registerForm: CssSel = {
|
||||
|
||||
val countries = List(("None", "None"), ("Bahrain", "Bahrain"), ("Germany", "Germany"), ("Mexico", "Mexico"), ("UK", "UK"))
|
||||
val secretLink = S.param("id").getOrElse("0")
|
||||
val userInvitation = UserInvitationProvider.userInvitationProvider.vend.getUserInvitationBySecretLink(secretLink.toLong)
|
||||
firstNameVar.set(userInvitation.map(_.firstName).getOrElse("None"))
|
||||
lastNameVar.set(userInvitation.map(_.lastName).getOrElse("None"))
|
||||
devEmailVar.set(userInvitation.map(_.email).getOrElse("None"))
|
||||
val firstName = userInvitation.map(_.firstName).getOrElse("None")
|
||||
firstNameVar.set(firstName)
|
||||
val lastName = userInvitation.map(_.lastName).getOrElse("None")
|
||||
lastNameVar.set(lastName)
|
||||
val email = userInvitation.map(_.email).getOrElse("None")
|
||||
devEmailVar.set(email)
|
||||
companyVar.set(userInvitation.map(_.company).getOrElse("None"))
|
||||
countryVar.set(userInvitation.map(_.country).getOrElse("Bahrain"))
|
||||
val username = firstName.toLowerCase + "." + lastName.toLowerCase()
|
||||
usernameVar.set(username)
|
||||
|
||||
def submitButtonDefense: Unit = {
|
||||
def submitButtonDefense(): Unit = {
|
||||
val username = firstNameVar.is + "." + lastNameVar.is
|
||||
createResourceUser(
|
||||
provider = "OBP-User-Invitation",
|
||||
providerId = Some(username),
|
||||
name = Some(firstName + " " + lastName),
|
||||
email = Some(email)
|
||||
).map{ u =>
|
||||
createAuthUser(user = u, firstName = firstName, lastName = lastName, password = "")
|
||||
val resetLink = AuthUser.passwordResetUrl(u.idGivenByProvider, u.emailAddress, u.userId)
|
||||
S.redirectTo(resetLink)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
def showErrorsForUsername() = {
|
||||
val usernameError = Helper.i18n("unique.username")
|
||||
S.error("register-consumer-errors", usernameError)
|
||||
register &
|
||||
"#register-consumer-errors *" #> {
|
||||
".error *" #>
|
||||
List(usernameError).map({ e=>
|
||||
".errorContent *" #> e
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
def register = {
|
||||
"form" #> {
|
||||
"#country" #> SHtml.select(countries, Box!! countryVar.is, countryVar(_)) &
|
||||
"#country" #> SHtml.text(countryVar.is, countryVar(_)) &
|
||||
"#firstName" #> SHtml.text(firstNameVar.is, firstNameVar(_)) &
|
||||
"#lastName" #> SHtml.text(lastNameVar.is, lastNameVar(_)) &
|
||||
"#companyName" #> SHtml.text(companyVar.is, companyVar(_)) &
|
||||
"#devEmail" #> SHtml.text(devEmailVar, devEmailVar(_)) &
|
||||
"#username" #> SHtml.text(usernameVar, usernameVar(_)) &
|
||||
"type=submit" #> SHtml.submit(s"$registrationConsumerButtonValue", () => submitButtonDefense)
|
||||
} &
|
||||
"#register-consumer-success" #> ""
|
||||
}
|
||||
register
|
||||
if(Users.users.vend.getUserByUserName(username).isDefined) showErrorsForUsername() else register
|
||||
}
|
||||
|
||||
private def createAuthUser(user: User, firstName: String, lastName: String, password: String): Box[AuthUser] = tryo {
|
||||
val newUser = AuthUser.create
|
||||
.firstName(firstName)
|
||||
.lastName(lastName)
|
||||
.email(user.emailAddress)
|
||||
.user(user.userPrimaryKey.value)
|
||||
.username(user.idGivenByProvider)
|
||||
.provider(user.provider)
|
||||
.password(password)
|
||||
.validated(true)
|
||||
// Save the user
|
||||
newUser.saveMe()
|
||||
}
|
||||
|
||||
private def createResourceUser(provider: String, providerId: Option[String], name: Option[String], email: Option[String]): Box[ResourceUser] = {
|
||||
Users.users.vend.createResourceUser(
|
||||
provider = provider,
|
||||
providerId = providerId,
|
||||
createdByConsentId = None,
|
||||
name = name,
|
||||
email = email,
|
||||
userId = None
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -34,42 +34,57 @@ Berlin 13359, Germany
|
||||
</div>
|
||||
|
||||
<form method="post">
|
||||
<style>
|
||||
.form-control[disabled],
|
||||
.form-control[readonly],
|
||||
fieldset[disabled] .form-control {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
</style>
|
||||
<div class="row">
|
||||
<div class="col-xs-12 col-sm-12">
|
||||
|
||||
<div class="form-group">
|
||||
<label for="firstName">First name</label>
|
||||
<input disabled type="text" name="app-name" id="firstName" class="form-control" aria-describedby="consumer-registration-app-name-error">
|
||||
<div id = "consumer-registration-app-name-error-div" class="hide">
|
||||
<span data-lift="Msg?id=consumer-registration-app-name-error"/>
|
||||
<input readonly type="text" name="first-name" id="firstName" class="form-control" aria-describedby="consumer-registration-first-name-error">
|
||||
<div id = "consumer-registration-first-name-error-div" class="hide">
|
||||
<span data-lift="Msg?id=consumer-registration-first-name-error"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="lastName">Last name</label>
|
||||
<input disabled type="text" name="last-name" id="lastName" class="form-control" aria-describedby="consumer-registration-app-name-error">
|
||||
<input readonly type="text" name="last-name" id="lastName" class="form-control" aria-describedby="consumer-registration-app-name-error">
|
||||
<div id = "consumer-registration-last-name-error-div" class="hide">
|
||||
<span data-lift="Msg?id=consumer-registration-last-name-error"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="devEmail">Developer email</label>
|
||||
<input disabled type="text" name="app-developer" id="devEmail" class="form-control" aria-describedby="consumer-registration-app-developer-error">
|
||||
<input readonly type="text" name="app-developer" id="devEmail" class="form-control" aria-describedby="consumer-registration-app-developer-error">
|
||||
<div id = "consumer-registration-app-developer-error-div" class="hide">
|
||||
<span data-lift="Msg?id=consumer-registration-app-developer-error"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="companyName">Company</label>
|
||||
<input disabled type="text" name="app-developer" id="companyName" class="form-control" aria-describedby="consumer-registration-company-error">
|
||||
<input readonly type="text" name="app-developer" id="companyName" class="form-control" aria-describedby="consumer-registration-company-error">
|
||||
<div id = "consumer-registration-company-error-div" class="hide">
|
||||
<span data-lift="Msg?id=consumer-registration-app-developer-error"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="country" id="appTypeLabel">Country</label>
|
||||
<select disabled name="app-type" id="country" class="form-control js-example-basic-single">
|
||||
<option class="app-type-option"></option>
|
||||
</select>
|
||||
<label for="country">Company</label>
|
||||
<input readonly type="text" name="country" id="country" class="form-control" aria-describedby="consumer-registration-company-error">
|
||||
<div id = "consumer-registration-country-error-div" class="hide">
|
||||
<span data-lift="Msg?id=consumer-registration-country-error"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="username">Username</label>
|
||||
<input type="text" name="username" id="username" class="form-control" aria-describedby="consumer-registration-company-error">
|
||||
<div id = "consumer-registration-username-error-div" class="hide">
|
||||
<span data-lift="Msg?id=consumer-registration-username-error"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user