func (e *Echo) ServeHTTP(req engine.Request, res engine.Response) { c := e.pool.Get().(*context) c.Reset(req, res) // Middleware h := func(Context) error { method := req.Method() path := req.URL().Path() e.router.Find(method, path, c) h := c.handler for i := len(e.middleware) - 1; i >= 0; i-- { h = e.middleware[i](h) } return h(c) } // Premiddleware for i := len(e.premiddleware) - 1; i >= 0; i-- { h = e.premiddleware[i](h) } // Execute chain if err := h(c); err != nil { e.httpErrorHandler(err, c) } e.pool.Put(c) }
func getIPFromRequest(r engine.Request) string { if ipProxy := r.Header().Get("X-FORWARDED-FOR"); len(ipProxy) > 0 { return ipProxy } ip, _, _ := net.SplitHostPort(r.RemoteAddress()) return ip }
func (ws *WebService) manageAnalytics(url *storage.URL, request engine.Request, longURL bool, shortURL bool) { log.Printf("[INFO] [abraracourcix] Analytics for URL : %v %s %s", url, request.UserAgent(), request.RemoteAddress()) key := storage.GetAnalyticsKey(url.Key) stat, err := ws.retrieveAnalytics([]byte(key)) if err != nil { log.Printf("[WARN] [abraracourcix] Can't decode Analytics %v", err) return } log.Printf("[INFO] [abraracourcix] Analytics find : %v", stat) ua := request.UserAgent() if stat.UserAgents != nil { stat.UserAgents[ua] = stat.UserAgents[ua] + 1 } else { stat.UserAgents = make(map[string]int64) stat.UserAgents[ua] = 1 } if longURL { stat.LongURLClicks = stat.LongURLClicks + 1 } if shortURL { stat.ShortURLClicks = stat.ShortURLClicks + 1 } err = ws.storeAnalytics([]byte(key), stat) if err != nil { log.Printf("[WARN] [abraracourcix] Can't store analytics URL %s %v", url, stat) } log.Printf("[INFO] [abraracourcix] Analytics updated : %v", stat) }
func RequestTest(t *testing.T, request engine.Request) { assert.Equal(t, "github.com", request.Host()) request.SetURI("/labstack/echo?token=54321") assert.Equal(t, "/labstack/echo?token=54321", request.URI()) assert.Equal(t, "/labstack/echo", request.URL().Path()) assert.Equal(t, "https://github.com/", request.Referer()) assert.Equal(t, "127.0.0.1", request.Header().Get("X-Real-IP")) assert.Equal(t, "https", request.Scheme()) assert.Equal(t, "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; de-de) AppleWebKit/523.10.3 (KHTML, like Gecko) Version/3.0.4 Safari/523.10", request.UserAgent()) assert.Equal(t, "127.0.0.1", request.RemoteAddress()) assert.Equal(t, "POST", request.Method()) assert.Equal(t, int64(261), request.ContentLength()) assert.Equal(t, "bar", request.FormValue("foo")) if fHeader, err := request.FormFile("note"); assert.NoError(t, err) { if file, err := fHeader.Open(); assert.NoError(t, err) { text, _ := ioutil.ReadAll(file) assert.Equal(t, "Hello world!", string(text)) } } assert.Equal(t, map[string][]string{"baz": []string{"bat"}, "foo": []string{"bar"}}, request.FormParams()) if form, err := request.MultipartForm(); assert.NoError(t, err) { _, ok := form.File["note"] assert.True(t, ok) } request.SetMethod("PUT") assert.Equal(t, "PUT", request.Method()) request.SetBody(strings.NewReader("Hello")) if body, err := ioutil.ReadAll(request.Body()); assert.NoError(t, err) { assert.Equal(t, "Hello", string(body)) } if cookie, err := request.Cookie("session"); assert.NoError(t, err) { assert.Equal(t, "session", cookie.Name()) assert.Equal(t, "securetoken", cookie.Value()) } _, err := request.Cookie("foo") assert.Error(t, err) assert.Equal(t, 2, len(request.Cookies())) }