github.com/prebid/prebid-server@v0.275.0/usersync/bidderfilter.go (about) 1 package usersync 2 3 // BidderFilter determines if a bidder has permission to perform a user sync activity. 4 type BidderFilter interface { 5 // Allowed returns true if the filter determines the bidder has permission and false if either 6 // the bidder does not have permission or if the filter has an invalid mode. 7 Allowed(bidder string) bool 8 } 9 10 // BidderFilterMode represents the inclusion mode of a BidderFilter. 11 type BidderFilterMode int 12 13 const ( 14 BidderFilterModeInclude BidderFilterMode = iota 15 BidderFilterModeExclude 16 ) 17 18 // SpecificBidderFilter implements the BidderFilter which applies the same mode for a list of bidders. 19 type SpecificBidderFilter struct { 20 biddersLookup map[string]struct{} 21 mode BidderFilterMode 22 } 23 24 // Allowed returns true if the bidder is specified and the mode is include or if the bidder is not specified 25 // and the mode is exclude and returns false in the opposite cases or when the mode is invalid. 26 func (f SpecificBidderFilter) Allowed(bidder string) bool { 27 _, exists := f.biddersLookup[bidder] 28 29 switch f.mode { 30 case BidderFilterModeInclude: 31 return exists 32 case BidderFilterModeExclude: 33 return !exists 34 default: 35 return false 36 } 37 } 38 39 // NewSpecificBidderFilter returns a new instance of the NewSpecificBidderFilter filter. 40 func NewSpecificBidderFilter(bidders []string, mode BidderFilterMode) BidderFilter { 41 biddersLookup := make(map[string]struct{}, len(bidders)) 42 for _, bidder := range bidders { 43 biddersLookup[bidder] = struct{}{} 44 } 45 46 return SpecificBidderFilter{biddersLookup: biddersLookup, mode: mode} 47 } 48 49 // UniformBidderFilter implements the BidderFilter interface which applies the same mode for all bidders. 50 type UniformBidderFilter struct { 51 mode BidderFilterMode 52 } 53 54 // Allowed returns true if the mode is include and false if the mode is either exclude or invalid. 55 func (f UniformBidderFilter) Allowed(bidder string) bool { 56 return f.mode == BidderFilterModeInclude 57 } 58 59 // NewUniformBidderFilter returns a new instance of the UniformBidderFilter filter. 60 func NewUniformBidderFilter(mode BidderFilterMode) BidderFilter { 61 return UniformBidderFilter{mode: mode} 62 }