changed default data directory as stated in #1

This commit is contained in:
michael1011 2018-03-30 15:17:23 +02:00
parent 706a974fee
commit 8c2f331303
No known key found for this signature in database
GPG Key ID: 84D249BA71685D46
4 changed files with 107 additions and 31 deletions

110
config.go
View File

@ -1,9 +1,11 @@
package main package main
import ( import (
"fmt"
"github.com/jessevdk/go-flags" "github.com/jessevdk/go-flags"
"github.com/michael1011/lightningtip/backends" "github.com/michael1011/lightningtip/backends"
"github.com/op/go-logging" "github.com/op/go-logging"
"os"
"os/user" "os/user"
"path" "path"
"runtime" "runtime"
@ -13,12 +15,14 @@ import (
const ( const (
defaultConfigFile = "lightningTip.conf" defaultConfigFile = "lightningTip.conf"
defaultDataDir = "LightningTip"
defaultLogFile = "lightningTip.log" defaultLogFile = "lightningTip.log"
defaultLogLevel = "debug" defaultLogLevel = "info"
defaultRESTHost = "0.0.0.0:8081" defaultRESTHost = "0.0.0.0:8081"
defaultTlsCertFile = "" defaultTLSCertFile = ""
defaultTlsKeyFile = "" defaultTLSKeyFile = ""
defaultAccessDomain = "" defaultAccessDomain = ""
@ -32,12 +36,14 @@ const (
type config struct { type config struct {
ConfigFile string `long:"config" Description:"Location of the config file"` ConfigFile string `long:"config" Description:"Location of the config file"`
DataDir string `long:"datadir" Description:"Location of the data stored by LightningTip"`
LogFile string `long:"logfile" Description:"Location of the log file"` LogFile string `long:"logfile" Description:"Location of the log file"`
LogLevel string `long:"loglevel" Description:"Log level: debug, info, warning, error"` LogLevel string `long:"loglevel" Description:"Log level: debug, info, warning, error"`
RESTHost string `long:"resthost" Description:"Host for the REST interface of LightningTip"` RESTHost string `long:"resthost" Description:"Host for the REST interface of LightningTip"`
TlsCertFile string `long:"tlscertfile" Description:"Certificate for using LightningTip via HTTPS"` TLSCertFile string `long:"tlscertfile" Description:"Certificate for using LightningTip via HTTPS"`
TlsKeyFile string `long:"tlskeyfile" Description:"Certificate for using LightningTip via HTTPS"` TLSKeyFile string `long:"tlskeyfile" Description:"Certificate for using LightningTip via HTTPS"`
AccessDomain string `long:"accessdomain" Description:"The domain you are using LightningTip from"` AccessDomain string `long:"accessdomain" Description:"The domain you are using LightningTip from"`
@ -51,17 +57,17 @@ var cfg config
var backend backends.Backend var backend backends.Backend
func initConfig() { func initConfig() {
lndDir := getDefaultLndDir()
cfg = config{ cfg = config{
ConfigFile: defaultConfigFile, ConfigFile: path.Join(getDefaultDataDir(), defaultConfigFile),
LogFile: defaultLogFile, DataDir: getDefaultDataDir(),
LogFile: path.Join(getDefaultDataDir(), defaultLogFile),
LogLevel: defaultLogLevel, LogLevel: defaultLogLevel,
RESTHost: defaultRESTHost, RESTHost: defaultRESTHost,
TlsCertFile: defaultTlsCertFile, TLSCertFile: defaultTLSCertFile,
TlsKeyFile: defaultTlsKeyFile, TLSKeyFile: defaultTLSKeyFile,
AccessDomain: defaultAccessDomain, AccessDomain: defaultAccessDomain,
@ -69,8 +75,8 @@ func initConfig() {
LND: &backends.LND{ LND: &backends.LND{
GRPCHost: defaultLndGRPCHost, GRPCHost: defaultLndGRPCHost,
CertFile: path.Join(lndDir, defaultLndCertFile), CertFile: path.Join(getDefaultLndDir(), defaultLndCertFile),
MacaroonFile: path.Join(lndDir, defaultMacaroonFile), MacaroonFile: path.Join(getDefaultLndDir(), defaultMacaroonFile),
}, },
} }
@ -82,7 +88,7 @@ func initConfig() {
// Parse flags again to override config file // Parse flags again to override config file
_, err := flags.Parse(&cfg) _, err := flags.Parse(&cfg)
// Default log level // Default log level if parsing fails
logLevel := logging.DEBUG logLevel := logging.DEBUG
switch strings.ToLower(cfg.LogLevel) { switch strings.ToLower(cfg.LogLevel) {
@ -96,33 +102,95 @@ func initConfig() {
logLevel = logging.ERROR logLevel = logging.ERROR
} }
initLogFile(cfg.LogFile, logLevel) // Create data directory
var errDataDir error
var dataDirCreated bool
if _, err := os.Stat(getDefaultDataDir()); os.IsNotExist(err) {
errDataDir = os.Mkdir(getDefaultDataDir(), 0700)
dataDirCreated = true
}
errLogFile := initLogger(cfg.LogFile, logLevel)
// Show error messages
if err != nil { if err != nil {
log.Error("Failed to parse command line flags") log.Error("Failed to parse command line flags")
} }
if errDataDir != nil {
log.Error("Could not create data directory")
log.Debug("Data directory path: " + getDefaultDataDir())
} else if dataDirCreated {
log.Debug("Created data directory: " + getDefaultDataDir())
}
if errFile != nil { if errFile != nil {
log.Infof("Failed to parse config file: %v", errFile) log.Warning("Failed to parse config file: " + fmt.Sprint(errFile))
} else {
log.Debug("Parsed config file: " + cfg.ConfigFile)
}
if errLogFile != nil {
log.Error("Failed to initialize log file: " + fmt.Sprint(err))
} else {
log.Debug("Initialized log file: " + cfg.LogFile)
} }
// TODO: add more backend options like for example c-lighting and eclair // TODO: add more backend options like for example c-lighting and eclair
backend = cfg.LND backend = cfg.LND
} }
func getDefaultDataDir() (dir string) {
homeDir := getHomeDir()
switch runtime.GOOS {
case "windows":
fallthrough
case "darwin":
dir = path.Join(homeDir, defaultDataDir)
default:
dir = path.Join(homeDir, "."+strings.ToLower(defaultDataDir))
}
return dir
}
func getDefaultLndDir() (dir string) { func getDefaultLndDir() (dir string) {
homeDir := getHomeDir()
switch runtime.GOOS {
case "darwin":
fallthrough
case "windows":
dir = path.Join(homeDir, "Lnd")
default:
dir = path.Join(homeDir, ".lnd")
}
return dir
}
func getHomeDir() (dir string) {
usr, err := user.Current() usr, err := user.Current()
if err == nil { if err == nil {
switch runtime.GOOS { switch runtime.GOOS {
case "windows":
dir = path.Join(usr.HomeDir, "AppData/Local/Lnd")
case "darwin": case "darwin":
dir = path.Join(usr.HomeDir, "Library/Application Support/Lnd/tls.cert") dir = path.Join(usr.HomeDir, "Library/Application Support")
case "windows":
dir = path.Join(usr.HomeDir, "AppData/Local")
default: default:
dir = path.Join(usr.HomeDir, ".lnd") dir = usr.HomeDir
} }
} }

View File

@ -54,6 +54,7 @@ type errorResponse struct {
Error string Error string
} }
// TODO: add setup guide for systemd
// TODO: add option to show URI of Lightning node // TODO: add option to show URI of Lightning node
func main() { func main() {
initLog() initLog()
@ -121,15 +122,15 @@ func main() {
go func() { go func() {
var err error var err error
if cfg.TlsCertFile != "" && cfg.TlsKeyFile != "" { if cfg.TLSCertFile != "" && cfg.TLSKeyFile != "" {
err = http.ListenAndServeTLS(cfg.RESTHost, cfg.TlsCertFile, cfg.TlsKeyFile, nil) err = http.ListenAndServeTLS(cfg.RESTHost, cfg.TLSCertFile, cfg.TLSKeyFile, nil)
} else { } else {
err = http.ListenAndServe(cfg.RESTHost, nil) err = http.ListenAndServe(cfg.RESTHost, nil)
} }
if err != nil { if err != nil {
log.Error("Failed to start HTTP server: " + fmt.Sprint(err)) log.Errorf("Failed to start HTTP server: " + fmt.Sprint(err))
os.Exit(1) os.Exit(1)
} }

9
log.go
View File

@ -1,7 +1,6 @@
package main package main
import ( import (
"fmt"
"github.com/op/go-logging" "github.com/op/go-logging"
"os" "os"
) )
@ -17,13 +16,11 @@ func initLog() {
logging.SetBackend(backendConsole) logging.SetBackend(backendConsole)
} }
func initLogFile(logFile string, level logging.Level) { func initLogger(logFile string, level logging.Level) error {
file, err := os.OpenFile(logFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0600) file, err := os.OpenFile(logFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0600)
if err != nil { if err != nil {
log.Error("Failed to initialize log file: " + fmt.Sprint(err)) return err
return
} }
backendFile := logging.NewLogBackend(file, "", 0) backendFile := logging.NewLogBackend(file, "", 0)
@ -36,5 +33,5 @@ func initLogFile(logFile string, level logging.Level) {
logging.SetBackend(backendConsoleLeveled, backendFileLeveled) logging.SetBackend(backendConsoleLeveled, backendFileLeveled)
log.Debug("Successfully initialized log file") return nil
} }

View File

@ -1,4 +1,14 @@
[Application Options] [Application Options]
# Directory for all data stored by LightningTip (config and log file)
# Gets overwritten by individual settings and flags like: "logfile" and "config"
#
# Defaults values:
# Darwin (macOS): /Users/<user>/Library/Application Support/LightningTip
# Linux: /home/<user>/.lightningtip
# Windows: C:\Users\<user>\AppData\Local\LightningTip
#
# datadir =
# Location of the log file # Location of the log file
# logfile = lightningTip.log # logfile = lightningTip.log