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": "修改提供商" },