1
0
mirror of https://github.com/labstack/echo.git synced 2025-02-15 13:53:06 +02:00
This commit is contained in:
Marcin Węglarz 2018-08-15 16:35:27 +02:00 committed by Vishal Rana
parent 2017e5e541
commit 74f9806b34
2 changed files with 35 additions and 1 deletions

View File

@ -58,6 +58,7 @@ func RewriteWithConfig(config RewriteConfig) echo.MiddlewareFunc {
// Initialize // Initialize
for k, v := range config.Rules { for k, v := range config.Rules {
k = strings.Replace(k, "*", "(.*)", -1) k = strings.Replace(k, "*", "(.*)", -1)
k = k + "$"
config.rulesRegex[regexp.MustCompile(k)] = v config.rulesRegex[regexp.MustCompile(k)] = v
} }
@ -74,9 +75,9 @@ func RewriteWithConfig(config RewriteConfig) echo.MiddlewareFunc {
replacer := captureTokens(k, req.URL.Path) replacer := captureTokens(k, req.URL.Path)
if replacer != nil { if replacer != nil {
req.URL.Path = replacer.Replace(v) req.URL.Path = replacer.Replace(v)
break
} }
} }
return next(c) return next(c)
} }
} }

View File

@ -1,6 +1,7 @@
package middleware package middleware
import ( import (
"io/ioutil"
"net/http/httptest" "net/http/httptest"
"testing" "testing"
@ -61,3 +62,35 @@ func TestEchoRewritePreMiddleware(t *testing.T) {
assert.Equal(t, "/new", req.URL.Path) assert.Equal(t, "/new", req.URL.Path)
assert.Equal(t, 200, rec.Code) assert.Equal(t, 200, rec.Code)
} }
// Issue #1143
func TestRewriteWithConfigPreMiddleware_Issue1143(t *testing.T) {
e := echo.New()
r := e.Router()
e.Pre(RewriteWithConfig(RewriteConfig{
Rules: map[string]string{
"/api/*/mgmt/proj/*/agt": "/api/$1/hosts/$2",
"/api/*/mgmt/proj": "/api/$1/eng",
},
}))
r.Add(echo.GET, "/api/:version/hosts/:name", func(c echo.Context) error {
return c.String(200, "hosts")
})
r.Add(echo.GET, "/api/:version/eng", func(c echo.Context) error {
return c.String(200, "eng")
})
for i := 0; i < 100; i++ {
req := httptest.NewRequest(echo.GET, "/api/v1/mgmt/proj/test/agt", nil)
rec := httptest.NewRecorder()
e.ServeHTTP(rec, req)
assert.Equal(t, "/api/v1/hosts/test", req.URL.Path)
assert.Equal(t, 200, rec.Code)
defer rec.Result().Body.Close()
bodyBytes, _ := ioutil.ReadAll(rec.Result().Body)
assert.Equal(t, "hosts", string(bodyBytes))
}
}