From f67d6184139374f168037523f46623e2c32547fc Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Mon, 8 Sep 2025 04:35:28 -0500 Subject: [PATCH] generic POST function --- post.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/post.go b/post.go index 753af74..8ced07f 100644 --- a/post.go +++ b/post.go @@ -13,6 +13,52 @@ import ( "go.wit.com/log" ) +// standard protobuf POST +// returns *HttpRequst protobuf +func DoPost(baseURL string, route string, data []byte) (*HttpRequest, error) { + // if you ever have 'http://www.wit.com//' GO will regect the server recieving it. + // Even though the linux kernel gets the network payload + // also it never gives you an error about that, it just goes away invisably inside GO + tmpURL, _ := url.Parse(baseURL) // "http://forge.grid.wit.com:2520") + finalURL := tmpURL.JoinPath(route) // Correctly produces ...:2520/patches + + var err error + var req *http.Request + + log.Info("httppb.HttpPost to", finalURL.String()) + req, err = http.NewRequest(http.MethodPost, finalURL.String(), bytes.NewBuffer(data)) + if req == nil { + return nil, err + } + + username := os.Getenv("GIT_AUTHOR_NAME") + if username == "" { + usr, _ := user.Current() + username = usr.Username + } + req.Header.Set("author", username) + hostname, _ := os.Hostname() + req.Header.Set("hostname", hostname) + + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, err + } + + reqPB, err := ReqToPB(req) + reqPB.URL = finalURL.String() + reqPB.Body = body + + return reqPB, nil +} + func HttpPost(baseURL string, route string, data []byte) ([]byte, error) { // Fix using url.JoinPath (Best Practice) tmpURL, _ := url.Parse(baseURL) // "http://forge.grid.wit.com:2520")