package api import ( "bytes" "crypto/tls" "encoding/json" "net/http" ) type HttpClient struct { baseURL string userAgent string } func NewHttpClient(baseURL string) *HttpClient { return &HttpClient{baseURL: baseURL, userAgent: "internal-http-client"} } func (c *HttpClient) SendGet(url string, data, out any) error { resp, err := c.sendRequest(url, http.MethodGet, data) if err != nil { return err } decoder := json.NewDecoder(resp.Body) defer resp.Body.Close() return decoder.Decode(&out) } func (c *HttpClient) SendPost(url string, data, out any) error { resp, err := c.sendRequest(url, http.MethodPost, data) if err != nil { return err } decoder := json.NewDecoder(resp.Body) defer resp.Body.Close() return decoder.Decode(&out) } func (c *HttpClient) sendRequest(url, method string, data any) (*http.Response, error) { apiUrl := c.baseURL + url tr := &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, // FIXME dev mode } client := &http.Client{Transport: tr} // FIXME dev mode json, err := json.Marshal(&data) if err != nil { return nil, err } req, err := http.NewRequest(method, apiUrl, bytes.NewBuffer(json)) if err != nil { return nil, err } req.Header.Set("Content-Type", "application/json") req.Header.Set("User-Agent", c.userAgent) req.Header.Set("Authorization", "Bearer DupaToken") resp, err := client.Do(req) if err != nil { return nil, err } return resp, nil }