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 }