mirror of
https://github.com/netbirdio/netbird.git
synced 2025-06-19 17:31:39 +02:00
Fix peer status update when expiring peers (#708)
This commit is contained in:
parent
f832c83a18
commit
41948f7919
@ -177,6 +177,7 @@ func (s *GRPCServer) Sync(req *proto.EncryptedMessage, srv proto.ManagementServi
|
|||||||
case update, open := <-updates:
|
case update, open := <-updates:
|
||||||
if !open {
|
if !open {
|
||||||
log.Debugf("updates channel for peer %s was closed", peerKey.String())
|
log.Debugf("updates channel for peer %s was closed", peerKey.String())
|
||||||
|
s.cancelPeerRoutines(peer)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
log.Debugf("recevied an update for peer %s", peerKey.String())
|
log.Debugf("recevied an update for peer %s", peerKey.String())
|
||||||
@ -198,18 +199,18 @@ func (s *GRPCServer) Sync(req *proto.EncryptedMessage, srv proto.ManagementServi
|
|||||||
case <-srv.Context().Done():
|
case <-srv.Context().Done():
|
||||||
// happens when connection drops, e.g. client disconnects
|
// happens when connection drops, e.g. client disconnects
|
||||||
log.Debugf("stream of peer %s has been closed", peerKey.String())
|
log.Debugf("stream of peer %s has been closed", peerKey.String())
|
||||||
s.peersUpdateManager.CloseChannel(peer.ID)
|
s.cancelPeerRoutines(peer)
|
||||||
s.turnCredentialsManager.CancelRefresh(peerKey.String())
|
|
||||||
err = s.accountManager.MarkPeerConnected(peerKey.String(), false)
|
|
||||||
if err != nil {
|
|
||||||
log.Warnf("failed marking peer as disconnected %s %v", peerKey, err)
|
|
||||||
}
|
|
||||||
// todo stop turn goroutine
|
|
||||||
return srv.Context().Err()
|
return srv.Context().Err()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *GRPCServer) cancelPeerRoutines(peer *Peer) {
|
||||||
|
s.peersUpdateManager.CloseChannel(peer.ID)
|
||||||
|
s.turnCredentialsManager.CancelRefresh(peer.ID)
|
||||||
|
_ = s.accountManager.MarkPeerConnected(peer.Key, false)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *GRPCServer) validateToken(jwtToken string) (string, error) {
|
func (s *GRPCServer) validateToken(jwtToken string) (string, error) {
|
||||||
if s.jwtMiddleware == nil {
|
if s.jwtMiddleware == nil {
|
||||||
return "", status.Error(codes.Internal, "no jwt middleware set")
|
return "", status.Error(codes.Internal, "no jwt middleware set")
|
||||||
|
@ -96,8 +96,10 @@ func (p *Peer) Copy() *Peer {
|
|||||||
// MarkLoginExpired marks peer's status expired or not
|
// MarkLoginExpired marks peer's status expired or not
|
||||||
func (p *Peer) MarkLoginExpired(expired bool) {
|
func (p *Peer) MarkLoginExpired(expired bool) {
|
||||||
newStatus := p.Status.Copy()
|
newStatus := p.Status.Copy()
|
||||||
newStatus.LastSeen = time.Now()
|
|
||||||
newStatus.LoginExpired = expired
|
newStatus.LoginExpired = expired
|
||||||
|
if expired {
|
||||||
|
newStatus.Connected = false
|
||||||
|
}
|
||||||
p.Status = newStatus
|
p.Status = newStatus
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,18 +63,18 @@ func (m *TimeBasedAuthSecretsManager) GenerateCredentials() TURNCredentials {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *TimeBasedAuthSecretsManager) cancel(peerKey string) {
|
func (m *TimeBasedAuthSecretsManager) cancel(peerID string) {
|
||||||
if channel, ok := m.cancelMap[peerKey]; ok {
|
if channel, ok := m.cancelMap[peerID]; ok {
|
||||||
close(channel)
|
close(channel)
|
||||||
delete(m.cancelMap, peerKey)
|
delete(m.cancelMap, peerID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// CancelRefresh cancels scheduled peer credentials refresh
|
// CancelRefresh cancels scheduled peer credentials refresh
|
||||||
func (m *TimeBasedAuthSecretsManager) CancelRefresh(peerKey string) {
|
func (m *TimeBasedAuthSecretsManager) CancelRefresh(peerID string) {
|
||||||
m.mux.Lock()
|
m.mux.Lock()
|
||||||
defer m.mux.Unlock()
|
defer m.mux.Unlock()
|
||||||
m.cancel(peerKey)
|
m.cancel(peerID)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetupRefresh starts peer credentials refresh. Since credentials are expiring (TTL) it is necessary to always generate them and send to the peer.
|
// SetupRefresh starts peer credentials refresh. Since credentials are expiring (TTL) it is necessary to always generate them and send to the peer.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user