-
Notifications
You must be signed in to change notification settings - Fork 0
/
client.go
95 lines (77 loc) · 2.47 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
87
88
89
90
91
92
93
94
95
package sdk
import (
"context"
"strings"
gql "github.com/Khan/genqlient/graphql"
"github.com/raito-io/sdk-go/internal"
"github.com/raito-io/sdk-go/services"
)
type RaitoClient struct {
accessProviderClient services.AccessProviderClient
dataObjectClient services.DataObjectClient
dataSourceClient services.DataSourceClient
identityStoreClient services.IdentityStoreClient
roleClient services.RoleClient
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)
}
url := options.UrlOverride
if !strings.HasSuffix(url, "/") {
url += "/"
}
url += internal.GqlApiPath
client := gql.NewClient(url, &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),
roleClient: services.NewRoleClient(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
}
// Role returns the RoleClient
func (c *RaitoClient) Role() *services.RoleClient {
return &c.roleClient
}
// User returns the UserClient
func (c *RaitoClient) User() *services.UserClient {
return &c.userClient
}