From 27187b3a548107f33cabb852eccbc58be996f001 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Sat, 30 Dec 2023 00:47:10 +0800 Subject: [PATCH] feat: add "Reset to Default HTML" button --- controllers/service.go | 12 ++++++++- object/user.go | 12 +++++++++ object/verification.go | 5 +++- web/src/ProviderEditPage.js | 13 ++++++---- web/src/Setting.js | 50 +++++++++++++++++++++++++++++++++++++ 5 files changed, 85 insertions(+), 7 deletions(-) diff --git a/controllers/service.go b/controllers/service.go index 16ac59eb..97c84f1d 100644 --- a/controllers/service.go +++ b/controllers/service.go @@ -54,6 +54,11 @@ type NotificationForm struct { // @Success 200 {object} controllers.Response The Response object // @router /api/send-email [post] func (c *ApiController) SendEmail() { + user, ok := c.RequireSignedInUser() + if !ok { + return + } + var emailForm EmailForm err := json.Unmarshal(c.Ctx.Input.RequestBody, &emailForm) @@ -108,8 +113,13 @@ func (c *ApiController) SendEmail() { } code := "123456" + // "You have requested a verification code at Casdoor. Here is your code: %s, please enter in 5 minutes." - content := fmt.Sprintf(emailForm.Content, code) + content := strings.Replace(provider.Content, "%s", code, 1) + if user != nil { + content = strings.Replace(content, "%{user.friendlyName}", user.GetFriendlyName(), 1) + } + for _, receiver := range emailForm.Receivers { err = object.SendEmail(provider, emailForm.Title, content, receiver, emailForm.Sender) if err != nil { diff --git a/object/user.go b/object/user.go index 1243ce01..d2651c38 100644 --- a/object/user.go +++ b/object/user.go @@ -886,6 +886,18 @@ func (user *User) GetId() string { return fmt.Sprintf("%s/%s", user.Owner, user.Name) } +func (user *User) GetFriendlyName() string { + if user.FirstName != "" && user.LastName != "" { + return fmt.Sprintf("%s, %s", user.FirstName, user.LastName) + } else if user.DisplayName != "" { + return user.DisplayName + } else if user.Name != "" { + return user.Name + } else { + return user.Id + } +} + func isUserIdGlobalAdmin(userId string) bool { return strings.HasPrefix(userId, "built-in/") || strings.HasPrefix(userId, "app/") } diff --git a/object/verification.go b/object/verification.go index 6374add2..634417b2 100644 --- a/object/verification.go +++ b/object/verification.go @@ -89,7 +89,10 @@ func SendVerificationCodeToEmail(organization *Organization, user *User, provide } // "You have requested a verification code at Casdoor. Here is your code: %s, please enter in 5 minutes." - content := fmt.Sprintf(provider.Content, code) + content := strings.Replace(provider.Content, "%s", code, 1) + if user != nil { + content = strings.Replace(content, "%{user.friendlyName}", user.GetFriendlyName(), 1) + } if err := IsAllowSend(user, remoteAddr, provider.Category); err != nil { return err diff --git a/web/src/ProviderEditPage.js b/web/src/ProviderEditPage.js index 2794bd08..44e11b40 100644 --- a/web/src/ProviderEditPage.js +++ b/web/src/ProviderEditPage.js @@ -488,7 +488,7 @@ class ProviderEditPage extends React.Component { this.updateProviderField("port", 465); this.updateProviderField("disableSsl", false); this.updateProviderField("title", "Casdoor Verification Code"); - this.updateProviderField("content", "You have requested a verification code at Casdoor. Here is your code: %s, please enter in 5 minutes."); + this.updateProviderField("content", Setting.getDefaultHtmlEmailContent()); this.updateProviderField("receiver", this.props.account.email); } else if (value === "SMS") { this.updateProviderField("type", "Twilio SMS"); @@ -975,8 +975,11 @@ class ProviderEditPage extends React.Component { - + @@ -994,7 +997,7 @@ class ProviderEditPage extends React.Component {
-
+
@@ -1011,7 +1014,7 @@ class ProviderEditPage extends React.Component { }} /> {["Azure ACS"].includes(this.state.provider.type) ? null : ( - )} diff --git a/web/src/Setting.js b/web/src/Setting.js index bc4a418c..dbcfa855 100644 --- a/web/src/Setting.js +++ b/web/src/Setting.js @@ -1405,3 +1405,53 @@ export function getCurrencySymbol(currency) { return currency; } } + +export function getFriendlyUserName(account) { + if (account.firstName !== "" && account.lastName !== "") { + return `${account.firstName}, ${account.lastName}`; + } else if (account.displayName !== "") { + return account.displayName; + } else if (account.name !== "") { + return account.name; + } else { + return account.id; + } +} + +export function getDefaultHtmlEmailContent() { + return ` + + + + +Verification Code Email + + + + + +`; +}