func Meddler() martini.Handler { return func(res http.ResponseWriter, r *http.Request, c martini.Context) { res.Header().Add("Access-Control-Allow-Origin", "*") if strings.ToLower(r.Method) == "options" { return } if strings.Contains(r.URL.String(), "favicon") { res.Write([]byte("")) return } start := time.Now() excused := false for _, route := range ExcusedRoutes { if strings.Contains(r.URL.String(), route) { excused = true } } // check if we need to make a call // to the shopping cart middleware if strings.Contains(strings.ToLower(r.URL.Path), "/shopify/account") { // account perms if strings.ToLower(r.URL.Path) == "/shopify/account/login" || (strings.ToLower(r.Method) == "post" && strings.ToLower(r.URL.Path) == "/shopify/account") { shopID := r.URL.Query().Get("shop") var crt cart.Shop if bson.IsObjectIdHex(shopID) { crt.Id = bson.ObjectIdHex(shopID) } c.Map(&crt) } else if err := mapCartAccount(c, res, r); err != nil { apierror.GenerateError("", err, res, r) return } excused = true } else if strings.Contains(strings.ToLower(r.URL.Path), "/shopify") { // shop perms if err := mapCart(c, res, r); err != nil { apierror.GenerateError("", err, res, r) return } excused = true } if !excused { dataContext, err := processDataContext(r, c) if err != nil { apierror.GenerateError("Trouble processing the data context", err, res, r, http.StatusUnauthorized) return } c.Map(dataContext) } c.Next() go logRequest(r, time.Since(start)) } }