changed default data directory as stated in #1
This commit is contained in:
parent
706a974fee
commit
8c2f331303
110
config.go
110
config.go
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
9
log.go
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue