github.com/prebid/prebid-server@v0.275.0/gdpr/basic_enforcement.go (about)

     1  package gdpr
     2  
     3  import (
     4  	tcf2 "github.com/prebid/go-gdpr/vendorconsent/tcf2"
     5  	"github.com/prebid/prebid-server/openrtb_ext"
     6  )
     7  
     8  // BasicEnforcement determines if legal basis is satisfied for a given purpose and bidder using
     9  // the TCF2 basic enforcement algorithm. The algorithm is a high-level mode of consent confirmation
    10  // that looks for a good-faith indication that the user has provided consent or legal basis signals
    11  // necessary to perform a privacy-protected activity. The algorithm does not involve the GVL.
    12  // BasicEnforcement implements the PurposeEnforcer interface
    13  type BasicEnforcement struct {
    14  	cfg purposeConfig
    15  }
    16  
    17  // LegalBasis determines if legal basis is satisfied for a given purpose and bidder based on user consent
    18  // and legal basis signals.
    19  func (be *BasicEnforcement) LegalBasis(vendorInfo VendorInfo, bidder openrtb_ext.BidderName, consent tcf2.ConsentMetadata, overrides Overrides) bool {
    20  	enforcePurpose, enforceVendors := be.applyEnforceOverrides(overrides)
    21  
    22  	if !enforcePurpose && !enforceVendors {
    23  		return true
    24  	}
    25  	if be.cfg.vendorException(bidder) && !overrides.blockVendorExceptions {
    26  		return true
    27  	}
    28  	if !enforcePurpose && be.cfg.basicEnforcementVendor(bidder) {
    29  		return true
    30  	}
    31  	if enforcePurpose && consent.PurposeAllowed(be.cfg.PurposeID) && be.cfg.basicEnforcementVendor(bidder) {
    32  		return true
    33  	}
    34  	if enforcePurpose && consent.PurposeLITransparency(be.cfg.PurposeID) && overrides.allowLITransparency {
    35  		return true
    36  	}
    37  	if enforcePurpose && !consent.PurposeAllowed(be.cfg.PurposeID) {
    38  		return false
    39  	}
    40  	if !enforceVendors {
    41  		return true
    42  	}
    43  	return consent.VendorConsent(vendorInfo.vendorID)
    44  }
    45  
    46  // applyEnforceOverrides returns the enforce purpose and enforce vendor configuration values unless
    47  // those values have been overridden, in which case they return true
    48  func (be *BasicEnforcement) applyEnforceOverrides(overrides Overrides) (enforcePurpose, enforceVendors bool) {
    49  	enforcePurpose = be.cfg.EnforcePurpose
    50  	if overrides.enforcePurpose {
    51  		enforcePurpose = true
    52  	}
    53  	enforceVendors = be.cfg.EnforceVendors
    54  	if overrides.enforceVendors {
    55  		enforceVendors = true
    56  	}
    57  	return
    58  }