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  }