Skip to content

Commit 43ae79d

Browse files
[management] extend rest client lib (#3830)
1 parent e520b64 commit 43ae79d

15 files changed

+129
-78
lines changed

management/client/rest/accounts.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ type AccountsAPI struct {
1616
// List list all accounts, only returns one account always
1717
// See more: https://docs.netbird.io/api/resources/accounts#list-all-accounts
1818
func (a *AccountsAPI) List(ctx context.Context) ([]api.Account, error) {
19-
resp, err := a.c.newRequest(ctx, "GET", "/api/accounts", nil)
19+
resp, err := a.c.NewRequest(ctx, "GET", "/api/accounts", nil)
2020
if err != nil {
2121
return nil, err
2222
}
@@ -34,7 +34,7 @@ func (a *AccountsAPI) Update(ctx context.Context, accountID string, request api.
3434
if err != nil {
3535
return nil, err
3636
}
37-
resp, err := a.c.newRequest(ctx, "PUT", "/api/accounts/"+accountID, bytes.NewReader(requestBytes))
37+
resp, err := a.c.NewRequest(ctx, "PUT", "/api/accounts/"+accountID, bytes.NewReader(requestBytes))
3838
if err != nil {
3939
return nil, err
4040
}
@@ -48,7 +48,7 @@ func (a *AccountsAPI) Update(ctx context.Context, accountID string, request api.
4848
// Delete delete account
4949
// See more: https://docs.netbird.io/api/resources/accounts#delete-an-account
5050
func (a *AccountsAPI) Delete(ctx context.Context, accountID string) error {
51-
resp, err := a.c.newRequest(ctx, "DELETE", "/api/accounts/"+accountID, nil)
51+
resp, err := a.c.NewRequest(ctx, "DELETE", "/api/accounts/"+accountID, nil)
5252
if err != nil {
5353
return err
5454
}

management/client/rest/client.go

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
type Client struct {
1515
managementURL string
1616
authHeader string
17+
httpClient HttpClient
1718

1819
// Accounts NetBird account APIs
1920
// see more: https://docs.netbird.io/api/resources/accounts
@@ -70,20 +71,29 @@ type Client struct {
7071

7172
// New initialize new Client instance using PAT token
7273
func New(managementURL, token string) *Client {
73-
client := &Client{
74-
managementURL: managementURL,
75-
authHeader: "Token " + token,
76-
}
77-
client.initialize()
78-
return client
74+
return NewWithOptions(
75+
WithManagementURL(managementURL),
76+
WithPAT(token),
77+
)
7978
}
8079

8180
// NewWithBearerToken initialize new Client instance using Bearer token type
8281
func NewWithBearerToken(managementURL, token string) *Client {
82+
return NewWithOptions(
83+
WithManagementURL(managementURL),
84+
WithBearerToken(token),
85+
)
86+
}
87+
88+
func NewWithOptions(opts ...option) *Client {
8389
client := &Client{
84-
managementURL: managementURL,
85-
authHeader: "Bearer " + token,
90+
httpClient: http.DefaultClient,
91+
}
92+
93+
for _, option := range opts {
94+
option(client)
8695
}
96+
8797
client.initialize()
8898
return client
8999
}
@@ -104,7 +114,7 @@ func (c *Client) initialize() {
104114
c.Events = &EventsAPI{c}
105115
}
106116

107-
func (c *Client) newRequest(ctx context.Context, method, path string, body io.Reader) (*http.Response, error) {
117+
func (c *Client) NewRequest(ctx context.Context, method, path string, body io.Reader) (*http.Response, error) {
108118
req, err := http.NewRequestWithContext(ctx, method, c.managementURL+path, body)
109119
if err != nil {
110120
return nil, err
@@ -116,7 +126,7 @@ func (c *Client) newRequest(ctx context.Context, method, path string, body io.Re
116126
req.Header.Add("Content-Type", "application/json")
117127
}
118128

119-
resp, err := http.DefaultClient.Do(req)
129+
resp, err := c.httpClient.Do(req)
120130
if err != nil {
121131
return nil, err
122132
}

management/client/rest/dns.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ type DNSAPI struct {
1616
// ListNameserverGroups list all nameserver groups
1717
// See more: https://docs.netbird.io/api/resources/dns#list-all-nameserver-groups
1818
func (a *DNSAPI) ListNameserverGroups(ctx context.Context) ([]api.NameserverGroup, error) {
19-
resp, err := a.c.newRequest(ctx, "GET", "/api/dns/nameservers", nil)
19+
resp, err := a.c.NewRequest(ctx, "GET", "/api/dns/nameservers", nil)
2020
if err != nil {
2121
return nil, err
2222
}
@@ -30,7 +30,7 @@ func (a *DNSAPI) ListNameserverGroups(ctx context.Context) ([]api.NameserverGrou
3030
// GetNameserverGroup get nameserver group info
3131
// See more: https://docs.netbird.io/api/resources/dns#retrieve-a-nameserver-group
3232
func (a *DNSAPI) GetNameserverGroup(ctx context.Context, nameserverGroupID string) (*api.NameserverGroup, error) {
33-
resp, err := a.c.newRequest(ctx, "GET", "/api/dns/nameservers/"+nameserverGroupID, nil)
33+
resp, err := a.c.NewRequest(ctx, "GET", "/api/dns/nameservers/"+nameserverGroupID, nil)
3434
if err != nil {
3535
return nil, err
3636
}
@@ -48,7 +48,7 @@ func (a *DNSAPI) CreateNameserverGroup(ctx context.Context, request api.PostApiD
4848
if err != nil {
4949
return nil, err
5050
}
51-
resp, err := a.c.newRequest(ctx, "POST", "/api/dns/nameservers", bytes.NewReader(requestBytes))
51+
resp, err := a.c.NewRequest(ctx, "POST", "/api/dns/nameservers", bytes.NewReader(requestBytes))
5252
if err != nil {
5353
return nil, err
5454
}
@@ -66,7 +66,7 @@ func (a *DNSAPI) UpdateNameserverGroup(ctx context.Context, nameserverGroupID st
6666
if err != nil {
6767
return nil, err
6868
}
69-
resp, err := a.c.newRequest(ctx, "PUT", "/api/dns/nameservers/"+nameserverGroupID, bytes.NewReader(requestBytes))
69+
resp, err := a.c.NewRequest(ctx, "PUT", "/api/dns/nameservers/"+nameserverGroupID, bytes.NewReader(requestBytes))
7070
if err != nil {
7171
return nil, err
7272
}
@@ -80,7 +80,7 @@ func (a *DNSAPI) UpdateNameserverGroup(ctx context.Context, nameserverGroupID st
8080
// DeleteNameserverGroup delete nameserver group
8181
// See more: https://docs.netbird.io/api/resources/dns#delete-a-nameserver-group
8282
func (a *DNSAPI) DeleteNameserverGroup(ctx context.Context, nameserverGroupID string) error {
83-
resp, err := a.c.newRequest(ctx, "DELETE", "/api/dns/nameservers/"+nameserverGroupID, nil)
83+
resp, err := a.c.NewRequest(ctx, "DELETE", "/api/dns/nameservers/"+nameserverGroupID, nil)
8484
if err != nil {
8585
return err
8686
}
@@ -94,7 +94,7 @@ func (a *DNSAPI) DeleteNameserverGroup(ctx context.Context, nameserverGroupID st
9494
// GetSettings get DNS settings
9595
// See more: https://docs.netbird.io/api/resources/dns#retrieve-dns-settings
9696
func (a *DNSAPI) GetSettings(ctx context.Context) (*api.DNSSettings, error) {
97-
resp, err := a.c.newRequest(ctx, "GET", "/api/dns/settings", nil)
97+
resp, err := a.c.NewRequest(ctx, "GET", "/api/dns/settings", nil)
9898
if err != nil {
9999
return nil, err
100100
}
@@ -112,7 +112,7 @@ func (a *DNSAPI) UpdateSettings(ctx context.Context, request api.PutApiDnsSettin
112112
if err != nil {
113113
return nil, err
114114
}
115-
resp, err := a.c.newRequest(ctx, "PUT", "/api/dns/settings", bytes.NewReader(requestBytes))
115+
resp, err := a.c.NewRequest(ctx, "PUT", "/api/dns/settings", bytes.NewReader(requestBytes))
116116
if err != nil {
117117
return nil, err
118118
}

management/client/rest/events.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ type EventsAPI struct {
1414
// List list all events
1515
// See more: https://docs.netbird.io/api/resources/events#list-all-events
1616
func (a *EventsAPI) List(ctx context.Context) ([]api.Event, error) {
17-
resp, err := a.c.newRequest(ctx, "GET", "/api/events", nil)
17+
resp, err := a.c.NewRequest(ctx, "GET", "/api/events", nil)
1818
if err != nil {
1919
return nil, err
2020
}

management/client/rest/geo.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ type GeoLocationAPI struct {
1414
// ListCountries list all country codes
1515
// See more: https://docs.netbird.io/api/resources/geo-locations#list-all-country-codes
1616
func (a *GeoLocationAPI) ListCountries(ctx context.Context) ([]api.Country, error) {
17-
resp, err := a.c.newRequest(ctx, "GET", "/api/locations/countries", nil)
17+
resp, err := a.c.NewRequest(ctx, "GET", "/api/locations/countries", nil)
1818
if err != nil {
1919
return nil, err
2020
}
@@ -28,7 +28,7 @@ func (a *GeoLocationAPI) ListCountries(ctx context.Context) ([]api.Country, erro
2828
// ListCountryCities Get a list of all English city names for a given country code
2929
// See more: https://docs.netbird.io/api/resources/geo-locations#list-all-city-names-by-country
3030
func (a *GeoLocationAPI) ListCountryCities(ctx context.Context, countryCode string) ([]api.City, error) {
31-
resp, err := a.c.newRequest(ctx, "GET", "/api/locations/countries/"+countryCode+"/cities", nil)
31+
resp, err := a.c.NewRequest(ctx, "GET", "/api/locations/countries/"+countryCode+"/cities", nil)
3232
if err != nil {
3333
return nil, err
3434
}

management/client/rest/groups.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ type GroupsAPI struct {
1616
// List list all groups
1717
// See more: https://docs.netbird.io/api/resources/groups#list-all-groups
1818
func (a *GroupsAPI) List(ctx context.Context) ([]api.Group, error) {
19-
resp, err := a.c.newRequest(ctx, "GET", "/api/groups", nil)
19+
resp, err := a.c.NewRequest(ctx, "GET", "/api/groups", nil)
2020
if err != nil {
2121
return nil, err
2222
}
@@ -30,7 +30,7 @@ func (a *GroupsAPI) List(ctx context.Context) ([]api.Group, error) {
3030
// Get get group info
3131
// See more: https://docs.netbird.io/api/resources/groups#retrieve-a-group
3232
func (a *GroupsAPI) Get(ctx context.Context, groupID string) (*api.Group, error) {
33-
resp, err := a.c.newRequest(ctx, "GET", "/api/groups/"+groupID, nil)
33+
resp, err := a.c.NewRequest(ctx, "GET", "/api/groups/"+groupID, nil)
3434
if err != nil {
3535
return nil, err
3636
}
@@ -48,7 +48,7 @@ func (a *GroupsAPI) Create(ctx context.Context, request api.PostApiGroupsJSONReq
4848
if err != nil {
4949
return nil, err
5050
}
51-
resp, err := a.c.newRequest(ctx, "POST", "/api/groups", bytes.NewReader(requestBytes))
51+
resp, err := a.c.NewRequest(ctx, "POST", "/api/groups", bytes.NewReader(requestBytes))
5252
if err != nil {
5353
return nil, err
5454
}
@@ -66,7 +66,7 @@ func (a *GroupsAPI) Update(ctx context.Context, groupID string, request api.PutA
6666
if err != nil {
6767
return nil, err
6868
}
69-
resp, err := a.c.newRequest(ctx, "PUT", "/api/groups/"+groupID, bytes.NewReader(requestBytes))
69+
resp, err := a.c.NewRequest(ctx, "PUT", "/api/groups/"+groupID, bytes.NewReader(requestBytes))
7070
if err != nil {
7171
return nil, err
7272
}
@@ -80,7 +80,7 @@ func (a *GroupsAPI) Update(ctx context.Context, groupID string, request api.PutA
8080
// Delete delete group
8181
// See more: https://docs.netbird.io/api/resources/groups#delete-a-group
8282
func (a *GroupsAPI) Delete(ctx context.Context, groupID string) error {
83-
resp, err := a.c.newRequest(ctx, "DELETE", "/api/groups/"+groupID, nil)
83+
resp, err := a.c.NewRequest(ctx, "DELETE", "/api/groups/"+groupID, nil)
8484
if err != nil {
8585
return err
8686
}

management/client/rest/networks.go

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ type NetworksAPI struct {
1616
// List list all networks
1717
// See more: https://docs.netbird.io/api/resources/networks#list-all-networks
1818
func (a *NetworksAPI) List(ctx context.Context) ([]api.Network, error) {
19-
resp, err := a.c.newRequest(ctx, "GET", "/api/networks", nil)
19+
resp, err := a.c.NewRequest(ctx, "GET", "/api/networks", nil)
2020
if err != nil {
2121
return nil, err
2222
}
@@ -30,7 +30,7 @@ func (a *NetworksAPI) List(ctx context.Context) ([]api.Network, error) {
3030
// Get get network info
3131
// See more: https://docs.netbird.io/api/resources/networks#retrieve-a-network
3232
func (a *NetworksAPI) Get(ctx context.Context, networkID string) (*api.Network, error) {
33-
resp, err := a.c.newRequest(ctx, "GET", "/api/networks/"+networkID, nil)
33+
resp, err := a.c.NewRequest(ctx, "GET", "/api/networks/"+networkID, nil)
3434
if err != nil {
3535
return nil, err
3636
}
@@ -48,7 +48,7 @@ func (a *NetworksAPI) Create(ctx context.Context, request api.PostApiNetworksJSO
4848
if err != nil {
4949
return nil, err
5050
}
51-
resp, err := a.c.newRequest(ctx, "POST", "/api/networks", bytes.NewReader(requestBytes))
51+
resp, err := a.c.NewRequest(ctx, "POST", "/api/networks", bytes.NewReader(requestBytes))
5252
if err != nil {
5353
return nil, err
5454
}
@@ -66,7 +66,7 @@ func (a *NetworksAPI) Update(ctx context.Context, networkID string, request api.
6666
if err != nil {
6767
return nil, err
6868
}
69-
resp, err := a.c.newRequest(ctx, "PUT", "/api/networks/"+networkID, bytes.NewReader(requestBytes))
69+
resp, err := a.c.NewRequest(ctx, "PUT", "/api/networks/"+networkID, bytes.NewReader(requestBytes))
7070
if err != nil {
7171
return nil, err
7272
}
@@ -80,7 +80,7 @@ func (a *NetworksAPI) Update(ctx context.Context, networkID string, request api.
8080
// Delete delete network
8181
// See more: https://docs.netbird.io/api/resources/networks#delete-a-network
8282
func (a *NetworksAPI) Delete(ctx context.Context, networkID string) error {
83-
resp, err := a.c.newRequest(ctx, "DELETE", "/api/networks/"+networkID, nil)
83+
resp, err := a.c.NewRequest(ctx, "DELETE", "/api/networks/"+networkID, nil)
8484
if err != nil {
8585
return err
8686
}
@@ -108,7 +108,7 @@ func (a *NetworksAPI) Resources(networkID string) *NetworkResourcesAPI {
108108
// List list all resources in networks
109109
// See more: https://docs.netbird.io/api/resources/networks#list-all-network-resources
110110
func (a *NetworkResourcesAPI) List(ctx context.Context) ([]api.NetworkResource, error) {
111-
resp, err := a.c.newRequest(ctx, "GET", "/api/networks/"+a.networkID+"/resources", nil)
111+
resp, err := a.c.NewRequest(ctx, "GET", "/api/networks/"+a.networkID+"/resources", nil)
112112
if err != nil {
113113
return nil, err
114114
}
@@ -122,7 +122,7 @@ func (a *NetworkResourcesAPI) List(ctx context.Context) ([]api.NetworkResource,
122122
// Get get network resource info
123123
// See more: https://docs.netbird.io/api/resources/networks#retrieve-a-network-resource
124124
func (a *NetworkResourcesAPI) Get(ctx context.Context, networkResourceID string) (*api.NetworkResource, error) {
125-
resp, err := a.c.newRequest(ctx, "GET", "/api/networks/"+a.networkID+"/resources/"+networkResourceID, nil)
125+
resp, err := a.c.NewRequest(ctx, "GET", "/api/networks/"+a.networkID+"/resources/"+networkResourceID, nil)
126126
if err != nil {
127127
return nil, err
128128
}
@@ -140,7 +140,7 @@ func (a *NetworkResourcesAPI) Create(ctx context.Context, request api.PostApiNet
140140
if err != nil {
141141
return nil, err
142142
}
143-
resp, err := a.c.newRequest(ctx, "POST", "/api/networks/"+a.networkID+"/resources", bytes.NewReader(requestBytes))
143+
resp, err := a.c.NewRequest(ctx, "POST", "/api/networks/"+a.networkID+"/resources", bytes.NewReader(requestBytes))
144144
if err != nil {
145145
return nil, err
146146
}
@@ -158,7 +158,7 @@ func (a *NetworkResourcesAPI) Update(ctx context.Context, networkResourceID stri
158158
if err != nil {
159159
return nil, err
160160
}
161-
resp, err := a.c.newRequest(ctx, "PUT", "/api/networks/"+a.networkID+"/resources/"+networkResourceID, bytes.NewReader(requestBytes))
161+
resp, err := a.c.NewRequest(ctx, "PUT", "/api/networks/"+a.networkID+"/resources/"+networkResourceID, bytes.NewReader(requestBytes))
162162
if err != nil {
163163
return nil, err
164164
}
@@ -172,7 +172,7 @@ func (a *NetworkResourcesAPI) Update(ctx context.Context, networkResourceID stri
172172
// Delete delete network resource
173173
// See more: https://docs.netbird.io/api/resources/networks#delete-a-network-resource
174174
func (a *NetworkResourcesAPI) Delete(ctx context.Context, networkResourceID string) error {
175-
resp, err := a.c.newRequest(ctx, "DELETE", "/api/networks/"+a.networkID+"/resources/"+networkResourceID, nil)
175+
resp, err := a.c.NewRequest(ctx, "DELETE", "/api/networks/"+a.networkID+"/resources/"+networkResourceID, nil)
176176
if err != nil {
177177
return err
178178
}
@@ -200,7 +200,7 @@ func (a *NetworksAPI) Routers(networkID string) *NetworkRoutersAPI {
200200
// List list all routers in networks
201201
// See more: https://docs.netbird.io/api/routers/networks#list-all-network-routers
202202
func (a *NetworkRoutersAPI) List(ctx context.Context) ([]api.NetworkRouter, error) {
203-
resp, err := a.c.newRequest(ctx, "GET", "/api/networks/"+a.networkID+"/routers", nil)
203+
resp, err := a.c.NewRequest(ctx, "GET", "/api/networks/"+a.networkID+"/routers", nil)
204204
if err != nil {
205205
return nil, err
206206
}
@@ -214,7 +214,7 @@ func (a *NetworkRoutersAPI) List(ctx context.Context) ([]api.NetworkRouter, erro
214214
// Get get network router info
215215
// See more: https://docs.netbird.io/api/routers/networks#retrieve-a-network-router
216216
func (a *NetworkRoutersAPI) Get(ctx context.Context, networkRouterID string) (*api.NetworkRouter, error) {
217-
resp, err := a.c.newRequest(ctx, "GET", "/api/networks/"+a.networkID+"/routers/"+networkRouterID, nil)
217+
resp, err := a.c.NewRequest(ctx, "GET", "/api/networks/"+a.networkID+"/routers/"+networkRouterID, nil)
218218
if err != nil {
219219
return nil, err
220220
}
@@ -232,7 +232,7 @@ func (a *NetworkRoutersAPI) Create(ctx context.Context, request api.PostApiNetwo
232232
if err != nil {
233233
return nil, err
234234
}
235-
resp, err := a.c.newRequest(ctx, "POST", "/api/networks/"+a.networkID+"/routers", bytes.NewReader(requestBytes))
235+
resp, err := a.c.NewRequest(ctx, "POST", "/api/networks/"+a.networkID+"/routers", bytes.NewReader(requestBytes))
236236
if err != nil {
237237
return nil, err
238238
}
@@ -250,7 +250,7 @@ func (a *NetworkRoutersAPI) Update(ctx context.Context, networkRouterID string,
250250
if err != nil {
251251
return nil, err
252252
}
253-
resp, err := a.c.newRequest(ctx, "PUT", "/api/networks/"+a.networkID+"/routers/"+networkRouterID, bytes.NewReader(requestBytes))
253+
resp, err := a.c.NewRequest(ctx, "PUT", "/api/networks/"+a.networkID+"/routers/"+networkRouterID, bytes.NewReader(requestBytes))
254254
if err != nil {
255255
return nil, err
256256
}
@@ -264,7 +264,7 @@ func (a *NetworkRoutersAPI) Update(ctx context.Context, networkRouterID string,
264264
// Delete delete network router
265265
// See more: https://docs.netbird.io/api/routers/networks#delete-a-network-router
266266
func (a *NetworkRoutersAPI) Delete(ctx context.Context, networkRouterID string) error {
267-
resp, err := a.c.newRequest(ctx, "DELETE", "/api/networks/"+a.networkID+"/routers/"+networkRouterID, nil)
267+
resp, err := a.c.NewRequest(ctx, "DELETE", "/api/networks/"+a.networkID+"/routers/"+networkRouterID, nil)
268268
if err != nil {
269269
return err
270270
}

management/client/rest/options.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package rest
2+
3+
import "net/http"
4+
5+
type option func(*Client)
6+
7+
type HttpClient interface {
8+
Do(req *http.Request) (*http.Response, error)
9+
}
10+
11+
func WithHttpClient(client HttpClient) option {
12+
return func(c *Client) {
13+
c.httpClient = client
14+
}
15+
}
16+
17+
func WithBearerToken(token string) option {
18+
return WithAuthHeader("Bearer " + token)
19+
}
20+
21+
func WithPAT(token string) option {
22+
return WithAuthHeader("Token " + token)
23+
}
24+
25+
func WithManagementURL(url string) option {
26+
return func(c *Client) {
27+
c.managementURL = url
28+
}
29+
}
30+
31+
func WithAuthHeader(value string) option {
32+
return func(c *Client) {
33+
c.authHeader = value
34+
}
35+
}

0 commit comments

Comments
 (0)