-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconfig.go
153 lines (138 loc) · 5.65 KB
/
config.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
package main
import (
"flag"
"github.com/BurntSushi/toml" // for configuration file
)
type configLog struct {
Log bool
Logstdio bool
Logfile string
Lognet bool
Logstats bool
Logresult bool
Logcrawler bool
}
type configConn struct {
Sslonly bool
Tor string
}
type configDb struct {
Dbdir string
Exportdbfile string
Exportdbtable string
Exportdbinterval uint64
}
type configCore struct {
Autobrainspeed bool
}
type configCrawler struct {
Starturl string
Followlinks int64
Samedomain bool
Maxconcurrency int64
Iterator uint64
Autocrawlerspeed bool
}
// Config : configuration type
type Config struct {
Log configLog
Conn configConn
Db configDb
Core configCore
Crawler configCrawler
}
// ParseConfig : reads command line params and config file
func ParseConfig() (Config, error) {
var configuration Config
paramConfigFile := flag.String("config", "", "config file. Command line parameters has higher priority")
paramLogstdio := flag.Bool("logstdio", true, "log to standard output")
paramLogfile := flag.String("logfile", "./brcheck.log", "log file. Set empty \"\" to disable")
paramLognet := flag.Bool("lognet", false, "log network activity")
paramLogstats := flag.Bool("logstats", true, "log activity stats")
paramLogresult := flag.Bool("logresult", true, "log positive results")
paramLogcrawler := flag.Bool("logcrawler", true, "log crawler's activity")
paramSslonly := flag.Bool("sslonly", false, "connect only to SSL nodes")
paramTor := flag.String("tor", "", "use tor. Leave empty \"\" to disable")
paramDbdir := flag.String("dbdir", "", "working db directory")
paramExportdbfile := flag.String("exportdbfile", "", "export database filename (sqlite3) leave empty to disable export")
paramExportdbtable := flag.String("exportdbtable", "", "export db tablename")
paramExportdbinterval := flag.Uint64("exportdbinterval", 0, "export every exportdbinterval seconds (0 to disable cron: db will be always exported when program stops)")
paramAutobrainspeed := flag.Bool("autobrainspeed", true, "true = auto-adjust brainwallet's generation speed using electrum's test/second as parameter\nfalse = generate brainwallet at full speed (unnecessary high cpu usage)")
paramStarturl := flag.String("starturl", "", "startup words extraction page (leave empty \"\" to disable crawling)")
paramFollowlinks := flag.Int64("followlinks", 0, "follow found links in page: 0 = no ; -1 = infinte depth; N = depth N")
paramSamedomain := flag.Bool("samedomain", true, "follow same domain only urls (don't visit sites outside starturl)")
paramMaxconcurrency := flag.Int64("maxconcurrency", 10, "max concurrent number of url fetched. WARNING: high memory usage")
paramIterator := flag.Uint64("iterator", 10, "0 = disabled ; > 0 number of words")
paramAutocrawlerspeed := flag.Bool("autocrawlerspeed", true, "true = auto-adjust generation speed using electrum's test/second as parameter\nfalse = generate at full speed (unnecessary high cpu usage)")
flag.Parse()
// set default values
configuration.Log.Logstdio = *paramLogstdio
configuration.Log.Logfile = *paramLogfile
configuration.Log.Lognet = *paramLognet
configuration.Log.Logstats = *paramLogstats
configuration.Log.Logresult = *paramLogresult
configuration.Log.Logcrawler = *paramLogcrawler
configuration.Conn.Sslonly = *paramSslonly
configuration.Conn.Tor = *paramTor
configuration.Db.Dbdir = *paramDbdir
configuration.Db.Exportdbfile = *paramExportdbfile
configuration.Db.Exportdbtable = *paramExportdbtable
configuration.Db.Exportdbinterval = *paramExportdbinterval
configuration.Core.Autobrainspeed = *paramAutobrainspeed
configuration.Crawler.Starturl = *paramStarturl
configuration.Crawler.Followlinks = *paramFollowlinks
configuration.Crawler.Samedomain = *paramSamedomain
configuration.Crawler.Maxconcurrency = *paramMaxconcurrency
configuration.Crawler.Iterator = *paramIterator
configuration.Crawler.Autocrawlerspeed = *paramAutocrawlerspeed
if *paramConfigFile != "" { // read config file
if _, err := toml.DecodeFile(*paramConfigFile, &configuration); err != nil {
return configuration, err
}
}
// now rewrite configuration "visiting" flags that have been set via command line
visitor := func(a *flag.Flag) {
switch a.Name {
case "logstdio":
configuration.Log.Logstdio = *paramLogstdio
case "logfile":
configuration.Log.Logfile = *paramLogfile
case "lognet":
configuration.Log.Lognet = *paramLognet
case "logstats":
configuration.Log.Logstats = *paramLogstats
case "logresult":
configuration.Log.Logresult = *paramLogresult
case "logcrawler":
configuration.Log.Logcrawler = *paramLogcrawler
case "sslonly":
configuration.Conn.Sslonly = *paramSslonly
case "tor":
configuration.Conn.Tor = *paramTor
case "dbdir":
configuration.Db.Dbdir = *paramDbdir
case "exportdbfile":
configuration.Db.Exportdbfile = *paramExportdbfile
case "exportdbtable":
configuration.Db.Exportdbtable = *paramExportdbtable
case "exportdbinterval":
configuration.Db.Exportdbinterval = *paramExportdbinterval
case "autobrainspeed":
configuration.Core.Autobrainspeed = *paramAutobrainspeed
case "starturl":
configuration.Crawler.Starturl = *paramStarturl
case "followlinks":
configuration.Crawler.Followlinks = *paramFollowlinks
case "samedomain":
configuration.Crawler.Samedomain = *paramSamedomain
case "maxconcurrency":
configuration.Crawler.Maxconcurrency = *paramMaxconcurrency
case "iterator":
configuration.Crawler.Iterator = *paramIterator
case "autocrawlerspeed":
configuration.Crawler.Autocrawlerspeed = *paramAutocrawlerspeed
}
}
flag.Visit(visitor)
return configuration, nil
}