lightningtip/config.go

122 lines
2.5 KiB
Go

package main
import (
"github.com/jessevdk/go-flags"
"github.com/michael1011/lightningtip/backends"
"github.com/op/go-logging"
"os/user"
"path"
"runtime"
"strings"
)
const (
defaultConfigFile = "lightningTip.conf"
defaultLogFile = "lightningTip.log"
defaultLogLevel = "debug"
defaultRESTHost = "localhost:8081"
defaultAccessDomain = ""
defaultTipExpiry = 3600
defaultLndGRPCHost = "localhost:10009"
defaultLndCertFile = "tls.cert"
defaultMacaroonFile = "admin.macaroon"
)
type config struct {
ConfigFile string `long:"config" Description:"Location of the config file"`
LogFile string `long:"logfile" Description:"Location of the log file"`
LogLevel string `long:"loglevel" Description:"Log level: debug, info, warning, error"`
RESTHost string `long:"resthost" Description:"Host for the REST interface of LightningTip"`
AccessDomain string `long:"accessdomain" Description:"The domain you are using LightningTip from"`
TipExpiry int64 `long:"tipexpiry" Description:"Invoice expiry time in seconds"`
LND *backends.LND `group:"LND" namespace:"lnd"`
}
var cfg config
var backend backends.Backend
func initConfig() {
lndDir := getDefaultLndDir()
cfg = config{
ConfigFile: defaultConfigFile,
LogFile: defaultLogFile,
LogLevel: defaultLogLevel,
RESTHost: defaultRESTHost,
AccessDomain: defaultAccessDomain,
TipExpiry: defaultTipExpiry,
LND: &backends.LND{
GRPCHost: defaultLndGRPCHost,
CertFile: path.Join(lndDir, defaultLndCertFile),
MacaroonFile: path.Join(lndDir, defaultMacaroonFile),
},
}
_, err := flags.Parse(&cfg)
errFile := flags.IniParse(cfg.ConfigFile, &cfg)
// Parse flags again to override config file
_, err = flags.Parse(&cfg)
// Default log level
logLevel := logging.DEBUG
switch strings.ToLower(cfg.LogLevel) {
case "info":
logLevel = logging.INFO
case "warning":
logLevel = logging.WARNING
case "error":
logLevel = logging.ERROR
}
initLogFile(cfg.LogFile, logLevel)
if err != nil {
log.Error("Failed to parse command line flags")
}
if errFile != nil {
log.Infof("Failed to parse config file: %v", errFile)
}
// TODO: add more backend options like for example c-lighting and eclair
backend = cfg.LND
}
func getDefaultLndDir() (dir string) {
usr, err := user.Current()
if err == nil {
switch runtime.GOOS {
case "windows":
dir = path.Join(usr.HomeDir, "AppData/Local/Lnd")
case "darwin":
dir = path.Join(usr.HomeDir, "Library/Application Support/Lnd/tls.cert")
default:
dir = path.Join(usr.HomeDir, ".lnd")
}
}
return dir
}