-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfig.go
More file actions
101 lines (94 loc) · 2.09 KB
/
Copy pathconfig.go
File metadata and controls
101 lines (94 loc) · 2.09 KB
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
package main
import (
"encoding/json"
"errors"
"io/ioutil"
"net/url"
"os"
"strconv"
"strings"
"github.com/NzKSO/murphy/conf"
)
func readConfigFile(path string) (*conf.Configuration, error) {
data, err := ioutil.ReadFile(path)
if err != nil {
return nil, err
}
var config conf.Configuration
if err := json.Unmarshal(data, &config); err != nil {
return nil, err
}
if config.Option.Depth < 0 {
return nil, errors.New("invalid depth")
}
if config.Option.MaxConcurrency < 0 {
return nil, errors.New("invalid max concurrency")
}
return &config, err
}
func overrideConfig(config *conf.Configuration) error {
var xFlag string
for i := 1; i < len(os.Args); i++ {
if os.Args[i][0] == '-' {
if len(os.Args[i]) == 1 || (os.Args[i][1] == '-' && len(os.Args[i]) == 2) {
break
}
if os.Args[i][1] != '-' {
xFlag = os.Args[i][1:]
} else {
xFlag = os.Args[i][2:]
}
} else {
break
}
if idx := strings.IndexByte(xFlag, '='); idx > 0 {
xFlag = xFlag[:idx]
} else if xFlag != "external" && xFlag != "headless" {
i++
}
switch xFlag {
case "proxy":
u, err := url.ParseRequestURI(proxyAddr)
if err != nil {
return err
}
port, err := strconv.Atoi(u.Port())
if err != nil {
return err
}
if config.Proxy == nil {
config.Proxy = new(conf.Proxy)
}
config.Proxy.Address = u.Hostname()
config.Proxy.Port = port
config.Proxy.Protocol = u.Scheme
case "depth":
if depth < -1 {
return errors.New("Flag depth: " + invalidDepth)
}
config.Option.Depth = depth
case "maxCon":
if maxCon < 0 {
return errors.New("Flag maxCon: " + invalidMaxCon)
}
config.Option.MaxConcurrency = maxCon
case "ftypes":
if len(ftypes) < 1 {
return errors.New("Flag ftypes: " + invalidftypes)
}
config.FileTypes = []string(ftypes)
case "external":
config.Option.ExternalWebpages = external
case "dir":
config.Dir = prefix
case "log":
config.Log = logFile
// case "headless":
// config.Headless = headlessMode
}
}
if len(config.FileTypes) < 1 {
return errors.New(emptyListSet)
}
return nil
}