github.com/prebid/prebid-server@v0.275.0/adapters/adpone/adpone.go (about) 1 package adpone 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "net/http" 7 8 "github.com/prebid/openrtb/v19/openrtb2" 9 "github.com/prebid/prebid-server/config" 10 "github.com/prebid/prebid-server/openrtb_ext" 11 12 "github.com/prebid/prebid-server/adapters" 13 "github.com/prebid/prebid-server/errortypes" 14 ) 15 16 // Builder builds a new instance of the Adpone adapter for the given bidder with the given config. 17 func Builder(bidderName openrtb_ext.BidderName, config config.Adapter, server config.Server) (adapters.Bidder, error) { 18 bidder := &adponeAdapter{ 19 endpoint: config.Endpoint, 20 } 21 return bidder, nil 22 } 23 24 type adponeAdapter struct { 25 endpoint string 26 } 27 28 func (adapter *adponeAdapter) MakeRequests( 29 openRTBRequest *openrtb2.BidRequest, 30 reqInfo *adapters.ExtraRequestInfo, 31 ) ( 32 requestsToBidder []*adapters.RequestData, 33 errs []error, 34 ) { 35 if len(openRTBRequest.Imp) > 0 { 36 var imp = &openRTBRequest.Imp[0] 37 var bidderExt adapters.ExtImpBidder 38 if err := json.Unmarshal(imp.Ext, &bidderExt); err != nil { 39 errs = append(errs, newBadInputError(err.Error())) 40 } 41 var ttxExt openrtb_ext.ExtAdpone 42 if err := json.Unmarshal(bidderExt.Bidder, &ttxExt); err != nil { 43 errs = append(errs, newBadInputError(err.Error())) 44 } 45 } 46 47 if len(openRTBRequest.Imp) == 0 { 48 errs = append(errs, newBadInputError("No impression in the bid request")) 49 return nil, errs 50 } 51 52 openRTBRequestJSON, err := json.Marshal(openRTBRequest) 53 if err != nil { 54 errs = append(errs, err) 55 return nil, errs 56 } 57 58 headers := http.Header{} 59 headers.Add("Content-Type", "application/json;charset=utf-8") 60 headers.Add("Accept", "application/json") 61 headers.Add("x-openrtb-version", "2.5") 62 63 requestToBidder := &adapters.RequestData{ 64 Method: "POST", 65 Uri: adapter.endpoint, 66 Body: openRTBRequestJSON, 67 Headers: headers, 68 } 69 requestsToBidder = append(requestsToBidder, requestToBidder) 70 71 return requestsToBidder, errs 72 } 73 74 const unexpectedStatusCodeFormat = "" + 75 "Unexpected status code: %d. Run with request.debug = 1 for more info" 76 77 func (adapter *adponeAdapter) MakeBids( 78 openRTBRequest *openrtb2.BidRequest, 79 requestToBidder *adapters.RequestData, 80 bidderRawResponse *adapters.ResponseData, 81 ) ( 82 bidderResponse *adapters.BidderResponse, 83 errs []error, 84 ) { 85 switch bidderRawResponse.StatusCode { 86 case http.StatusOK: 87 break 88 case http.StatusNoContent: 89 return nil, nil 90 case http.StatusBadRequest: 91 err := &errortypes.BadInput{ 92 Message: fmt.Sprintf(unexpectedStatusCodeFormat, bidderRawResponse.StatusCode), 93 } 94 return nil, []error{err} 95 default: 96 err := &errortypes.BadServerResponse{ 97 Message: fmt.Sprintf(unexpectedStatusCodeFormat, bidderRawResponse.StatusCode), 98 } 99 return nil, []error{err} 100 } 101 102 var openRTBBidderResponse openrtb2.BidResponse 103 if err := json.Unmarshal(bidderRawResponse.Body, &openRTBBidderResponse); err != nil { 104 return nil, []error{err} 105 } 106 107 bidsCapacity := len(openRTBBidderResponse.SeatBid[0].Bid) 108 bidderResponse = adapters.NewBidderResponseWithBidsCapacity(bidsCapacity) 109 var typedBid *adapters.TypedBid 110 for _, seatBid := range openRTBBidderResponse.SeatBid { 111 for _, bid := range seatBid.Bid { 112 bid := bid 113 typedBid = &adapters.TypedBid{Bid: &bid, BidType: "banner"} 114 bidderResponse.Bids = append(bidderResponse.Bids, typedBid) 115 } 116 } 117 118 return bidderResponse, nil 119 120 } 121 122 func newBadInputError(message string) error { 123 return &errortypes.BadInput{ 124 Message: message, 125 } 126 }