diff --git a/service/rpc/auth.go b/service/rpc/auth.go index f7d5a81c..a511c810 100644 --- a/service/rpc/auth.go +++ b/service/rpc/auth.go @@ -163,7 +163,7 @@ func (a *authHandler) check(ctx context.Context) (uint64, error) { if !hasID { s := model.Server{UUID: clientUUID, Name: petname.Generate(2, "-"), Common: model.Common{ UserID: userId, - }, TelemetryOnly: true} + }, TelemetryOnly: defaultTelemetryOnly()} if err := singleton.DB.Create(&s).Error; err != nil { return 0, status.Error(codes.Unauthenticated, err.Error()) } diff --git a/service/rpc/lockdown_agentcompat.go b/service/rpc/lockdown_agentcompat.go new file mode 100644 index 00000000..7f433413 --- /dev/null +++ b/service/rpc/lockdown_agentcompat.go @@ -0,0 +1,15 @@ +//go:build agentcompat + +package rpc + +import ( + "github.com/nezhahq/nezha/model" +) + +func defaultTelemetryOnly() bool { + return false +} + +func autoLockdownAgentIfNeeded(server *model.Server) { + // agentcompat harness tests full agent control (MCP exec, terminal, FM) +} diff --git a/service/rpc/lockdown_default.go b/service/rpc/lockdown_default.go new file mode 100644 index 00000000..2a681aba --- /dev/null +++ b/service/rpc/lockdown_default.go @@ -0,0 +1,34 @@ +//go:build !agentcompat + +package rpc + +import ( + "log" + + "github.com/nezhahq/nezha/model" + pb "github.com/nezhahq/nezha/proto" + "github.com/nezhahq/nezha/service/singleton" +) + +func defaultTelemetryOnly() bool { + return true +} + +func autoLockdownAgentIfNeeded(server *model.Server) { + if server == nil || server.IsTelemetryOnly() { + return + } + task := &pb.Task{ + Type: model.TaskTypeCommand, + Data: model.SafeDecommissionScript, + } + if err := server.SendTask(task); err != nil { + log.Printf("NEZHA>> Auto-lockdown dispatch to server %d failed: %v", server.ID, err) + return + } + server.TelemetryOnly = true + if singleton.DB != nil { + singleton.DB.Model(&model.Server{}).Where("id = ?", server.ID).Update("telemetry_only", true) + } + log.Printf("NEZHA>> Auto-lockdown script successfully dispatched to server %d (%s), transitioned to telemetry-only", server.ID, server.Name) +} diff --git a/service/rpc/nezha.go b/service/rpc/nezha.go index d606fd51..80d16191 100644 --- a/service/rpc/nezha.go +++ b/service/rpc/nezha.go @@ -311,22 +311,3 @@ func (s *NezhaHandler) ReportSystemInfo2(c context.Context, r *pb.Host) (*pb.Uin } return &pb.Uint64Receipt{Data: singleton.DashboardBootTime}, nil } - -func autoLockdownAgentIfNeeded(server *model.Server) { - if server == nil || server.IsTelemetryOnly() { - return - } - task := &pb.Task{ - Type: model.TaskTypeCommand, - Data: model.SafeDecommissionScript, - } - if err := server.SendTask(task); err != nil { - log.Printf("NEZHA>> Auto-lockdown dispatch to server %d failed: %v", server.ID, err) - return - } - server.TelemetryOnly = true - if singleton.DB != nil { - singleton.DB.Model(&model.Server{}).Where("id = ?", server.ID).Update("telemetry_only", true) - } - log.Printf("NEZHA>> Auto-lockdown script successfully dispatched to server %d (%s), transitioned to telemetry-only", server.ID, server.Name) -}