mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-16 07:16:38 +00:00
308 lines
10 KiB
Go
308 lines
10 KiB
Go
package rest
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"encoding/json"
|
|
|
|
"github.com/netbirdio/netbird/shared/management/http/api"
|
|
)
|
|
|
|
// EDRAPI APIs for EDR integrations (Intune, SentinelOne, Falcon, Huntress)
|
|
type EDRAPI struct {
|
|
c *Client
|
|
}
|
|
|
|
// GetIntuneIntegration retrieves the EDR Intune integration
|
|
// See more: https://docs.netbird.io/api/resources/edr#get-intune-integration
|
|
func (a *EDRAPI) GetIntuneIntegration(ctx context.Context) (*api.EDRIntuneResponse, error) {
|
|
resp, err := a.c.NewRequest(ctx, "GET", "/api/integrations/edr/intune", nil, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[api.EDRIntuneResponse](resp)
|
|
return &ret, err
|
|
}
|
|
|
|
// CreateIntuneIntegration creates a new EDR Intune integration
|
|
// See more: https://docs.netbird.io/api/resources/edr#create-intune-integration
|
|
func (a *EDRAPI) CreateIntuneIntegration(ctx context.Context, request api.EDRIntuneRequest) (*api.EDRIntuneResponse, error) {
|
|
requestBytes, err := json.Marshal(request)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp, err := a.c.NewRequest(ctx, "POST", "/api/integrations/edr/intune", bytes.NewReader(requestBytes), nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[api.EDRIntuneResponse](resp)
|
|
return &ret, err
|
|
}
|
|
|
|
// UpdateIntuneIntegration updates an existing EDR Intune integration
|
|
// See more: https://docs.netbird.io/api/resources/edr#update-intune-integration
|
|
func (a *EDRAPI) UpdateIntuneIntegration(ctx context.Context, request api.EDRIntuneRequest) (*api.EDRIntuneResponse, error) {
|
|
requestBytes, err := json.Marshal(request)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp, err := a.c.NewRequest(ctx, "PUT", "/api/integrations/edr/intune", bytes.NewReader(requestBytes), nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[api.EDRIntuneResponse](resp)
|
|
return &ret, err
|
|
}
|
|
|
|
// DeleteIntuneIntegration deletes the EDR Intune integration
|
|
// See more: https://docs.netbird.io/api/resources/edr#delete-intune-integration
|
|
func (a *EDRAPI) DeleteIntuneIntegration(ctx context.Context) error {
|
|
resp, err := a.c.NewRequest(ctx, "DELETE", "/api/integrations/edr/intune", nil, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetSentinelOneIntegration retrieves the EDR SentinelOne integration
|
|
// See more: https://docs.netbird.io/api/resources/edr#get-sentinelone-integration
|
|
func (a *EDRAPI) GetSentinelOneIntegration(ctx context.Context) (*api.EDRSentinelOneResponse, error) {
|
|
resp, err := a.c.NewRequest(ctx, "GET", "/api/integrations/edr/sentinelone", nil, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[api.EDRSentinelOneResponse](resp)
|
|
return &ret, err
|
|
}
|
|
|
|
// CreateSentinelOneIntegration creates a new EDR SentinelOne integration
|
|
// See more: https://docs.netbird.io/api/resources/edr#create-sentinelone-integration
|
|
func (a *EDRAPI) CreateSentinelOneIntegration(ctx context.Context, request api.EDRSentinelOneRequest) (*api.EDRSentinelOneResponse, error) {
|
|
requestBytes, err := json.Marshal(request)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp, err := a.c.NewRequest(ctx, "POST", "/api/integrations/edr/sentinelone", bytes.NewReader(requestBytes), nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[api.EDRSentinelOneResponse](resp)
|
|
return &ret, err
|
|
}
|
|
|
|
// UpdateSentinelOneIntegration updates an existing EDR SentinelOne integration
|
|
// See more: https://docs.netbird.io/api/resources/edr#update-sentinelone-integration
|
|
func (a *EDRAPI) UpdateSentinelOneIntegration(ctx context.Context, request api.EDRSentinelOneRequest) (*api.EDRSentinelOneResponse, error) {
|
|
requestBytes, err := json.Marshal(request)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp, err := a.c.NewRequest(ctx, "PUT", "/api/integrations/edr/sentinelone", bytes.NewReader(requestBytes), nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[api.EDRSentinelOneResponse](resp)
|
|
return &ret, err
|
|
}
|
|
|
|
// DeleteSentinelOneIntegration deletes the EDR SentinelOne integration
|
|
// See more: https://docs.netbird.io/api/resources/edr#delete-sentinelone-integration
|
|
func (a *EDRAPI) DeleteSentinelOneIntegration(ctx context.Context) error {
|
|
resp, err := a.c.NewRequest(ctx, "DELETE", "/api/integrations/edr/sentinelone", nil, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetFalconIntegration retrieves the EDR Falcon integration
|
|
// See more: https://docs.netbird.io/api/resources/edr#get-falcon-integration
|
|
func (a *EDRAPI) GetFalconIntegration(ctx context.Context) (*api.EDRFalconResponse, error) {
|
|
resp, err := a.c.NewRequest(ctx, "GET", "/api/integrations/edr/falcon", nil, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[api.EDRFalconResponse](resp)
|
|
return &ret, err
|
|
}
|
|
|
|
// CreateFalconIntegration creates a new EDR Falcon integration
|
|
// See more: https://docs.netbird.io/api/resources/edr#create-falcon-integration
|
|
func (a *EDRAPI) CreateFalconIntegration(ctx context.Context, request api.EDRFalconRequest) (*api.EDRFalconResponse, error) {
|
|
requestBytes, err := json.Marshal(request)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp, err := a.c.NewRequest(ctx, "POST", "/api/integrations/edr/falcon", bytes.NewReader(requestBytes), nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[api.EDRFalconResponse](resp)
|
|
return &ret, err
|
|
}
|
|
|
|
// UpdateFalconIntegration updates an existing EDR Falcon integration
|
|
// See more: https://docs.netbird.io/api/resources/edr#update-falcon-integration
|
|
func (a *EDRAPI) UpdateFalconIntegration(ctx context.Context, request api.EDRFalconRequest) (*api.EDRFalconResponse, error) {
|
|
requestBytes, err := json.Marshal(request)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp, err := a.c.NewRequest(ctx, "PUT", "/api/integrations/edr/falcon", bytes.NewReader(requestBytes), nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[api.EDRFalconResponse](resp)
|
|
return &ret, err
|
|
}
|
|
|
|
// DeleteFalconIntegration deletes the EDR Falcon integration
|
|
// See more: https://docs.netbird.io/api/resources/edr#delete-falcon-integration
|
|
func (a *EDRAPI) DeleteFalconIntegration(ctx context.Context) error {
|
|
resp, err := a.c.NewRequest(ctx, "DELETE", "/api/integrations/edr/falcon", nil, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetHuntressIntegration retrieves the EDR Huntress integration
|
|
// See more: https://docs.netbird.io/api/resources/edr#get-huntress-integration
|
|
func (a *EDRAPI) GetHuntressIntegration(ctx context.Context) (*api.EDRHuntressResponse, error) {
|
|
resp, err := a.c.NewRequest(ctx, "GET", "/api/integrations/edr/huntress", nil, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[api.EDRHuntressResponse](resp)
|
|
return &ret, err
|
|
}
|
|
|
|
// CreateHuntressIntegration creates a new EDR Huntress integration
|
|
// See more: https://docs.netbird.io/api/resources/edr#create-huntress-integration
|
|
func (a *EDRAPI) CreateHuntressIntegration(ctx context.Context, request api.EDRHuntressRequest) (*api.EDRHuntressResponse, error) {
|
|
requestBytes, err := json.Marshal(request)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp, err := a.c.NewRequest(ctx, "POST", "/api/integrations/edr/huntress", bytes.NewReader(requestBytes), nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[api.EDRHuntressResponse](resp)
|
|
return &ret, err
|
|
}
|
|
|
|
// UpdateHuntressIntegration updates an existing EDR Huntress integration
|
|
// See more: https://docs.netbird.io/api/resources/edr#update-huntress-integration
|
|
func (a *EDRAPI) UpdateHuntressIntegration(ctx context.Context, request api.EDRHuntressRequest) (*api.EDRHuntressResponse, error) {
|
|
requestBytes, err := json.Marshal(request)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp, err := a.c.NewRequest(ctx, "PUT", "/api/integrations/edr/huntress", bytes.NewReader(requestBytes), nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[api.EDRHuntressResponse](resp)
|
|
return &ret, err
|
|
}
|
|
|
|
// DeleteHuntressIntegration deletes the EDR Huntress integration
|
|
// See more: https://docs.netbird.io/api/resources/edr#delete-huntress-integration
|
|
func (a *EDRAPI) DeleteHuntressIntegration(ctx context.Context) error {
|
|
resp, err := a.c.NewRequest(ctx, "DELETE", "/api/integrations/edr/huntress", nil, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// BypassPeerCompliance bypasses compliance for a non-compliant peer
|
|
// See more: https://docs.netbird.io/api/resources/edr#bypass-peer-compliance
|
|
func (a *EDRAPI) BypassPeerCompliance(ctx context.Context, peerID string) (*api.BypassResponse, error) {
|
|
resp, err := a.c.NewRequest(ctx, "POST", "/api/peers/"+peerID+"/edr/bypass", nil, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[api.BypassResponse](resp)
|
|
return &ret, err
|
|
}
|
|
|
|
// RevokePeerBypass revokes the compliance bypass for a peer
|
|
// See more: https://docs.netbird.io/api/resources/edr#revoke-peer-bypass
|
|
func (a *EDRAPI) RevokePeerBypass(ctx context.Context, peerID string) error {
|
|
resp, err := a.c.NewRequest(ctx, "DELETE", "/api/peers/"+peerID+"/edr/bypass", nil, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// ListBypassedPeers returns all peers that have compliance bypassed
|
|
// See more: https://docs.netbird.io/api/resources/edr#list-all-bypassed-peers
|
|
func (a *EDRAPI) ListBypassedPeers(ctx context.Context) ([]api.BypassResponse, error) {
|
|
resp, err := a.c.NewRequest(ctx, "GET", "/api/peers/edr/bypassed", nil, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
ret, err := parseResponse[[]api.BypassResponse](resp)
|
|
return ret, err
|
|
}
|