Files
waf-platform/EdgeAdmin/internal/web/actions/default/users/setting/sms.go

260 lines
6.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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()
}