From 679a62a9407c09be0cfb4e22455dca5ae694ce01 Mon Sep 17 00:00:00 2001 From: Ben Burwell Date: Mon, 16 Sep 2019 15:56:31 -0400 Subject: Flesh out --- client/client.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 client/client.go (limited to 'client/client.go') diff --git a/client/client.go b/client/client.go new file mode 100644 index 0000000..e39a6a1 --- /dev/null +++ b/client/client.go @@ -0,0 +1,43 @@ +package client + +import ( + "bytes" + "fmt" + "io" + "net/http" + "sync" + "time" +) + +type CaesarClient struct { + Endpoint string + Token string + + c *http.Client + once sync.Once +} + +func (c *CaesarClient) EncodeMessage(r io.Reader) (io.Reader, error) { + c.once.Do(func() { + c.c = &http.Client{Timeout: 10 * time.Second} + }) + req, err := http.NewRequest("POST", c.Endpoint, r) + if err != nil { + return nil, err + } + req.Header.Set("authorization", "token "+c.Token) + req.Header.Set("user-agent", "caesar-client/1.0") + resp, err := c.c.Do(req) + if err != nil { + return nil, err + } + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("http status %s", resp.Status) + } + var body bytes.Buffer + defer resp.Body.Close() + if _, err := io.Copy(&body, resp.Body); err != nil { + return nil, err + } + return &body, nil +} -- cgit v1.2.3