-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsdk.go
98 lines (88 loc) · 2.36 KB
/
sdk.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
87
88
89
90
91
92
93
94
95
96
97
98
package ec_storage
import (
"net/http"
"strings"
"github.com/Edge-Center/edgecenter-storage-sdk-go/swagger/client"
"github.com/go-openapi/runtime"
httptransport "github.com/go-openapi/runtime/client"
"github.com/go-openapi/strfmt"
)
type (
// SdkOpt is optional arg for setup apiCore
SdkOpt func(sdk *apiCore)
// SDK for EdgeCenter Storage API
SDK struct {
*sdkLocation
*sdkStorage
*sdkBucket
}
apiCore struct {
client *client.StorageAPI
authWriter runtime.ClientAuthInfoWriter
agent string
}
)
// WithBearerAuth opt to setup SDK authWriter
func WithBearerAuth(tokenGetter func() string) SdkOpt {
return func(sdk *apiCore) {
if tokenGetter != nil && tokenGetter() != "" {
sdk.authWriter = httptransport.BearerToken(tokenGetter())
}
}
}
// WithUserAgent opt
func WithUserAgent(agent string) SdkOpt {
return func(sdk *apiCore) {
sdk.agent = agent
}
}
// WithPermanentTokenAuth opt to setup SDK authWriter
func WithPermanentTokenAuth(tokenGetter func() string) SdkOpt {
return func(sdk *apiCore) {
if tokenGetter != nil && tokenGetter() != "" {
sdk.authWriter = runtime.ClientAuthInfoWriterFunc(func(r runtime.ClientRequest, _ strfmt.Registry) error {
// nolint: wrapcheck
return r.SetHeaderParam("Authorization", "APIKey "+tokenGetter())
})
}
}
}
// NewSDK constructor of storage api swagger client wrapper
// see UI of your data here https://api.edgecenter.ru/storage
// apiHost = https://api.edgecenter.ru
// apiBasePath = /storage
func NewSDK(apiHost, apiBasePath string, opts ...SdkOpt) *SDK {
schema := strings.Split(apiHost, "://")
if len(schema) > 1 {
apiHost = schema[1]
schema = schema[0:1]
} else {
schema = nil
}
transport := httptransport.New(apiHost, apiBasePath, schema)
core := &apiCore{}
for _, opt := range opts {
opt(core)
}
if core.agent != "" {
transport.Transport = customUserAgent{
root: transport.Transport,
value: core.agent,
}
}
core.client = client.New(transport, strfmt.Default)
return &SDK{
sdkLocation: &sdkLocation{apiCore: core},
sdkStorage: &sdkStorage{apiCore: core},
sdkBucket: &sdkBucket{apiCore: core},
}
}
type customUserAgent struct {
root http.RoundTripper
value string
}
// RoundTrip implemented
func (c customUserAgent) RoundTrip(request *http.Request) (*http.Response, error) {
request.Header.Set("User-Agent", c.value)
return c.root.RoundTrip(request)
}