github.com/prebid/prebid-server@v0.275.0/adapters/smaato/image.go (about) 1 package smaato 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "github.com/prebid/prebid-server/errortypes" 7 "net/url" 8 "strings" 9 ) 10 11 type imageAd struct { 12 Image image `json:"image"` 13 } 14 type image struct { 15 Img img `json:"img"` 16 Impressiontrackers []string `json:"impressiontrackers"` 17 Clicktrackers []string `json:"clicktrackers"` 18 } 19 type img struct { 20 URL string `json:"url"` 21 W int `json:"w"` 22 H int `json:"h"` 23 Ctaurl string `json:"ctaurl"` 24 } 25 26 func extractAdmImage(adMarkup string) (string, error) { 27 var imageAd imageAd 28 if err := json.Unmarshal([]byte(adMarkup), &imageAd); err != nil { 29 return "", &errortypes.BadServerResponse{ 30 Message: fmt.Sprintf("Invalid ad markup %s.", adMarkup), 31 } 32 } 33 34 var clickEvent strings.Builder 35 for _, clicktracker := range imageAd.Image.Clicktrackers { 36 clickEvent.WriteString("fetch(decodeURIComponent('" + url.QueryEscape(clicktracker) + "'.replace(/\\+/g, ' ')), " + 37 "{cache: 'no-cache'});") 38 } 39 40 var impressionTracker strings.Builder 41 for _, impression := range imageAd.Image.Impressiontrackers { 42 impressionTracker.WriteString(fmt.Sprintf(`<img src="%s" alt="" width="0" height="0"/>`, impression)) 43 } 44 45 imageAdMarkup := fmt.Sprintf(`<div style="cursor:pointer" onclick="%s;window.open(decodeURIComponent('%s'.replace(/\+/g, ' ')));"><img src="%s" width="%d" height="%d"/>%s</div>`, 46 &clickEvent, url.QueryEscape(imageAd.Image.Img.Ctaurl), imageAd.Image.Img.URL, imageAd.Image.Img.W, imageAd.Image.Img.H, &impressionTracker) 47 48 return imageAdMarkup, nil 49 }