From d9ced1b9c04823b14e13f19fac9e904632112a79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20Papp?= Date: Thu, 28 Mar 2024 09:52:08 +0100 Subject: [PATCH] Eliminate management-integrations repo --- client/cmd/testutil.go | 7 +-- client/internal/engine_test.go | 4 +- client/server/server_test.go | 4 +- go.mod | 1 - go.sum | 2 - management/client/client_test.go | 20 +++--- management/cmd/management.go | 6 +- management/server/account.go | 30 ++++----- management/server/http/handler.go | 2 +- .../server/integrated_validator/interface.go | 19 ------ management/server/integrations/handler.go | 36 +++++++++++ .../integrations/validator/validator.go | 61 +++++++++++++++++++ 12 files changed, 131 insertions(+), 61 deletions(-) delete mode 100644 management/server/integrated_validator/interface.go create mode 100644 management/server/integrations/handler.go create mode 100644 management/server/integrations/validator/validator.go diff --git a/client/cmd/testutil.go b/client/cmd/testutil.go index 2f92e1c03..7d0a3307c 100644 --- a/client/cmd/testutil.go +++ b/client/cmd/testutil.go @@ -7,17 +7,16 @@ import ( "testing" "time" - "github.com/netbirdio/netbird/management/server/activity" - "github.com/netbirdio/netbird/util" "google.golang.org/grpc" - "github.com/netbirdio/management-integrations/integrations" clientProto "github.com/netbirdio/netbird/client/proto" client "github.com/netbirdio/netbird/client/server" mgmtProto "github.com/netbirdio/netbird/management/proto" mgmt "github.com/netbirdio/netbird/management/server" + "github.com/netbirdio/netbird/management/server/activity" + "github.com/netbirdio/netbird/management/server/integrations/validator" sigProto "github.com/netbirdio/netbird/signal/proto" sig "github.com/netbirdio/netbird/signal/server" ) @@ -79,7 +78,7 @@ func startManagement(t *testing.T, config *mgmt.Config) (*grpc.Server, net.Liste if err != nil { return nil, nil } - iv, _ := integrations.NewIntegratedValidator(eventStore) + iv, _ := validator.NewIntegratedValidator(eventStore) accountManager, err := mgmt.BuildManager(store, peersUpdateManager, nil, "", "netbird.selfhosted", eventStore, nil, false, iv) if err != nil { t.Fatal(err) diff --git a/client/internal/engine_test.go b/client/internal/engine_test.go index 309b2e7c6..e53091f0c 100644 --- a/client/internal/engine_test.go +++ b/client/internal/engine_test.go @@ -21,7 +21,6 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/keepalive" - "github.com/netbirdio/management-integrations/integrations" "github.com/netbirdio/netbird/client/internal/dns" "github.com/netbirdio/netbird/client/internal/peer" "github.com/netbirdio/netbird/client/internal/routemanager" @@ -34,6 +33,7 @@ import ( mgmtProto "github.com/netbirdio/netbird/management/proto" "github.com/netbirdio/netbird/management/server" "github.com/netbirdio/netbird/management/server/activity" + "github.com/netbirdio/netbird/management/server/integrations/validator" "github.com/netbirdio/netbird/route" signal "github.com/netbirdio/netbird/signal/client" "github.com/netbirdio/netbird/signal/proto" @@ -1051,7 +1051,7 @@ func startManagement(dataDir string) (*grpc.Server, string, error) { if err != nil { return nil, "", err } - ia, _ := integrations.NewIntegratedValidator(eventStore) + ia, _ := validator.NewIntegratedValidator(eventStore) accountManager, err := server.BuildManager(store, peersUpdateManager, nil, "", "netbird.selfhosted", eventStore, nil, false, ia) if err != nil { return nil, "", err diff --git a/client/server/server_test.go b/client/server/server_test.go index 4e4a09145..2f613b296 100644 --- a/client/server/server_test.go +++ b/client/server/server_test.go @@ -2,7 +2,6 @@ package server import ( "context" - "github.com/netbirdio/management-integrations/integrations" "net" "testing" "time" @@ -16,6 +15,7 @@ import ( mgmtProto "github.com/netbirdio/netbird/management/proto" "github.com/netbirdio/netbird/management/server" "github.com/netbirdio/netbird/management/server/activity" + "github.com/netbirdio/netbird/management/server/integrations/validator" "github.com/netbirdio/netbird/signal/proto" signalServer "github.com/netbirdio/netbird/signal/server" ) @@ -115,7 +115,7 @@ func startManagement(t *testing.T, signalAddr string, counter *int) (*grpc.Serve if err != nil { return nil, "", err } - ia, _ := integrations.NewIntegratedValidator(eventStore) + ia, _ := validator.NewIntegratedValidator(eventStore) accountManager, err := server.BuildManager(store, peersUpdateManager, nil, "", "netbird.selfhosted", eventStore, nil, false, ia) if err != nil { return nil, "", err diff --git a/go.mod b/go.mod index 5566f8559..d6203d76c 100644 --- a/go.mod +++ b/go.mod @@ -60,7 +60,6 @@ require ( github.com/miekg/dns v1.1.43 github.com/mitchellh/hashstructure/v2 v2.0.2 github.com/nadoo/ipset v0.5.0 - github.com/netbirdio/management-integrations/integrations v0.0.0-20240326083846-3682438fca98 github.com/okta/okta-sdk-golang/v2 v2.18.0 github.com/oschwald/maxminddb-golang v1.12.0 github.com/patrickmn/go-cache v2.1.0+incompatible diff --git a/go.sum b/go.sum index 6da405341..f89c5aebb 100644 --- a/go.sum +++ b/go.sum @@ -383,8 +383,6 @@ github.com/nadoo/ipset v0.5.0 h1:5GJUAuZ7ITQQQGne5J96AmFjRtI8Avlbk6CabzYWVUc= github.com/nadoo/ipset v0.5.0/go.mod h1:rYF5DQLRGGoQ8ZSWeK+6eX5amAuPqwFkWjhQlEITGJQ= github.com/netbirdio/ice/v3 v3.0.0-20240315174635-e72a50fcb64e h1:PURA50S8u4mF6RrkYYCAvvPCixhqqEiEy3Ej6avh04c= github.com/netbirdio/ice/v3 v3.0.0-20240315174635-e72a50fcb64e/go.mod h1:YMLU7qbKfVjmEv7EoZPIVEI+kNYxWCdPK3VS0BU+U4Q= -github.com/netbirdio/management-integrations/integrations v0.0.0-20240326083846-3682438fca98 h1:i6AtenTLu/CqhTmj0g1K/GWkkpMJMhQM6Vjs46x25nA= -github.com/netbirdio/management-integrations/integrations v0.0.0-20240326083846-3682438fca98/go.mod h1:kxks50DrZnhW+oRTdHOkVOJbcTcyo766am8RBugo+Yc= github.com/netbirdio/service v0.0.0-20230215170314-b923b89432b0 h1:hirFRfx3grVA/9eEyjME5/z3nxdJlN9kfQpvWWPk32g= github.com/netbirdio/service v0.0.0-20230215170314-b923b89432b0/go.mod h1:CIMRFEJVL+0DS1a3Nx06NaMn4Dz63Ng6O7dl0qH0zVM= github.com/netbirdio/systray v0.0.0-20231030152038-ef1ed2a27949 h1:xbWM9BU6mwZZLHxEjxIX/V8Hv3HurQt4mReIE4mY4DM= diff --git a/management/client/client_test.go b/management/client/client_test.go index 30f91c73b..219e01ffb 100644 --- a/management/client/client_test.go +++ b/management/client/client_test.go @@ -9,24 +9,20 @@ import ( "testing" "time" - "github.com/netbirdio/netbird/management/server/activity" - - "github.com/netbirdio/netbird/client/system" - log "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" - - "github.com/netbirdio/management-integrations/integrations" - "github.com/netbirdio/netbird/encryption" - mgmtProto "github.com/netbirdio/netbird/management/proto" - mgmt "github.com/netbirdio/netbird/management/server" - "github.com/netbirdio/netbird/management/server/mock_server" - "golang.zx2c4.com/wireguard/wgctrl/wgtypes" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" + "github.com/netbirdio/netbird/client/system" + "github.com/netbirdio/netbird/encryption" + mgmtProto "github.com/netbirdio/netbird/management/proto" + mgmt "github.com/netbirdio/netbird/management/server" + "github.com/netbirdio/netbird/management/server/activity" + "github.com/netbirdio/netbird/management/server/integrations/validator" + "github.com/netbirdio/netbird/management/server/mock_server" "github.com/netbirdio/netbird/util" ) @@ -68,7 +64,7 @@ func startManagement(t *testing.T) (*grpc.Server, net.Listener) { peersUpdateManager := mgmt.NewPeersUpdateManager(nil) eventStore := &activity.InMemoryEventStore{} - ia, _ := integrations.NewIntegratedValidator(eventStore) + ia, _ := validator.NewIntegratedValidator(eventStore) accountManager, err := mgmt.BuildManager(store, peersUpdateManager, nil, "", "netbird.selfhosted", eventStore, nil, false, ia) if err != nil { t.Fatal(err) diff --git a/management/cmd/management.go b/management/cmd/management.go index 23d9c195c..90c22aca4 100644 --- a/management/cmd/management.go +++ b/management/cmd/management.go @@ -32,14 +32,14 @@ import ( "github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors/realip" - "github.com/netbirdio/management-integrations/integrations" - "github.com/netbirdio/netbird/encryption" mgmtProto "github.com/netbirdio/netbird/management/proto" "github.com/netbirdio/netbird/management/server" "github.com/netbirdio/netbird/management/server/geolocation" httpapi "github.com/netbirdio/netbird/management/server/http" "github.com/netbirdio/netbird/management/server/idp" + "github.com/netbirdio/netbird/management/server/integrations" + "github.com/netbirdio/netbird/management/server/integrations/validator" "github.com/netbirdio/netbird/management/server/jwtclaims" "github.com/netbirdio/netbird/management/server/metrics" "github.com/netbirdio/netbird/management/server/telemetry" @@ -173,7 +173,7 @@ var ( log.Infof("geo location service has been initialized from %s", config.Datadir) } - integratedPeerValidator, err := integrations.NewIntegratedValidator(eventStore) + integratedPeerValidator, err := validator.NewIntegratedValidator(eventStore) if err != nil { return fmt.Errorf("failed to initialize integrated peer validator: %v", err) } diff --git a/management/server/account.go b/management/server/account.go index c145c1bd7..44aa5fe21 100644 --- a/management/server/account.go +++ b/management/server/account.go @@ -28,8 +28,8 @@ import ( "github.com/netbirdio/netbird/management/server/geolocation" nbgroup "github.com/netbirdio/netbird/management/server/group" "github.com/netbirdio/netbird/management/server/idp" - "github.com/netbirdio/netbird/management/server/integrated_validator" "github.com/netbirdio/netbird/management/server/integration_reference" + "github.com/netbirdio/netbird/management/server/integrations/validator" "github.com/netbirdio/netbird/management/server/jwtclaims" nbpeer "github.com/netbirdio/netbird/management/server/peer" "github.com/netbirdio/netbird/management/server/posture" @@ -157,7 +157,7 @@ type DefaultAccountManager struct { // userDeleteFromIDPEnabled allows to delete user from IDP when user is deleted from account userDeleteFromIDPEnabled bool - integratedPeerValidator integrated_validator.IntegratedValidator + integratedPeerValidator validator.IntegratedValidator } // Settings represents Account settings structure that can be modified via API and Dashboard @@ -242,19 +242,19 @@ type UserPermissions struct { } type UserInfo struct { - ID string `json:"id"` - Email string `json:"email"` - Name string `json:"name"` - Role string `json:"role"` - AutoGroups []string `json:"auto_groups"` - Status string `json:"-"` - IsServiceUser bool `json:"is_service_user"` - IsBlocked bool `json:"is_blocked"` - NonDeletable bool `json:"non_deletable"` - LastLogin time.Time `json:"last_login"` - Issued string `json:"issued"` + ID string `json:"id"` + Email string `json:"email"` + Name string `json:"name"` + Role string `json:"role"` + AutoGroups []string `json:"auto_groups"` + Status string `json:"-"` + IsServiceUser bool `json:"is_service_user"` + IsBlocked bool `json:"is_blocked"` + NonDeletable bool `json:"non_deletable"` + LastLogin time.Time `json:"last_login"` + Issued string `json:"issued"` IntegrationReference integration_reference.IntegrationReference `json:"-"` - Permissions UserPermissions `json:"permissions"` + Permissions UserPermissions `json:"permissions"` } // getRoutesToSync returns the enabled routes for the peer ID and the routes @@ -858,7 +858,7 @@ func (a *Account) UserGroupsRemoveFromPeers(userID string, groups ...string) { func BuildManager(store Store, peersUpdateManager *PeersUpdateManager, idpManager idp.Manager, singleAccountModeDomain string, dnsDomain string, eventStore activity.Store, geo *geolocation.Geolocation, userDeleteFromIDPEnabled bool, - integratedPeerValidator integrated_validator.IntegratedValidator, + integratedPeerValidator validator.IntegratedValidator, ) (*DefaultAccountManager, error) { am := &DefaultAccountManager{ Store: store, diff --git a/management/server/http/handler.go b/management/server/http/handler.go index bdbeba346..bb0b24ec4 100644 --- a/management/server/http/handler.go +++ b/management/server/http/handler.go @@ -8,10 +8,10 @@ import ( "github.com/gorilla/mux" "github.com/rs/cors" - "github.com/netbirdio/management-integrations/integrations" s "github.com/netbirdio/netbird/management/server" "github.com/netbirdio/netbird/management/server/geolocation" "github.com/netbirdio/netbird/management/server/http/middleware" + "github.com/netbirdio/netbird/management/server/integrations" "github.com/netbirdio/netbird/management/server/jwtclaims" "github.com/netbirdio/netbird/management/server/telemetry" ) diff --git a/management/server/integrated_validator/interface.go b/management/server/integrated_validator/interface.go deleted file mode 100644 index e87755b87..000000000 --- a/management/server/integrated_validator/interface.go +++ /dev/null @@ -1,19 +0,0 @@ -package integrated_validator - -import ( - "github.com/netbirdio/netbird/management/server/account" - nbgroup "github.com/netbirdio/netbird/management/server/group" - nbpeer "github.com/netbirdio/netbird/management/server/peer" -) - -// IntegratedValidator interface exists to avoid the circle dependencies -type IntegratedValidator interface { - ValidateExtraSettings(newExtraSettings *account.ExtraSettings, oldExtraSettings *account.ExtraSettings, peers map[string]*nbpeer.Peer, userID string, accountID string) error - ValidatePeer(update *nbpeer.Peer, peer *nbpeer.Peer, userID string, accountID string, dnsDomain string, peersGroup []string, extraSettings *account.ExtraSettings) (*nbpeer.Peer, error) - PreparePeer(accountID string, peer *nbpeer.Peer, peersGroup []string, extraSettings *account.ExtraSettings) *nbpeer.Peer - IsNotValidPeer(accountID string, peer *nbpeer.Peer, peersGroup []string, extraSettings *account.ExtraSettings) (bool, bool) - GetValidatedPeers(accountID string, groups map[string]*nbgroup.Group, peers map[string]*nbpeer.Peer, extraSettings *account.ExtraSettings) (map[string]struct{}, error) - PeerDeleted(accountID, peerID string) error - SetPeerInvalidationListener(fn func(accountID string)) - Stop() -} diff --git a/management/server/integrations/handler.go b/management/server/integrations/handler.go new file mode 100644 index 000000000..14be29676 --- /dev/null +++ b/management/server/integrations/handler.go @@ -0,0 +1,36 @@ +package integrations + +import ( + "context" + + "github.com/gorilla/mux" + log "github.com/sirupsen/logrus" + + "github.com/netbirdio/netbird/management/server" + "github.com/netbirdio/netbird/management/server/activity" + "github.com/netbirdio/netbird/management/server/activity/sqlite" + "github.com/netbirdio/netbird/management/server/jwtclaims" +) + +func RegisterHandlers( + ctx context.Context, + prefix string, + router *mux.Router, + accountManager server.AccountManager, + extractor *jwtclaims.ClaimsExtractor, +) (*mux.Router, error) { + return router, nil +} + +func InitEventStore(dataDir string, key string) (activity.Store, string, error) { + var err error + if key == "" { + log.Debugf("generate new activity store encryption key") + key, err = sqlite.GenerateKey() + if err != nil { + return nil, "", err + } + } + store, err := sqlite.NewSQLiteStore(dataDir, key) + return store, key, err +} diff --git a/management/server/integrations/validator/validator.go b/management/server/integrations/validator/validator.go new file mode 100644 index 000000000..9af5f417b --- /dev/null +++ b/management/server/integrations/validator/validator.go @@ -0,0 +1,61 @@ +package validator + +import ( + "github.com/netbirdio/netbird/management/server/account" + "github.com/netbirdio/netbird/management/server/activity" + "github.com/netbirdio/netbird/management/server/group" + nbpeer "github.com/netbirdio/netbird/management/server/peer" +) + +type IntegratedValidator interface { + ValidateExtraSettings(newExtraSettings *account.ExtraSettings, oldExtraSettings *account.ExtraSettings, peers map[string]*nbpeer.Peer, userID string, accountID string) error + ValidatePeer(update *nbpeer.Peer, peer *nbpeer.Peer, userID string, accountID string, dnsDomain string, peersGroup []string, extraSettings *account.ExtraSettings) (*nbpeer.Peer, error) + PreparePeer(accountID string, peer *nbpeer.Peer, peersGroup []string, extraSettings *account.ExtraSettings) *nbpeer.Peer + IsNotValidPeer(accountID string, peer *nbpeer.Peer, peersGroup []string, extraSettings *account.ExtraSettings) (bool, bool) + GetValidatedPeers(accountID string, groups map[string]*group.Group, peers map[string]*nbpeer.Peer, extraSettings *account.ExtraSettings) (map[string]struct{}, error) + PeerDeleted(accountID, peerID string) error + SetPeerInvalidationListener(fn func(accountID string)) + Stop() +} + +type IntegratedValidatorImpl struct { +} + +func NewIntegratedValidator(activity.Store) (IntegratedValidator, error) { + return &IntegratedValidatorImpl{}, nil +} + +func (v *IntegratedValidatorImpl) ValidateExtraSettings(*account.ExtraSettings, *account.ExtraSettings, map[string]*nbpeer.Peer, string, string) error { + return nil +} + +func (v *IntegratedValidatorImpl) ValidatePeer(update *nbpeer.Peer, _ *nbpeer.Peer, _ string, _ string, _ string, _ []string, _ *account.ExtraSettings) (*nbpeer.Peer, error) { + return update, nil +} + +func (v *IntegratedValidatorImpl) PreparePeer(_ string, peer *nbpeer.Peer, _ []string, _ *account.ExtraSettings) *nbpeer.Peer { + return peer.Copy() +} + +func (v *IntegratedValidatorImpl) IsNotValidPeer(_ string, _ *nbpeer.Peer, _ []string, _ *account.ExtraSettings) (bool, bool) { + return false, false +} + +func (v *IntegratedValidatorImpl) GetValidatedPeers(_ string, _ map[string]*group.Group, peers map[string]*nbpeer.Peer, _ *account.ExtraSettings) (map[string]struct{}, error) { + validatedPeers := make(map[string]struct{}) + for p := range peers { + validatedPeers[p] = struct{}{} + } + return validatedPeers, nil +} + +func (v *IntegratedValidatorImpl) PeerDeleted(_, _ string) error { + return nil +} + +func (v *IntegratedValidatorImpl) SetPeerInvalidationListener(_ func(accountID string)) { + +} + +func (v *IntegratedValidatorImpl) Stop() { +}