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