github.com/prebid/prebid-server@v0.275.0/adservertargeting/utils.go (about) 1 package adservertargeting 2 3 import ( 4 "github.com/buger/jsonparser" 5 "github.com/pkg/errors" 6 "github.com/prebid/prebid-server/errortypes" 7 "github.com/prebid/prebid-server/openrtb_ext" 8 "strings" 9 ) 10 11 func splitAndGet(path string, data []byte, delimiter string) (string, error) { 12 keySplit := strings.Split(path, delimiter) 13 14 value, err := typedLookup(data, path, keySplit...) 15 if err != nil { 16 return "", err 17 } 18 19 return string(value), nil 20 } 21 22 func createWarning(message string) openrtb_ext.ExtBidderMessage { 23 return openrtb_ext.ExtBidderMessage{ 24 Code: errortypes.AdServerTargetingWarningCode, 25 Message: message, 26 } 27 } 28 29 func verifyPrefixAndTrim(path, prefix string) (string, bool) { 30 ampDataSplit := strings.Split(path, prefix) 31 if len(ampDataSplit) == 2 && ampDataSplit[0] == "" { 32 return ampDataSplit[1], true 33 } 34 return "", false 35 } 36 37 func typedLookup(data []byte, path string, keys ...string) ([]byte, error) { 38 value, dataType, _, err := jsonparser.Get(data, keys...) 39 if err != nil && err != jsonparser.KeyPathNotFoundError { 40 return nil, err 41 } else if err != nil && err == jsonparser.KeyPathNotFoundError { 42 return nil, errors.Errorf("value not found for path: %s", path) 43 } 44 if verifyType(dataType) { 45 return value, nil 46 } 47 return nil, errors.Errorf("incorrect value type for path: %s, value can only be string or number", path) 48 } 49 50 func verifyType(dataType jsonparser.ValueType) bool { 51 typeAllowed := false 52 for _, allowedType := range allowedTypes { 53 if dataType == allowedType { 54 return true 55 } 56 } 57 return typeAllowed 58 }