apiary/config/config.go

90 lines
2.1 KiB
Go
Raw Normal View History

2021-04-10 05:58:01 +00:00
package config
import (
"fmt"
"io"
"os"
"strings"
"github.com/pelletier/go-toml"
)
type Config struct {
Store StoreConfig `toml:"Store"`
Honeypot HoneypotConfig `toml:"Honeypot"`
Frontend FrontendConfig `toml:"Frontend"`
}
type StoreConfig struct {
2021-09-17 00:01:43 +00:00
Type string `toml:"Type"`
EnableCache bool `toml:"EnableCache"`
Postgres PostgresStoreConfig `toml:"Postgres"`
2022-08-31 21:22:20 +00:00
Bolt BoltStoreConfig `toml:"Bolt"`
2021-04-10 05:58:01 +00:00
}
type PostgresStoreConfig struct {
DSN string `toml:"DSN"`
}
2022-08-31 21:22:20 +00:00
type BoltStoreConfig struct {
DBPath string `toml:"DBPath"`
}
2021-04-10 05:58:01 +00:00
type HoneypotConfig struct {
2021-04-11 00:24:39 +00:00
ListenAddr string `toml:"ListenAddr"`
LogLevel string `toml:"LogLevel"`
HostKeyPath string `toml:"HostKeyPath"`
ThrottleSpeed float64 `toml:"ThrottleSpeed"`
2021-04-10 05:58:01 +00:00
}
type FrontendConfig struct {
ListenAddr string `toml:"ListenAddr"`
LogLevel string `toml:"LogLevel"`
AccessLogEnable bool `toml:"AccessLogEnable"`
AccessLogIgnoreMetrics bool `toml:"AccessLogIgnoreMetrics"`
Autocert FrontendAutocertConfig `toml:"Autocert"`
2021-04-10 09:24:10 +00:00
}
type FrontendAutocertConfig struct {
Enable bool `toml:"Enable"`
Email string `toml:"Email"`
Domains []string `toml:"Domains"`
CacheDir string `toml:"CacheDir"`
RedirectHTTP bool `toml:"RedirectHTTP"`
2021-04-10 05:58:01 +00:00
}
func FromReader(r io.Reader) (Config, error) {
var c Config
// Set some defaults
c.Honeypot.ListenAddr = ":2222"
c.Honeypot.LogLevel = "INFO"
c.Frontend.ListenAddr = ":8080"
c.Frontend.LogLevel = "INFO"
c.Frontend.AccessLogEnable = true
// Read from config
decoder := toml.NewDecoder(r)
if err := decoder.Decode(&c); err != nil {
return c, fmt.Errorf("unable to parse config: %w", err)
}
// c.readEnv()
2021-04-10 05:58:01 +00:00
return c, nil
}
func FromString(s string) (Config, error) {
r := strings.NewReader(s)
return FromReader(r)
}
func FromFile(path string) (Config, error) {
f, err := os.Open(path)
if err != nil {
return Config{}, fmt.Errorf("error opening config: %w", err)
}
defer f.Close()
return FromReader(f)
}