From 2fff5f79cea44125944d013864d146d072cae8e4 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Mon, 24 May 2021 20:21:41 +0800 Subject: [PATCH] Can set email title and content now. --- controllers/verification.go | 4 ++-- object/provider.go | 6 ++++-- object/verification.go | 25 ++++++++++--------------- web/src/ProviderEditPage.js | 23 +++++++++++++++++++++++ web/src/locales/en.json | 2 ++ web/src/locales/zh.json | 2 ++ 6 files changed, 43 insertions(+), 19 deletions(-) diff --git a/controllers/verification.go b/controllers/verification.go index 50761a8a..03644554 100644 --- a/controllers/verification.go +++ b/controllers/verification.go @@ -72,7 +72,7 @@ func (c *ApiController) SendVerificationCode() { } provider := application.GetEmailProvider() - msg = object.SendVerificationCodeToEmail(user, provider, remoteAddr, dest) + msg = object.SendVerificationCodeToEmail(organization, user, provider, remoteAddr, dest) case "phone": if !util.IsPhoneCnValid(dest) { c.ResponseError("Invalid phone number") @@ -86,7 +86,7 @@ func (c *ApiController) SendVerificationCode() { dest = fmt.Sprintf("+%s%s", org.PhonePrefix, dest) provider := application.GetSmsProvider() - msg = object.SendVerificationCodeToPhone(user, provider, remoteAddr, dest) + msg = object.SendVerificationCodeToPhone(organization, user, provider, remoteAddr, dest) } status := "ok" diff --git a/object/provider.go b/object/provider.go index 61cc0832..276e0dc4 100644 --- a/object/provider.go +++ b/object/provider.go @@ -30,8 +30,10 @@ type Provider struct { ClientId string `xorm:"varchar(100)" json:"clientId"` ClientSecret string `xorm:"varchar(100)" json:"clientSecret"` - Host string `xorm:"varchar(100)" json:"host"` - Port int `json:"port"` + Host string `xorm:"varchar(100)" json:"host"` + Port int `json:"port"` + Title string `xorm:"varchar(100)" json:"title"` + Content string `xorm:"varchar(1000)" json:"content"` RegionId string `xorm:"varchar(100)" json:"regionId"` SignName string `xorm:"varchar(100)" json:"signName"` diff --git a/object/verification.go b/object/verification.go index 38aecd53..5f1d53cc 100644 --- a/object/verification.go +++ b/object/verification.go @@ -39,17 +39,18 @@ type VerificationRecord struct { IsUsed bool } -func SendVerificationCodeToEmail(user *User, provider *Provider, remoteAddr string, dest string) string { +func SendVerificationCodeToEmail(organization *Organization, user *User, provider *Provider, remoteAddr string, dest string) string { if provider == nil { return "Please set an Email provider first" } - title := "Casdoor Verification Code" - sender := "Casdoor" + sender := organization.DisplayName + title := provider.Title code := getRandomCode(5) - content := fmt.Sprintf("You have requested a verification code at Casdoor. Here is your code: %s, please enter in 5 minutes.", code) + // "You have requested a verification code at Casdoor. Here is your code: %s, please enter in 5 minutes." + content := fmt.Sprintf(provider.Content, code) - if result := AddToVerificationRecord(user, provider, remoteAddr, "Email", dest, code); len(result) != 0 { + if result := AddToVerificationRecord(user, provider, remoteAddr, provider.Category, dest, code); len(result) != 0 { return result } @@ -64,13 +65,13 @@ func SendVerificationCodeToEmail(user *User, provider *Provider, remoteAddr stri return "" } -func SendVerificationCodeToPhone(user *User, provider *Provider, remoteAddr string, dest string) string { +func SendVerificationCodeToPhone(organization *Organization, user *User, provider *Provider, remoteAddr string, dest string) string { if provider == nil { return "Please set a SMS provider first" } code := getRandomCode(5) - if result := AddToVerificationRecord(user, provider, remoteAddr, "SMS", dest, code); len(result) != 0 { + if result := AddToVerificationRecord(user, provider, remoteAddr, provider.Category, dest, code); len(result) != 0 { return result } @@ -84,13 +85,12 @@ func AddToVerificationRecord(user *User, provider *Provider, remoteAddr, recordT if user != nil { record.User = user.GetId() } - has, err := adapter.Engine.Get(&record) + has, err := adapter.Engine.Desc("created_time").Get(&record) if err != nil { panic(err) } now := time.Now().Unix() - if has && now-record.Time < 60 { return "You can only send one code in 60s." } @@ -108,12 +108,7 @@ func AddToVerificationRecord(user *User, provider *Provider, remoteAddr, recordT record.Time = now record.IsUsed = false - if has { - _, err = adapter.Engine.ID(core.PK{remoteAddr, recordType}).AllCols().Update(record) - } else { - _, err = adapter.Engine.Insert(record) - } - + _, err = adapter.Engine.Insert(record) if err != nil { panic(err) } diff --git a/web/src/ProviderEditPage.js b/web/src/ProviderEditPage.js index 6f403669..50fae04a 100644 --- a/web/src/ProviderEditPage.js +++ b/web/src/ProviderEditPage.js @@ -20,6 +20,7 @@ import * as Setting from "./Setting"; import i18next from "i18next"; const { Option } = Select; +const { TextArea } = Input; class ProviderEditPage extends React.Component { constructor(props) { @@ -126,6 +127,8 @@ class ProviderEditPage extends React.Component { this.updateProviderField('type', 'GitHub'); } else if (value === "Email") { this.updateProviderField('type', 'Default'); + 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.'); } else if (value === "SMS") { this.updateProviderField('type', 'aliyun'); } @@ -195,6 +198,26 @@ class ProviderEditPage extends React.Component { }} /> + + + {i18next.t("provider:Email Title")}: + + + { + this.updateProviderField('title', e.target.value); + }} /> + + + + + {i18next.t("provider:Email Content")}: + + +