github.com/prebid/prebid-server@v0.275.0/exchange/adapter_util.go (about)

     1  package exchange
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  
     7  	"github.com/prebid/prebid-server/adapters"
     8  	"github.com/prebid/prebid-server/config"
     9  	"github.com/prebid/prebid-server/metrics"
    10  	"github.com/prebid/prebid-server/openrtb_ext"
    11  )
    12  
    13  func BuildAdapters(client *http.Client, cfg *config.Configuration, infos config.BidderInfos, me metrics.MetricsEngine) (map[openrtb_ext.BidderName]AdaptedBidder, []error) {
    14  	server := config.Server{ExternalUrl: cfg.ExternalURL, GvlID: cfg.GDPR.HostVendorID, DataCenter: cfg.DataCenter}
    15  	bidders, errs := buildBidders(infos, newAdapterBuilders(), server)
    16  
    17  	if len(errs) > 0 {
    18  		return nil, errs
    19  	}
    20  
    21  	exchangeBidders := make(map[openrtb_ext.BidderName]AdaptedBidder, len(bidders))
    22  	for bidderName, bidder := range bidders {
    23  		info := infos[string(bidderName)]
    24  		exchangeBidder := AdaptBidder(bidder, client, cfg, me, bidderName, info.Debug, info.EndpointCompression)
    25  		exchangeBidder = addValidatedBidderMiddleware(exchangeBidder)
    26  		exchangeBidders[bidderName] = exchangeBidder
    27  	}
    28  	return exchangeBidders, nil
    29  }
    30  
    31  func buildBidders(infos config.BidderInfos, builders map[openrtb_ext.BidderName]adapters.Builder, server config.Server) (map[openrtb_ext.BidderName]adapters.Bidder, []error) {
    32  	bidders := make(map[openrtb_ext.BidderName]adapters.Bidder)
    33  	var errs []error
    34  
    35  	for bidder, info := range infos {
    36  		if len(info.AliasOf) > 0 {
    37  			errs = append(errs, fmt.Errorf("This feature is currently under development"))
    38  			continue
    39  		}
    40  		bidderName, bidderNameFound := openrtb_ext.NormalizeBidderName(bidder)
    41  		if !bidderNameFound {
    42  			errs = append(errs, fmt.Errorf("%v: unknown bidder", bidder))
    43  			continue
    44  		}
    45  
    46  		if len(info.AliasOf) > 0 {
    47  			if err := setAliasBuilder(info, builders, bidderName); err != nil {
    48  				errs = append(errs, fmt.Errorf("%v: failed to set alias builder: %v", bidder, err))
    49  				continue
    50  			}
    51  		}
    52  
    53  		builder, builderFound := builders[bidderName]
    54  		if !builderFound {
    55  			errs = append(errs, fmt.Errorf("%v: builder not registered", bidder))
    56  			continue
    57  		}
    58  
    59  		if info.IsEnabled() {
    60  			adapterInfo := buildAdapterInfo(info)
    61  			bidderInstance, builderErr := builder(bidderName, adapterInfo, server)
    62  
    63  			if builderErr != nil {
    64  				errs = append(errs, fmt.Errorf("%v: %v", bidder, builderErr))
    65  				continue
    66  			}
    67  			bidders[bidderName] = adapters.BuildInfoAwareBidder(bidderInstance, info)
    68  		}
    69  	}
    70  	return bidders, errs
    71  }
    72  
    73  func setAliasBuilder(info config.BidderInfo, builders map[openrtb_ext.BidderName]adapters.Builder, bidderName openrtb_ext.BidderName) error {
    74  	parentBidderName, parentBidderFound := openrtb_ext.NormalizeBidderName(info.AliasOf)
    75  	if !parentBidderFound {
    76  		return fmt.Errorf("unknown parent bidder: %v for alias: %v", info.AliasOf, bidderName)
    77  	}
    78  
    79  	builder, builderFound := builders[parentBidderName]
    80  	if !builderFound {
    81  		return fmt.Errorf("%v: parent builder not registered", parentBidderName)
    82  	}
    83  	builders[bidderName] = builder
    84  	return nil
    85  }
    86  
    87  func buildAdapterInfo(bidderInfo config.BidderInfo) config.Adapter {
    88  	adapter := config.Adapter{}
    89  	adapter.Endpoint = bidderInfo.Endpoint
    90  	adapter.ExtraAdapterInfo = bidderInfo.ExtraAdapterInfo
    91  	adapter.PlatformID = bidderInfo.PlatformID
    92  	adapter.AppSecret = bidderInfo.AppSecret
    93  	adapter.XAPI = bidderInfo.XAPI
    94  	return adapter
    95  }
    96  
    97  // GetActiveBidders returns a map of all active bidder names.
    98  func GetActiveBidders(infos config.BidderInfos) map[string]openrtb_ext.BidderName {
    99  	activeBidders := make(map[string]openrtb_ext.BidderName)
   100  
   101  	for name, info := range infos {
   102  		if info.IsEnabled() {
   103  			activeBidders[name] = openrtb_ext.BidderName(name)
   104  		}
   105  	}
   106  
   107  	return activeBidders
   108  }
   109  
   110  func GetDisabledBidderWarningMessages(infos config.BidderInfos) map[string]string {
   111  	removed := map[string]string{
   112  		"lifestreet":     `Bidder "lifestreet" is no longer available in Prebid Server. Please update your configuration.`,
   113  		"adagio":         `Bidder "adagio" is no longer available in Prebid Server. Please update your configuration.`,
   114  		"somoaudience":   `Bidder "somoaudience" is no longer available in Prebid Server. Please update your configuration.`,
   115  		"yssp":           `Bidder "yssp" is no longer available in Prebid Server. If you're looking to use the Yahoo SSP adapter, please rename it to "yahooAds" in your configuration.`,
   116  		"andbeyondmedia": `Bidder "andbeyondmedia" is no longer available in Prebid Server. If you're looking to use the AndBeyond.Media SSP adapter, please rename it to "beyondmedia" in your configuration.`,
   117  		"oftmedia":       `Bidder "oftmedia" is no longer available in Prebid Server. Please update your configuration.`,
   118  		"groupm":         `Bidder "groupm" is no longer available in Prebid Server. Please update your configuration.`,
   119  		"verizonmedia":   `Bidder "verizonmedia" is no longer available in Prebid Server. Please update your configuration.`,
   120  		"brightroll":     `Bidder "brightroll" is no longer available in Prebid Server. Please update your configuration.`,
   121  	}
   122  
   123  	return mergeRemovedAndDisabledBidderWarningMessages(removed, infos)
   124  }
   125  
   126  func mergeRemovedAndDisabledBidderWarningMessages(removed map[string]string, infos config.BidderInfos) map[string]string {
   127  	disabledBidders := removed
   128  
   129  	for name, info := range infos {
   130  		if info.Disabled {
   131  			msg := fmt.Sprintf(`Bidder "%s" has been disabled on this instance of Prebid Server. Please work with the PBS host to enable this bidder again.`, name)
   132  			disabledBidders[name] = msg
   133  		}
   134  	}
   135  
   136  	return disabledBidders
   137  }