refactor/enhanced the 'Create User Invitation' endpoint

This commit is contained in:
hongwei 2023-04-28 20:30:28 +08:00
parent 15165925d2
commit 346dada0f0
4 changed files with 66 additions and 18 deletions

View File

@ -1981,18 +1981,18 @@ object SwaggerDefinitionsJSON {
first_name = ExampleValue.firstNameExample.value,
last_name = ExampleValue.lastNameExample.value,
email = ExampleValue.emailExample.value,
company = "Tesobe",
country = "Germany",
purpose = "Developer"
company = ExampleValue.companyExample.value,
country = ExampleValue.countryExample.value,
purpose = ExampleValue.purposeExample.value,
)
val userInvitationJsonV400 = UserInvitationJsonV400(
first_name = ExampleValue.firstNameExample.value,
last_name = ExampleValue.lastNameExample.value,
email = ExampleValue.emailExample.value,
company = "TESOBE",
country = "Germany",
purpose = "Developer",
status = "CREATED"
company = ExampleValue.companyExample.value,
country = ExampleValue.countryExample.value,
purpose = ExampleValue.purposeExample.value,
status = ExampleValue.statusExample.value,
)
val entitlementRequestJSON =

View File

@ -1,14 +1,14 @@
package code.api.util
import code.api.util.APIUtil.{DateWithMs, DateWithMsExampleString, oneYearAgoDate, formatDate, oneYearAgo, parseDate}
import code.api.util.APIUtil.{DateWithMs, DateWithMsExampleString, formatDate, oneYearAgo, oneYearAgoDate, parseDate}
import code.api.util.ErrorMessages.{InvalidJsonFormat, UnknownError, UserHasMissingRoles, UserNotLoggedIn}
import net.liftweb.json.JsonDSL._
import code.api.util.Glossary.{glossaryItems, makeGlossaryItem}
import code.apicollection.ApiCollection
import code.dynamicEntity.{DynamicEntityDefinition, DynamicEntityFooBar, DynamicEntityFullBarFields, DynamicEntityIntTypeExample, DynamicEntityStringTypeExample}
import com.openbankproject.commons.model.CardAction
import com.openbankproject.commons.model.enums.{CustomerAttributeType, DynamicEntityFieldType}
import com.openbankproject.commons.model.enums.{CustomerAttributeType, DynamicEntityFieldType, UserInvitationPurpose}
import com.openbankproject.commons.util.ReflectUtils
import net.liftweb.json
import net.liftweb.json.JObject
@ -1759,6 +1759,15 @@ object ExampleValue {
lazy val lastNameExample = ConnectorField("Smith","The Last name")
glossaryItems += makeGlossaryItem("last_name", lastNameExample)
lazy val companyExample = ConnectorField("Tesobe GmbH","The company name")
glossaryItems += makeGlossaryItem("company", companyExample)
lazy val countryExample = ConnectorField("Germany"," The country name")
glossaryItems += makeGlossaryItem("country", countryExample)
lazy val purposeExample = ConnectorField(UserInvitationPurpose.DEVELOPER.toString, NoDescriptionProvided)
glossaryItems += makeGlossaryItem("purpose", purposeExample)
lazy val redirectUrlExample = ConnectorField(NoExampleProvided,NoDescriptionProvided)
glossaryItems += makeGlossaryItem("redirect_url", redirectUrlExample)

View File

@ -3756,7 +3756,25 @@ trait APIMethods400 {
"/banks/BANK_ID/user-invitation",
"Create User Invitation",
s"""Create User Invitation.
|
|
| This endpoint will send an invitation email to the developers, then they can use the link to create the obp user.
|
| purpose filed only support:${UserInvitationPurpose.values.toString()}.
|
| You can customise the email details use the following webui props:
|
| when purpose == ${UserInvitationPurpose.DEVELOPER.toString}
| webui_developer_user_invitation_email_subject
| webui_developer_user_invitation_email_from
| webui_developer_user_invitation_email_text
| webui_developer_user_invitation_email_html_text
|
| when purpose = == ${UserInvitationPurpose.CUSTOMER.toString}
| webui_customer_user_invitation_email_subject
| webui_customer_user_invitation_email_from
| webui_customer_user_invitation_email_text
| webui_customer_user_invitation_email_html_text
|
|""",
userInvitationPostJsonV400,
userInvitationJsonV400,
@ -3778,6 +3796,11 @@ trait APIMethods400 {
postedData <- NewStyle.function.tryons(failMsg, 400, cc.callContext) {
json.extract[PostUserInvitationJsonV400]
}
_ <- NewStyle.function.tryons(s"$InvalidJsonValue postedData.purpose only support ${UserInvitationPurpose.values.toString()}", 400, cc.callContext) {
UserInvitationPurpose.withName(postedData.purpose)
}
(invitation, callContext) <- NewStyle.function.createUserInvitation(
bankId,
postedData.first_name,
@ -3788,14 +3811,24 @@ trait APIMethods400 {
postedData.purpose,
cc.callContext)
} yield {
val subject = getWebUiPropsValue("webui_developer_user_invitation_email_subject", "Welcome to the API Playground")
val from = getWebUiPropsValue("webui_developer_user_invitation_email_from", "do-not-reply@openbankproject.com")
val link = s"${APIUtil.getPropsValue("portal_hostname",Constant.HostName)}/user-invitation?id=${invitation.secretKey}"
val customText = getWebUiPropsValue("webui_developer_user_invitation_email_text", WebUITemplate.webUiDeveloperUserInvitationEmailText)
val customHtmlText = getWebUiPropsValue("webui_developer_user_invitation_email_html_text", WebUITemplate.webUiDeveloperUserInvitationEmailHtmlText)
.replace(WebUIPlaceholder.emailRecipient, invitation.firstName)
.replace(WebUIPlaceholder.activateYourAccount, link)
Mailer.sendMail(From(from), Subject(subject), To(invitation.email), PlainMailBodyType(customText), XHTMLMailBodyType(XML.loadString(customHtmlText)))
val link = s"${APIUtil.getPropsValue("portal_hostname", Constant.HostName)}/user-invitation?id=${invitation.secretKey}"
if (postedData.purpose == UserInvitationPurpose.DEVELOPER.toString){
val subject = getWebUiPropsValue("webui_developer_user_invitation_email_subject", "Welcome to the API Playground")
val from = getWebUiPropsValue("webui_developer_user_invitation_email_from", "do-not-reply@openbankproject.com")
val customText = getWebUiPropsValue("webui_developer_user_invitation_email_text", WebUITemplate.webUiDeveloperUserInvitationEmailText)
val customHtmlText = getWebUiPropsValue("webui_developer_user_invitation_email_html_text", WebUITemplate.webUiDeveloperUserInvitationEmailHtmlText)
.replace(WebUIPlaceholder.emailRecipient, invitation.firstName)
.replace(WebUIPlaceholder.activateYourAccount, link)
Mailer.sendMail(From(from), Subject(subject), To(invitation.email), PlainMailBodyType(customText), XHTMLMailBodyType(XML.loadString(customHtmlText)))
} else {
val subject = getWebUiPropsValue("webui_customer_user_invitation_email_subject", "Welcome to the API Playground")
val from = getWebUiPropsValue("webui_customer_user_invitation_email_from", "do-not-reply@openbankproject.com")
val customText = getWebUiPropsValue("webui_customer_user_invitation_email_text", WebUITemplate.webUiDeveloperUserInvitationEmailText)
val customHtmlText = getWebUiPropsValue("webui_customer_user_invitation_email_html_text", WebUITemplate.webUiDeveloperUserInvitationEmailHtmlText)
.replace(WebUIPlaceholder.emailRecipient, invitation.firstName)
.replace(WebUIPlaceholder.activateYourAccount, link)
Mailer.sendMail(From(from), Subject(subject), To(invitation.email), PlainMailBodyType(customText), XHTMLMailBodyType(XML.loadString(customHtmlText)))
}
(JSONFactory400.createUserInvitationJson(invitation), HttpCode.`201`(callContext))
}
}

View File

@ -136,6 +136,12 @@ object PemCertificateRole extends OBPEnumeration[PemCertificateRole] {
object PSP_AI extends Value
object PSP_PI extends Value
}
sealed trait UserInvitationPurpose extends EnumValue
object UserInvitationPurpose extends OBPEnumeration[UserInvitationPurpose] {
object DEVELOPER extends Value
object CUSTOMER extends Value
}
//------api enumerations end ----
sealed trait DynamicEntityFieldType extends EnumValue {