-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
98 lines (86 loc) · 2.58 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
94
95
96
97
98
package main
import (
"encoding/json"
"errors"
"flag"
"fmt"
"net/http"
"os"
"k8s.io/klog"
)
var (
cfgFile string = "./.config.yaml"
serverAPIURL string = ""
serverAPIToken string = ""
headerToken string = ""
listen string = ""
ruleEnv string = ""
ruleMap headerRules
)
// LookupEnvOrString returns the value from env variable key is exists or defaultVal as string
func LookupEnvOrString(key string, defaultVal string) string {
if val, ok := os.LookupEnv(key); ok {
return val
}
return defaultVal
}
func main() {
klog.InitFlags(nil)
defer klog.Flush()
flag.StringVar(&cfgFile, "config-file", LookupEnvOrString("RAP_CONFIG_FILE", cfgFile), "Config File.")
flag.StringVar(&ruleEnv, "rules", LookupEnvOrString("RAP_RULES", ruleEnv), "json format rules.")
flag.StringVar(&listen, "listen", LookupEnvOrString("RAP_LISTEN", listen), "Listenning socket.")
flag.StringVar(&headerToken, "header-key", LookupEnvOrString("RAP_HEADER_KEY", headerToken), "Header key used to authentication.")
flag.StringVar(&serverAPIURL, "url", LookupEnvOrString("RAP_API_URL", serverAPIURL), "Remote server API URL.")
flag.StringVar(&serverAPIToken, "server-api-token", LookupEnvOrString("RAP_API_TOKEN", serverAPIURL), "Remote server API TOKEN.")
flag.Parse()
if err := config.loadConfig(cfgFile); err != nil {
klog.Fatal(fmt.Sprintf("Error loading config file %v. %v\n", cfgFile, err))
}
if listen == "" {
if config.Listen != "" {
listen = config.Listen
} else {
listen = ":9000"
}
}
if headerToken == "" {
if config.HeaderToken != "" {
headerToken = config.HeaderToken
} else {
headerToken = "X-API-Key"
}
}
if serverAPIURL == "" {
if config.ServerAPIURL == "" {
klog.Fatalf("Missing Remote Server API URL.")
}
serverAPIURL = config.ServerAPIURL
}
if serverAPIToken == "" {
if config.ServerAPIToken == "" {
klog.Fatalf("Missing remote API token")
}
serverAPIToken = config.ServerAPIToken
}
if err := json.Unmarshal([]byte(ruleEnv), &ruleMap); err != nil {
if len(config.Rules) == 0 {
klog.Warning("No rules defined via environment variables or config file.")
}
ruleMap = config.Rules
}
if klog.V(5) {
klog.Info(fmt.Sprintf("Finished process info will be send to %s.", serverAPIURL))
}
http.HandleFunc("/", ruleMap.proxyHandler)
if klog.V(1) {
klog.Info(fmt.Sprintf("Listening http requests from %s.", listen))
}
err := http.ListenAndServe(listen, nil)
if errors.Is(err, http.ErrServerClosed) {
fmt.Printf("server closed\n")
} else if err != nil {
fmt.Printf("error starting server: %s\n", err)
os.Exit(1)
}
}