260 lines
6.8 KiB
Go
260 lines
6.8 KiB
Go
// Copyright 2023 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn .
|
||
//go:build plus
|
||
|
||
package setting
|
||
|
||
import (
|
||
"encoding/json"
|
||
"errors"
|
||
"github.com/TeaOSLab/EdgeAdmin/internal/configloaders"
|
||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
||
"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
|
||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||
"github.com/TeaOSLab/EdgeCommon/pkg/systemconfigs"
|
||
"github.com/TeaOSLab/EdgeCommon/pkg/userconfigs"
|
||
"github.com/iwind/TeaGo/actions"
|
||
"regexp"
|
||
)
|
||
|
||
type SmsAction struct {
|
||
actionutils.ParentAction
|
||
}
|
||
|
||
func (this *SmsAction) Init() {
|
||
this.Nav("", "", "sms")
|
||
}
|
||
|
||
func (this *SmsAction) RunGet(params struct{}) {
|
||
config, err := configloaders.LoadUserSenderConfig()
|
||
if err != nil {
|
||
this.ErrorPage(err)
|
||
return
|
||
}
|
||
|
||
if config == nil {
|
||
this.ErrorPage(errors.New("'config' should not be nil"))
|
||
return
|
||
}
|
||
|
||
// 验证短信
|
||
if config.VerifySMS == nil {
|
||
config.VerifySMS = userconfigs.NewSMSSenderConfig()
|
||
}
|
||
|
||
// 通知短信
|
||
if config.NotifySMS == nil {
|
||
config.NotifySMS = userconfigs.NewSMSSenderConfig()
|
||
}
|
||
|
||
this.Data["config"] = config
|
||
|
||
this.Show()
|
||
}
|
||
|
||
func (this *SmsAction) RunPost(params struct {
|
||
VerifySMSJSON []byte
|
||
NotifySMSJSON []byte
|
||
|
||
Must *actions.Must
|
||
CSRF *actionutils.CSRF
|
||
}) {
|
||
defer this.CreateLogInfo(codes.User_LogUpdateUserSmsSettings)
|
||
|
||
config, err := configloaders.LoadUserSenderConfig()
|
||
if err != nil {
|
||
this.ErrorPage(err)
|
||
return
|
||
}
|
||
|
||
var verifySMSConfig = userconfigs.NewSMSSenderConfig()
|
||
err = json.Unmarshal(params.VerifySMSJSON, verifySMSConfig)
|
||
if err != nil {
|
||
this.ErrorPage(err)
|
||
return
|
||
}
|
||
config.VerifySMS = verifySMSConfig
|
||
|
||
if verifySMSConfig.IsOn {
|
||
switch verifySMSConfig.Type {
|
||
case userconfigs.SMSSenderWebHook:
|
||
if verifySMSConfig.WebHookParams == nil {
|
||
this.Fail("请配置HTTP接口相关参数")
|
||
return
|
||
}
|
||
if len(verifySMSConfig.WebHookParams.URL) == 0 {
|
||
this.Fail("请输入激活短信HTTP接口URL地址")
|
||
return
|
||
}
|
||
if !regexp.MustCompile(`^(http|https)://`).MatchString(verifySMSConfig.WebHookParams.URL) {
|
||
this.Fail("激活短信HTTP接口URL地址必须以http://或https://开头")
|
||
return
|
||
}
|
||
case userconfigs.SMSSenderAliyunSMS:
|
||
if verifySMSConfig.AliyunSMSParams == nil {
|
||
this.Fail("请配置阿里云短信相关参数")
|
||
return
|
||
}
|
||
if len(verifySMSConfig.AliyunSMSParams.Sign) == 0 {
|
||
this.Fail("请输入签名名称")
|
||
return
|
||
}
|
||
if len(verifySMSConfig.AliyunSMSParams.TemplateCode) == 0 {
|
||
this.Fail("请输入模板CODE")
|
||
return
|
||
}
|
||
if len(verifySMSConfig.AliyunSMSParams.CodeVarName) == 0 {
|
||
this.Fail("请输入模板中验证码变量名称")
|
||
return
|
||
}
|
||
if len(verifySMSConfig.AliyunSMSParams.AccessKeyId) == 0 {
|
||
this.Fail("请输入AccessKey ID")
|
||
return
|
||
}
|
||
if len(verifySMSConfig.AliyunSMSParams.AccessKeySecret) == 0 {
|
||
this.Fail("请输入AccessKey Secret")
|
||
return
|
||
}
|
||
case userconfigs.SMSSenderTencentSMS:
|
||
if verifySMSConfig.TencentSMSParams == nil {
|
||
this.Fail("请配置腾讯云短信相关参数")
|
||
return
|
||
}
|
||
|
||
var digitsReg = regexp.MustCompile(`^\d+$`)
|
||
|
||
if len(verifySMSConfig.TencentSMSParams.SDKAppId) == 0 {
|
||
this.Fail("请输入SDK应用ID")
|
||
return
|
||
}
|
||
if !digitsReg.MatchString(verifySMSConfig.TencentSMSParams.SDKAppId) {
|
||
this.Fail("SDK应用ID是一组数字,请重新输入")
|
||
return
|
||
}
|
||
if len(verifySMSConfig.TencentSMSParams.Sign) == 0 {
|
||
this.Fail("请输入签名内容")
|
||
return
|
||
}
|
||
if len(verifySMSConfig.TencentSMSParams.TemplateId) == 0 {
|
||
this.Fail("请输入模板ID")
|
||
return
|
||
}
|
||
if !digitsReg.MatchString(verifySMSConfig.TencentSMSParams.TemplateId) {
|
||
this.Fail("正文模板ID是一组数字,请重新输入")
|
||
return
|
||
}
|
||
if len(verifySMSConfig.TencentSMSParams.AccessKeyId) == 0 {
|
||
this.Fail("请输入密钥SecretId")
|
||
return
|
||
}
|
||
if len(verifySMSConfig.TencentSMSParams.AccessKeySecret) == 0 {
|
||
this.Fail("请输入密钥SecretKey")
|
||
return
|
||
}
|
||
}
|
||
}
|
||
|
||
var notifySMSConfig = userconfigs.NewSMSSenderConfig()
|
||
err = json.Unmarshal(params.NotifySMSJSON, notifySMSConfig)
|
||
if err != nil {
|
||
this.ErrorPage(err)
|
||
return
|
||
}
|
||
config.NotifySMS = notifySMSConfig
|
||
|
||
if notifySMSConfig.IsOn {
|
||
switch notifySMSConfig.Type {
|
||
case userconfigs.SMSSenderWebHook:
|
||
if notifySMSConfig.WebHookParams == nil {
|
||
this.Fail("请配置HTTP接口相关参数")
|
||
return
|
||
}
|
||
if len(notifySMSConfig.WebHookParams.URL) == 0 {
|
||
this.Fail("请输入通知短信HTTP接口URL地址")
|
||
return
|
||
}
|
||
if !regexp.MustCompile(`^(http|https)://`).MatchString(notifySMSConfig.WebHookParams.URL) {
|
||
this.Fail("通知短信HTTP接口URL地址必须以http://或https://开头")
|
||
return
|
||
}
|
||
case userconfigs.SMSSenderAliyunSMS:
|
||
if notifySMSConfig.AliyunSMSParams == nil {
|
||
this.Fail("请配置阿里云短信相关参数")
|
||
return
|
||
}
|
||
if len(notifySMSConfig.AliyunSMSParams.Sign) == 0 {
|
||
this.Fail("请输入签名名称")
|
||
return
|
||
}
|
||
if len(notifySMSConfig.AliyunSMSParams.TemplateCode) == 0 {
|
||
this.Fail("请输入模板CODE")
|
||
return
|
||
}
|
||
if len(notifySMSConfig.AliyunSMSParams.CodeVarName) == 0 {
|
||
this.Fail("请输入模板中验证码变量名称")
|
||
return
|
||
}
|
||
if len(notifySMSConfig.AliyunSMSParams.AccessKeyId) == 0 {
|
||
this.Fail("请输入AccessKey ID")
|
||
return
|
||
}
|
||
if len(notifySMSConfig.AliyunSMSParams.AccessKeySecret) == 0 {
|
||
this.Fail("请输入AccessKey Secret")
|
||
return
|
||
}
|
||
case userconfigs.SMSSenderTencentSMS:
|
||
if notifySMSConfig.TencentSMSParams == nil {
|
||
this.Fail("请配置腾讯云短信相关参数")
|
||
return
|
||
}
|
||
|
||
var digitsReg = regexp.MustCompile(`^\d+$`)
|
||
|
||
if len(notifySMSConfig.TencentSMSParams.SDKAppId) == 0 {
|
||
this.Fail("请输入SDK应用ID")
|
||
return
|
||
}
|
||
if !digitsReg.MatchString(notifySMSConfig.TencentSMSParams.SDKAppId) {
|
||
this.Fail("SDK应用ID是一组数字,请重新输入")
|
||
return
|
||
}
|
||
if len(notifySMSConfig.TencentSMSParams.Sign) == 0 {
|
||
this.Fail("请输入签名内容")
|
||
return
|
||
}
|
||
if len(notifySMSConfig.TencentSMSParams.TemplateId) == 0 {
|
||
this.Fail("请输入模板ID")
|
||
return
|
||
}
|
||
if !digitsReg.MatchString(notifySMSConfig.TencentSMSParams.TemplateId) {
|
||
this.Fail("正文模板ID是一组数字,请重新输入")
|
||
return
|
||
}
|
||
if len(notifySMSConfig.TencentSMSParams.AccessKeyId) == 0 {
|
||
this.Fail("请输入密钥SecretId")
|
||
return
|
||
}
|
||
if len(notifySMSConfig.TencentSMSParams.AccessKeySecret) == 0 {
|
||
this.Fail("请输入密钥SecretKey")
|
||
return
|
||
}
|
||
}
|
||
}
|
||
|
||
configJSON, err := json.Marshal(config)
|
||
if err != nil {
|
||
this.ErrorPage(err)
|
||
return
|
||
}
|
||
|
||
_, err = this.RPC().SysSettingRPC().UpdateSysSetting(this.AdminContext(), &pb.UpdateSysSettingRequest{
|
||
Code: systemconfigs.SettingCodeUserSenderConfig,
|
||
ValueJSON: configJSON,
|
||
})
|
||
if err != nil {
|
||
this.ErrorPage(err)
|
||
return
|
||
}
|
||
|
||
this.Success()
|
||
}
|