|
|
|
@@ -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 |