mirror of
https://github.com/netbirdio/netbird.git
synced 2025-04-10 18:58:27 +02:00
Add getGroupByName method (#1481)
* add get group by name method to account manager * remove contains function and add proper description for GetGroupByName method * add to mock server
This commit is contained in:
parent
f099e02b34
commit
131d9f1bc7
@ -87,6 +87,7 @@ type AccountManager interface {
|
|||||||
UpdatePeerSSHKey(peerID string, sshKey string) error
|
UpdatePeerSSHKey(peerID string, sshKey string) error
|
||||||
GetUsersFromAccount(accountID, userID string) ([]*UserInfo, error)
|
GetUsersFromAccount(accountID, userID string) ([]*UserInfo, error)
|
||||||
GetGroup(accountId, groupID string) (*Group, error)
|
GetGroup(accountId, groupID string) (*Group, error)
|
||||||
|
GetGroupByName(groupName, accountID string) (*Group, error)
|
||||||
SaveGroup(accountID, userID string, group *Group) error
|
SaveGroup(accountID, userID string, group *Group) error
|
||||||
DeleteGroup(accountId, userId, groupID string) error
|
DeleteGroup(accountId, userId, groupID string) error
|
||||||
ListGroups(accountId string) ([]*Group, error)
|
ListGroups(accountId string) ([]*Group, error)
|
||||||
|
@ -73,6 +73,39 @@ func (am *DefaultAccountManager) GetGroup(accountID, groupID string) (*Group, er
|
|||||||
return nil, status.Errorf(status.NotFound, "group with ID %s not found", groupID)
|
return nil, status.Errorf(status.NotFound, "group with ID %s not found", groupID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetGroupByName filters all groups in an account by name and returns the one with the most peers
|
||||||
|
func (am *DefaultAccountManager) GetGroupByName(groupName, accountID string) (*Group, error) {
|
||||||
|
unlock := am.Store.AcquireAccountLock(accountID)
|
||||||
|
defer unlock()
|
||||||
|
|
||||||
|
account, err := am.Store.GetAccount(accountID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
matchingGroups := make([]*Group, 0)
|
||||||
|
for _, group := range account.Groups {
|
||||||
|
if group.Name == groupName {
|
||||||
|
matchingGroups = append(matchingGroups, group)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(matchingGroups) == 0 {
|
||||||
|
return nil, status.Errorf(status.NotFound, "group with name %s not found", groupName)
|
||||||
|
}
|
||||||
|
|
||||||
|
maxPeers := -1
|
||||||
|
var groupWithMostPeers *Group
|
||||||
|
for i, group := range matchingGroups {
|
||||||
|
if len(group.Peers) > maxPeers {
|
||||||
|
maxPeers = len(group.Peers)
|
||||||
|
groupWithMostPeers = matchingGroups[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return groupWithMostPeers, nil
|
||||||
|
}
|
||||||
|
|
||||||
// SaveGroup object of the peers
|
// SaveGroup object of the peers
|
||||||
func (am *DefaultAccountManager) SaveGroup(accountID, userID string, newGroup *Group) error {
|
func (am *DefaultAccountManager) SaveGroup(accountID, userID string, newGroup *Group) error {
|
||||||
unlock := am.Store.AcquireAccountLock(accountID)
|
unlock := am.Store.AcquireAccountLock(accountID)
|
||||||
|
@ -29,6 +29,7 @@ type MockAccountManager struct {
|
|||||||
GetPeerNetworkFunc func(peerKey string) (*server.Network, error)
|
GetPeerNetworkFunc func(peerKey string) (*server.Network, error)
|
||||||
AddPeerFunc func(setupKey string, userId string, peer *nbpeer.Peer) (*nbpeer.Peer, *server.NetworkMap, error)
|
AddPeerFunc func(setupKey string, userId string, peer *nbpeer.Peer) (*nbpeer.Peer, *server.NetworkMap, error)
|
||||||
GetGroupFunc func(accountID, groupID string) (*server.Group, error)
|
GetGroupFunc func(accountID, groupID string) (*server.Group, error)
|
||||||
|
GetGroupByNameFunc func(accountID, groupName string) (*server.Group, error)
|
||||||
SaveGroupFunc func(accountID, userID string, group *server.Group) error
|
SaveGroupFunc func(accountID, userID string, group *server.Group) error
|
||||||
DeleteGroupFunc func(accountID, userId, groupID string) error
|
DeleteGroupFunc func(accountID, userId, groupID string) error
|
||||||
ListGroupsFunc func(accountID string) ([]*server.Group, error)
|
ListGroupsFunc func(accountID string) ([]*server.Group, error)
|
||||||
@ -245,6 +246,14 @@ func (am *MockAccountManager) GetGroup(accountID, groupID string) (*server.Group
|
|||||||
return nil, status.Errorf(codes.Unimplemented, "method GetGroup is not implemented")
|
return nil, status.Errorf(codes.Unimplemented, "method GetGroup is not implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetGroupByName mock implementation of GetGroupByName from server.AccountManager interface
|
||||||
|
func (am *MockAccountManager) GetGroupByName(accountID, groupName string) (*server.Group, error) {
|
||||||
|
if am.GetGroupFunc != nil {
|
||||||
|
return am.GetGroupByNameFunc(accountID, groupName)
|
||||||
|
}
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method GetGroupByName is not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
// SaveGroup mock implementation of SaveGroup from server.AccountManager interface
|
// SaveGroup mock implementation of SaveGroup from server.AccountManager interface
|
||||||
func (am *MockAccountManager) SaveGroup(accountID, userID string, group *server.Group) error {
|
func (am *MockAccountManager) SaveGroup(accountID, userID string, group *server.Group) error {
|
||||||
if am.SaveGroupFunc != nil {
|
if am.SaveGroupFunc != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user