// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn . //go:build plus package userconfigs import ( "encoding/json" "errors" ) type EmailSenderConfig struct { IsOn bool `yaml:"isOn" json:"isOn"` SMTPHost string `yaml:"smtpHost" json:"smtpHost"` SMTPPort int32 `yaml:"smtpPort" json:"smtpPort"` Protocol string `yaml:"protocol" json:"protocol"` // tcp|tls Username string `yaml:"username" json:"username"` Password string `yaml:"password" json:"password"` FromEmail string `yaml:"fromEmail" json:"fromEmail"` // 发件人Email FromName string `yaml:"fromName" json:"fromName"` // 发件人名称 } func NewEmailSenderConfig() *EmailSenderConfig { return &EmailSenderConfig{ IsOn: true, } } type SMSSenderType = string const ( SMSSenderWebHook = "webHook" SMSSenderAliyunSMS = "aliyunSMS" SMSSenderTencentSMS = "tencentSMS" ) type SMSSenderConfig struct { IsOn bool `yaml:"isOn" json:"isOn"` Type SMSSenderType `yaml:"type" json:"type"` WebHookParams *SMSSenderWebHookParams `yaml:"webHookParams" json:"webHookParams"` AliyunSMSParams *SMSSenderAliyunSMSParams `yaml:"aliyunSMSParams" json:"aliyunSMSParams"` TencentSMSParams *SMSSenderTencentSMSParams `yaml:"tencentSMSParams" json:"tencentSMSParams"` } func NewSMSSenderConfig() *SMSSenderConfig { return &SMSSenderConfig{ IsOn: true, Type: SMSSenderWebHook, WebHookParams: &SMSSenderWebHookParams{ URL: "", Method: "GET", }, AliyunSMSParams: &SMSSenderAliyunSMSParams{ CodeVarName: "code", }, TencentSMSParams: &SMSSenderTencentSMSParams{}, } } func (this *SMSSenderConfig) ParamsJSON() ([]byte, error) { var params any switch this.Type { case SMSSenderWebHook: params = this.WebHookParams case SMSSenderAliyunSMS: params = this.AliyunSMSParams case SMSSenderTencentSMS: params = this.TencentSMSParams default: return nil, errors.New("not supported type '" + this.Type + "'") } return json.Marshal(params) } type SMSSenderWebHookParams struct { URL string `yaml:"url" json:"url"` // (http|https)://... Method string `yaml:"method" json:"method"` // GET|POST } type SMSSenderAliyunSMSParams struct { Sign string `yaml:"sign" json:"sign"` // 签名名称 TemplateCode string `yaml:"templateCode" json:"templateCode"` // 模板CODE CodeVarName string `yaml:"codeVarName" json:"codeVarName"` // 验证码变量 AccessKeyId string `yaml:"accessKeyId" json:"accessKeyId"` // AccessKeyId AccessKeySecret string `yaml:"accessKeySecret" json:"accessKeySecret"` // AccessKeySecret } type SMSSenderTencentSMSParams struct { SDKAppId string `yaml:"sdkAppId" json:"sdkAppId"` // 应用ID Sign string `yaml:"sign" json:"sign"` // 签名名称 TemplateId string `yaml:"templateId" json:"templateId"` // 模板ID AccessKeyId string `yaml:"accessKeyId" json:"accessKeyId"` // AccessKeyId AccessKeySecret string `yaml:"accessKeySecret" json:"accessKeySecret"` // AccessKeySecret } type UserSenderConfig struct { VerifyEmail *EmailSenderConfig `yaml:"verifyEmail" json:"verifyEmail"` // 验证邮件 NotifyEmail *EmailSenderConfig `yaml:"notifyEmail" json:"notifyEmail"` // 通知邮件 VerifySMS *SMSSenderConfig `yaml:"verifySMS" json:"verifySMS"` // 验证短信 NotifySMS *SMSSenderConfig `yaml:"notifySMS" json:"notifySMS"` // 通知短信 } func DefaultUserSenderConfig() *UserSenderConfig { return &UserSenderConfig{} }