platform.go
42 lines1
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
package digitalocean
import (
"context"
"fmt"
"net/http"
"congo.gg/pkg/platform"
"github.com/digitalocean/godo"
)
type backend struct {
client *godo.Client
ctx context.Context
}
// bearerTransport adds an Authorization header to every request.
type bearerTransport struct {
token string
}
func (t *bearerTransport) RoundTrip(req *http.Request) (*http.Response, error) {
r := req.Clone(req.Context())
r.Header.Set("Authorization", "Bearer "+t.token)
return http.DefaultTransport.RoundTrip(r)
}
// New creates a DigitalOcean platform.
func New(token string) (*platform.Platform, error) {
if token == "" {
return nil, fmt.Errorf("token required")
}
httpClient := &http.Client{Transport: &bearerTransport{token: token}}
return &platform.Platform{
Backend: &backend{
client: godo.NewClient(httpClient),
ctx: context.Background(),
},
}, nil
}