diff --git a/src/config/conf.go b/src/config/conf.go index 3f2af639f8d32c563fcc790bd7bdc7395eee94c0..db0b7f9ebd3c27761bb795c83182750455269821 100644 --- a/src/config/conf.go +++ b/src/config/conf.go @@ -7,7 +7,7 @@ var ( ) var ProxyConf = struct { - UUID string `json:"uuid"` + MeshId string `json:"meshId"` Url string `json:"url"` Method string `json:"method"` Params []Param `json:"params"` diff --git a/src/handler/counthandler.go b/src/handler/counthandler.go index 0072b9644e8be887cf363bda407cbcda3ab28e36..b51d1d8c84b51c2bca0e6e153848f2c28a8ad0ed 100644 --- a/src/handler/counthandler.go +++ b/src/handler/counthandler.go @@ -12,9 +12,9 @@ func GetCount(c *gin.Context) { if err != nil { c.Error(err) } - ic, err := redis.Get("bgproxy" + config.ProxyConf.UUID) + ic, err := redis.Get("bgproxy" + config.ProxyConf.MeshId) c.JSON(200, gin.H{ - "Key": fmt.Sprintf("bgproxy" + config.ProxyConf.UUID), + "Key": fmt.Sprintf("bgproxy" + config.ProxyConf.MeshId), "Count": ic, }) } diff --git a/src/handler/proxyhandler.go b/src/handler/proxyhandler.go index eecdd5d20d02598bccd8591c0ddbf3d9fd19b6c5..861fcc635052d7dcc038d06ae8796da213dfcfba 100644 --- a/src/handler/proxyhandler.go +++ b/src/handler/proxyhandler.go @@ -76,7 +76,7 @@ func count() error { if err != nil { return err } - ic, err := redis.Incr("bgproxy" + config.ProxyConf.UUID) + ic, err := redis.Incr("bgproxy" + config.ProxyConf.MeshId) _, err = ic.Result() return err } diff --git a/src/tools/proxy.go b/src/tools/proxy.go new file mode 100644 index 0000000000000000000000000000000000000000..26e505174591327303c7e2fe69d8c380e5fe5bb6 --- /dev/null +++ b/src/tools/proxy.go @@ -0,0 +1,144 @@ +package tools + +import ( + "errors" + "fmt" + "io/ioutil" + "net" + "net/http" + "strings" +) + +//ProxySend , http请求 +func ProxySend(incomingReq *http.Request, sendType string, url string, body string, header map[string]string) (result []byte, err error) { + client := &http.Client{} + var outgoingReq *http.Request + if len(body) > 0 { + outgoingReq, err = http.NewRequest(sendType, url, strings.NewReader(body)) + if err != nil { + fmt.Println(err) + } + } else { + outgoingReq, _ = http.NewRequest(sendType, url, nil) + } + if header == nil { + header = make(map[string]string) + } + if incomingReq != nil { + b3Headers := getForwardHeaders(incomingReq) + for k, v := range b3Headers { + header[k] = v + } + } + for k, v := range header { + outgoingReq.Header.Set(k, v) + } + resp, err := client.Do(outgoingReq) + if err != nil { + return nil, err + } else { + defer resp.Body.Close() + body, erra := ioutil.ReadAll(resp.Body) + return body, erra + } +} + +//ProxySend , http请求 +func ProxySendRes(incomingReq *http.Request, sendType string, url string, body string, header map[string]string) (result *http.Response, err error) { + client := &http.Client{} + var outgoingReq *http.Request + if len(body) > 0 { + outgoingReq, err = http.NewRequest(sendType, url, strings.NewReader(body)) + if err != nil { + fmt.Println(err) + } + } else { + outgoingReq, _ = http.NewRequest(sendType, url, nil) + } + if header == nil { + header = make(map[string]string) + } + if incomingReq != nil { + b3Headers := getForwardHeaders(incomingReq) + for k, v := range b3Headers { + header[k] = v + } + } + for k, v := range header { + outgoingReq.Header.Set(k, v) + } + resp, err := client.Do(outgoingReq) + return resp, err +} + +//GetCookieStr , 获取cookie字符串 +func GetCookieStr(req *http.Request) (str string, err error) { + cookies := req.Cookies() + _, err = req.Cookie("awetoken") + if err != nil { + err = errors.New("用户未登录") + return "", err + } else { + for _, v := range cookies { + str += v.Name + "=" + v.Value + ";" + } + return str, nil + } +} + +func getForwardHeaders(incomingReq *http.Request) map[string]string { + headers := make(map[string]string) + xRequestID := incomingReq.Header.Get("x-request-id") + if len(xRequestID) > 0 { + headers["x-request-id"] = incomingReq.Header.Get("x-request-id") + headers["x-b3-traceid"] = incomingReq.Header.Get("x-b3-traceid") + headers["x-b3-spanid"] = incomingReq.Header.Get("x-b3-spanid") + if len(incomingReq.Header.Get("x-b3-parentspanid")) > 0 { + headers["x-b3-parentspanid"] = incomingReq.Header.Get("x-b3-parentspanid") + } + headers["x-b3-sampled"] = incomingReq.Header.Get("x-b3-sampled") + if len(incomingReq.Header.Get("x-b3-flags")) > 0 { + headers["x-b3-flags"] = incomingReq.Header.Get("x-b3-flags") + } + if len(incomingReq.Header.Get("x-ot-span-context")) > 0 { + headers["x-ot-span-context"] = incomingReq.Header.Get("x-ot-span-context") + } + } + return headers +} + +//获取ip地址 +func RemoteIp(req *http.Request) string { + remoteAddr := req.RemoteAddr + if ip := req.Header.Get("X-Real-Ip"); ip != "" { + remoteAddr = ip + } else if ip = req.Header.Get("X-Forwarded-For"); ip != "" { + remoteAddr = ip + } else { + remoteAddr, _, _ = net.SplitHostPort(remoteAddr) + } + + if remoteAddr == "::1" { + remoteAddr = "127.0.0.1" + } + return remoteAddr +} + +//获取mac地址 +func GetMac() (macAddrs string) { + netInterfaces, err := net.Interfaces() + if err != nil { + fmt.Printf("fail to get net interfaces: %v", err) + return macAddrs + } + for _, netInterface := range netInterfaces { + macAddr := netInterface.HardwareAddr.String() + if len(macAddr) == 0 { + continue + } + macAddrs += macAddr + ";" + } + rs := []rune(macAddrs) + macAddrs = string(rs[:len(rs)-1]) + return macAddrs +}