mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-21 01:36:46 +00:00
Fixes panic occurring when body is nil (this usually happens when connections is refused) due to lack of nil check by centralizing response.Body.Close() behavior.
277 lines
8.4 KiB
Go
277 lines
8.4 KiB
Go
package rest
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"encoding/json"
|
|
|
|
"github.com/netbirdio/netbird/management/server/http/api"
|
|
)
|
|
|
|
// NetworksAPI APIs for Networks, do not use directly
|
|
type NetworksAPI struct {
|
|
c *Client
|
|
}
|
|
|
|
// List list all networks
|
|
// See more: https://docs.netbird.io/api/resources/networks#list-all-networks
|
|
func (a *NetworksAPI) List(ctx context.Context) ([]api.Network, error) {
|
|
resp, err := a.c.newRequest(ctx, "GET", "/api/networks", nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[[]api.Network](resp)
|
|
return ret, err
|
|
}
|
|
|
|
// Get get network info
|
|
// See more: https://docs.netbird.io/api/resources/networks#retrieve-a-network
|
|
func (a *NetworksAPI) Get(ctx context.Context, networkID string) (*api.Network, error) {
|
|
resp, err := a.c.newRequest(ctx, "GET", "/api/networks/"+networkID, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[api.Network](resp)
|
|
return &ret, err
|
|
}
|
|
|
|
// Create create new network
|
|
// See more: https://docs.netbird.io/api/resources/networks#create-a-network
|
|
func (a *NetworksAPI) Create(ctx context.Context, request api.PostApiNetworksJSONRequestBody) (*api.Network, error) {
|
|
requestBytes, err := json.Marshal(request)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp, err := a.c.newRequest(ctx, "POST", "/api/networks", bytes.NewReader(requestBytes))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[api.Network](resp)
|
|
return &ret, err
|
|
}
|
|
|
|
// Update update network
|
|
// See more: https://docs.netbird.io/api/resources/networks#update-a-network
|
|
func (a *NetworksAPI) Update(ctx context.Context, networkID string, request api.PutApiNetworksNetworkIdJSONRequestBody) (*api.Network, error) {
|
|
requestBytes, err := json.Marshal(request)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp, err := a.c.newRequest(ctx, "PUT", "/api/networks/"+networkID, bytes.NewReader(requestBytes))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[api.Network](resp)
|
|
return &ret, err
|
|
}
|
|
|
|
// Delete delete network
|
|
// See more: https://docs.netbird.io/api/resources/networks#delete-a-network
|
|
func (a *NetworksAPI) Delete(ctx context.Context, networkID string) error {
|
|
resp, err := a.c.newRequest(ctx, "DELETE", "/api/networks/"+networkID, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// NetworkResourcesAPI APIs for Network Resources, do not use directly
|
|
type NetworkResourcesAPI struct {
|
|
c *Client
|
|
networkID string
|
|
}
|
|
|
|
// Resources APIs for network resources
|
|
func (a *NetworksAPI) Resources(networkID string) *NetworkResourcesAPI {
|
|
return &NetworkResourcesAPI{
|
|
c: a.c,
|
|
networkID: networkID,
|
|
}
|
|
}
|
|
|
|
// List list all resources in networks
|
|
// See more: https://docs.netbird.io/api/resources/networks#list-all-network-resources
|
|
func (a *NetworkResourcesAPI) List(ctx context.Context) ([]api.NetworkResource, error) {
|
|
resp, err := a.c.newRequest(ctx, "GET", "/api/networks/"+a.networkID+"/resources", nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[[]api.NetworkResource](resp)
|
|
return ret, err
|
|
}
|
|
|
|
// Get get network resource info
|
|
// See more: https://docs.netbird.io/api/resources/networks#retrieve-a-network-resource
|
|
func (a *NetworkResourcesAPI) Get(ctx context.Context, networkResourceID string) (*api.NetworkResource, error) {
|
|
resp, err := a.c.newRequest(ctx, "GET", "/api/networks/"+a.networkID+"/resources/"+networkResourceID, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[api.NetworkResource](resp)
|
|
return &ret, err
|
|
}
|
|
|
|
// Create create new network resource
|
|
// See more: https://docs.netbird.io/api/resources/networks#create-a-network-resource
|
|
func (a *NetworkResourcesAPI) Create(ctx context.Context, request api.PostApiNetworksNetworkIdResourcesJSONRequestBody) (*api.NetworkResource, error) {
|
|
requestBytes, err := json.Marshal(request)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp, err := a.c.newRequest(ctx, "POST", "/api/networks/"+a.networkID+"/resources", bytes.NewReader(requestBytes))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[api.NetworkResource](resp)
|
|
return &ret, err
|
|
}
|
|
|
|
// Update update network resource
|
|
// See more: https://docs.netbird.io/api/resources/networks#update-a-network-resource
|
|
func (a *NetworkResourcesAPI) Update(ctx context.Context, networkResourceID string, request api.PutApiNetworksNetworkIdResourcesResourceIdJSONRequestBody) (*api.NetworkResource, error) {
|
|
requestBytes, err := json.Marshal(request)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp, err := a.c.newRequest(ctx, "PUT", "/api/networks/"+a.networkID+"/resources/"+networkResourceID, bytes.NewReader(requestBytes))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[api.NetworkResource](resp)
|
|
return &ret, err
|
|
}
|
|
|
|
// Delete delete network resource
|
|
// See more: https://docs.netbird.io/api/resources/networks#delete-a-network-resource
|
|
func (a *NetworkResourcesAPI) Delete(ctx context.Context, networkResourceID string) error {
|
|
resp, err := a.c.newRequest(ctx, "DELETE", "/api/networks/"+a.networkID+"/resources/"+networkResourceID, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// NetworkRoutersAPI APIs for Network Routers, do not use directly
|
|
type NetworkRoutersAPI struct {
|
|
c *Client
|
|
networkID string
|
|
}
|
|
|
|
// Routers APIs for network routers
|
|
func (a *NetworksAPI) Routers(networkID string) *NetworkRoutersAPI {
|
|
return &NetworkRoutersAPI{
|
|
c: a.c,
|
|
networkID: networkID,
|
|
}
|
|
}
|
|
|
|
// List list all routers in networks
|
|
// See more: https://docs.netbird.io/api/routers/networks#list-all-network-routers
|
|
func (a *NetworkRoutersAPI) List(ctx context.Context) ([]api.NetworkRouter, error) {
|
|
resp, err := a.c.newRequest(ctx, "GET", "/api/networks/"+a.networkID+"/routers", nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[[]api.NetworkRouter](resp)
|
|
return ret, err
|
|
}
|
|
|
|
// Get get network router info
|
|
// See more: https://docs.netbird.io/api/routers/networks#retrieve-a-network-router
|
|
func (a *NetworkRoutersAPI) Get(ctx context.Context, networkRouterID string) (*api.NetworkRouter, error) {
|
|
resp, err := a.c.newRequest(ctx, "GET", "/api/networks/"+a.networkID+"/routers/"+networkRouterID, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[api.NetworkRouter](resp)
|
|
return &ret, err
|
|
}
|
|
|
|
// Create create new network router
|
|
// See more: https://docs.netbird.io/api/routers/networks#create-a-network-router
|
|
func (a *NetworkRoutersAPI) Create(ctx context.Context, request api.PostApiNetworksNetworkIdRoutersJSONRequestBody) (*api.NetworkRouter, error) {
|
|
requestBytes, err := json.Marshal(request)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp, err := a.c.newRequest(ctx, "POST", "/api/networks/"+a.networkID+"/routers", bytes.NewReader(requestBytes))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[api.NetworkRouter](resp)
|
|
return &ret, err
|
|
}
|
|
|
|
// Update update network router
|
|
// See more: https://docs.netbird.io/api/routers/networks#update-a-network-router
|
|
func (a *NetworkRoutersAPI) Update(ctx context.Context, networkRouterID string, request api.PutApiNetworksNetworkIdRoutersRouterIdJSONRequestBody) (*api.NetworkRouter, error) {
|
|
requestBytes, err := json.Marshal(request)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp, err := a.c.newRequest(ctx, "PUT", "/api/networks/"+a.networkID+"/routers/"+networkRouterID, bytes.NewReader(requestBytes))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[api.NetworkRouter](resp)
|
|
return &ret, err
|
|
}
|
|
|
|
// Delete delete network router
|
|
// See more: https://docs.netbird.io/api/routers/networks#delete-a-network-router
|
|
func (a *NetworkRoutersAPI) Delete(ctx context.Context, networkRouterID string) error {
|
|
resp, err := a.c.newRequest(ctx, "DELETE", "/api/networks/"+a.networkID+"/routers/"+networkRouterID, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
|
|
return nil
|
|
}
|