cut getServerPublicKey

This commit is contained in:
Pascal Fischer
2025-03-13 18:38:18 +01:00
parent cf330f4b45
commit c262c1b252
2 changed files with 14 additions and 27 deletions

View File

@@ -272,7 +272,7 @@ func (c *GrpcClient) GetServerPublicKey() (*wgtypes.Key, error) {
return nil, errors.New(errMsgNoMgmtConnection) return nil, errors.New(errMsgNoMgmtConnection)
} }
mgmCtx, cancel := context.WithTimeout(c.ctx, 5*time.Second) mgmCtx, cancel := context.WithTimeout(c.ctx, 30*time.Second)
defer cancel() defer cancel()
resp, err := c.realClient.GetServerKey(mgmCtx, &proto.Empty{}) resp, err := c.realClient.GetServerKey(mgmCtx, &proto.Empty{})
if err != nil { if err != nil {

View File

@@ -10,13 +10,12 @@ import (
"time" "time"
pb "github.com/golang/protobuf/proto" // nolint pb "github.com/golang/protobuf/proto" // nolint
"github.com/golang/protobuf/ptypes/timestamp"
"github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors/realip" "github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors/realip"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"golang.zx2c4.com/wireguard/wgctrl/wgtypes" "golang.zx2c4.com/wireguard/wgctrl/wgtypes"
"google.golang.org/grpc/codes" "google.golang.org/grpc/codes"
"google.golang.org/grpc/peer"
"google.golang.org/grpc/status" "google.golang.org/grpc/status"
"google.golang.org/protobuf/types/known/timestamppb"
integrationsConfig "github.com/netbirdio/management-integrations/integrations/config" integrationsConfig "github.com/netbirdio/management-integrations/integrations/config"
"github.com/netbirdio/netbird/encryption" "github.com/netbirdio/netbird/encryption"
@@ -38,6 +37,7 @@ type GRPCServer struct {
accountManager account.Manager accountManager account.Manager
settingsManager settings.Manager settingsManager settings.Manager
wgKey wgtypes.Key wgKey wgtypes.Key
wgPubKeySting string
proto.UnimplementedManagementServiceServer proto.UnimplementedManagementServiceServer
peersUpdateManager *PeersUpdateManager peersUpdateManager *PeersUpdateManager
config *Config config *Config
@@ -76,7 +76,8 @@ func NewServer(
} }
return &GRPCServer{ return &GRPCServer{
wgKey: key, wgKey: key,
wgPubKeySting: key.PublicKey().String(),
// peerKey -> event channel // peerKey -> event channel
peersUpdateManager: peersUpdateManager, peersUpdateManager: peersUpdateManager,
accountManager: accountManager, accountManager: accountManager,
@@ -90,30 +91,16 @@ func NewServer(
} }
func (s *GRPCServer) GetServerKey(ctx context.Context, req *proto.Empty) (*proto.ServerKeyResponse, error) { func (s *GRPCServer) GetServerKey(ctx context.Context, req *proto.Empty) (*proto.ServerKeyResponse, error) {
ip := ""
p, ok := peer.FromContext(ctx)
if ok {
ip = p.Addr.String()
}
log.WithContext(ctx).Tracef("GetServerKey request from %s", ip)
start := time.Now()
defer func() {
log.WithContext(ctx).Tracef("GetServerKey from %s took %v", ip, time.Since(start))
}()
// todo introduce something more meaningful with the key expiration/rotation // todo introduce something more meaningful with the key expiration/rotation
if s.appMetrics != nil { if s.appMetrics != nil {
s.appMetrics.GRPCMetrics().CountGetKeyRequest() s.appMetrics.GRPCMetrics().CountGetKeyRequest()
} }
now := time.Now().Add(24 * time.Hour)
secs := int64(now.Second()) expiresAt := time.Now().Add(24 * time.Hour)
nanos := int32(now.Nanosecond())
expiresAt := &timestamp.Timestamp{Seconds: secs, Nanos: nanos}
return &proto.ServerKeyResponse{ return &proto.ServerKeyResponse{
Key: s.wgKey.PublicKey().String(), Key: s.wgPubKeySting,
ExpiresAt: expiresAt, ExpiresAt: timestamppb.New(expiresAt),
}, nil }, nil
} }
@@ -242,7 +229,7 @@ func (s *GRPCServer) sendUpdate(ctx context.Context, accountID string, peerKey w
return status.Errorf(codes.Internal, "failed processing update message") return status.Errorf(codes.Internal, "failed processing update message")
} }
err = srv.SendMsg(&proto.EncryptedMessage{ err = srv.SendMsg(&proto.EncryptedMessage{
WgPubKey: s.wgKey.PublicKey().String(), WgPubKey: s.wgPubKeySting,
Body: encryptedResp, Body: encryptedResp,
}) })
if err != nil { if err != nil {
@@ -500,7 +487,7 @@ func (s *GRPCServer) Login(ctx context.Context, req *proto.EncryptedMessage) (*p
} }
return &proto.EncryptedMessage{ return &proto.EncryptedMessage{
WgPubKey: s.wgKey.PublicKey().String(), WgPubKey: s.wgPubKeySting,
Body: encryptedResp, Body: encryptedResp,
}, nil }, nil
} }
@@ -713,7 +700,7 @@ func (s *GRPCServer) sendInitialSync(ctx context.Context, peerKey wgtypes.Key, p
} }
err = srv.Send(&proto.EncryptedMessage{ err = srv.Send(&proto.EncryptedMessage{
WgPubKey: s.wgKey.PublicKey().String(), WgPubKey: s.wgPubKeySting,
Body: encryptedResp, Body: encryptedResp,
}) })
@@ -778,7 +765,7 @@ func (s *GRPCServer) GetDeviceAuthorizationFlow(ctx context.Context, req *proto.
} }
return &proto.EncryptedMessage{ return &proto.EncryptedMessage{
WgPubKey: s.wgKey.PublicKey().String(), WgPubKey: s.wgPubKeySting,
Body: encryptedResp, Body: encryptedResp,
}, nil }, nil
} }
@@ -830,7 +817,7 @@ func (s *GRPCServer) GetPKCEAuthorizationFlow(ctx context.Context, req *proto.En
} }
return &proto.EncryptedMessage{ return &proto.EncryptedMessage{
WgPubKey: s.wgKey.PublicKey().String(), WgPubKey: s.wgPubKeySting,
Body: encryptedResp, Body: encryptedResp,
}, nil }, nil
} }