103 lines
2.2 KiB
Go
103 lines
2.2 KiB
Go
package bot
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"gitlab.com/etke.cc/postmoogle/utils"
|
|
)
|
|
|
|
// account data key
|
|
const acBotSettingsKey = "cc.etke.postmoogle.config"
|
|
|
|
// bot options keys
|
|
const (
|
|
botOptionUsers = "users"
|
|
botOptionCatchAll = "catch-all"
|
|
botOptionDKIMSignature = "dkim.pub"
|
|
botOptionDKIMPrivateKey = "dkim.pem"
|
|
botOptionQueueBatch = "queue:batch"
|
|
botOptionQueueRetries = "queue:retries"
|
|
)
|
|
|
|
type botSettings map[string]string
|
|
|
|
// Get option
|
|
func (s botSettings) Get(key string) string {
|
|
return s[strings.ToLower(strings.TrimSpace(key))]
|
|
}
|
|
|
|
// Set option
|
|
func (s botSettings) Set(key, value string) {
|
|
s[strings.ToLower(strings.TrimSpace(key))] = value
|
|
}
|
|
|
|
// Users option
|
|
func (s botSettings) Users() []string {
|
|
value := s.Get(botOptionUsers)
|
|
if value == "" {
|
|
return []string{}
|
|
}
|
|
|
|
if strings.Contains(value, " ") {
|
|
return strings.Split(value, " ")
|
|
}
|
|
|
|
return []string{value}
|
|
}
|
|
|
|
// CatchAll option
|
|
func (s botSettings) CatchAll() string {
|
|
return s.Get(botOptionCatchAll)
|
|
}
|
|
|
|
// DKIMSignature (DNS TXT record)
|
|
func (s botSettings) DKIMSignature() string {
|
|
return s.Get(botOptionDKIMSignature)
|
|
}
|
|
|
|
// DKIMPrivateKey keep it secret
|
|
func (s botSettings) DKIMPrivateKey() string {
|
|
return s.Get(botOptionDKIMPrivateKey)
|
|
}
|
|
|
|
// QueueBatch option
|
|
func (s botSettings) QueueBatch() int {
|
|
return utils.Int(s.Get(botOptionQueueBatch))
|
|
}
|
|
|
|
// QueueRetries option
|
|
func (s botSettings) QueueRetries() int {
|
|
return utils.Int(s.Get(botOptionQueueRetries))
|
|
}
|
|
|
|
func (b *Bot) initBotUsers() ([]string, error) {
|
|
config := b.getBotSettings()
|
|
cfgUsers := config.Users()
|
|
if len(cfgUsers) > 0 {
|
|
return cfgUsers, nil
|
|
}
|
|
|
|
_, homeserver, err := b.lp.GetClient().UserID.Parse()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
config.Set(botOptionUsers, "@*:"+homeserver)
|
|
return config.Users(), b.setBotSettings(config)
|
|
}
|
|
|
|
func (b *Bot) getBotSettings() botSettings {
|
|
config, err := b.lp.GetAccountData(acBotSettingsKey)
|
|
if err != nil {
|
|
b.log.Error("cannot get bot settings: %v", utils.UnwrapError(err))
|
|
}
|
|
if config == nil {
|
|
config = map[string]string{}
|
|
}
|
|
|
|
return config
|
|
}
|
|
|
|
func (b *Bot) setBotSettings(cfg botSettings) error {
|
|
return utils.UnwrapError(b.lp.SetAccountData(acBotSettingsKey, cfg))
|
|
}
|