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  }