github.com/prebid/prebid-server@v0.275.0/privacy/enforcement.go (about) 1 package privacy 2 3 import ( 4 "github.com/prebid/openrtb/v19/openrtb2" 5 "github.com/prebid/prebid-server/config" 6 ) 7 8 // Enforcement represents the privacy policies to enforce for an OpenRTB bid request. 9 type Enforcement struct { 10 CCPA bool 11 COPPA bool 12 GDPRGeo bool 13 GDPRID bool 14 LMT bool 15 16 // activities 17 UFPD bool 18 Eids bool 19 PreciseGeo bool 20 TID bool 21 } 22 23 // Any returns true if at least one privacy policy requires enforcement. 24 func (e Enforcement) AnyLegacy() bool { 25 return e.CCPA || e.COPPA || e.GDPRGeo || e.GDPRID || e.LMT 26 } 27 28 func (e Enforcement) AnyActivities() bool { 29 return e.UFPD || e.PreciseGeo || e.Eids || e.TID 30 } 31 32 // Apply cleans personally identifiable information from an OpenRTB bid request. 33 func (e Enforcement) Apply(bidRequest *openrtb2.BidRequest, privacy config.AccountPrivacy) { 34 e.apply(bidRequest, NewScrubber(privacy.IPv6Config, privacy.IPv4Config)) 35 } 36 37 func (e Enforcement) apply(bidRequest *openrtb2.BidRequest, scrubber Scrubber) { 38 if bidRequest != nil { 39 if e.AnyActivities() { 40 bidRequest = scrubber.ScrubRequest(bidRequest, e) 41 } 42 if e.AnyLegacy() && !(e.UFPD && e.PreciseGeo && e.Eids) { 43 bidRequest.User = scrubber.ScrubUser(bidRequest.User, e.getUserScrubStrategy(), e.getGeoScrubStrategy()) 44 } 45 if e.AnyLegacy() && !(e.UFPD && e.PreciseGeo) { 46 bidRequest.Device = scrubber.ScrubDevice(bidRequest.Device, e.getDeviceIDScrubStrategy(), e.getIPv4ScrubStrategy(), e.getIPv6ScrubStrategy(), e.getGeoScrubStrategy()) 47 } 48 } 49 } 50 51 func (e Enforcement) getDeviceIDScrubStrategy() ScrubStrategyDeviceID { 52 if e.COPPA || e.GDPRID || e.CCPA || e.LMT { 53 return ScrubStrategyDeviceIDAll 54 } 55 56 return ScrubStrategyDeviceIDNone 57 } 58 59 func (e Enforcement) getIPv4ScrubStrategy() ScrubStrategyIPV4 { 60 if e.COPPA || e.GDPRGeo || e.CCPA || e.LMT { 61 return ScrubStrategyIPV4Subnet 62 } 63 64 return ScrubStrategyIPV4None 65 } 66 67 func (e Enforcement) getIPv6ScrubStrategy() ScrubStrategyIPV6 { 68 if e.GDPRGeo || e.CCPA || e.LMT || e.COPPA { 69 return ScrubStrategyIPV6Subnet 70 } 71 return ScrubStrategyIPV6None 72 } 73 74 func (e Enforcement) getGeoScrubStrategy() ScrubStrategyGeo { 75 if e.COPPA { 76 return ScrubStrategyGeoFull 77 } 78 79 if e.GDPRGeo || e.CCPA || e.LMT { 80 return ScrubStrategyGeoReducedPrecision 81 } 82 83 return ScrubStrategyGeoNone 84 } 85 86 func (e Enforcement) getUserScrubStrategy() ScrubStrategyUser { 87 if e.COPPA || e.CCPA || e.LMT || e.GDPRID { 88 return ScrubStrategyUserIDAndDemographic 89 } 90 91 return ScrubStrategyUserNone 92 }