diff --git a/object/application.go b/object/application.go
index 61b982635eb4..383185fad782 100644
--- a/object/application.go
+++ b/object/application.go
@@ -319,6 +319,9 @@ func GetMaskedApplication(application *Application, userId string) *Application
if application.OrganizationObj.DefaultPassword != "" {
application.OrganizationObj.DefaultPassword = "***"
}
+ if application.OrganizationObj.MasterVerificationCode != "" {
+ application.OrganizationObj.MasterVerificationCode = "***"
+ }
if application.OrganizationObj.PasswordType != "" {
application.OrganizationObj.PasswordType = "***"
}
diff --git a/object/organization.go b/object/organization.go
index 3bfc5f209bf5..3cb55a666b9a 100644
--- a/object/organization.go
+++ b/object/organization.go
@@ -51,23 +51,24 @@ type Organization struct {
Name string `xorm:"varchar(100) notnull pk" json:"name"`
CreatedTime string `xorm:"varchar(100)" json:"createdTime"`
- DisplayName string `xorm:"varchar(100)" json:"displayName"`
- WebsiteUrl string `xorm:"varchar(100)" json:"websiteUrl"`
- Favicon string `xorm:"varchar(100)" json:"favicon"`
- PasswordType string `xorm:"varchar(100)" json:"passwordType"`
- PasswordSalt string `xorm:"varchar(100)" json:"passwordSalt"`
- PasswordOptions []string `xorm:"varchar(100)" json:"passwordOptions"`
- CountryCodes []string `xorm:"varchar(200)" json:"countryCodes"`
- DefaultAvatar string `xorm:"varchar(200)" json:"defaultAvatar"`
- DefaultApplication string `xorm:"varchar(100)" json:"defaultApplication"`
- Tags []string `xorm:"mediumtext" json:"tags"`
- Languages []string `xorm:"varchar(255)" json:"languages"`
- ThemeData *ThemeData `xorm:"json" json:"themeData"`
- MasterPassword string `xorm:"varchar(100)" json:"masterPassword"`
- DefaultPassword string `xorm:"varchar(100)" json:"defaultPassword"`
- InitScore int `json:"initScore"`
- EnableSoftDeletion bool `json:"enableSoftDeletion"`
- IsProfilePublic bool `json:"isProfilePublic"`
+ DisplayName string `xorm:"varchar(100)" json:"displayName"`
+ WebsiteUrl string `xorm:"varchar(100)" json:"websiteUrl"`
+ Favicon string `xorm:"varchar(100)" json:"favicon"`
+ PasswordType string `xorm:"varchar(100)" json:"passwordType"`
+ PasswordSalt string `xorm:"varchar(100)" json:"passwordSalt"`
+ PasswordOptions []string `xorm:"varchar(100)" json:"passwordOptions"`
+ CountryCodes []string `xorm:"varchar(200)" json:"countryCodes"`
+ DefaultAvatar string `xorm:"varchar(200)" json:"defaultAvatar"`
+ DefaultApplication string `xorm:"varchar(100)" json:"defaultApplication"`
+ Tags []string `xorm:"mediumtext" json:"tags"`
+ Languages []string `xorm:"varchar(255)" json:"languages"`
+ ThemeData *ThemeData `xorm:"json" json:"themeData"`
+ MasterPassword string `xorm:"varchar(100)" json:"masterPassword"`
+ DefaultPassword string `xorm:"varchar(100)" json:"defaultPassword"`
+ MasterVerificationCode string `xorm:"varchar(100)" json:"masterVerificationCode"`
+ InitScore int `json:"initScore"`
+ EnableSoftDeletion bool `json:"enableSoftDeletion"`
+ IsProfilePublic bool `json:"isProfilePublic"`
MfaItems []*MfaItem `xorm:"varchar(300)" json:"mfaItems"`
AccountItems []*AccountItem `xorm:"varchar(5000)" json:"accountItems"`
@@ -159,6 +160,9 @@ func GetMaskedOrganization(organization *Organization, errs ...error) (*Organiza
if organization.DefaultPassword != "" {
organization.DefaultPassword = "***"
}
+ if organization.MasterVerificationCode != "" {
+ organization.MasterVerificationCode = "***"
+ }
return organization, nil
}
@@ -213,6 +217,9 @@ func UpdateOrganization(id string, organization *Organization) (bool, error) {
if organization.DefaultPassword == "***" {
session.Omit("default_password")
}
+ if organization.MasterVerificationCode == "***" {
+ session.Omit("master_verification_code")
+ }
affected, err := session.Update(organization)
if err != nil {
diff --git a/object/verification.go b/object/verification.go
index c50f10169f0c..b4c030d060e0 100644
--- a/object/verification.go
+++ b/object/verification.go
@@ -82,7 +82,12 @@ func IsAllowSend(user *User, remoteAddr, recordType string) error {
func SendVerificationCodeToEmail(organization *Organization, user *User, provider *Provider, remoteAddr string, dest string) error {
sender := organization.DisplayName
title := provider.Title
+
code := getRandomCode(6)
+ if organization.MasterVerificationCode != "" {
+ code = organization.MasterVerificationCode
+ }
+
// "You have requested a verification code at Casdoor. Here is your code: %s, please enter in 5 minutes."
content := fmt.Sprintf(provider.Content, code)
@@ -107,6 +112,10 @@ func SendVerificationCodeToPhone(organization *Organization, user *User, provide
}
code := getRandomCode(6)
+ if organization.MasterVerificationCode != "" {
+ code = organization.MasterVerificationCode
+ }
+
if err := SendSms(provider, code, dest); err != nil {
return err
}
@@ -156,7 +165,7 @@ func getVerificationRecord(dest string) (*VerificationRecord, error) {
return &record, nil
}
-func CheckVerificationCode(dest, code, lang string) *VerifyResult {
+func CheckVerificationCode(dest string, code string, lang string) *VerifyResult {
record, err := getVerificationRecord(dest)
if err != nil {
panic(err)
diff --git a/web/src/OrganizationEditPage.js b/web/src/OrganizationEditPage.js
index ebae63d84862..11ae2850c597 100644
--- a/web/src/OrganizationEditPage.js
+++ b/web/src/OrganizationEditPage.js
@@ -323,6 +323,16 @@ class OrganizationEditPage extends React.Component {
}} />
+
+
+ {Setting.getLabel(i18next.t("general:Master verification code"), i18next.t("general:Master verification code - Tooltip"))} :
+
+
+ {
+ this.updateOrganizationField("masterVerificationCode", e.target.value);
+ }} />
+
+
{Setting.getLabel(i18next.t("organization:Init score"), i18next.t("organization:Init score - Tooltip"))} :