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")}:
+
+
+
) : this.state.provider.category === "SMS" ? (
diff --git a/web/src/locales/en.json b/web/src/locales/en.json
index d635703e..8cf9b27f 100644
--- a/web/src/locales/en.json
+++ b/web/src/locales/en.json
@@ -97,6 +97,8 @@
"Client secret": "Client secret",
"Host": "Host",
"Port": "Port",
+ "Email Title": "Email Title",
+ "Email Content": "Email Content",
"Region ID": "Region ID",
"Sign Name": "Sign Name",
"Template Code": "Template Code",
diff --git a/web/src/locales/zh.json b/web/src/locales/zh.json
index ff5e9ef9..e5654889 100644
--- a/web/src/locales/zh.json
+++ b/web/src/locales/zh.json
@@ -97,6 +97,8 @@
"Client secret": "Client secret",
"Host": "主机",
"Port": "端口号",
+ "Email Title": "邮件标题",
+ "Email Content": "邮件内容",
"Region ID": "地域ID",
"Sign Name": "签名名称",
"Template Code": "模板CODE",