fix(inbounds): drop unknown nodeId when importing an inbound

Importing an inbound that was exported from another panel (or whose node
was later deleted) carried a non-zero nodeId referencing a node that does
not exist on the importing panel. AddInbound -> nodePushPlan -> NodeSyncState
looked that node up and returned gorm's "record not found", so the import
failed with "Something went wrong Failed: record not found".

Node IDs are panel-local and not portable, so the import handler now drops a
nodeId that does not exist on this panel (new NodeService.NodeExists helper),
importing it as a local inbound instead of erroring. This mirrors the existing
nodeId==0 normalization in the same handler.
This commit is contained in:
Sanaei
2026-06-08 23:04:19 +02:00
parent 8ce61f3cb0
commit b24b8524b6
2 changed files with 24 additions and 2 deletions
+10 -2
View File
@@ -350,8 +350,16 @@ func (a *InboundController) importInbound(c *gin.Context) {
user := session.GetLoginUser(c)
inbound.Id = 0
inbound.UserId = user.Id
if inbound.NodeID != nil && *inbound.NodeID == 0 {
inbound.NodeID = nil
// Node IDs are panel-local and not portable across panels. Drop a node
// reference that is zero or that points to a node which doesn't exist on
// this panel, so a cross-panel export imports as a local inbound instead of
// failing with "record not found" when nodePushPlan looks the node up.
if inbound.NodeID != nil {
if *inbound.NodeID == 0 {
inbound.NodeID = nil
} else if exists, err := (&service.NodeService{}).NodeExists(*inbound.NodeID); err == nil && !exists {
inbound.NodeID = nil
}
}
for index := range inbound.ClientStats {
+14
View File
@@ -298,6 +298,20 @@ func (s *NodeService) GetById(id int) (*model.Node, error) {
return n, nil
}
// NodeExists reports whether a node with the given id exists on this panel.
// Used to drop stale, cross-panel node references on inbound import. A Count
// query distinguishes "no such node" (count 0, no error) from a real DB error.
func (s *NodeService) NodeExists(id int) (bool, error) {
if id <= 0 {
return false, nil
}
var count int64
if err := database.GetDB().Model(model.Node{}).Where("id = ?", id).Count(&count).Error; err != nil {
return false, err
}
return count > 0, nil
}
func normalizeBasePath(p string) string {
p = strings.TrimSpace(p)
if p == "" {