Browse Source

get lead from cookie

using variable to idenfity cookie name.

create cookie based on lead id.
master
Patrick Peng Sun 8 years ago
parent
commit
91d80cb2a0
1 changed files with 44 additions and 7 deletions
  1. +44
    -7
      crmpixel.go

+ 44
- 7
crmpixel.go View File

"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"log"
"math/rand" "math/rand"
"net/http" "net/http"
"net/url" "net/url"
"time" "time"
) )


var cookLeadID = "biukop_cl"

func crmpixelImage() (pixel []byte, err error) { func crmpixelImage() (pixel []byte, err error) {
b64pixel := "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4QcIBzEJ3JY/6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAADUlEQVQI12NgYGBgAAAABQABXvMqOgAAAABJRU5ErkJggg==" b64pixel := "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4QcIBzEJ3JY/6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAADUlEQVQI12NgYGBgAAAABQABXvMqOgAAAABJRU5ErkJggg=="
pixel, err = base64.StdEncoding.DecodeString(b64pixel) pixel, err = base64.StdEncoding.DecodeString(b64pixel)
} }


func crmpixelCookie(r *http.Request) (ret http.Cookie) { func crmpixelCookie(r *http.Request) (ret http.Cookie) {
cookie, leadok := r.Cookie("biukop_cl") //crm lead
cookie, leadok := r.Cookie(cookLeadID) //crm lead


if leadok != nil { if leadok != nil {
ret, _ = createNewCookie(r) ret, _ = createNewCookie(r)
return return
} }


func getLeadIDFromCookie(r *http.Request) (leadID string, ok bool) {
ok = false
cookie, leadok := r.Cookie(cookLeadID) //crm lead
if leadok != nil {
return
}
valid := isValidCookieBiukopCL(cookie.Value)
if !valid {
return
}

//correctly split string
s := strings.Split(cookie.Value, "|")
if len(s) != 4 || s[0] == "" {
return
}
ok = true
leadID = s[0]
return
}

func createNewCookie(r *http.Request) (ret http.Cookie, info crmdLead) { func createNewCookie(r *http.Request) (ret http.Cookie, info crmdLead) {
expiration := time.Now().Add(10 * 365 * 24 * time.Hour)
info = crmCreateNewAnonymousLeadByHTTPRequest(r) info = crmCreateNewAnonymousLeadByHTTPRequest(r)
cookieValue := buildBiukopCLValue(info.ID)
ret = http.Cookie{Name: "biukop_cl", Value: cookieValue, Expires: expiration}
ret = createNewCookieByLeadID(info.ID)
return
}

func createNewCookieByLeadID(leadID string) (ret http.Cookie) {
expiration := time.Now().Add(10 * 365 * 24 * time.Hour)
cookieValue := buildBiukopCLValue(leadID)
ret = http.Cookie{Name: cookLeadID, Value: cookieValue, Expires: expiration}
return return
} }


// //
func setTrackingCookieAndRecirect(w http.ResponseWriter, r *http.Request) { func setTrackingCookieAndRecirect(w http.ResponseWriter, r *http.Request) {


cookie := crmpixelCookie(r)
http.SetCookie(w, &cookie)

rq := r.URL.RawQuery rq := r.URL.RawQuery
m, _ := url.ParseQuery(rq) m, _ := url.ParseQuery(rq)


//set cookie if any
leadID, ok := m["lid"]
if ok {
log.Println("setlead cookie :" + leadID[0])
cookie := createNewCookieByLeadID(leadID[0])
http.SetCookie(w, &cookie)
} else {
cookie := crmpixelCookie(r)
http.SetCookie(w, &cookie)
}

url, ok := m["url"] url, ok := m["url"]
if ok { if ok {
http.Redirect(w, r, url[0], 307) //302 temp redirect http.Redirect(w, r, url[0], 307) //302 temp redirect

Loading…
Cancel
Save