-
Notifications
You must be signed in to change notification settings - Fork 0
/
client.go
79 lines (64 loc) · 2.15 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
package sdk
import (
"context"
gql "github.com/Khan/genqlient/graphql"
"github.com/raito-io/sdk/internal"
"github.com/raito-io/sdk/services"
)
type RaitoClient struct {
accessProviderClient services.AccessProviderClient
dataObjectClient services.DataObjectClient
dataSourceClient services.DataSourceClient
identityStoreClient services.IdentityStoreClient
userClient services.UserClient
}
type ClientOptions struct {
UrlOverride string
}
// WithUrlOverride can be used to override the URL used to communicate with the Raito API.
func WithUrlOverride(urlOverride string) func(options *ClientOptions) {
return func(options *ClientOptions) {
options.UrlOverride = urlOverride
}
}
// NewClient creates a new RaitoClient with the given credentials.
func NewClient(ctx context.Context, domain, user, secret string, ops ...func(options *ClientOptions)) *RaitoClient {
options := ClientOptions{
UrlOverride: internal.DefaultApiEndpoint,
}
for _, op := range ops {
op(&options)
}
client := gql.NewClient(options.UrlOverride+internal.GqlApiPath, &internal.AuthedDoer{
Domain: domain,
User: user,
Secret: secret,
Url: options.UrlOverride,
})
return &RaitoClient{
accessProviderClient: services.NewAccessProviderClient(client),
dataObjectClient: services.NewDataObjectClient(client),
dataSourceClient: services.NewDataSourceClient(client),
identityStoreClient: services.NewIdentityStoreClient(client),
userClient: services.NewUserClient(client),
}
}
// AccessProvider returns the AccessProviderClient
func (c *RaitoClient) AccessProvider() *services.AccessProviderClient {
return &c.accessProviderClient
}
// DataObject returns the DataObjectClient
func (c *RaitoClient) DataObject() *services.DataObjectClient {
return &c.dataObjectClient
}
// DataSource returns the DataSourceClient
func (c *RaitoClient) DataSource() *services.DataSourceClient {
return &c.dataSourceClient
}
// IdentityStore returns the IdentityStoreClient
func (c *RaitoClient) IdentityStore() *services.IdentityStoreClient {
return &c.identityStoreClient
}
func (c *RaitoClient) User() *services.UserClient {
return &c.userClient
}