From 9131069d12a9c9c600751bad45ba8e1078cfa702 Mon Sep 17 00:00:00 2001 From: Yury Gargay Date: Wed, 4 Oct 2023 15:08:50 +0200 Subject: [PATCH 1/6] Improve updateAccountPeers by bypassing AM and using account directly (#1193) Improve updateAccountPeers performance by bypassing AM and using the account directly --- management/server/account.go | 4 +-- management/server/dns.go | 4 ++- management/server/group.go | 17 +++++++------ management/server/nameserver.go | 18 +++----------- management/server/peer.go | 43 ++++++++++----------------------- management/server/policy.go | 8 ++++-- management/server/route.go | 16 ++++-------- management/server/setupkey.go | 4 ++- management/server/user.go | 12 ++++----- 9 files changed, 49 insertions(+), 77 deletions(-) diff --git a/management/server/account.go b/management/server/account.go index b8bfd5770..0b741797c 100644 --- a/management/server/account.go +++ b/management/server/account.go @@ -1491,9 +1491,7 @@ func (am *DefaultAccountManager) GetAccountFromToken(claims jwtclaims.Authorizat if err := am.Store.SaveAccount(account); err != nil { log.Errorf("failed to save account: %v", err) } else { - if err := am.updateAccountPeers(account); err != nil { - log.Errorf("failed updating account peers while updating user %s", account.Id) - } + am.updateAccountPeers(account) for _, g := range addNewGroups { if group := account.GetGroup(g); group != nil { am.storeEvent(user.Id, user.Id, account.Id, activity.GroupAddedToUser, diff --git a/management/server/dns.go b/management/server/dns.go index 427ba40d1..252782aea 100644 --- a/management/server/dns.go +++ b/management/server/dns.go @@ -122,7 +122,9 @@ func (am *DefaultAccountManager) SaveDNSSettings(accountID string, userID string am.storeEvent(userID, accountID, accountID, activity.GroupRemovedFromDisabledManagementGroups, meta) } - return am.updateAccountPeers(account) + am.updateAccountPeers(account) + + return nil } func toProtocolDNSConfig(update nbdns.Config) *proto.DNSConfig { diff --git a/management/server/group.go b/management/server/group.go index 0aebc6454..9e5ede3f4 100644 --- a/management/server/group.go +++ b/management/server/group.go @@ -84,10 +84,7 @@ func (am *DefaultAccountManager) SaveGroup(accountID, userID string, newGroup *G return err } - err = am.updateAccountPeers(account) - if err != nil { - return err - } + am.updateAccountPeers(account) // the following snippet tracks the activity and stores the group events in the event store. // It has to happen after all the operations have been successfully performed. @@ -229,7 +226,9 @@ func (am *DefaultAccountManager) DeleteGroup(accountId, userId, groupID string) am.storeEvent(userId, groupID, accountId, activity.GroupDeleted, g.EventMeta()) - return am.updateAccountPeers(account) + am.updateAccountPeers(account) + + return nil } // ListGroups objects of the peers @@ -281,7 +280,9 @@ func (am *DefaultAccountManager) GroupAddPeer(accountID, groupID, peerID string) return err } - return am.updateAccountPeers(account) + am.updateAccountPeers(account) + + return nil } // GroupDeletePeer removes peer from the group @@ -309,7 +310,9 @@ func (am *DefaultAccountManager) GroupDeletePeer(accountID, groupID, peerID stri } } - return am.updateAccountPeers(account) + am.updateAccountPeers(account) + + return nil } // GroupListPeers returns list of the peers from the group diff --git a/management/server/nameserver.go b/management/server/nameserver.go index 7025388ba..9af5b49ad 100644 --- a/management/server/nameserver.go +++ b/management/server/nameserver.go @@ -7,7 +7,6 @@ import ( "github.com/miekg/dns" "github.com/rs/xid" - log "github.com/sirupsen/logrus" nbdns "github.com/netbirdio/netbird/dns" "github.com/netbirdio/netbird/management/server/activity" @@ -74,11 +73,7 @@ func (am *DefaultAccountManager) CreateNameServerGroup(accountID string, name, d return nil, err } - err = am.updateAccountPeers(account) - if err != nil { - log.Error(err) - return newNSGroup.Copy(), status.Errorf(status.Internal, "failed to update peers after create nameserver %s", name) - } + am.updateAccountPeers(account) am.storeEvent(userID, newNSGroup.ID, accountID, activity.NameserverGroupCreated, newNSGroup.EventMeta()) @@ -113,11 +108,7 @@ func (am *DefaultAccountManager) SaveNameServerGroup(accountID, userID string, n return err } - err = am.updateAccountPeers(account) - if err != nil { - log.Error(err) - return status.Errorf(status.Internal, "failed to update peers after update nameserver %s", nsGroupToSave.Name) - } + am.updateAccountPeers(account) am.storeEvent(userID, nsGroupToSave.ID, accountID, activity.NameserverGroupUpdated, nsGroupToSave.EventMeta()) @@ -147,10 +138,7 @@ func (am *DefaultAccountManager) DeleteNameServerGroup(accountID, nsGroupID, use return err } - err = am.updateAccountPeers(account) - if err != nil { - return status.Errorf(status.Internal, "failed to update peers after deleting nameserver %s", nsGroupID) - } + am.updateAccountPeers(account) am.storeEvent(userID, nsGroup.ID, accountID, activity.NameserverGroupDeleted, nsGroup.EventMeta()) diff --git a/management/server/peer.go b/management/server/peer.go index 4e9bbedfd..8e4ad08e3 100644 --- a/management/server/peer.go +++ b/management/server/peer.go @@ -290,10 +290,7 @@ func (am *DefaultAccountManager) MarkPeerConnected(peerPubKey string, connected if oldStatus.LoginExpired { // we need to update other peers because when peer login expires all other peers are notified to disconnect from // the expired one. Here we notify them that connection is now allowed again. - err = am.updateAccountPeers(account) - if err != nil { - return err - } + am.updateAccountPeers(account) } return nil @@ -364,10 +361,7 @@ func (am *DefaultAccountManager) UpdatePeer(accountID, userID string, update *Pe return nil, err } - err = am.updateAccountPeers(account) - if err != nil { - return nil, err - } + am.updateAccountPeers(account) return peer, nil } @@ -433,7 +427,9 @@ func (am *DefaultAccountManager) DeletePeer(accountID, peerID, userID string) er return err } - return am.updateAccountPeers(account) + am.updateAccountPeers(account) + + return nil } // GetPeerByIP returns peer by its IP @@ -622,10 +618,7 @@ func (am *DefaultAccountManager) AddPeer(setupKey, userID string, peer *Peer) (* opEvent.Meta = newPeer.EventMeta(am.GetDNSDomain()) am.storeEvent(opEvent.InitiatorID, opEvent.TargetID, opEvent.AccountID, opEvent.Activity, opEvent.Meta) - err = am.updateAccountPeers(account) - if err != nil { - return nil, nil, err - } + am.updateAccountPeers(account) networkMap := account.GetPeerNetworkMap(newPeer.ID, am.dnsDomain) return newPeer, networkMap, nil @@ -740,10 +733,7 @@ func (am *DefaultAccountManager) LoginPeer(login PeerLogin) (*Peer, *NetworkMap, } if updateRemotePeers { - err = am.updateAccountPeers(account) - if err != nil { - return nil, nil, err - } + am.updateAccountPeers(account) } return peer, account.GetPeerNetworkMap(peer.ID, am.dnsDomain), nil } @@ -817,10 +807,7 @@ func (am *DefaultAccountManager) checkAndUpdatePeerSSHKey(peer *Peer, account *A } // trigger network map update - err = am.updateAccountPeers(account) - if err != nil { - return nil, err - } + am.updateAccountPeers(account) return peer, nil } @@ -865,7 +852,9 @@ func (am *DefaultAccountManager) UpdatePeerSSHKey(peerID string, sshKey string) } // trigger network map update - return am.updateAccountPeers(account) + am.updateAccountPeers(account) + + return nil } // GetPeer for a given accountID, peerID and userID error if not found. @@ -922,18 +911,12 @@ func updatePeerMeta(peer *Peer, meta PeerSystemMeta, account *Account) (*Peer, b // updateAccountPeers updates all peers that belong to an account. // Should be called when changes have to be synced to peers. -func (am *DefaultAccountManager) updateAccountPeers(account *Account) error { +func (am *DefaultAccountManager) updateAccountPeers(account *Account) { peers := account.GetPeers() for _, peer := range peers { - remotePeerNetworkMap, err := am.GetNetworkMap(peer.ID) - if err != nil { - return err - } - + remotePeerNetworkMap := account.GetPeerNetworkMap(peer.ID, am.dnsDomain) update := toSyncResponse(nil, peer, nil, remotePeerNetworkMap, am.GetDNSDomain()) am.peersUpdateManager.SendUpdate(peer.ID, &UpdateMessage{Update: update}) } - - return nil } diff --git a/management/server/policy.go b/management/server/policy.go index dde0b46d8..308a5c3c0 100644 --- a/management/server/policy.go +++ b/management/server/policy.go @@ -350,7 +350,9 @@ func (am *DefaultAccountManager) SavePolicy(accountID, userID string, policy *Po } am.storeEvent(userID, policy.ID, accountID, action, policy.EventMeta()) - return am.updateAccountPeers(account) + am.updateAccountPeers(account) + + return nil } // DeletePolicy from the store @@ -375,7 +377,9 @@ func (am *DefaultAccountManager) DeletePolicy(accountID, policyID, userID string am.storeEvent(userID, policy.ID, accountID, activity.PolicyRemoved, policy.EventMeta()) - return am.updateAccountPeers(account) + am.updateAccountPeers(account) + + return nil } // ListPolicies from the store diff --git a/management/server/route.go b/management/server/route.go index cdd214203..79c207c9b 100644 --- a/management/server/route.go +++ b/management/server/route.go @@ -9,7 +9,6 @@ import ( "github.com/netbirdio/netbird/management/server/status" "github.com/netbirdio/netbird/route" "github.com/rs/xid" - log "github.com/sirupsen/logrus" ) // GetRoute gets a route object from account and route IDs @@ -185,11 +184,7 @@ func (am *DefaultAccountManager) CreateRoute(accountID, network, peerID string, return nil, err } - err = am.updateAccountPeers(account) - if err != nil { - log.Error(err) - return &newRoute, status.Errorf(status.Internal, "failed to update peers after create route %s", newPrefix) - } + am.updateAccountPeers(account) am.storeEvent(userID, newRoute.ID, accountID, activity.RouteCreated, newRoute.EventMeta()) @@ -250,10 +245,7 @@ func (am *DefaultAccountManager) SaveRoute(accountID, userID string, routeToSave return err } - err = am.updateAccountPeers(account) - if err != nil { - return err - } + am.updateAccountPeers(account) am.storeEvent(userID, routeToSave.ID, accountID, activity.RouteUpdated, routeToSave.EventMeta()) @@ -283,7 +275,9 @@ func (am *DefaultAccountManager) DeleteRoute(accountID, routeID, userID string) am.storeEvent(userID, routy.ID, accountID, activity.RouteRemoved, routy.EventMeta()) - return am.updateAccountPeers(account) + am.updateAccountPeers(account) + + return nil } // ListRoutes returns a list of routes from account diff --git a/management/server/setupkey.go b/management/server/setupkey.go index e857230a5..6e626d084 100644 --- a/management/server/setupkey.go +++ b/management/server/setupkey.go @@ -317,7 +317,9 @@ func (am *DefaultAccountManager) SaveSetupKey(accountID string, keyToSave *Setup } }() - return newKey, am.updateAccountPeers(account) + am.updateAccountPeers(account) + + return newKey, nil } // ListSetupKeys returns a list of all setup keys of the account diff --git a/management/server/user.go b/management/server/user.go index ed22bca70..3169c784f 100644 --- a/management/server/user.go +++ b/management/server/user.go @@ -377,7 +377,9 @@ func (am *DefaultAccountManager) deleteRegularUser(account *Account, initiatorUs meta := map[string]any{"name": tuName, "email": tuEmail} am.storeEvent(initiatorUserID, targetUserID, account.Id, activity.UserDeleted, meta) - return am.updateAccountPeers(account) + am.updateAccountPeers(account) + + return nil } func (am *DefaultAccountManager) deleteUserPeers(initiatorUserID string, targetUserID string, account *Account) error { @@ -674,9 +676,7 @@ func (am *DefaultAccountManager) SaveUser(accountID, initiatorUserID string, upd return nil, err } - if err := am.updateAccountPeers(account); err != nil { - log.Errorf("failed updating account peers while updating user %s", accountID) - } + am.updateAccountPeers(account) } else { if err = am.Store.SaveAccount(account); err != nil { return nil, err @@ -870,9 +870,7 @@ func (am *DefaultAccountManager) expireAndUpdatePeers(account *Account, peers [] if len(peerIDs) != 0 { // this will trigger peer disconnect from the management service am.peersUpdateManager.CloseChannels(peerIDs) - if err := am.updateAccountPeers(account); err != nil { - return err - } + am.updateAccountPeers(account) } return nil } From 4791e41004a36a3addef2258aafe9bce0203c1e9 Mon Sep 17 00:00:00 2001 From: Yury Gargay Date: Wed, 4 Oct 2023 15:41:52 +0200 Subject: [PATCH 2/6] Cleanup Account Manager code (#1192) * Remove unused am.AccountExists * Remove unused am.GetPeerByKey * Remove unused am.GetPeerByIP and account.GetPeerByIP * Remove unused am.GroupListPeers --- management/server/account.go | 35 ------------------ management/server/account_test.go | 24 ------------- management/server/group.go | 26 -------------- management/server/http/groups_handler_test.go | 8 ----- management/server/http/routes_handler_test.go | 9 ----- management/server/mock_server/account_mock.go | 36 ------------------- management/server/peer.go | 29 --------------- 7 files changed, 167 deletions(-) diff --git a/management/server/account.go b/management/server/account.go index 0b741797c..ab79a6789 100644 --- a/management/server/account.go +++ b/management/server/account.go @@ -62,12 +62,9 @@ type AccountManager interface { GetAccountFromPAT(pat string) (*Account, *User, *PersonalAccessToken, error) MarkPATUsed(tokenID string) error GetUser(claims jwtclaims.AuthorizationClaims) (*User, error) - AccountExists(accountId string) (*bool, error) - GetPeerByKey(peerKey string) (*Peer, error) GetPeers(accountID, userID string) ([]*Peer, error) MarkPeerConnected(peerKey string, connected bool) error DeletePeer(accountID, peerID, userID string) error - GetPeerByIP(accountId string, peerIP string) (*Peer, error) UpdatePeer(accountID, userID string, peer *Peer) (*Peer, error) GetNetworkMap(peerID string) (*NetworkMap, error) GetPeerNetwork(peerID string) (*Network, error) @@ -84,7 +81,6 @@ type AccountManager interface { ListGroups(accountId string) ([]*Group, error) GroupAddPeer(accountId, groupID, peerID string) error GroupDeletePeer(accountId, groupID, peerID string) error - GroupListPeers(accountId, groupID string) ([]*Peer, error) GetPolicy(accountID, policyID, userID string) (*Policy, error) SavePolicy(accountID, userID string, policy *Policy) error DeletePolicy(accountID, policyID, userID string) error @@ -303,17 +299,6 @@ func (a *Account) GetRoutesByPrefix(prefix netip.Prefix) []*route.Route { return routes } -// GetPeerByIP returns peer by it's IP if exists under account or nil otherwise -func (a *Account) GetPeerByIP(peerIP string) *Peer { - for _, peer := range a.Peers { - if peerIP == peer.IP.String() { - return peer - } - } - - return nil -} - // GetGroup returns a group by ID if exists, nil otherwise func (a *Account) GetGroup(groupID string) *Group { return a.Groups[groupID] @@ -1602,26 +1587,6 @@ func isDomainValid(domain string) bool { return re.Match([]byte(domain)) } -// AccountExists checks whether account exists (returns true) or not (returns false) -func (am *DefaultAccountManager) AccountExists(accountID string) (*bool, error) { - unlock := am.Store.AcquireAccountLock(accountID) - defer unlock() - - var res bool - _, err := am.Store.GetAccount(accountID) - if err != nil { - if s, ok := status.FromError(err); ok && s.Type() == status.NotFound { - res = false - return &res, nil - } else { - return nil, err - } - } - - res = true - return &res, nil -} - // GetDNSDomain returns the configured dnsDomain func (am *DefaultAccountManager) GetDNSDomain() string { return am.dnsDomain diff --git a/management/server/account_test.go b/management/server/account_test.go index 5f711df80..d55734685 100644 --- a/management/server/account_test.go +++ b/management/server/account_test.go @@ -706,30 +706,6 @@ func createAccount(am *DefaultAccountManager, accountID, userID, domain string) return account, nil } -func TestAccountManager_AccountExists(t *testing.T) { - manager, err := createManager(t) - if err != nil { - t.Fatal(err) - return - } - - expectedId := "test_account" - userId := "account_creator" - _, err = createAccount(manager, expectedId, userId, "") - if err != nil { - t.Fatal(err) - } - - exists, err := manager.AccountExists(expectedId) - if err != nil { - t.Fatal(err) - } - - if !*exists { - t.Errorf("expected account to exist after creation, got false") - } -} - func TestAccountManager_GetAccount(t *testing.T) { manager, err := createManager(t) if err != nil { diff --git a/management/server/group.go b/management/server/group.go index 9e5ede3f4..a7502134a 100644 --- a/management/server/group.go +++ b/management/server/group.go @@ -314,29 +314,3 @@ func (am *DefaultAccountManager) GroupDeletePeer(accountID, groupID, peerID stri return nil } - -// GroupListPeers returns list of the peers from the group -func (am *DefaultAccountManager) GroupListPeers(accountID, groupID string) ([]*Peer, error) { - unlock := am.Store.AcquireAccountLock(accountID) - defer unlock() - - account, err := am.Store.GetAccount(accountID) - if err != nil { - return nil, status.Errorf(status.NotFound, "account not found") - } - - group, ok := account.Groups[groupID] - if !ok { - return nil, status.Errorf(status.NotFound, "group with ID %s not found", groupID) - } - - peers := make([]*Peer, 0, len(account.Groups)) - for _, peerID := range group.Peers { - p, ok := account.Peers[peerID] - if ok { - peers = append(peers, p) - } - } - - return peers, nil -} diff --git a/management/server/http/groups_handler_test.go b/management/server/http/groups_handler_test.go index ddb1233bf..aad03d50b 100644 --- a/management/server/http/groups_handler_test.go +++ b/management/server/http/groups_handler_test.go @@ -53,14 +53,6 @@ func initGroupTestData(user *server.User, groups ...*server.Group) *GroupsHandle Issued: server.GroupIssuedAPI, }, nil }, - GetPeerByIPFunc: func(_ string, peerIP string) (*server.Peer, error) { - for _, peer := range TestPeers { - if peer.IP.String() == peerIP { - return peer, nil - } - } - return nil, fmt.Errorf("peer not found") - }, GetAccountFromTokenFunc: func(claims jwtclaims.AuthorizationClaims) (*server.Account, *server.User, error) { return &server.Account{ Id: claims.AccountId, diff --git a/management/server/http/routes_handler_test.go b/management/server/http/routes_handler_test.go index 0f797c3b3..0bb4587e4 100644 --- a/management/server/http/routes_handler_test.go +++ b/management/server/http/routes_handler_test.go @@ -125,15 +125,6 @@ func initRoutesTestData() *RoutesHandler { } return nil }, - GetPeerByIPFunc: func(_ string, peerIP string) (*server.Peer, error) { - if peerIP != existingPeerID { - return nil, status.Errorf(status.NotFound, "Peer with ID %s not found", peerIP) - } - return &server.Peer{ - Key: existingPeerKey, - IP: netip.MustParseAddr(existingPeerID).AsSlice(), - }, nil - }, GetAccountFromTokenFunc: func(_ jwtclaims.AuthorizationClaims) (*server.Account, *server.User, error) { return testingAccount, testingAccount.Users["test_user"], nil }, diff --git a/management/server/mock_server/account_mock.go b/management/server/mock_server/account_mock.go index 889bbb221..5432b201b 100644 --- a/management/server/mock_server/account_mock.go +++ b/management/server/mock_server/account_mock.go @@ -20,12 +20,9 @@ type MockAccountManager struct { GetSetupKeyFunc func(accountID, userID, keyID string) (*server.SetupKey, error) GetAccountByUserOrAccountIdFunc func(userId, accountId, domain string) (*server.Account, error) GetUserFunc func(claims jwtclaims.AuthorizationClaims) (*server.User, error) - AccountExistsFunc func(accountId string) (*bool, error) - GetPeerByKeyFunc func(peerKey string) (*server.Peer, error) GetPeersFunc func(accountID, userID string) ([]*server.Peer, error) MarkPeerConnectedFunc func(peerKey string, connected bool) error DeletePeerFunc func(accountID, peerKey, userID string) error - GetPeerByIPFunc func(accountId string, peerIP string) (*server.Peer, error) GetNetworkMapFunc func(peerKey string) (*server.NetworkMap, error) GetPeerNetworkFunc func(peerKey string) (*server.Network, error) AddPeerFunc func(setupKey string, userId string, peer *server.Peer) (*server.Peer, *server.NetworkMap, error) @@ -35,7 +32,6 @@ type MockAccountManager struct { ListGroupsFunc func(accountID string) ([]*server.Group, error) GroupAddPeerFunc func(accountID, groupID, peerID string) error GroupDeletePeerFunc func(accountID, groupID, peerID string) error - GroupListPeersFunc func(accountID, groupID string) ([]*server.Peer, error) GetRuleFunc func(accountID, ruleID, userID string) (*server.Rule, error) SaveRuleFunc func(accountID, userID string, rule *server.Rule) error DeleteRuleFunc func(accountID, ruleID, userID string) error @@ -140,22 +136,6 @@ func (am *MockAccountManager) GetAccountByUserOrAccountID( ) } -// AccountExists mock implementation of AccountExists from server.AccountManager interface -func (am *MockAccountManager) AccountExists(accountId string) (*bool, error) { - if am.AccountExistsFunc != nil { - return am.AccountExistsFunc(accountId) - } - return nil, status.Errorf(codes.Unimplemented, "method AccountExists is not implemented") -} - -// GetPeerByKey mocks implementation of GetPeerByKey from server.AccountManager interface -func (am *MockAccountManager) GetPeerByKey(peerKey string) (*server.Peer, error) { - if am.GetPeerByKeyFunc != nil { - return am.GetPeerByKeyFunc(peerKey) - } - return nil, status.Errorf(codes.Unimplemented, "method GetPeerByKey is not implemented") -} - // MarkPeerConnected mock implementation of MarkPeerConnected from server.AccountManager interface func (am *MockAccountManager) MarkPeerConnected(peerKey string, connected bool) error { if am.MarkPeerConnectedFunc != nil { @@ -164,14 +144,6 @@ func (am *MockAccountManager) MarkPeerConnected(peerKey string, connected bool) return status.Errorf(codes.Unimplemented, "method MarkPeerConnected is not implemented") } -// GetPeerByIP mock implementation of GetPeerByIP from server.AccountManager interface -func (am *MockAccountManager) GetPeerByIP(accountId string, peerIP string) (*server.Peer, error) { - if am.GetPeerByIPFunc != nil { - return am.GetPeerByIPFunc(accountId, peerIP) - } - return nil, status.Errorf(codes.Unimplemented, "method GetPeerByIP is not implemented") -} - // GetAccountFromPAT mock implementation of GetAccountFromPAT from server.AccountManager interface func (am *MockAccountManager) GetAccountFromPAT(pat string) (*server.Account, *server.User, *server.PersonalAccessToken, error) { if am.GetAccountFromPATFunc != nil { @@ -296,14 +268,6 @@ func (am *MockAccountManager) GroupDeletePeer(accountID, groupID, peerID string) return status.Errorf(codes.Unimplemented, "method GroupDeletePeer is not implemented") } -// GroupListPeers mock implementation of GroupListPeers from server.AccountManager interface -func (am *MockAccountManager) GroupListPeers(accountID, groupID string) ([]*server.Peer, error) { - if am.GroupListPeersFunc != nil { - return am.GroupListPeersFunc(accountID, groupID) - } - return nil, status.Errorf(codes.Unimplemented, "method GroupListPeers is not implemented") -} - // GetRule mock implementation of GetRule from server.AccountManager interface func (am *MockAccountManager) GetRule(accountID, ruleID, userID string) (*server.Rule, error) { if am.GetRuleFunc != nil { diff --git a/management/server/peer.go b/management/server/peer.go index 8e4ad08e3..e5c6e39d6 100644 --- a/management/server/peer.go +++ b/management/server/peer.go @@ -195,16 +195,6 @@ func (p *PeerStatus) Copy() *PeerStatus { } } -// GetPeerByKey looks up peer by its public WireGuard key -func (am *DefaultAccountManager) GetPeerByKey(peerPubKey string) (*Peer, error) { - account, err := am.Store.GetAccountByPeerPubKey(peerPubKey) - if err != nil { - return nil, err - } - - return account.FindPeerByPubKey(peerPubKey) -} - // GetPeers returns a list of peers under the given account filtering out peers that do not belong to a user if // the current user is not an admin. func (am *DefaultAccountManager) GetPeers(accountID, userID string) ([]*Peer, error) { @@ -432,25 +422,6 @@ func (am *DefaultAccountManager) DeletePeer(accountID, peerID, userID string) er return nil } -// GetPeerByIP returns peer by its IP -func (am *DefaultAccountManager) GetPeerByIP(accountID string, peerIP string) (*Peer, error) { - unlock := am.Store.AcquireAccountLock(accountID) - defer unlock() - - account, err := am.Store.GetAccount(accountID) - if err != nil { - return nil, err - } - - for _, peer := range account.Peers { - if peerIP == peer.IP.String() { - return peer, nil - } - } - - return nil, status.Errorf(status.NotFound, "peer with IP %s not found", peerIP) -} - // GetNetworkMap returns Network map for a given peer (omits original peer from the Peers result) func (am *DefaultAccountManager) GetNetworkMap(peerID string) (*NetworkMap, error) { account, err := am.Store.GetAccountByPeerID(peerID) From 1219006a6e50463b3ad3bd01bf40dd70d2f7958a Mon Sep 17 00:00:00 2001 From: Bethuel Mmbaga Date: Wed, 4 Oct 2023 22:46:01 +0300 Subject: [PATCH 3/6] Add infrastructure docker build tests for management and signal (#1180) we are building an image for management and signal to be used in the docker compose tests --- .../workflows/test-infrastructure-files.yml | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/.github/workflows/test-infrastructure-files.yml b/.github/workflows/test-infrastructure-files.yml index 2987c04b4..c2c4f7598 100644 --- a/.github/workflows/test-infrastructure-files.yml +++ b/.github/workflows/test-infrastructure-files.yml @@ -112,6 +112,27 @@ jobs: grep -A 6 PKCEAuthorizationFlow management.json | grep -A 5 ProviderConfig | grep TokenEndpoint | grep $CI_NETBIRD_AUTH_TOKEN_ENDPOINT grep -A 7 PKCEAuthorizationFlow management.json | grep -A 6 ProviderConfig | grep Scope | grep "$CI_NETBIRD_AUTH_SUPPORTED_SCOPES" + - name: Install modules + run: go mod tidy + + - name: Build management binary + working-directory: management + run: CGO_ENABLED=1 go build -o netbird-mgmt main.go + + - name: Build management docker image + working-directory: management + run: | + docker build -t netbirdio/management:latest . + + - name: Build signal binary + working-directory: signal + run: CGO_ENABLED=0 go build -o netbird-signal main.go + + - name: Build signal docker image + working-directory: signal + run: | + docker build -t netbirdio/signal:latest . + - name: run docker compose up working-directory: infrastructure_files run: | From 5781ec7a8e49a9fc310d614356d24c630178eba8 Mon Sep 17 00:00:00 2001 From: Misha Bragin Date: Fri, 6 Oct 2023 17:03:17 +0200 Subject: [PATCH 4/6] Use the PCKE flow in the UI (#1196) --- client/ui/client_ui.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/client/ui/client_ui.go b/client/ui/client_ui.go index e6b4394e8..d2c18dc37 100644 --- a/client/ui/client_ui.go +++ b/client/ui/client_ui.go @@ -202,9 +202,10 @@ func (s *serviceClient) getSettingsForm() *widget.Form { } _, err = client.Login(s.ctx, &proto.LoginRequest{ - ManagementUrl: s.iMngURL.Text, - AdminURL: s.iAdminURL.Text, - PreSharedKey: s.iPreSharedKey.Text, + ManagementUrl: s.iMngURL.Text, + AdminURL: s.iAdminURL.Text, + PreSharedKey: s.iPreSharedKey.Text, + IsLinuxDesktopClient: runtime.GOOS == "linux", }) if err != nil { log.Errorf("login to management URL: %v", err) From af6fdd3af2ce52f41d97277aaf12a081c631a021 Mon Sep 17 00:00:00 2001 From: Misha Bragin Date: Fri, 6 Oct 2023 18:28:46 +0200 Subject: [PATCH 5/6] Always call Login from UI with the desktop flag (#1200) --- client/ui/build-ui-linux.sh | 5 +++++ client/ui/client_ui.go | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 client/ui/build-ui-linux.sh diff --git a/client/ui/build-ui-linux.sh b/client/ui/build-ui-linux.sh new file mode 100644 index 000000000..eab08214d --- /dev/null +++ b/client/ui/build-ui-linux.sh @@ -0,0 +1,5 @@ +#!/bin/bash +sudo apt update +sudo apt remove gir1.2-appindicator3-0.1 +sudo apt install -y libayatana-appindicator3-dev +go build \ No newline at end of file diff --git a/client/ui/client_ui.go b/client/ui/client_ui.go index d2c18dc37..9c7685db0 100644 --- a/client/ui/client_ui.go +++ b/client/ui/client_ui.go @@ -234,7 +234,9 @@ func (s *serviceClient) login() error { return err } - loginResp, err := conn.Login(s.ctx, &proto.LoginRequest{}) + loginResp, err := conn.Login(s.ctx, &proto.LoginRequest{ + IsLinuxDesktopClient: runtime.GOOS == "linux", + }) if err != nil { log.Errorf("login to management URL with: %v", err) return err From f7e6cdcbf0edb547c2ef3d7b0a41f5032995cbc9 Mon Sep 17 00:00:00 2001 From: Yury Gargay Date: Sat, 7 Oct 2023 21:45:46 +0200 Subject: [PATCH 6/6] Run linter action on MacOS and Windows (#1198) --- .gitattributes | 1 + .github/workflows/golangci-lint.yml | 20 ++++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..d207b1802 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.go text eol=lf diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index 2a5c51c8a..4e584ecc2 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -1,12 +1,23 @@ name: golangci-lint on: [pull_request] + +permissions: + contents: read + pull-requests: read + concurrency: group: ${{ github.workflow }}-${{ github.ref }}-${{ github.head_ref || github.actor_id }} cancel-in-progress: true + jobs: golangci: + strategy: + fail-fast: false + matrix: + os: [macos-latest, windows-latest, ubuntu-latest] name: lint - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} + timeout-minutes: 15 steps: - name: Checkout code uses: actions/checkout@v3 @@ -14,7 +25,12 @@ jobs: uses: actions/setup-go@v4 with: go-version: "1.20.x" + cache: false - name: Install dependencies + if: matrix.os == 'ubuntu-latest' run: sudo apt update && sudo apt install -y -q libgtk-3-dev libayatana-appindicator3-dev libgl1-mesa-dev xorg-dev - name: golangci-lint - uses: golangci/golangci-lint-action@v3 \ No newline at end of file + uses: golangci/golangci-lint-action@v3 + with: + version: latest + args: --timeout=12m \ No newline at end of file