mirror of
https://github.com/netbirdio/netbird.git
synced 2024-11-07 08:44:07 +01:00
Add management peer logout
This commit is contained in:
parent
b03343bc4d
commit
97350ff7b7
@ -112,6 +112,7 @@ type AccountManager interface {
|
||||
GetPeer(accountID, peerID, userID string) (*nbpeer.Peer, error)
|
||||
UpdateAccountSettings(accountID, userID string, newSettings *Settings) (*Account, error)
|
||||
LoginPeer(login PeerLogin) (*nbpeer.Peer, *NetworkMap, error) // used by peer gRPC API
|
||||
LogoutPeer(peerPubKey string) error // used by peer gRPC API
|
||||
SyncPeer(sync PeerSync) (*nbpeer.Peer, *NetworkMap, error) // used by peer gRPC API
|
||||
GetAllConnectedPeers() (map[string]struct{}, error)
|
||||
HasConnectedChannel(peerID string) bool
|
||||
|
@ -78,6 +78,7 @@ type MockAccountManager struct {
|
||||
GetPeerFunc func(accountID, peerID, userID string) (*nbpeer.Peer, error)
|
||||
UpdateAccountSettingsFunc func(accountID, userID string, newSettings *server.Settings) (*server.Account, error)
|
||||
LoginPeerFunc func(login server.PeerLogin) (*nbpeer.Peer, *server.NetworkMap, error)
|
||||
LogoutPeerFunc func(peerPubKey string) error
|
||||
SyncPeerFunc func(sync server.PeerSync) (*nbpeer.Peer, *server.NetworkMap, error)
|
||||
InviteUserFunc func(accountID string, initiatorUserID string, targetUserEmail string) error
|
||||
GetAllConnectedPeersFunc func() (map[string]struct{}, error)
|
||||
@ -607,6 +608,14 @@ func (am *MockAccountManager) LoginPeer(login server.PeerLogin) (*nbpeer.Peer, *
|
||||
return nil, nil, status.Errorf(codes.Unimplemented, "method LoginPeer is not implemented")
|
||||
}
|
||||
|
||||
// LogoutPeer mocks LogoutPeer of the AccountManager interface
|
||||
func (am *MockAccountManager) LogoutPeer(peerPubKey string) error {
|
||||
if am.LogoutPeerFunc != nil {
|
||||
return am.LogoutPeerFunc(peerPubKey)
|
||||
}
|
||||
return status.Errorf(codes.Unimplemented, "method LogoutPeer is not implemented")
|
||||
}
|
||||
|
||||
// SyncPeer mocks SyncPeer of the AccountManager interface
|
||||
func (am *MockAccountManager) SyncPeer(sync server.PeerSync) (*nbpeer.Peer, *server.NetworkMap, error) {
|
||||
if am.SyncPeerFunc != nil {
|
||||
|
@ -576,6 +576,31 @@ func (am *DefaultAccountManager) LoginPeer(login PeerLogin) (*nbpeer.Peer, *Netw
|
||||
return peer, account.GetPeerNetworkMap(peer.ID, am.dnsDomain), nil
|
||||
}
|
||||
|
||||
// LogoutPeer logs out registered peer by delete it and send updates to the remote peers.
|
||||
func (am *DefaultAccountManager) LogoutPeer(peerPubKey string) error {
|
||||
account, err := am.Store.GetAccountByPeerPubKey(peerPubKey)
|
||||
if err != nil {
|
||||
if errStatus, ok := status.FromError(err); ok && errStatus.Type() == status.NotFound {
|
||||
return status.Errorf(status.Unauthenticated, "peer is not registered")
|
||||
}
|
||||
|
||||
log.Errorf("failed while logging out peer %s: %v", peerPubKey, err)
|
||||
return status.Errorf(status.Internal, "failed while logging out peer")
|
||||
}
|
||||
|
||||
peer, err := account.FindPeerByPubKey(peerPubKey)
|
||||
if err != nil {
|
||||
return status.Errorf(status.Unauthenticated, "peer is not registered")
|
||||
}
|
||||
|
||||
// prevent logging out peer added by setup key
|
||||
if peer.UserID == "" {
|
||||
return status.Errorf(status.PermissionDenied, "peer was added by setup key")
|
||||
}
|
||||
|
||||
return am.DeletePeer(account.Id, peer.ID, peer.UserID)
|
||||
}
|
||||
|
||||
func checkIfPeerOwnerIsBlocked(peer *nbpeer.Peer, account *Account) error {
|
||||
if peer.AddedWithSSOLogin() {
|
||||
user, err := account.FindUser(peer.UserID)
|
||||
|
Loading…
Reference in New Issue
Block a user