From 9980b64f90ecfd532fc4d6173131928ae59c6428 Mon Sep 17 00:00:00 2001 From: Nikhil Vaidya <102963966+pm-nikhil-vaidya@users.noreply.github.com> Date: Thu, 7 Sep 2023 22:38:02 +0530 Subject: [PATCH] Fix: BidRequest updated by ProcessedAuction hook is getting overridden by requestwrapper utility (#3045) --- hooks/hookexecution/executor.go | 2 +- hooks/hookexecution/mocks_test.go | 14 +++++++++++--- hooks/hookstage/processedauctionrequest.go | 8 ++++---- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/hooks/hookexecution/executor.go b/hooks/hookexecution/executor.go index ce516630778..5074d4b9ab9 100644 --- a/hooks/hookexecution/executor.go +++ b/hooks/hookexecution/executor.go @@ -160,7 +160,7 @@ func (e *hookExecutor) ExecuteProcessedAuctionStage(request *openrtb_ext.Request stageName := hooks.StageProcessedAuctionRequest.String() executionCtx := e.newContext(stageName) - payload := hookstage.ProcessedAuctionRequestPayload{BidRequest: request.BidRequest} + payload := hookstage.ProcessedAuctionRequestPayload{RequestWrapper: request} outcome, _, contexts, reject := executeStage(executionCtx, plan, payload, handler, e.metricEngine) outcome.Entity = entityAuctionRequest diff --git a/hooks/hookexecution/mocks_test.go b/hooks/hookexecution/mocks_test.go index e8670ff89e8..ff543c38a07 100644 --- a/hooks/hookexecution/mocks_test.go +++ b/hooks/hookexecution/mocks_test.go @@ -131,7 +131,7 @@ func (e mockTimeoutHook) HandleProcessedAuctionHook(_ context.Context, _ hooksta time.Sleep(20 * time.Millisecond) c := hookstage.ChangeSet[hookstage.ProcessedAuctionRequestPayload]{} c.AddMutation(func(payload hookstage.ProcessedAuctionRequestPayload) (hookstage.ProcessedAuctionRequestPayload, error) { - payload.BidRequest.User.CustomData = "some-custom-data" + payload.RequestWrapper.User.CustomData = "some-custom-data" return payload, nil }, hookstage.MutationUpdate, "bidRequest", "user.customData") @@ -305,12 +305,20 @@ func (e mockUpdateBidRequestHook) HandleProcessedAuctionHook(_ context.Context, c := hookstage.ChangeSet[hookstage.ProcessedAuctionRequestPayload]{} c.AddMutation( func(payload hookstage.ProcessedAuctionRequestPayload) (hookstage.ProcessedAuctionRequestPayload, error) { - payload.BidRequest.User.Yob = 2000 + payload.RequestWrapper.User.Yob = 2000 + userExt, err := payload.RequestWrapper.GetUserExt() + if err != nil { + return payload, err + } + newPrebidExt := &openrtb_ext.ExtUserPrebid{ + BuyerUIDs: map[string]string{"some": "id"}, + } + userExt.SetPrebid(newPrebidExt) return payload, nil }, hookstage.MutationUpdate, "bidRequest", "user.yob", ).AddMutation( func(payload hookstage.ProcessedAuctionRequestPayload) (hookstage.ProcessedAuctionRequestPayload, error) { - payload.BidRequest.User.Consent = "true" + payload.RequestWrapper.User.Consent = "true" return payload, nil }, hookstage.MutationUpdate, "bidRequest", "user.consent", ) diff --git a/hooks/hookstage/processedauctionrequest.go b/hooks/hookstage/processedauctionrequest.go index 30cb0dab38d..fe06bc6fdbd 100644 --- a/hooks/hookstage/processedauctionrequest.go +++ b/hooks/hookstage/processedauctionrequest.go @@ -3,7 +3,7 @@ package hookstage import ( "context" - "github.com/prebid/openrtb/v19/openrtb2" + "github.com/prebid/prebid-server/openrtb_ext" ) // ProcessedAuctionRequest hooks are invoked after the request is parsed @@ -23,8 +23,8 @@ type ProcessedAuctionRequest interface { ) (HookResult[ProcessedAuctionRequestPayload], error) } -// ProcessedAuctionRequestPayload consists of the openrtb2.BidRequest object. -// Hooks are allowed to modify openrtb2.BidRequest using mutations. +// ProcessedAuctionRequestPayload consists of the openrtb_ext.RequestWrapper object. +// Hooks are allowed to modify openrtb_ext.RequestWrapper using mutations. type ProcessedAuctionRequestPayload struct { - BidRequest *openrtb2.BidRequest + RequestWrapper *openrtb_ext.RequestWrapper }