github.com/prebid/prebid-server@v0.275.0/openrtb_ext/alternatebiddercodes.go (about) 1 package openrtb_ext 2 3 import "fmt" 4 5 // ExtAlternateBidderCodes defines list of alternate bidder codes allowed by adatpers. This overrides host level configs. 6 type ExtAlternateBidderCodes struct { 7 Enabled bool `mapstructure:"enabled" json:"enabled"` 8 Bidders map[string]ExtAdapterAlternateBidderCodes `mapstructure:"bidders" json:"bidders"` 9 } 10 11 type ExtAdapterAlternateBidderCodes struct { 12 Enabled bool `mapstructure:"enabled" json:"enabled"` 13 AllowedBidderCodes []string `mapstructure:"allowedbiddercodes" json:"allowedbiddercodes"` 14 } 15 16 func (bidderCodes *ExtAlternateBidderCodes) IsValidBidderCode(bidder, alternateBidder string) (bool, error) { 17 if alternateBidder == "" || bidder == alternateBidder { 18 return true, nil 19 } 20 21 if !bidderCodes.Enabled { 22 return false, alternateBidderDisabledError(bidder, alternateBidder) 23 } 24 25 if bidderCodes.Bidders == nil { 26 return false, alternateBidderNotDefinedError(bidder, alternateBidder) 27 } 28 29 adapterCfg, ok := bidderCodes.Bidders[bidder] 30 if !ok { 31 return false, alternateBidderNotDefinedError(bidder, alternateBidder) 32 } 33 34 if !adapterCfg.Enabled { 35 // config has bidder entry but is not enabled, report it 36 return false, alternateBidderDisabledError(bidder, alternateBidder) 37 } 38 39 if adapterCfg.AllowedBidderCodes == nil || (len(adapterCfg.AllowedBidderCodes) == 1 && adapterCfg.AllowedBidderCodes[0] == "*") { 40 return true, nil 41 } 42 43 for _, code := range adapterCfg.AllowedBidderCodes { 44 if alternateBidder == code { 45 return true, nil 46 } 47 } 48 49 return false, fmt.Errorf("invalid biddercode %q sent by adapter %q", alternateBidder, bidder) 50 } 51 52 func alternateBidderDisabledError(bidder, alternateBidder string) error { 53 return fmt.Errorf("alternateBidderCodes disabled for %q, rejecting bids for %q", bidder, alternateBidder) 54 } 55 56 func alternateBidderNotDefinedError(bidder, alternateBidder string) error { 57 return fmt.Errorf("alternateBidderCodes not defined for adapter %q, rejecting bids for %q", bidder, alternateBidder) 58 }