106 lines
3.6 KiB
Go
106 lines
3.6 KiB
Go
// 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{}
|
|
}
|