1
1
package loopd
2
2
3
3
import (
4
+ "fmt"
5
+ "os"
4
6
"path/filepath"
5
7
6
8
"github.com/btcsuite/btcutil"
7
9
"github.com/lightninglabs/loop/lsat"
10
+ "github.com/lightningnetwork/lnd/lncfg"
8
11
)
9
12
10
13
var (
14
17
defaultLogDirname = "logs"
15
18
defaultLogFilename = "loopd.log"
16
19
defaultLogDir = filepath .Join (loopDirBase , defaultLogDirname )
20
+ defaultConfigFile = filepath .Join (loopDirBase , defaultConfigFilename )
17
21
18
22
defaultMaxLogFiles = 3
19
23
defaultMaxLogFileSize = 10
@@ -43,6 +47,9 @@ type Config struct {
43
47
RESTListen string `long:"restlisten" description:"Address to listen on for REST clients"`
44
48
CORSOrigin string `long:"corsorigin" description:"The value to send in the Access-Control-Allow-Origin header. Header will be omitted if empty."`
45
49
50
+ LoopDir string `long:"loopdir" description:"The directory for all of loop's data."`
51
+ ConfigFile string `long:"configfile" description:"Path to configuration file."`
52
+ DataDir string `long:"datadir" description:"Directory for loopdb."`
46
53
LogDir string `long:"logdir" description:"Directory to log output."`
47
54
MaxLogFiles int `long:"maxlogfiles" description:"Maximum logfiles to keep (0 for no rotation)"`
48
55
MaxLogFileSize int `long:"maxlogfilesize" description:"Maximum logfile size in MB"`
@@ -74,6 +81,9 @@ func DefaultConfig() Config {
74
81
Server : & loopServerConfig {
75
82
NoTLS : false ,
76
83
},
84
+ LoopDir : loopDirBase ,
85
+ ConfigFile : defaultConfigFile ,
86
+ DataDir : loopDirBase ,
77
87
LogDir : defaultLogDir ,
78
88
MaxLogFiles : defaultMaxLogFiles ,
79
89
MaxLogFileSize : defaultMaxLogFileSize ,
@@ -86,3 +96,51 @@ func DefaultConfig() Config {
86
96
},
87
97
}
88
98
}
99
+
100
+ // Validate cleans up paths in the config provided and validates it.
101
+ func Validate (cfg * Config ) error {
102
+ // Cleanup any paths before we use them.
103
+ cfg .LoopDir = lncfg .CleanAndExpandPath (cfg .LoopDir )
104
+ cfg .DataDir = lncfg .CleanAndExpandPath (cfg .DataDir )
105
+ cfg .LogDir = lncfg .CleanAndExpandPath (cfg .LogDir )
106
+
107
+ // Since our loop directory overrides our log/data dir values, make sure
108
+ // that they are not set when loop dir is set. We hard here rather than
109
+ // overwriting and potentially confusing the user.
110
+ logDirSet := cfg .LogDir != defaultLogDir
111
+ dataDirSet := cfg .DataDir != loopDirBase
112
+ loopDirSet := cfg .LoopDir != loopDirBase
113
+
114
+ if loopDirSet {
115
+ if logDirSet {
116
+ return fmt .Errorf ("loopdir overwrites logdir, please " +
117
+ "only set one value" )
118
+ }
119
+
120
+ if dataDirSet {
121
+ return fmt .Errorf ("loopdir overwrites datadir, please " +
122
+ "only set one value" )
123
+ }
124
+
125
+ // Once we are satisfied that neither config value was set, we
126
+ // replace them with our loop dir.
127
+ cfg .DataDir = cfg .LoopDir
128
+ cfg .LogDir = filepath .Join (cfg .LoopDir , defaultLogDirname )
129
+ }
130
+
131
+ // Append the network type to the data and log directory so they are
132
+ // "namespaced" per network.
133
+ cfg .DataDir = filepath .Join (cfg .DataDir , cfg .Network )
134
+ cfg .LogDir = filepath .Join (cfg .LogDir , cfg .Network )
135
+
136
+ // If either of these directories do not exist, create them.
137
+ if err := os .MkdirAll (cfg .DataDir , os .ModePerm ); err != nil {
138
+ return err
139
+ }
140
+
141
+ if err := os .MkdirAll (cfg .LogDir , os .ModePerm ); err != nil {
142
+ return err
143
+ }
144
+
145
+ return nil
146
+ }
0 commit comments