108 lines
3.1 KiB
Go
108 lines
3.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"regexp"
|
|
"strings"
|
|
|
|
"github.com/BurntSushi/toml"
|
|
"go.jolheiser.com/beaver"
|
|
)
|
|
|
|
type Config struct {
|
|
SubReddits []*SubReddit `toml:"subreddit"`
|
|
Map map[string]*SubReddit `toml:"-"`
|
|
|
|
// Agent file
|
|
AppName string `toml:"app_name"`
|
|
Version string `toml:"version"`
|
|
|
|
ClientID string `toml:"client_id"`
|
|
ClientSecret string `toml:"client_secret"`
|
|
|
|
Username string `toml:"username"`
|
|
Password string `toml:"password"`
|
|
}
|
|
|
|
type SubReddit struct {
|
|
Name string `toml:"name"`
|
|
IconURL string `toml:"icon_url"`
|
|
FlairWhitelist []string `toml:"flair_whitelist"`
|
|
FlairWhitelistRe []*regexp.Regexp `toml:"-"`
|
|
FlairBlacklist []string `toml:"flair_blacklist"`
|
|
FlairBlacklistRe []*regexp.Regexp `toml:"-"`
|
|
TitleWhitelist []string `toml:"title_whitelist"`
|
|
TitleWhitelistRe []*regexp.Regexp `toml:"-"`
|
|
TitleBlacklist []string `toml:"title_blacklist"`
|
|
TitleBlacklistRe []*regexp.Regexp `toml:"-"`
|
|
TitleLimit int `toml:"title_limit"`
|
|
BodyWhitelist []string `toml:"body_whitelist"`
|
|
BodyWhitelistRe []*regexp.Regexp `toml:"-"`
|
|
BodyBlacklist []string `toml:"body_blacklist"`
|
|
BodyBlacklistRe []*regexp.Regexp `toml:"-"`
|
|
BodyLimit int `toml:"body_limit"`
|
|
Webhook string `toml:"webhook"`
|
|
}
|
|
|
|
func (c *Config) UserAgent() string {
|
|
return fmt.Sprintf("%s/%s by /u/%s", c.AppName, c.Version, c.Username)
|
|
}
|
|
|
|
func (c *Config) SubRedditNames() []string {
|
|
names := make([]string, len(c.SubReddits))
|
|
for idx, sub := range c.SubReddits {
|
|
names[idx] = sub.Name
|
|
}
|
|
return names
|
|
}
|
|
|
|
func (c *Config) load() {
|
|
for _, sub := range c.SubReddits {
|
|
c.Map[strings.ToLower(sub.Name)] = sub
|
|
if sub.TitleLimit == 0 || sub.TitleLimit > 253 {
|
|
sub.TitleLimit = 253
|
|
}
|
|
if sub.BodyLimit == 0 || sub.BodyLimit > 2045 {
|
|
sub.BodyLimit = 2045
|
|
}
|
|
sub.FlairWhitelistRe = make([]*regexp.Regexp, len(sub.FlairWhitelist))
|
|
for idx, f := range sub.FlairWhitelist {
|
|
sub.FlairWhitelistRe[idx] = regexp.MustCompile(f)
|
|
}
|
|
sub.FlairBlacklistRe = make([]*regexp.Regexp, len(sub.FlairBlacklist))
|
|
for idx, f := range sub.FlairBlacklist {
|
|
sub.FlairBlacklistRe[idx] = regexp.MustCompile(f)
|
|
}
|
|
sub.TitleWhitelistRe = make([]*regexp.Regexp, len(sub.TitleWhitelist))
|
|
for idx, t := range sub.TitleWhitelist {
|
|
sub.TitleWhitelistRe[idx] = regexp.MustCompile(t)
|
|
}
|
|
sub.TitleBlacklistRe = make([]*regexp.Regexp, len(sub.TitleBlacklist))
|
|
for idx, t := range sub.TitleBlacklist {
|
|
sub.TitleBlacklistRe[idx] = regexp.MustCompile(t)
|
|
}
|
|
sub.BodyWhitelistRe = make([]*regexp.Regexp, len(sub.BodyWhitelist))
|
|
for idx, b := range sub.BodyWhitelist {
|
|
sub.BodyWhitelistRe[idx] = regexp.MustCompile(b)
|
|
}
|
|
sub.BodyBlacklistRe = make([]*regexp.Regexp, len(sub.BodyBlacklist))
|
|
for idx, b := range sub.BodyBlacklist {
|
|
sub.BodyBlacklistRe[idx] = regexp.MustCompile(b)
|
|
}
|
|
}
|
|
}
|
|
|
|
func LoadConfig() (*Config, error) {
|
|
cfg := &Config{
|
|
Map: make(map[string]*SubReddit),
|
|
}
|
|
|
|
if _, err := toml.DecodeFile(configPath, &cfg); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
cfg.load()
|
|
beaver.Debug(cfg)
|
|
return cfg, nil
|
|
}
|