From dcb517e1fb893c9daa42fa894688366dbb883c9f Mon Sep 17 00:00:00 2001 From: Chris Roberts Date: Mon, 12 Jun 2023 09:20:29 -0700 Subject: [PATCH] Prevent parent overwrites during upserts --- internal/server/singleprocess/state/project.go | 8 ++++++-- internal/server/singleprocess/state/target.go | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/internal/server/singleprocess/state/project.go b/internal/server/singleprocess/state/project.go index 200f4b6fb..33bbea123 100644 --- a/internal/server/singleprocess/state/project.go +++ b/internal/server/singleprocess/state/project.go @@ -89,6 +89,7 @@ func (p *Project) BeforeSave(tx *gorm.DB) error { return err } } + if err := p.Validate(tx); err != nil { return err } @@ -358,8 +359,11 @@ func (s *State) ProjectPut( return nil, lookupErrorToStatus("project", err) } - // Make sure we don't have a nil value - if err != nil { + // If a project is found, remove the basis + // ref to prevent update attempts + if project != nil { + p.Basis = nil + } else { project = &Project{} } diff --git a/internal/server/singleprocess/state/target.go b/internal/server/singleprocess/state/target.go index 503a6fa32..e649a333f 100644 --- a/internal/server/singleprocess/state/target.go +++ b/internal/server/singleprocess/state/target.go @@ -394,8 +394,12 @@ func (s *State) TargetPut( return nil, lookupErrorToStatus("target", err) } - // Make sure we don't have a nil - if err != nil { + // If a target is found, remove the project + // ref to prevent update attempts + if target != nil { + t.Project = nil + } else { + // Otherwise, init target for the decode target = &Target{} }