-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
93 lines (84 loc) · 2.29 KB
/
main.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
package main
import (
"flag"
"fmt"
"log"
"os"
"softetherConfig/softetherApi"
"strconv"
)
var (
secHost = "127.0.0.1"
secPort = 443
secPass = ""
secHub = "DEFAULT"
)
func main() {
flag.StringVar(&secHost, "s", LookupEnvOrString("SEC_HOST", secHost), "SoftEther Hostname")
flag.IntVar(&secPort, "p", LookupEnvOrInt("SEC_PORT", secPort), "SoftEther Port number")
flag.StringVar(&secPass, "P", LookupEnvOrString("SEC_PASS", secPass), "SoftEther Admin Password")
flag.StringVar(&secHub, "H", LookupEnvOrString("SEC_HUB", secHub), "SoftEther Hub Name")
flag.Parse()
requiredFlags := []string{"P"}
CheckForRequiredFlags(flag.CommandLine, requiredFlags)
log.Println("softetherConfig.status=starting")
// log.Printf("app.config %v\n", getConfig(flag.CommandLine))
api := softetherApi.NewAPI(secHost, secPort, secPass)
err := api.HandShake()
apiTest, err := api.Test()
check(err, "api.Test")
log.Println(apiTest)
api.Disconnect()
}
// LookupEnvOrString Lookup environment variable or set to default
func LookupEnvOrString(key string, defaultVal string) string {
if val, ok := os.LookupEnv(key); ok {
return val
}
return defaultVal
}
// LookupEnvOrInt Lookup Environment variable Int type or set default
func LookupEnvOrInt(key string, defaultVal int) int {
if val, ok := os.LookupEnv(key); ok {
v, err := strconv.Atoi(val)
if err != nil {
log.Panicf("LookupEnvOrInt[%s]: %v", key, err)
}
return v
}
return defaultVal
}
// CheckForRequiredFlags Verify all required flags are set
func CheckForRequiredFlags(fs *flag.FlagSet, required []string) {
isFlagSet := make(map[string]bool)
// Checks all values including Environment variable defaults
fs.VisitAll(func(f *flag.Flag) {
if f.Value.String() != "" {
isFlagSet[f.Name] = true
}
})
for _, req := range required {
if !isFlagSet[req] {
fs.Usage()
log.Fatalf("missing required -%s argument/flag", req)
}
}
}
// getConfig grab the configuration from a file
func getConfig(fs *flag.FlagSet) []string {
cfg := make([]string, 0, 10)
fs.VisitAll(func(f *flag.Flag) {
cfg = append(cfg, fmt.Sprintf("%s:%q", f.Name, f.Value.String()))
})
return cfg
}
// check for errors
func check(e error, desc string) {
if e != nil {
if len(desc) > 0 {
log.Panicf("%s: %v", desc, e)
} else {
log.Panicf("%s: %v", "unknownCall", e)
}
}
}