From 91d80cb2a0e4bc2eb0c5ceb512132b14fa8f1b86 Mon Sep 17 00:00:00 2001 From: Patrick Peng Sun Date: Thu, 13 Jul 2017 00:44:33 +1000 Subject: [PATCH] get lead from cookie using variable to idenfity cookie name. create cookie based on lead id. --- crmpixel.go | 51 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/crmpixel.go b/crmpixel.go index 3907037..1c3b931 100644 --- a/crmpixel.go +++ b/crmpixel.go @@ -5,6 +5,7 @@ import ( "encoding/json" "errors" "fmt" + "log" "math/rand" "net/http" "net/url" @@ -13,6 +14,8 @@ import ( "time" ) +var cookLeadID = "biukop_cl" + func crmpixelImage() (pixel []byte, err error) { b64pixel := "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4QcIBzEJ3JY/6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAADUlEQVQI12NgYGBgAAAABQABXvMqOgAAAABJRU5ErkJggg==" pixel, err = base64.StdEncoding.DecodeString(b64pixel) @@ -33,7 +36,7 @@ func crmpixel(w http.ResponseWriter, r *http.Request) { } 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 { ret, _ = createNewCookie(r) @@ -53,11 +56,37 @@ func crmpixelCookie(r *http.Request) (ret http.Cookie) { 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) { - expiration := time.Now().Add(10 * 365 * 24 * time.Hour) 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 } @@ -155,12 +184,20 @@ func crmpixelLead(id string) (info crmdLead, err error) { // func setTrackingCookieAndRecirect(w http.ResponseWriter, r *http.Request) { - cookie := crmpixelCookie(r) - http.SetCookie(w, &cookie) - rq := r.URL.RawQuery 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"] if ok { http.Redirect(w, r, url[0], 307) //302 temp redirect