mirror of https://github.com/ouqiang/gocron
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
3.9 KiB
174 lines
3.9 KiB
package models
|
|
|
|
import (
|
|
"encoding/json"
|
|
)
|
|
|
|
type Setting struct {
|
|
Id int `xorm:"int pk autoincr"`
|
|
Code string `xorm:"varchar(32) notnull"`
|
|
Key string `xorm:"varchar(64) notnull"`
|
|
Value string `xorm:"varchar(4096) notnull default '' "`
|
|
}
|
|
|
|
const SlackCode = "slack"
|
|
const SlackUrlKey = "url"
|
|
const SlackChannelKey = "channel"
|
|
|
|
const MailCode = "mail"
|
|
const MailServerKey = "server"
|
|
const MailUserKey = "user"
|
|
|
|
// 初始化基本字段 邮件、slack等
|
|
func (setting *Setting) InitBasicField() {
|
|
setting.Code = SlackCode;
|
|
setting.Key = SlackUrlKey
|
|
Db.Insert(setting)
|
|
|
|
setting.Id = 0
|
|
setting.Code = MailCode
|
|
setting.Key = MailServerKey
|
|
Db.Insert(setting)
|
|
}
|
|
|
|
// region slack配置
|
|
|
|
type Slack struct {
|
|
Url string
|
|
Channels []Channel
|
|
}
|
|
|
|
type Channel struct {
|
|
Id int
|
|
Name string
|
|
}
|
|
|
|
func (setting *Setting) Slack() (Slack, error) {
|
|
list := make([]Setting, 0)
|
|
err := Db.Where("code = ?", SlackCode).Find(&list)
|
|
slack := Slack{Url:"", Channels:make([]Channel, 0)}
|
|
if err != nil {
|
|
return slack, err
|
|
}
|
|
|
|
setting.formatSlack(list, &slack)
|
|
|
|
return slack, err
|
|
}
|
|
|
|
func (setting *Setting) formatSlack(list []Setting, slack *Slack) {
|
|
for _, v := range list {
|
|
if v.Key == SlackUrlKey {
|
|
slack.Url = v.Value
|
|
continue
|
|
}
|
|
|
|
slack.Channels = append(slack.Channels, Channel{
|
|
v.Id, v.Value,
|
|
})
|
|
}
|
|
}
|
|
|
|
// 更新slack webhook url
|
|
func (setting *Setting) UpdateSlackUrl(url string) (int64, error) {
|
|
setting.Value = url
|
|
|
|
return Db.Cols("value").Update(setting, Setting{Code:SlackCode, Key:SlackUrlKey})
|
|
}
|
|
|
|
|
|
// 创建slack渠道
|
|
func (setting *Setting) CreateChannel(channel string) (int64, error) {
|
|
setting.Code = SlackCode
|
|
setting.Key = SlackChannelKey
|
|
setting.Value = channel
|
|
|
|
return Db.Insert(setting)
|
|
}
|
|
|
|
func (setting *Setting) IsChannelExist(channel string) (bool) {
|
|
setting.Code = SlackCode
|
|
setting.Key = SlackChannelKey
|
|
setting.Value = channel
|
|
|
|
count, _ := Db.Count(setting)
|
|
|
|
return count > 0
|
|
}
|
|
|
|
// 删除slack渠道
|
|
func (setting *Setting) RemoveChannel(id int) (int64, error) {
|
|
setting.Code = SlackCode
|
|
setting.Key = SlackChannelKey
|
|
setting.Id = id
|
|
return Db.Delete(setting)
|
|
}
|
|
|
|
// endregion
|
|
|
|
type Mail struct {
|
|
Host string
|
|
Port int
|
|
User string
|
|
Password string
|
|
MailUsers []MailUser
|
|
}
|
|
|
|
type MailUser struct {
|
|
Id int
|
|
Username string
|
|
Email string
|
|
}
|
|
|
|
// region 邮件配置
|
|
func (setting *Setting) Mail() (Mail, error) {
|
|
list := make([]Setting, 0)
|
|
err := Db.Where("code = ?", MailCode).Find(&list)
|
|
mail := Mail{MailUsers:make([]MailUser, 0)}
|
|
if err != nil {
|
|
return mail, err
|
|
}
|
|
|
|
setting.formatMail(list, &mail)
|
|
|
|
return mail, err
|
|
}
|
|
|
|
func (setting *Setting) formatMail(list []Setting, mail *Mail) {
|
|
mailUser := MailUser{}
|
|
for _, v := range list {
|
|
if v.Key == MailServerKey {
|
|
json.Unmarshal([]byte(v.Value), mail)
|
|
continue
|
|
}
|
|
json.Unmarshal([]byte(v.Value), &mailUser)
|
|
mailUser.Id = v.Id
|
|
mail.MailUsers = append(mail.MailUsers, mailUser)
|
|
}
|
|
}
|
|
|
|
func (setting *Setting) UpdateMailServer(config string) (int64, error) {
|
|
setting.Value = config
|
|
return Db.Cols("value").Update(setting, Setting{Code:MailCode, Key:MailServerKey})
|
|
}
|
|
|
|
func (setting *Setting) CreateMailUser(username, email string) (int64, error) {
|
|
setting.Code = MailCode
|
|
setting.Key = MailUserKey
|
|
mailUser := MailUser{0, username, email}
|
|
jsonByte, err := json.Marshal(mailUser)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
setting.Value = string(jsonByte)
|
|
|
|
return Db.Insert(setting)
|
|
}
|
|
|
|
func (setting *Setting) RemoveMailUser(id int) (int64, error) {
|
|
setting.Code = MailCode
|
|
setting.Key = MailUserKey
|
|
setting.Id = id
|
|
return Db.Delete(setting)
|
|
}
|
|
// endregion
|