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  }