增加bark配置
This commit is contained in:
@@ -157,25 +157,11 @@ func VerifyBackendLoginCode(tenantName, account, channel, code string) error {
|
||||
}
|
||||
|
||||
func getDefaultSystemSMSConfig() (backendURL string, apiKey string, err error) {
|
||||
var row models.SystemSMS
|
||||
err = models.Orm.QueryTable(new(models.SystemSMS)).
|
||||
Filter("is_default", 1).
|
||||
Filter("status", 1).
|
||||
OrderBy("-weight", "-id").
|
||||
Limit(1).
|
||||
One(&row)
|
||||
if err != nil {
|
||||
err2 := models.Orm.QueryTable(new(models.SystemSMS)).
|
||||
Filter("config_code", "custom").
|
||||
OrderBy("-id").
|
||||
Limit(1).
|
||||
One(&row)
|
||||
if err2 != nil {
|
||||
return "", "", err2
|
||||
}
|
||||
backendURL = models.GetPlatformSettingValue("sms_custom_url", "")
|
||||
apiKey = models.GetPlatformSettingValue("sms_custom_key", "")
|
||||
if backendURL == "" || apiKey == "" {
|
||||
return "", "", fmt.Errorf("短信网关未配置")
|
||||
}
|
||||
backendURL = strings.TrimSpace(row.ApiURL)
|
||||
apiKey = strings.TrimSpace(row.ApiKey)
|
||||
return backendURL, apiKey, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -2,19 +2,51 @@ package services
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"server/models"
|
||||
)
|
||||
|
||||
// ListSystemEmails 返回全部邮箱配置(按 id 升序,通常仅一条)
|
||||
// ListSystemEmails 返回从 yz_platform_normal_setting 组装的邮箱配置(切片,通常仅一条)
|
||||
func ListSystemEmails() ([]models.SystemEmail, error) {
|
||||
var rows []models.SystemEmail
|
||||
_, err := models.Orm.QueryTable(new(models.SystemEmail)).OrderBy("id").All(&rows)
|
||||
return rows, err
|
||||
enabledStr := models.GetPlatformSettingValue("email_enabled", "0")
|
||||
fromAddress := models.GetPlatformSettingValue("email_from_address", "")
|
||||
fromName := models.GetPlatformSettingValue("email_from_name", "")
|
||||
host := models.GetPlatformSettingValue("email_host", "")
|
||||
portStr := models.GetPlatformSettingValue("email_port", "465")
|
||||
password := models.GetPlatformSettingValue("email_password", "")
|
||||
encryption := models.GetPlatformSettingValue("email_encryption", "ssl")
|
||||
timeoutStr := models.GetPlatformSettingValue("email_timeout", "30")
|
||||
|
||||
status := int8(0)
|
||||
if enabledStr == "1" {
|
||||
status = 1
|
||||
}
|
||||
portVal, _ := strconv.ParseUint(portStr, 10, 32)
|
||||
timeoutVal, _ := strconv.ParseUint(timeoutStr, 10, 32)
|
||||
|
||||
row := models.SystemEmail{
|
||||
ID: 1,
|
||||
FromAddress: fromAddress,
|
||||
Host: host,
|
||||
Port: uint(portVal),
|
||||
Password: password,
|
||||
Encryption: encryption,
|
||||
Timeout: uint(timeoutVal),
|
||||
Status: status,
|
||||
CreateTime: time.Now(),
|
||||
UpdateTime: time.Now(),
|
||||
}
|
||||
if fromName != "" {
|
||||
row.FromName = &fromName
|
||||
}
|
||||
|
||||
return []models.SystemEmail{row}, nil
|
||||
}
|
||||
|
||||
// UpsertFirstSystemEmail 若已有记录则更新第一条,否则插入
|
||||
// UpsertFirstSystemEmail 将邮箱配置保存到 yz_platform_normal_setting 表中
|
||||
func UpsertFirstSystemEmail(fromAddress string, fromName *string, host string, port uint, password string, encryption string, timeout uint, status int8, remark *string) error {
|
||||
if encryption == "" {
|
||||
encryption = "ssl"
|
||||
@@ -28,47 +60,76 @@ func UpsertFirstSystemEmail(fromAddress string, fromName *string, host string, p
|
||||
fromAddress = strings.TrimSpace(fromAddress)
|
||||
host = strings.TrimSpace(host)
|
||||
|
||||
cnt, err := models.Orm.QueryTable(new(models.SystemEmail)).Count()
|
||||
if err != nil {
|
||||
return err
|
||||
fn := ""
|
||||
if fromName != nil {
|
||||
fn = *fromName
|
||||
}
|
||||
if cnt == 0 {
|
||||
if strings.TrimSpace(password) == "" {
|
||||
|
||||
statusStr := "0"
|
||||
if status == 1 {
|
||||
statusStr = "1"
|
||||
}
|
||||
|
||||
settings := []struct {
|
||||
code string
|
||||
name string
|
||||
value string
|
||||
remark string
|
||||
}{
|
||||
{"email_enabled", "邮件服务启用状态", statusStr, "0为关闭,1为开启"},
|
||||
{"email_from_address", "发件人邮箱", fromAddress, ""},
|
||||
{"email_from_name", "发件人名称", fn, ""},
|
||||
{"email_host", "SMTP 服务器地址", host, ""},
|
||||
{"email_port", "SMTP 端口", strconv.FormatUint(uint64(port), 10), ""},
|
||||
{"email_encryption", "邮件加密方式", encryption, "支持 ssl/tls/none"},
|
||||
{"email_timeout", "邮件发送超时时间", strconv.FormatUint(uint64(timeout), 10), ""},
|
||||
}
|
||||
|
||||
// 如果传入了新密码,或者目前还没有保存过密码,才更新密码
|
||||
if strings.TrimSpace(password) != "" {
|
||||
settings = append(settings, struct {
|
||||
code string
|
||||
name string
|
||||
value string
|
||||
remark string
|
||||
}{"email_password", "邮件授权码/密码", strings.TrimSpace(password), ""})
|
||||
} else {
|
||||
// 校验:如果完全没有配置过密码,必须填写密码
|
||||
existingPass := models.GetPlatformSettingValue("email_password", "")
|
||||
if existingPass == "" {
|
||||
return fmt.Errorf("首次保存必须填写授权码/密码")
|
||||
}
|
||||
row := &models.SystemEmail{
|
||||
FromAddress: fromAddress,
|
||||
FromName: fromName,
|
||||
Host: host,
|
||||
Port: port,
|
||||
Password: strings.TrimSpace(password),
|
||||
Encryption: encryption,
|
||||
Timeout: timeout,
|
||||
Status: status,
|
||||
Remark: remark,
|
||||
}
|
||||
|
||||
for _, item := range settings {
|
||||
var setting models.PlatformNormalSetting
|
||||
err := models.Orm.QueryTable(new(models.PlatformNormalSetting)).
|
||||
Filter("code", item.code).
|
||||
Filter("delete_time__isnull", true).
|
||||
One(&setting)
|
||||
if err == nil {
|
||||
setting.Value = item.value
|
||||
setting.Name = item.name
|
||||
setting.Remark = item.remark
|
||||
now := time.Now()
|
||||
setting.UpdateTime = &now
|
||||
_, err = models.Orm.Update(&setting, "Value", "Name", "Remark", "UpdateTime")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
newSetting := models.PlatformNormalSetting{
|
||||
Name: item.name,
|
||||
Code: item.code,
|
||||
Value: item.value,
|
||||
Remark: item.remark,
|
||||
CreateTime: time.Now(),
|
||||
}
|
||||
_, err = models.Orm.Insert(&newSetting)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
_, err = models.Orm.Insert(row)
|
||||
return err
|
||||
}
|
||||
|
||||
var first models.SystemEmail
|
||||
if err := models.Orm.QueryTable(new(models.SystemEmail)).OrderBy("id").Limit(1).One(&first); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
up := map[string]interface{}{
|
||||
"from_address": fromAddress,
|
||||
"from_name": fromName,
|
||||
"host": host,
|
||||
"port": port,
|
||||
"encryption": encryption,
|
||||
"timeout": timeout,
|
||||
"status": status,
|
||||
"remark": remark,
|
||||
}
|
||||
if strings.TrimSpace(password) != "" {
|
||||
up["password"] = strings.TrimSpace(password)
|
||||
}
|
||||
_, err = models.Orm.QueryTable(new(models.SystemEmail)).Filter("id", first.ID).Update(up)
|
||||
return err
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -3,32 +3,36 @@ package services
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/beego/beego/v2/client/orm"
|
||||
"server/models"
|
||||
)
|
||||
|
||||
// GetSiteReminderConfig 获取站内信配置(只读首条记录,不存在则初始化默认值)
|
||||
// GetSiteReminderConfig 获取站内信配置(从 yz_platform_normal_setting 读取)
|
||||
func GetSiteReminderConfig() (models.SystemSiteReminder, error) {
|
||||
var row models.SystemSiteReminder
|
||||
err := models.Orm.QueryTable(new(models.SystemSiteReminder)).OrderBy("id").Limit(1).One(&row)
|
||||
if err == orm.ErrNoRows {
|
||||
// 默认配置
|
||||
now := time.Now()
|
||||
row = models.SystemSiteReminder{
|
||||
RetentionDays: 30,
|
||||
AutoRead: 0,
|
||||
CreateTime: &now,
|
||||
UpdateTime: &now,
|
||||
}
|
||||
_, err = models.Orm.Insert(&row)
|
||||
if err != nil {
|
||||
return row, err
|
||||
}
|
||||
return row, nil
|
||||
retentionDaysStr := models.GetPlatformSettingValue("sitemsg_retention_days", "30")
|
||||
autoReadStr := models.GetPlatformSettingValue("sitemsg_auto_read", "0")
|
||||
|
||||
retentionDays, _ := strconv.Atoi(retentionDaysStr)
|
||||
if retentionDays <= 0 {
|
||||
retentionDays = 30
|
||||
}
|
||||
return row, err
|
||||
autoRead := int8(0)
|
||||
if autoReadStr == "1" {
|
||||
autoRead = 1
|
||||
}
|
||||
|
||||
now := time.Now()
|
||||
row := models.SystemSiteReminder{
|
||||
ID: 1,
|
||||
RetentionDays: retentionDays,
|
||||
AutoRead: autoRead,
|
||||
CreateTime: &now,
|
||||
UpdateTime: &now,
|
||||
}
|
||||
return row, nil
|
||||
}
|
||||
|
||||
// SaveSiteReminderConfig 保存/更新配置
|
||||
@@ -36,17 +40,53 @@ func SaveSiteReminderConfig(retentionDays int, autoRead int8) error {
|
||||
if retentionDays <= 0 {
|
||||
retentionDays = 30
|
||||
}
|
||||
cfg, err := GetSiteReminderConfig()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
now := time.Now()
|
||||
cfg.RetentionDays = retentionDays
|
||||
cfg.AutoRead = autoRead
|
||||
cfg.UpdateTime = &now
|
||||
|
||||
_, err = models.Orm.Update(&cfg, "RetentionDays", "AutoRead", "UpdateTime")
|
||||
return err
|
||||
autoReadStr := "0"
|
||||
if autoRead == 1 {
|
||||
autoReadStr = "1"
|
||||
}
|
||||
|
||||
settings := []struct {
|
||||
code string
|
||||
name string
|
||||
value string
|
||||
remark string
|
||||
}{
|
||||
{"sitemsg_retention_days", "站内信消息保留天数", strconv.Itoa(retentionDays), ""},
|
||||
{"sitemsg_auto_read", "自动标记已读状态", autoReadStr, "0为关闭,1为开启"},
|
||||
}
|
||||
|
||||
for _, item := range settings {
|
||||
var setting models.PlatformNormalSetting
|
||||
err := models.Orm.QueryTable(new(models.PlatformNormalSetting)).
|
||||
Filter("code", item.code).
|
||||
Filter("delete_time__isnull", true).
|
||||
One(&setting)
|
||||
if err == nil {
|
||||
setting.Value = item.value
|
||||
setting.Name = item.name
|
||||
setting.Remark = item.remark
|
||||
now := time.Now()
|
||||
setting.UpdateTime = &now
|
||||
_, err = models.Orm.Update(&setting, "Value", "Name", "Remark", "UpdateTime")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
newSetting := models.PlatformNormalSetting{
|
||||
Name: item.name,
|
||||
Code: item.code,
|
||||
Value: item.value,
|
||||
Remark: item.remark,
|
||||
CreateTime: time.Now(),
|
||||
}
|
||||
_, err = models.Orm.Insert(&newSetting)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// SendSiteReminder 发送站内信
|
||||
|
||||
Reference in New Issue
Block a user