/
client.go
86 lines (71 loc) · 1.52 KB
/
client.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
package client
import (
"bytes"
"context"
"io"
"net/http"
"net/url"
"golang.org/x/oauth2"
)
const defaultBaseURL = "https://api.github.com/"
// Client is an api client.
type Client struct {
Pulls *HandlerPull
Repos *HandlerRepo
}
// HTTPClient is a HTTPClient.
type HTTPClient struct {
baseURL *url.URL
client *http.Client
}
// NewClient creates a client.
func NewClient(token string) *Client {
ts := oauth2.StaticTokenSource(
&oauth2.Token{AccessToken: token},
)
ctx := context.Background()
tc := oauth2.NewClient(ctx, ts)
httpClient := NewHTTPClient(tc)
ph := NewHandlerPull(httpClient)
r := NewHandlerRepo(httpClient)
return &Client{
Pulls: ph,
Repos: r,
}
}
// NewHTTPClient creates a HTTPClient
func NewHTTPClient(httpClient *http.Client) *HTTPClient {
baseURL, _ := url.Parse(defaultBaseURL)
return &HTTPClient{
baseURL: baseURL,
client: httpClient,
}
}
// NewClient creates a request.
func (hc *HTTPClient) NewRequest(method string, header http.Header, body []byte, url string) (*http.Request, error) {
u, err := hc.baseURL.Parse(url)
if err != nil {
return nil, err
}
req, err := http.NewRequest(method, u.String(), bytes.NewReader(body))
if err != nil {
return nil, err
}
if header != nil {
req.Header = header
}
return req, nil
}
// Do
func (hc *HTTPClient) Do(req *http.Request) ([]byte, error) {
resp, err := hc.client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
return body, nil
}