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 }