mirror of
https://github.com/casdoor/casdoor.git
synced 2025-07-16 20:23:50 +08:00
Add phone provider.
This commit is contained in:
@ -7,15 +7,4 @@ driverName = mysql
|
|||||||
dataSourceName = root:123@tcp(localhost:3306)/
|
dataSourceName = root:123@tcp(localhost:3306)/
|
||||||
dbName = casdoor
|
dbName = casdoor
|
||||||
authState = "casdoor"
|
authState = "casdoor"
|
||||||
useProxy = false
|
useProxy = false
|
||||||
mailUser = ""
|
|
||||||
mailPass = ""
|
|
||||||
mailHost = ""
|
|
||||||
mailPort = ""
|
|
||||||
smsProvider = ""
|
|
||||||
smsAccessId = ""
|
|
||||||
smsAccessKey = ""
|
|
||||||
smsAppId = ""
|
|
||||||
smsSign = ""
|
|
||||||
smsRegion = ""
|
|
||||||
smsTemplateId = ""
|
|
@ -29,9 +29,15 @@ type Provider struct {
|
|||||||
Type string `xorm:"varchar(100)" json:"type"`
|
Type string `xorm:"varchar(100)" json:"type"`
|
||||||
ClientId string `xorm:"varchar(100)" json:"clientId"`
|
ClientId string `xorm:"varchar(100)" json:"clientId"`
|
||||||
ClientSecret string `xorm:"varchar(100)" json:"clientSecret"`
|
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"`
|
||||||
ProviderUrl string `xorm:"varchar(200)" json:"providerUrl"`
|
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 {
|
func GetProviders(owner string) []*Provider {
|
||||||
@ -76,6 +82,19 @@ func getDefaultEmailProvider() *Provider {
|
|||||||
return &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 {
|
func UpdateProvider(id string, provider *Provider) bool {
|
||||||
owner, name := util.GetOwnerAndNameFromId(id)
|
owner, name := util.GetOwnerAndNameFromId(id)
|
||||||
if getProvider(owner, name) == nil {
|
if getProvider(owner, name) == nil {
|
||||||
|
@ -15,34 +15,23 @@
|
|||||||
package object
|
package object
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/astaxie/beego"
|
"fmt"
|
||||||
|
|
||||||
"github.com/casdoor/go-sms-sender"
|
"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 {
|
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 {
|
if client == nil {
|
||||||
InitSmsClient()
|
return fmt.Sprintf("Unsupported provide type: %s", provider.Type)
|
||||||
if client == nil {
|
|
||||||
return "SMS config error"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
param := make(map[string]string)
|
param := make(map[string]string)
|
||||||
if provider == "tencent" {
|
if provider.Type == "tencent" {
|
||||||
param["0"] = code
|
param["0"] = code
|
||||||
} else {
|
} else {
|
||||||
param["code"] = code
|
param["code"] = code
|
||||||
|
@ -79,7 +79,10 @@ class ProviderEditPage extends React.Component {
|
|||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return (
|
return (
|
||||||
[]
|
[
|
||||||
|
{id: 'aliyun', name: 'Aliyun'},
|
||||||
|
{id: 'tencent', name: 'Tencent Cloud'},
|
||||||
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -160,26 +163,65 @@ class ProviderEditPage extends React.Component {
|
|||||||
}} />
|
}} />
|
||||||
</Col>
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
<Row style={{marginTop: '20px'}} >
|
{
|
||||||
<Col style={{marginTop: '5px'}} span={2}>
|
this.state.provider.category === "Email" ? (
|
||||||
{i18next.t("provider:Host")}:
|
<React.Fragment>
|
||||||
</Col>
|
<Row style={{marginTop: '20px'}} >
|
||||||
<Col span={22} >
|
<Col style={{marginTop: '5px'}} span={2}>
|
||||||
<Input prefix={<LinkOutlined/>} value={this.state.provider.host} onChange={e => {
|
{i18next.t("provider:Host")}:
|
||||||
this.updateProviderField('host', e.target.value);
|
</Col>
|
||||||
}} />
|
<Col span={22} >
|
||||||
</Col>
|
<Input prefix={<LinkOutlined/>} value={this.state.provider.host} onChange={e => {
|
||||||
</Row>
|
this.updateProviderField('host', e.target.value);
|
||||||
<Row style={{marginTop: '20px'}} >
|
}} />
|
||||||
<Col style={{marginTop: '5px'}} span={2}>
|
</Col>
|
||||||
{i18next.t("provider:Port")}:
|
</Row>
|
||||||
</Col>
|
<Row style={{marginTop: '20px'}} >
|
||||||
<Col span={22} >
|
<Col style={{marginTop: '5px'}} span={2}>
|
||||||
<InputNumber value={this.state.provider.port} onChange={value => {
|
{i18next.t("provider:Port")}:
|
||||||
this.updateProviderField('port', value);
|
</Col>
|
||||||
}} />
|
<Col span={22} >
|
||||||
</Col>
|
<InputNumber value={this.state.provider.port} onChange={value => {
|
||||||
</Row>
|
this.updateProviderField('port', value);
|
||||||
|
}} />
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
</React.Fragment>
|
||||||
|
) : this.state.provider.category === "Phone" ? (
|
||||||
|
<React.Fragment>
|
||||||
|
<Row style={{marginTop: '20px'}} >
|
||||||
|
<Col style={{marginTop: '5px'}} span={2}>
|
||||||
|
{i18next.t("provider:Region ID")}:
|
||||||
|
</Col>
|
||||||
|
<Col span={22} >
|
||||||
|
<Input value={this.state.provider.regionId} onChange={e => {
|
||||||
|
this.updateProviderField('regionId', e.target.value);
|
||||||
|
}} />
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
<Row style={{marginTop: '20px'}} >
|
||||||
|
<Col style={{marginTop: '5px'}} span={2}>
|
||||||
|
{i18next.t("provider:Sign Name")}:
|
||||||
|
</Col>
|
||||||
|
<Col span={22} >
|
||||||
|
<Input value={this.state.provider.signName} onChange={e => {
|
||||||
|
this.updateProviderField('signName', e.target.value);
|
||||||
|
}} />
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
<Row style={{marginTop: '20px'}} >
|
||||||
|
<Col style={{marginTop: '5px'}} span={2}>
|
||||||
|
{i18next.t("provider:Template Code")}:
|
||||||
|
</Col>
|
||||||
|
<Col span={22} >
|
||||||
|
<Input value={this.state.provider.templateCode} onChange={e => {
|
||||||
|
this.updateProviderField('templateCode', e.target.value);
|
||||||
|
}} />
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
</React.Fragment>
|
||||||
|
) : null
|
||||||
|
}
|
||||||
<Row style={{marginTop: '20px'}} >
|
<Row style={{marginTop: '20px'}} >
|
||||||
<Col style={{marginTop: '5px'}} span={2}>
|
<Col style={{marginTop: '5px'}} span={2}>
|
||||||
{i18next.t("provider:Provider URL")}:
|
{i18next.t("provider:Provider URL")}:
|
||||||
|
@ -83,6 +83,11 @@
|
|||||||
"Type": "Type",
|
"Type": "Type",
|
||||||
"Client ID": "Client ID",
|
"Client ID": "Client ID",
|
||||||
"Client secret": "Client secret",
|
"Client secret": "Client secret",
|
||||||
|
"Host": "Host",
|
||||||
|
"Port": "Port",
|
||||||
|
"Region ID": "Region ID",
|
||||||
|
"Sign Name": "Sign Name",
|
||||||
|
"Template Code": "Template Code",
|
||||||
"Provider URL": "Provider URL",
|
"Provider URL": "Provider URL",
|
||||||
"Edit Provider": "Edit Provider"
|
"Edit Provider": "Edit Provider"
|
||||||
},
|
},
|
||||||
|
@ -83,6 +83,11 @@
|
|||||||
"Type": "类型",
|
"Type": "类型",
|
||||||
"Client ID": "Client ID",
|
"Client ID": "Client ID",
|
||||||
"Client secret": "Client secret",
|
"Client secret": "Client secret",
|
||||||
|
"Host": "主机",
|
||||||
|
"Port": "端口号",
|
||||||
|
"Region ID": "地域ID",
|
||||||
|
"Sign Name": "签名名称",
|
||||||
|
"Template Code": "模板CODE",
|
||||||
"Provider URL": "提供商URL",
|
"Provider URL": "提供商URL",
|
||||||
"Edit Provider": "修改提供商"
|
"Edit Provider": "修改提供商"
|
||||||
},
|
},
|
||||||
|
Reference in New Issue
Block a user