pki/src/config/main.go

112 lines
3.1 KiB
Go
Raw Normal View History

2020-11-25 20:36:07 +01:00
package config
import (
"flag"
"fmt"
"git.paulbsd.com/paulbsd/pki/utils"
"github.com/go-acme/lego/v4/lego"
"gopkg.in/ini.v1"
"xorm.io/xorm"
)
// GetConfig fetch configuration
func (cfg *Config) GetConfig() error {
var configfile string
var debug bool
var drop bool
var port int
var init bool
flag.Usage = utils.Usage
flag.StringVar(&configfile, "configfile", "pki.ini", "Configuration file to use with pki section")
flag.IntVar(&port, "port", 8080, "Web service port to use")
flag.BoolVar(&debug, "debug", false, "If debug logging must be enabled")
flag.BoolVar(&drop, "drop", false, "If dropping tables must occur")
flag.BoolVar(&init, "init", false, "If init of database must be done")
flag.Parse()
cfg.Switchs.Port = port
cfg.Switchs.Debug = debug
cfg.Switchs.Drop = drop
cfg.Switchs.Init = init
inicfg, err := ini.Load(configfile)
if err != nil {
return err
}
pkisection := inicfg.Section("pki")
options := make(map[string]string)
cfg.DbParams.DbHostname = pkisection.Key("db_hostname").MustString("localhost")
cfg.DbParams.DbName = pkisection.Key("db_name").MustString("database")
cfg.DbParams.DbUsername = pkisection.Key("db_username").MustString("username")
cfg.DbParams.DbPassword = pkisection.Key("db_password").MustString("password")
cfg.Options.HideBanner = pkisection.Key("hidebanner").MustBool(true)
cfg.Init.Email = pkisection.Key("email").MustString("email@email.com")
cfg.Init.Username = pkisection.Key("username").MustString("pki")
cfg.Init.Password = pkisection.Key("password").MustString("P@ssw0rd!")
cfg.ACME.Env = pkisection.Key("env").MustString("prod")
cfg.ACME.MaxDaysBefore = pkisection.Key("maxdaysbefore").MustInt(0)
options["ovhendpoint"] = pkisection.Key("ovhendpoint").MustString("ovh-eu")
options["ovhak"] = pkisection.Key("ovhak").MustString("")
options["ovhas"] = pkisection.Key("ovhas").MustString("")
options["ovhck"] = pkisection.Key("ovhck").MustString("")
cfg.ACME.ProviderOptions = options
for k, v := range options {
if v == "" {
utils.Advice(fmt.Sprintf("OVH provider parameter %s not set", k))
}
}
switch cfg.ACME.Env {
case "prod":
cfg.ACME.AuthURL = lego.LEDirectoryProduction
case "staging":
cfg.ACME.AuthURL = lego.LEDirectoryStaging
}
return nil
}
// Config is the global config
type Config struct {
Db *xorm.Engine `json:"-"`
DbParams struct {
DbHostname string `json:"dbhostname"`
DbName string `json:"dbname"`
DbUsername string `json:"dbusername"`
DbPassword string `json:"dbpassword"`
} `json:"dbparams"`
Options struct {
Version string `json:"version"`
HideBanner bool `json:"hidebanner"`
} `json:"-"`
Switchs struct {
Port int `json:"port"`
NoFeed bool `json:"nofeed"`
Debug bool `json:"debug"`
Drop bool `json:"drop"`
Init bool `json:"init"`
} `json:"-"`
ACME struct {
Env string `json:"env"`
AuthURL string `json:"authurl"`
ProviderOptions map[string]string `json:"provideroptions"`
MaxDaysBefore int `json:"maxdaysbefore"`
}
Init struct {
Email string `json:"email"`
Username string `json:"username"`
Password string `json:"password"`
} `json:"-"`
}