diff --git a/conf/app.conf b/conf/app.conf
index 9ee15ac8..69b26930 100644
--- a/conf/app.conf
+++ b/conf/app.conf
@@ -7,15 +7,4 @@ driverName = mysql
dataSourceName = root:123@tcp(localhost:3306)/
dbName = casdoor
authState = "casdoor"
-useProxy = false
-mailUser = ""
-mailPass = ""
-mailHost = ""
-mailPort = ""
-smsProvider = ""
-smsAccessId = ""
-smsAccessKey = ""
-smsAppId = ""
-smsSign = ""
-smsRegion = ""
-smsTemplateId = ""
\ No newline at end of file
+useProxy = false
\ No newline at end of file
diff --git a/object/provider.go b/object/provider.go
index fcb4c07b..5f6e67fa 100644
--- a/object/provider.go
+++ b/object/provider.go
@@ -29,9 +29,15 @@ type Provider struct {
Type string `xorm:"varchar(100)" json:"type"`
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"`
- ProviderUrl string `xorm:"varchar(200)" json:"providerUrl"`
+
+ Host string `xorm:"varchar(100)" json:"host"`
+ Port int `json:"port"`
+
+ RegionId string `xorm:"varchar(100)" json:"regionId"`
+ SignName string `xorm:"varchar(100)" json:"signName"`
+ TemplateCode string `xorm:"varchar(100)" json:"templateCode"`
+
+ ProviderUrl string `xorm:"varchar(200)" json:"providerUrl"`
}
func GetProviders(owner string) []*Provider {
@@ -76,6 +82,19 @@ func getDefaultEmailProvider() *Provider {
return &provider
}
+func getDefaultPhoneProvider() *Provider {
+ provider := Provider{Owner: "admin", Category: "Phone"}
+ existed, err := adapter.Engine.Get(&provider)
+ if err != nil {
+ panic(err)
+ }
+
+ if !existed {
+ return nil
+ }
+ return &provider
+}
+
func UpdateProvider(id string, provider *Provider) bool {
owner, name := util.GetOwnerAndNameFromId(id)
if getProvider(owner, name) == nil {
diff --git a/object/sms.go b/object/sms.go
index 4b6f0adb..6e159dba 100644
--- a/object/sms.go
+++ b/object/sms.go
@@ -15,34 +15,23 @@
package object
import (
- "github.com/astaxie/beego"
+ "fmt"
+
"github.com/casdoor/go-sms-sender"
)
-var client go_sms_sender.SmsClient
-var provider string
-
-func InitSmsClient() {
- provider = beego.AppConfig.String("smsProvider")
- accessId := beego.AppConfig.String("smsAccessId")
- accessKey := beego.AppConfig.String("smsAccessKey")
- appId := beego.AppConfig.String("smsAppId")
- sign := beego.AppConfig.String("smsSign")
- region := beego.AppConfig.String("smsRegion")
- templateId := beego.AppConfig.String("smsTemplateId")
- client = go_sms_sender.NewSmsClient(provider, accessId, accessKey, sign, region, templateId, appId)
-}
-
func SendCodeToPhone(phone, code string) string {
+ provider := getDefaultPhoneProvider()
+ if provider == nil {
+ return "Please set an phone provider first"
+ }
+ client := go_sms_sender.NewSmsClient(provider.Type, provider.ClientId, provider.ClientSecret, provider.SignName, provider.RegionId, provider.TemplateCode)
if client == nil {
- InitSmsClient()
- if client == nil {
- return "SMS config error"
- }
+ return fmt.Sprintf("Unsupported provide type: %s", provider.Type)
}
param := make(map[string]string)
- if provider == "tencent" {
+ if provider.Type == "tencent" {
param["0"] = code
} else {
param["code"] = code
diff --git a/web/src/ProviderEditPage.js b/web/src/ProviderEditPage.js
index 62497071..0a04a12d 100644
--- a/web/src/ProviderEditPage.js
+++ b/web/src/ProviderEditPage.js
@@ -79,7 +79,10 @@ class ProviderEditPage extends React.Component {
);
} else {
return (
- []
+ [
+ {id: 'aliyun', name: 'Aliyun'},
+ {id: 'tencent', name: 'Tencent Cloud'},
+ ]
);
}
}
@@ -160,26 +163,65 @@ class ProviderEditPage extends React.Component {
}} />
-
-
- {i18next.t("provider:Host")}:
-
-
- } value={this.state.provider.host} onChange={e => {
- this.updateProviderField('host', e.target.value);
- }} />
-
-
-
-
- {i18next.t("provider:Port")}:
-
-
- {
- this.updateProviderField('port', value);
- }} />
-
-
+ {
+ this.state.provider.category === "Email" ? (
+
+
+
+ {i18next.t("provider:Host")}:
+
+
+ } value={this.state.provider.host} onChange={e => {
+ this.updateProviderField('host', e.target.value);
+ }} />
+
+
+
+
+ {i18next.t("provider:Port")}:
+
+
+ {
+ this.updateProviderField('port', value);
+ }} />
+
+
+
+ ) : this.state.provider.category === "Phone" ? (
+
+
+
+ {i18next.t("provider:Region ID")}:
+
+
+ {
+ this.updateProviderField('regionId', e.target.value);
+ }} />
+
+
+
+
+ {i18next.t("provider:Sign Name")}:
+
+
+ {
+ this.updateProviderField('signName', e.target.value);
+ }} />
+
+
+
+
+ {i18next.t("provider:Template Code")}:
+
+
+ {
+ this.updateProviderField('templateCode', e.target.value);
+ }} />
+
+
+
+ ) : null
+ }
{i18next.t("provider:Provider URL")}:
diff --git a/web/src/locales/en.json b/web/src/locales/en.json
index ec8efed3..f04f43bf 100644
--- a/web/src/locales/en.json
+++ b/web/src/locales/en.json
@@ -83,6 +83,11 @@
"Type": "Type",
"Client ID": "Client ID",
"Client secret": "Client secret",
+ "Host": "Host",
+ "Port": "Port",
+ "Region ID": "Region ID",
+ "Sign Name": "Sign Name",
+ "Template Code": "Template Code",
"Provider URL": "Provider URL",
"Edit Provider": "Edit Provider"
},
diff --git a/web/src/locales/zh.json b/web/src/locales/zh.json
index 1a9716b3..49c1836a 100644
--- a/web/src/locales/zh.json
+++ b/web/src/locales/zh.json
@@ -83,6 +83,11 @@
"Type": "类型",
"Client ID": "Client ID",
"Client secret": "Client secret",
+ "Host": "主机",
+ "Port": "端口号",
+ "Region ID": "地域ID",
+ "Sign Name": "签名名称",
+ "Template Code": "模板CODE",
"Provider URL": "提供商URL",
"Edit Provider": "修改提供商"
},