diff --git a/README.md b/README.md index 39ea2adb0..83fbd0ef1 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ First, thank you so much for wanting to contribute! It means so much that you ca **Here are the core rules to respect**: * If you have any question, please consider using the [Slack channel](https://gobuffalo.io/docs/slack) (*#buffalo*, *#buffalo_fr* or *#buffalo-dev* for contribution related questions) or [Stack Overflow](https://stackoverflow.com/questions/tagged/buffalo). We use GitHub issues for **bug reports and feature requests only**. * All contributors of this project are working on their free time: be patient and kind. :) -* Consider opening an issue **BEFORE** creating a Pull request (PR): you won't loose your time on fixing non-existing bugs, or fixing the wrong bug. Also we can help you to produce the best PR! +* Consider opening an issue **BEFORE** creating a Pull request (PR): you won't lose your time on fixing non-existing bugs, or fixing the wrong bug. Also we can help you to produce the best PR! * All PRs **MUST** be opened against the *development* branch. If you want to write an hot-fix, we'll first fix the *development* branch before moving the patch to *master* branch. **WE WILL CLOSE ANY ISSUE OR PR NOT FOLLOWING THESE CORE RULES**. diff --git a/app.go b/app.go index f40a28632..8ef8245e9 100644 --- a/app.go +++ b/app.go @@ -41,8 +41,8 @@ func New(opts Options) *App { a := &App{ Options: opts, ErrorHandlers: ErrorHandlers{ - 404: defaultErrorHandler, - 500: defaultErrorHandler, + http.StatusNotFound: defaultErrorHandler, + http.StatusInternalServerError: defaultErrorHandler, }, router: mux.NewRouter(), moot: &sync.RWMutex{}, @@ -62,8 +62,8 @@ func New(opts Options) *App { } } - a.router.NotFoundHandler = notFoundHandler("path not found: %s %s", 404) - a.router.MethodNotAllowedHandler = notFoundHandler("method not found: %s %s", 405) + a.router.NotFoundHandler = notFoundHandler("path not found: %s %s", http.StatusNotFound) + a.router.MethodNotAllowedHandler = notFoundHandler("method not found: %s %s", http.StatusMethodNotAllowed) if a.MethodOverride == nil { a.MethodOverride = MethodOverride diff --git a/binding/binding_custom_decoder_test.go b/binding/binding_custom_decoder_test.go index b0b90b310..2b26b36a5 100644 --- a/binding/binding_custom_decoder_test.go +++ b/binding/binding_custom_decoder_test.go @@ -1,6 +1,7 @@ package binding_test import ( + "net/http" "testing" "github.com/gobuffalo/buffalo" @@ -33,7 +34,7 @@ func Test_RegisterCustomDecoder(t *testing.T) { res := w.HTML("/").Post(&U{ Xt: Xt{[]string{"foo"}}, }) - r.Equal(200, res.Code) + r.Equal(http.StatusOK, res.Code) r.Equal([]string{"X"}, ux.Xt.Vals) } diff --git a/binding/file_test.go b/binding/file_test.go index 6924eefe5..ca66a5294 100644 --- a/binding/file_test.go +++ b/binding/file_test.go @@ -31,21 +31,21 @@ func App() *buffalo.App { if err := c.Bind(wf); err != nil { return err } - return c.Render(201, render.String(wf.MyFile.Filename)) + return c.Render(http.StatusCreated, render.String(wf.MyFile.Filename)) }) a.POST("/named-file", func(c buffalo.Context) error { wf := &NamedFile{} if err := c.Bind(wf); err != nil { return err } - return c.Render(201, render.String(wf.MyFile.Filename)) + return c.Render(http.StatusCreated, render.String(wf.MyFile.Filename)) }) a.POST("/on-context", func(c buffalo.Context) error { f, err := c.File("MyFile") if err != nil { return err } - return c.Render(201, render.String(f.Filename)) + return c.Render(http.StatusCreated, render.String(f.Filename)) }) return a @@ -60,7 +60,7 @@ func Test_File_Upload_On_Struct(t *testing.T) { App().ServeHTTP(res, req) - r.Equal(201, res.Code) + r.Equal(http.StatusCreated, res.Code) r.Equal("file_test.go", res.Body.String()) } @@ -73,7 +73,7 @@ func Test_File_Upload_On_Struct_WithTag(t *testing.T) { App().ServeHTTP(res, req) - r.Equal(201, res.Code) + r.Equal(http.StatusCreated, res.Code) r.Equal("file_test.go", res.Body.String()) } @@ -86,7 +86,7 @@ func Test_File_Upload_On_Context(t *testing.T) { App().ServeHTTP(res, req) - r.Equal(201, res.Code) + r.Equal(http.StatusCreated, res.Code) r.Equal("file_test.go", res.Body.String()) } diff --git a/buffalo/cmd/filetests/generate_underscore.json b/buffalo/cmd/filetests/generate_underscore.json index c08c2d227..830e375e4 100644 --- a/buffalo/cmd/filetests/generate_underscore.json +++ b/buffalo/cmd/filetests/generate_underscore.json @@ -1,7 +1,7 @@ [{ "path": "actions/person_events.go", "contains": [ - "c.Render(200, r.Auto(c, personEvents))", - "c.Render(200, r.Auto(c, personEvent))" + "c.Render(http.StatusOK, r.Auto(c, personEvents))", + "c.Render(http.StatusOK, r.Auto(c, personEvent))" ] }] diff --git a/default_context.go b/default_context.go index 2a8c41cb5..bbbe1fa14 100644 --- a/default_context.go +++ b/default_context.go @@ -127,7 +127,7 @@ func (d *DefaultContext) Render(status int, rr render.Renderer) error { if er, ok := errx.Unwrap(err).(render.ErrRedirect); ok { return d.Redirect(er.Status, er.URL) } - return HTTPError{Status: 500, Cause: err} + return HTTPError{Status: http.StatusInternalServerError, Cause: err} } if d.Session() != nil { @@ -142,7 +142,7 @@ func (d *DefaultContext) Render(status int, rr render.Renderer) error { d.Response().WriteHeader(status) _, err = io.Copy(d.Response(), bb) if err != nil { - return HTTPError{Status: 500, Cause: err} + return HTTPError{Status: http.StatusInternalServerError, Cause: err} } return nil diff --git a/default_context_test.go b/default_context_test.go index fd4db7fbe..3ba84c78b 100644 --- a/default_context_test.go +++ b/default_context_test.go @@ -28,7 +28,7 @@ func Test_DefaultContext_Redirect(t *testing.T) { a := New(Options{}) u := "/foo?bar=http%3A%2F%2Flocalhost%3A3000%2Flogin%2Fcallback%2Ffacebook" a.GET("/", func(c Context) error { - return c.Redirect(302, u) + return c.Redirect(http.StatusFound, u) }) w := httptest.New(a) @@ -47,23 +47,23 @@ func Test_DefaultContext_Redirect_Helper(t *testing.T) { { E: "/foo/baz/", I: map[string]interface{}{"bar": "baz"}, - S: 302, + S: http.StatusPermanentRedirect, }, { - S: 500, + S: http.StatusInternalServerError, }, } for _, tt := range table { a := New(Options{}) a.GET("/foo/{bar}", func(c Context) error { - return c.Render(200, render.String(c.Param("bar"))) + return c.Render(http.StatusOK, render.String(c.Param("bar"))) }) a.GET("/", func(c Context) error { - return c.Redirect(302, "fooPath()", tt.I) + return c.Redirect(http.StatusPermanentRedirect, "fooPath()", tt.I) }) a.GET("/nomap", func(c Context) error { - return c.Redirect(302, "rootPath()") + return c.Redirect(http.StatusPermanentRedirect, "rootPath()") }) w := httptest.New(a) @@ -72,7 +72,7 @@ func Test_DefaultContext_Redirect_Helper(t *testing.T) { r.Equal(tt.E, res.Location()) res = w.HTML("/nomap").Get() - r.Equal(302, res.Code) + r.Equal(http.StatusPermanentRedirect, res.Code) r.Equal("/", res.Location()) } } @@ -103,7 +103,7 @@ func Test_DefaultContext_Param_form(t *testing.T) { "name": "Mark", }) - r.Equal(200, res.Code) + r.Equal(http.StatusOK, res.Code) r.Equal("Mark", name) } @@ -137,10 +137,10 @@ func Test_DefaultContext_Render(t *testing.T) { c.params = url.Values{"name": []string{"Mark"}} c.Set("greet", "Hello") - err := c.Render(123, render.String(`<%= greet %> <%= params["name"] %>!`)) + err := c.Render(http.StatusTeapot, render.String(`<%= greet %> <%= params["name"] %>!`)) r.NoError(err) - r.Equal(123, res.Code) + r.Equal(http.StatusTeapot, res.Code) r.Equal("Hello Mark!", res.Body.String()) } @@ -157,13 +157,13 @@ func Test_DefaultContext_Bind_Default(t *testing.T) { if err != nil { return err } - return c.Render(201, nil) + return c.Render(http.StatusCreated, nil) }) w := httptest.New(a) uv := url.Values{"first_name": []string{"Mark"}} res := w.HTML("/").Post(uv) - r.Equal(201, res.Code) + r.Equal(http.StatusCreated, res.Code) r.Equal("Mark", user.FirstName) } @@ -181,9 +181,9 @@ func Test_DefaultContext_Bind_No_ContentType(t *testing.T) { a.POST("/", func(c Context) error { err := c.Bind(&user) if err != nil { - return c.Error(422, err) + return c.Error(http.StatusUnprocessableEntity, err) } - return c.Render(201, nil) + return c.Render(http.StatusCreated, nil) }) bb := &bytes.Buffer{} @@ -192,7 +192,7 @@ func Test_DefaultContext_Bind_No_ContentType(t *testing.T) { req.Header.Del("Content-Type") res := httptest.NewRecorder() a.ServeHTTP(res, req) - r.Equal(422, res.Code) + r.Equal(http.StatusUnprocessableEntity, res.Code) r.Contains(res.Body.String(), "blank content type") } @@ -209,9 +209,9 @@ func Test_DefaultContext_Bind_Empty_ContentType(t *testing.T) { a.POST("/", func(c Context) error { err := c.Bind(&user) if err != nil { - return c.Error(422, err) + return c.Error(http.StatusUnprocessableEntity, err) } - return c.Render(201, nil) + return c.Render(http.StatusCreated, nil) }) bb := &bytes.Buffer{} @@ -221,7 +221,7 @@ func Test_DefaultContext_Bind_Empty_ContentType(t *testing.T) { req.Header.Set("Content-Type", "") res := httptest.NewRecorder() a.ServeHTTP(res, req) - r.Equal(422, res.Code) + r.Equal(http.StatusUnprocessableEntity, res.Code) r.Contains(res.Body.String(), "blank content type") } @@ -240,13 +240,13 @@ func Test_DefaultContext_Bind_Default_BlankFields(t *testing.T) { if err != nil { return err } - return c.Render(201, nil) + return c.Render(http.StatusCreated, nil) }) w := httptest.New(a) uv := url.Values{"first_name": []string{""}} res := w.HTML("/").Post(uv) - r.Equal(201, res.Code) + r.Equal(http.StatusCreated, res.Code) r.Equal("", user.FirstName) } @@ -264,14 +264,14 @@ func Test_DefaultContext_Bind_JSON(t *testing.T) { if err != nil { return err } - return c.Render(201, nil) + return c.Render(http.StatusCreated, nil) }) w := httptest.New(a) res := w.JSON("/").Post(map[string]string{ "first_name": "Mark", }) - r.Equal(201, res.Code) + r.Equal(http.StatusCreated, res.Code) r.Equal("Mark", user.FirstName) } diff --git a/errors.go b/errors.go index eaf4e3cff..00f946b52 100644 --- a/errors.go +++ b/errors.go @@ -33,7 +33,7 @@ type ErrorHandler func(int, error, Context) error // ErrorHandlers is used to hold a list of ErrorHandler // types that can be used to handle specific status codes. /* - a.ErrorHandlers[500] = func(status int, err error, c buffalo.Context) error { + a.ErrorHandlers[http.StatusInternalServerError] = func(status int, err error, c buffalo.Context) error { res := c.Response() res.WriteHeader(status) res.Write([]byte(err.Error())) @@ -88,8 +88,8 @@ func (a *App) PanicHandler(next Handler) Handler { "app": a, }, ) - eh := a.ErrorHandlers.Get(500) - eh(500, err, c) + eh := a.ErrorHandlers.Get(http.StatusInternalServerError) + eh(http.StatusInternalServerError, err, c) } }() return next(c) @@ -102,12 +102,12 @@ func (a *App) defaultErrorMiddleware(next Handler) Handler { if err == nil { return nil } - status := 500 + status := http.StatusInternalServerError // unpack root cause and check for HTTPError cause := errx.Unwrap(err) switch cause { case sql.ErrNoRows: - status = 404 + status = http.StatusNotFound default: if h, ok := cause.(HTTPError); ok { status = h.Status @@ -130,7 +130,7 @@ func (a *App) defaultErrorMiddleware(next Handler) Handler { }) // things have really hit the fan if we're here!! a.Logger.Error(err) - c.Response().WriteHeader(500) + c.Response().WriteHeader(http.StatusInternalServerError) c.Response().Write([]byte(err.Error())) } return nil diff --git a/errors_test.go b/errors_test.go index 0346009f9..54b7e8927 100644 --- a/errors_test.go +++ b/errors_test.go @@ -2,6 +2,7 @@ package buffalo import ( "fmt" + "net/http" "testing" "github.com/gobuffalo/httptest" @@ -13,12 +14,12 @@ func Test_defaultErrorHandler_SetsContentType(t *testing.T) { r := require.New(t) app := New(Options{}) app.GET("/", func(c Context) error { - return c.Error(401, fmt.Errorf("boom")) + return c.Error(http.StatusUnauthorized, fmt.Errorf("boom")) }) w := httptest.New(app) res := w.HTML("/").Get() - r.Equal(401, res.Code) + r.Equal(http.StatusUnauthorized, res.Code) ct := res.Header().Get("content-type") r.Equal("text/html; charset=utf-8", ct) } @@ -27,12 +28,12 @@ func Test_defaultErrorHandler_JSON(t *testing.T) { r := require.New(t) app := New(Options{}) app.GET("/", func(c Context) error { - return c.Error(401, fmt.Errorf("boom")) + return c.Error(http.StatusUnauthorized, fmt.Errorf("boom")) }) w := httptest.New(app) res := w.JSON("/").Get() - r.Equal(401, res.Code) + r.Equal(http.StatusUnauthorized, res.Code) ct := res.Header().Get("content-type") r.Equal("application/json", ct) b := res.Body.String() @@ -45,12 +46,12 @@ func Test_defaultErrorHandler_XML(t *testing.T) { r := require.New(t) app := New(Options{}) app.GET("/", func(c Context) error { - return c.Error(401, fmt.Errorf("boom")) + return c.Error(http.StatusUnauthorized, fmt.Errorf("boom")) }) w := httptest.New(app) res := w.XML("/").Get() - r.Equal(401, res.Code) + r.Equal(http.StatusUnauthorized, res.Code) ct := res.Header().Get("content-type") r.Equal("text/xml", ct) b := res.Body.String() @@ -86,7 +87,7 @@ func Test_PanicHandler(t *testing.T) { r := require.New(st) res := w.HTML(tt.path).Get() - r.Equal(500, res.Code) + r.Equal(http.StatusInternalServerError, res.Code) body := res.Body.String() r.Contains(body, tt.expected) @@ -100,7 +101,7 @@ func Test_defaultErrorMiddleware(t *testing.T) { app := New(Options{}) var x string var ok bool - app.ErrorHandlers[422] = func(code int, err error, c Context) error { + app.ErrorHandlers[http.StatusUnprocessableEntity] = func(code int, err error, c Context) error { x, ok = c.Value("T").(string) c.Response().WriteHeader(code) c.Response().Write([]byte(err.Error())) @@ -109,7 +110,7 @@ func Test_defaultErrorMiddleware(t *testing.T) { app.Use(func(next Handler) Handler { return func(c Context) error { c.Set("T", "t") - return c.Error(422, fmt.Errorf("boom")) + return c.Error(http.StatusUnprocessableEntity, fmt.Errorf("boom")) } }) app.GET("/", func(c Context) error { @@ -118,7 +119,7 @@ func Test_defaultErrorMiddleware(t *testing.T) { w := httptest.New(app) res := w.HTML("/").Get() - r.Equal(422, res.Code) + r.Equal(http.StatusUnprocessableEntity, res.Code) r.True(ok) r.Equal("t", x) } @@ -128,16 +129,16 @@ func Test_SetErrorMiddleware(t *testing.T) { app := New(Options{}) app.ErrorHandlers.Default(func(code int, err error, c Context) error { res := c.Response() - res.WriteHeader(418) + res.WriteHeader(http.StatusTeapot) res.Write([]byte("i'm a teapot")) return nil }) app.GET("/", func(c Context) error { - return c.Error(422, fmt.Errorf("boom")) + return c.Error(http.StatusUnprocessableEntity, fmt.Errorf("boom")) }) w := httptest.New(app) res := w.HTML("/").Get() - r.Equal(418, res.Code) + r.Equal(http.StatusTeapot, res.Code) r.Equal("i'm a teapot", res.Body.String()) } diff --git a/flash_test.go b/flash_test.go index 81d9f8707..25f863f47 100644 --- a/flash_test.go +++ b/flash_test.go @@ -1,6 +1,7 @@ package buffalo import ( + "net/http" "testing" "github.com/gobuffalo/buffalo/render" @@ -34,7 +35,7 @@ func Test_FlashRender(t *testing.T) { c.Flash().Add("errors", "Error AJ set") c.Flash().Add("errors", "Error DAL set") - return c.Render(201, rr.String(errorsTPL)) + return c.Render(http.StatusCreated, rr.String(errorsTPL)) }) w := httptest.New(a) @@ -50,7 +51,7 @@ func Test_FlashRenderEmpty(t *testing.T) { rr := render.New(render.Options{}) a.GET("/", func(c Context) error { - return c.Render(201, rr.String(errorsTPL)) + return c.Render(http.StatusCreated, rr.String(errorsTPL)) }) w := httptest.New(a) @@ -73,7 +74,7 @@ func Test_FlashRenderEntireFlash(t *testing.T) { a.GET("/", func(c Context) error { c.Flash().Add("something", "something to say!") - return c.Render(201, rr.String(keyTPL)) + return c.Render(http.StatusCreated, rr.String(keyTPL)) }) w := httptest.New(a) @@ -94,7 +95,7 @@ func Test_FlashRenderCustomKey(t *testing.T) { a.GET("/", func(c Context) error { c.Flash().Add("something", "something to say!") - return c.Render(201, rr.String(keyTPL)) + return c.Render(http.StatusCreated, rr.String(keyTPL)) }) w := httptest.New(a) @@ -108,7 +109,7 @@ func Test_FlashRenderCustomKeyNotDefined(t *testing.T) { rr := render.New(render.Options{}) a.GET("/", func(c Context) error { - return c.Render(201, rr.String(customKeyTPL)) + return c.Render(http.StatusCreated, rr.String(customKeyTPL)) }) w := httptest.New(a) diff --git a/genny/actions/_fixtures/inputs/existing/actions/user.go.tmpl b/genny/actions/_fixtures/inputs/existing/actions/user.go.tmpl index f515d8844..b02820733 100644 --- a/genny/actions/_fixtures/inputs/existing/actions/user.go.tmpl +++ b/genny/actions/_fixtures/inputs/existing/actions/user.go.tmpl @@ -1,9 +1,13 @@ package actions -import "github.com/gobuffalo/buffalo" +import ( + "net/http" + + "github.com/gobuffalo/buffalo" +) // UserEdit default implementation. func UserEdit(c buffalo.Context) error { // custom existing work - return c.Render(200, r.HTML("user/edit.html")) + return c.Render(http.StatusOK, r.HTML("user/edit.html")) } diff --git a/genny/actions/_fixtures/outputs/clean/actions/user.go.tmpl b/genny/actions/_fixtures/outputs/clean/actions/user.go.tmpl index 482d55045..c24f36ade 100644 --- a/genny/actions/_fixtures/outputs/clean/actions/user.go.tmpl +++ b/genny/actions/_fixtures/outputs/clean/actions/user.go.tmpl @@ -1,8 +1,12 @@ package actions -import "github.com/gobuffalo/buffalo" +import ( + "net/http" + + "github.com/gobuffalo/buffalo" +) // UserIndex default implementation. func UserIndex(c buffalo.Context) error { - return c.Render(200, r.HTML("user/index.html")) + return c.Render(http.StatusOK, r.HTML("user/index.html")) } diff --git a/genny/actions/_fixtures/outputs/existing/actions/user.go.tmpl b/genny/actions/_fixtures/outputs/existing/actions/user.go.tmpl index 0670e6840..194804594 100644 --- a/genny/actions/_fixtures/outputs/existing/actions/user.go.tmpl +++ b/genny/actions/_fixtures/outputs/existing/actions/user.go.tmpl @@ -1,14 +1,18 @@ package actions -import "github.com/gobuffalo/buffalo" +import ( + "net/http" + + "github.com/gobuffalo/buffalo" +) // UserEdit default implementation. func UserEdit(c buffalo.Context) error { // custom existing work - return c.Render(200, r.HTML("user/edit.html")) + return c.Render(http.StatusOK, r.HTML("user/edit.html")) } // UserShow default implementation. func UserShow(c buffalo.Context) error { - return c.Render(200, r.HTML("user/show.html")) + return c.Render(http.StatusOK, r.HTML("user/show.html")) } diff --git a/genny/actions/_fixtures/outputs/multi/actions/user.go.tmpl b/genny/actions/_fixtures/outputs/multi/actions/user.go.tmpl index c2e51b481..79689d17c 100644 --- a/genny/actions/_fixtures/outputs/multi/actions/user.go.tmpl +++ b/genny/actions/_fixtures/outputs/multi/actions/user.go.tmpl @@ -1,13 +1,17 @@ package actions -import "github.com/gobuffalo/buffalo" +import ( + "net/http" + + "github.com/gobuffalo/buffalo" +) // UserShow default implementation. func UserShow(c buffalo.Context) error { - return c.Render(200, r.HTML("user/show.html")) + return c.Render(http.StatusOK, r.HTML("user/show.html")) } // UserEdit default implementation. func UserEdit(c buffalo.Context) error { - return c.Render(200, r.HTML("user/edit.html")) + return c.Render(http.StatusOK, r.HTML("user/edit.html")) } diff --git a/genny/actions/actions_test.go b/genny/actions/actions_test.go index 1c45b26d1..40312df6d 100644 --- a/genny/actions/actions_test.go +++ b/genny/actions/actions_test.go @@ -60,6 +60,7 @@ func Test_New(t *testing.T) { r.NoError(err) f, err := res.Find(strings.TrimSuffix(s, ".tmpl")) r.NoError(err) + fmt.Printf("\nfile %s", s) r.True(compare(x, f.String())) } } @@ -92,6 +93,7 @@ func Test_New_Multi(t *testing.T) { r.NoError(err) f, err := res.Find(strings.TrimSuffix(s, ".tmpl")) r.NoError(err) + fmt.Printf("\nfile %s", f) r.True(compare(x, f.String())) } } diff --git a/genny/actions/templates/actions.go.tmpl b/genny/actions/templates/actions.go.tmpl index 18867031d..b9219344f 100644 --- a/genny/actions/templates/actions.go.tmpl +++ b/genny/actions/templates/actions.go.tmpl @@ -1,6 +1,6 @@ {{ range $action := .actions }} // {{$.name.Pascalize}}{{$action.Pascalize}} default implementation. func {{$.name.Pascalize}}{{$action.Pascalize}}(c buffalo.Context) error { - return c.Render(200, r.HTML("{{$.name.File}}/{{$action.File}}.html")) + return c.Render(http.StatusOK, r.HTML("{{$.name.File}}/{{$action.File}}.html")) } {{end}} diff --git a/genny/actions/templates/actions_header.go.tmpl b/genny/actions/templates/actions_header.go.tmpl index 1d2598d2d..214a6a3fa 100644 --- a/genny/actions/templates/actions_header.go.tmpl +++ b/genny/actions/templates/actions_header.go.tmpl @@ -1,3 +1,7 @@ package actions -import "github.com/gobuffalo/buffalo" +import ( + "net/http" + + "github.com/gobuffalo/buffalo" +) diff --git a/genny/build/_fixtures/coke/actions/home.go b/genny/build/_fixtures/coke/actions/home.go index 1ae4ec3bd..b1e903198 100644 --- a/genny/build/_fixtures/coke/actions/home.go +++ b/genny/build/_fixtures/coke/actions/home.go @@ -1,9 +1,13 @@ package actions -import "github.com/gobuffalo/buffalo" +import ( + "net/http" + + "github.com/gobuffalo/buffalo" +) // HomeHandler is a default handler to serve up // a home page. func HomeHandler(c buffalo.Context) error { - return c.Render(200, r.HTML("index.html")) + return c.Render(http.StatusOK, r.HTML("index.html")) } diff --git a/genny/build/_fixtures/coke/actions/home_test.go b/genny/build/_fixtures/coke/actions/home_test.go index 2c7aef4c5..04d750a04 100644 --- a/genny/build/_fixtures/coke/actions/home_test.go +++ b/genny/build/_fixtures/coke/actions/home_test.go @@ -1,7 +1,9 @@ package actions +import "net/http" + func (as *ActionSuite) Test_HomeHandler() { res := as.HTML("/").Get() - as.Equal(200, res.Code) + as.Equal(http.StatusOK, res.Code) as.Contains(res.Body.String(), "Welcome to Buffalo") } diff --git a/genny/build/build-packr.go b/genny/build/build-packr.go deleted file mode 100644 index 9a999f396..000000000 --- a/genny/build/build-packr.go +++ /dev/null @@ -1,8 +0,0 @@ -// +build !skippackr -// Code generated by github.com/gobuffalo/packr/v2. DO NOT EDIT. - -// You can use the "packr clean" command to clean up this, -// and any other packr generated files. -package build - -import _ "github.com/gobuffalo/buffalo/packrd" diff --git a/genny/newapp/api/api_test.go b/genny/newapp/api/api_test.go index 6699ce9a9..d47c57f51 100644 --- a/genny/newapp/api/api_test.go +++ b/genny/newapp/api/api_test.go @@ -60,7 +60,7 @@ func Test_New(t *testing.T) { f, err = res.Find("actions/home.go") r.NoError(err) - r.Contains(f.String(), `return c.Render(200, r.JSON(map[string]string{"message": "Welcome to Buffalo!"}))`) + r.Contains(f.String(), `return c.Render(http.StatusOK, r.JSON(map[string]string{"message": "Welcome to Buffalo!"}))`) unexpected := []string{ "Dockerfile", diff --git a/genny/newapp/api/templates/actions/home.go.tmpl b/genny/newapp/api/templates/actions/home.go.tmpl index 543ed4c6b..8ef5cd430 100644 --- a/genny/newapp/api/templates/actions/home.go.tmpl +++ b/genny/newapp/api/templates/actions/home.go.tmpl @@ -1,9 +1,13 @@ package actions -import "github.com/gobuffalo/buffalo" +import ( + "net/http" + + "github.com/gobuffalo/buffalo" +) // HomeHandler is a default handler to serve up // a home page. func HomeHandler(c buffalo.Context) error { - return c.Render(200, r.JSON(map[string]string{"message": "Welcome to Buffalo!"})) + return c.Render(http.StatusOK, r.JSON(map[string]string{"message": "Welcome to Buffalo!"})) } diff --git a/genny/newapp/api/templates/actions/home_test.go.tmpl b/genny/newapp/api/templates/actions/home_test.go.tmpl index a40c27d6d..d5cf583de 100644 --- a/genny/newapp/api/templates/actions/home_test.go.tmpl +++ b/genny/newapp/api/templates/actions/home_test.go.tmpl @@ -1,8 +1,10 @@ package actions +import "net/http" + func (as *ActionSuite) Test_HomeHandler() { res := as.JSON("/").Get() - as.Equal(200, res.Code) + as.Equal(http.StatusOK, res.Code) as.Contains(res.Body.String(), "Welcome to Buffalo") } diff --git a/genny/newapp/core/templates/actions/home.go.tmpl b/genny/newapp/core/templates/actions/home.go.tmpl index 37437474f..efc4eee95 100644 --- a/genny/newapp/core/templates/actions/home.go.tmpl +++ b/genny/newapp/core/templates/actions/home.go.tmpl @@ -1,9 +1,13 @@ package actions -import "github.com/gobuffalo/buffalo" +import ( + "net/http" + + "github.com/gobuffalo/buffalo" +) // HomeHandler is a default handler to serve up // a home page. func HomeHandler(c buffalo.Context) error { - return c.Render(200, r.String("Hello from Buffalo")) + return c.Render(http.StatusOK, r.String("Hello from Buffalo")) } diff --git a/genny/newapp/core/templates/actions/home_test.go.tmpl b/genny/newapp/core/templates/actions/home_test.go.tmpl index cf5ba7d6e..08065ebdb 100644 --- a/genny/newapp/core/templates/actions/home_test.go.tmpl +++ b/genny/newapp/core/templates/actions/home_test.go.tmpl @@ -1,8 +1,10 @@ package actions +import "net/http" + func (as *ActionSuite) Test_HomeHandler() { res := as.HTML("/").Get() - as.Equal(200, res.Code) + as.Equal(http.StatusOK, res.Code) as.Contains(res.Body.String(), "Welcome to Buffalo") } diff --git a/genny/newapp/web/templates/actions/home.go.tmpl b/genny/newapp/web/templates/actions/home.go.tmpl index 1ae4ec3bd..151df6db8 100644 --- a/genny/newapp/web/templates/actions/home.go.tmpl +++ b/genny/newapp/web/templates/actions/home.go.tmpl @@ -1,9 +1,13 @@ package actions -import "github.com/gobuffalo/buffalo" +import ( + "net/http" + + "github.com/gobuffalo/buffalo" +) // HomeHandler is a default handler to serve up // a home page. func HomeHandler(c buffalo.Context) error { - return c.Render(200, r.HTML("index.html")) + return c.Render(http.StatusOK, r.HTML("index.html")) } diff --git a/genny/newapp/web/templates/actions/home_test.go.tmpl b/genny/newapp/web/templates/actions/home_test.go.tmpl index cf5ba7d6e..08065ebdb 100644 --- a/genny/newapp/web/templates/actions/home_test.go.tmpl +++ b/genny/newapp/web/templates/actions/home_test.go.tmpl @@ -1,8 +1,10 @@ package actions +import "net/http" + func (as *ActionSuite) Test_HomeHandler() { res := as.HTML("/").Get() - as.Equal(200, res.Code) + as.Equal(http.StatusOK, res.Code) as.Contains(res.Body.String(), "Welcome to Buffalo") } diff --git a/genny/resource/_fixtures/default/actions/widgets.go.tmpl b/genny/resource/_fixtures/default/actions/widgets.go.tmpl index 51cb9d6d4..d8fb7ecfd 100644 --- a/genny/resource/_fixtures/default/actions/widgets.go.tmpl +++ b/genny/resource/_fixtures/default/actions/widgets.go.tmpl @@ -3,6 +3,7 @@ package actions import ( "fmt" + "net/http" "github.com/gobuffalo/buffalo" "github.com/gobuffalo/pop" "github.com/markbates/coke/models" @@ -48,7 +49,7 @@ func (v WidgetsResource) List(c buffalo.Context) error { // Add the paginator to the context so it can be used in the template. c.Set("pagination", q.Paginator) - return c.Render(200, r.Auto(c, widgets)) + return c.Render(http.StatusOK, r.Auto(c, widgets)) } // Show gets the data for one Widget. This function is mapped to @@ -65,16 +66,16 @@ func (v WidgetsResource) Show(c buffalo.Context) error { // To find the Widget the parameter widget_id is used. if err := tx.Find(widget, c.Param("widget_id")); err != nil { - return c.Error(404, err) + return c.Error(http.StatusNotFound, err) } - return c.Render(200, r.Auto(c, widget)) + return c.Render(http.StatusOK, r.Auto(c, widget)) } // New renders the form for creating a new Widget. // This function is mapped to the path GET /widgets/new func (v WidgetsResource) New(c buffalo.Context) error { - return c.Render(200, r.Auto(c, &models.Widget{})) + return c.Render(http.StatusOK, r.Auto(c, &models.Widget{})) } // Create adds a Widget to the DB. This function is mapped to the @@ -106,13 +107,13 @@ func (v WidgetsResource) Create(c buffalo.Context) error { // Render again the new.html template that the user can // correct the input. - return c.Render(422, r.Auto(c, widget)) + return c.Render(http.StatusUnprocessableEntity, r.Auto(c, widget)) } // If there are no errors set a success message c.Flash().Add("success", T.Translate(c, "widget.created.success")) // and redirect to the widgets index page - return c.Render(201, r.Auto(c, widget)) + return c.Render(http.StatusCreated, r.Auto(c, widget)) } // Edit renders a edit form for a Widget. This function is @@ -128,10 +129,10 @@ func (v WidgetsResource) Edit(c buffalo.Context) error { widget := &models.Widget{} if err := tx.Find(widget, c.Param("widget_id")); err != nil { - return c.Error(404, err) + return c.Error(http.StatusNotFound, err) } - return c.Render(200, r.Auto(c, widget)) + return c.Render(http.StatusOK, r.Auto(c, widget)) } // Update changes a Widget in the DB. This function is mapped to @@ -147,7 +148,7 @@ func (v WidgetsResource) Update(c buffalo.Context) error { widget := &models.Widget{} if err := tx.Find(widget, c.Param("widget_id")); err != nil { - return c.Error(404, err) + return c.Error(http.StatusNotFound, err) } // Bind Widget to the html form elements @@ -166,13 +167,13 @@ func (v WidgetsResource) Update(c buffalo.Context) error { // Render again the edit.html template that the user can // correct the input. - return c.Render(422, r.Auto(c, widget)) + return c.Render(http.StatusUnprocessableEntity, r.Auto(c, widget)) } // If there are no errors set a success message c.Flash().Add("success", T.Translate(c, "widget.updated.success")) // and redirect to the widgets index page - return c.Render(200, r.Auto(c, widget)) + return c.Render(http.StatusOK, r.Auto(c, widget)) } // Destroy deletes a Widget from the DB. This function is mapped @@ -189,7 +190,7 @@ func (v WidgetsResource) Destroy(c buffalo.Context) error { // To find the Widget the parameter widget_id is used. if err := tx.Find(widget, c.Param("widget_id")); err != nil { - return c.Error(404, err) + return c.Error(http.StatusNotFound, err) } if err := tx.Destroy(widget); err != nil { @@ -199,5 +200,5 @@ func (v WidgetsResource) Destroy(c buffalo.Context) error { // If there are no errors set a flash message c.Flash().Add("success", T.Translate(c, "widget.destroyed.success")) // Redirect to the widgets index page - return c.Render(200, r.Auto(c, widget)) + return c.Render(http.StatusOK, r.Auto(c, widget)) } diff --git a/genny/resource/_fixtures/nested/actions/admin_widgets.go.tmpl b/genny/resource/_fixtures/nested/actions/admin_widgets.go.tmpl index ee0dc98a0..75ed139a9 100644 --- a/genny/resource/_fixtures/nested/actions/admin_widgets.go.tmpl +++ b/genny/resource/_fixtures/nested/actions/admin_widgets.go.tmpl @@ -3,6 +3,7 @@ package actions import ( "fmt" + "net/http" "github.com/gobuffalo/buffalo" "github.com/gobuffalo/pop" "github.com/markbates/coke/models" @@ -50,7 +51,7 @@ func (v AdminWidgetsResource) List(c buffalo.Context) error { // hint for Auto renderer to search proper template location c.Set("template_prefix", "admin/widgets") - return c.Render(200, r.Auto(c, widgets)) + return c.Render(http.StatusOK, r.Auto(c, widgets)) } // Show gets the data for one Widget. This function is mapped to @@ -67,12 +68,12 @@ func (v AdminWidgetsResource) Show(c buffalo.Context) error { // To find the Widget the parameter admin_widget_id is used. if err := tx.Find(widget, c.Param("admin_widget_id")); err != nil { - return c.Error(404, err) + return c.Error(http.StatusNotFound, err) } // hint for Auto renderer to search proper template location c.Set("template_prefix", "admin/widgets") - return c.Render(200, r.Auto(c, widget)) + return c.Render(http.StatusOK, r.Auto(c, widget)) } // New renders the form for creating a new Widget. @@ -80,7 +81,7 @@ func (v AdminWidgetsResource) Show(c buffalo.Context) error { func (v AdminWidgetsResource) New(c buffalo.Context) error { // hint for Auto renderer to search proper template location c.Set("template_prefix", "admin/widgets") - return c.Render(200, r.Auto(c, &models.Widget{})) + return c.Render(http.StatusOK, r.Auto(c, &models.Widget{})) } // Create adds a Widget to the DB. This function is mapped to the @@ -112,13 +113,13 @@ func (v AdminWidgetsResource) Create(c buffalo.Context) error { // Render again the new.html template that the user can // correct the input. - return c.Render(422, r.Auto(c, widget)) + return c.Render(http.StatusUnprocessableEntity, r.Auto(c, widget)) } // If there are no errors set a success message c.Flash().Add("success", T.Translate(c, "widget.created.success")) // and redirect to the admin/widgets index page - return c.Render(201, r.Auto(c, widget)) + return c.Render(http.StatusCreated, r.Auto(c, widget)) } // Edit renders a edit form for a Widget. This function is @@ -134,12 +135,12 @@ func (v AdminWidgetsResource) Edit(c buffalo.Context) error { widget := &models.Widget{} if err := tx.Find(widget, c.Param("admin_widget_id")); err != nil { - return c.Error(404, err) + return c.Error(http.StatusNotFound, err) } // hint for Auto renderer to search proper template location c.Set("template_prefix", "admin/widgets") - return c.Render(200, r.Auto(c, widget)) + return c.Render(http.StatusOK, r.Auto(c, widget)) } // Update changes a Widget in the DB. This function is mapped to @@ -155,7 +156,7 @@ func (v AdminWidgetsResource) Update(c buffalo.Context) error { widget := &models.Widget{} if err := tx.Find(widget, c.Param("admin_widget_id")); err != nil { - return c.Error(404, err) + return c.Error(http.StatusNotFound, err) } // Bind Widget to the html form elements @@ -174,13 +175,13 @@ func (v AdminWidgetsResource) Update(c buffalo.Context) error { // Render again the edit.html template that the user can // correct the input. - return c.Render(422, r.Auto(c, widget)) + return c.Render(http.StatusUnprocessableEntity, r.Auto(c, widget)) } // If there are no errors set a success message c.Flash().Add("success", T.Translate(c, "widget.updated.success")) // and redirect to the admin/widgets index page - return c.Render(200, r.Auto(c, widget)) + return c.Render(http.StatusOK, r.Auto(c, widget)) } // Destroy deletes a Widget from the DB. This function is mapped @@ -197,7 +198,7 @@ func (v AdminWidgetsResource) Destroy(c buffalo.Context) error { // To find the Widget the parameter admin_widget_id is used. if err := tx.Find(widget, c.Param("admin_widget_id")); err != nil { - return c.Error(404, err) + return c.Error(http.StatusNotFound, err) } if err := tx.Destroy(widget); err != nil { @@ -207,5 +208,5 @@ func (v AdminWidgetsResource) Destroy(c buffalo.Context) error { // If there are no errors set a flash message c.Flash().Add("success", T.Translate(c, "widget.destroyed.success")) // Redirect to the admin/widgets index page - return c.Render(200, r.Auto(c, widget)) + return c.Render(http.StatusOK, r.Auto(c, widget)) } diff --git a/genny/resource/templates/standard/actions/resource-name.go.tmpl b/genny/resource/templates/standard/actions/resource-name.go.tmpl index 4258a4f72..aa53e3db7 100644 --- a/genny/resource/templates/standard/actions/resource-name.go.tmpl +++ b/genny/resource/templates/standard/actions/resource-name.go.tmpl @@ -1,6 +1,10 @@ package actions -import "github.com/gobuffalo/buffalo" +import ( + "net/http" + + "github.com/gobuffalo/buffalo" +) type {{.opts.Name.Resource}}Resource struct{ buffalo.Resource @@ -9,7 +13,7 @@ type {{.opts.Name.Resource}}Resource struct{ {{ range $a := .actions }} // {{$a.String}} default implementation. func (v {{$.opts.Name.Resource}}Resource) {{$a.String}}(c buffalo.Context) error { - return c.Render(200, r.String("{{$.opts.Model.Proper}}#{{$a.String}}")) + return c.Render(http.StatusOK, r.String("{{$.opts.Model.Proper}}#{{$a.String}}")) } {{end}} diff --git a/genny/resource/templates/use_model/actions/resource-name.go.tmpl b/genny/resource/templates/use_model/actions/resource-name.go.tmpl index 6ed8cf597..939a1f93f 100644 --- a/genny/resource/templates/use_model/actions/resource-name.go.tmpl +++ b/genny/resource/templates/use_model/actions/resource-name.go.tmpl @@ -3,6 +3,7 @@ package actions import ( "fmt" + "net/http" "github.com/gobuffalo/buffalo" "github.com/gobuffalo/pop" "{{.opts.App.ModelsPkg}}" @@ -52,7 +53,7 @@ func (v {{.opts.Name.Resource}}Resource) List(c buffalo.Context) error { // hint for Auto renderer to search proper template location c.Set("template_prefix", "{{.opts.Name.URL}}") {{ end -}} - return c.Render(200, r.Auto(c, {{.opts.Model.VarCasePlural}})) + return c.Render(http.StatusOK, r.Auto(c, {{.opts.Model.VarCasePlural}})) } // Show gets the data for one {{.opts.Model.Proper}}. This function is mapped to @@ -69,14 +70,14 @@ func (v {{.opts.Name.Resource}}Resource) Show(c buffalo.Context) error { // To find the {{.opts.Model.Proper}} the parameter {{.opts.Name.ParamID}} is used. if err := tx.Find({{.opts.Model.VarCaseSingle}}, c.Param("{{.opts.Name.ParamID}}")); err != nil { - return c.Error(404, err) + return c.Error(http.StatusNotFound, err) } {{ if ne .opts.Model.Tableize.String .opts.Name.URL.String -}} // hint for Auto renderer to search proper template location c.Set("template_prefix", "{{.opts.Name.URL}}") {{ end -}} - return c.Render(200, r.Auto(c, {{.opts.Model.VarCaseSingle}})) + return c.Render(http.StatusOK, r.Auto(c, {{.opts.Model.VarCaseSingle}})) } {{ if .opts.App.AsWeb -}} @@ -87,7 +88,7 @@ func (v {{.opts.Name.Resource}}Resource) New(c buffalo.Context) error { // hint for Auto renderer to search proper template location c.Set("template_prefix", "{{.opts.Name.URL}}") {{ end -}} - return c.Render(200, r.Auto(c, &models.{{.opts.Model.Proper}}{})) + return c.Render(http.StatusOK, r.Auto(c, &models.{{.opts.Model.Proper}}{})) } {{ end -}} @@ -120,7 +121,7 @@ func (v {{.opts.Name.Resource}}Resource) Create(c buffalo.Context) error { // Render again the new.html template that the user can // correct the input. - return c.Render(422, r.Auto(c, {{.opts.Model.VarCaseSingle}})) + return c.Render(http.StatusUnprocessableEntity, r.Auto(c, {{.opts.Model.VarCaseSingle}})) } {{ if .opts.App.AsWeb -}} @@ -129,7 +130,7 @@ func (v {{.opts.Name.Resource}}Resource) Create(c buffalo.Context) error { {{ end -}} // and redirect to the {{.opts.Name.URL}} index page - return c.Render(201, r.Auto(c, {{.opts.Model.VarCaseSingle}})) + return c.Render(http.StatusCreated, r.Auto(c, {{.opts.Model.VarCaseSingle}})) } {{ if .opts.App.AsWeb -}} @@ -146,14 +147,14 @@ func (v {{.opts.Name.Resource}}Resource) Edit(c buffalo.Context) error { {{.opts.Model.VarCaseSingle}} := &models.{{.opts.Model.Proper}}{} if err := tx.Find({{.opts.Model.VarCaseSingle}}, c.Param("{{.opts.Name.ParamID}}")); err != nil { - return c.Error(404, err) + return c.Error(http.StatusNotFound, err) } {{ if ne .opts.Model.Tableize.String .opts.Name.URL.String -}} // hint for Auto renderer to search proper template location c.Set("template_prefix", "{{.opts.Name.URL}}") {{ end -}} - return c.Render(200, r.Auto(c, {{.opts.Model.VarCaseSingle}})) + return c.Render(http.StatusOK, r.Auto(c, {{.opts.Model.VarCaseSingle}})) } {{ end -}} @@ -170,7 +171,7 @@ func (v {{.opts.Name.Resource}}Resource) Update(c buffalo.Context) error { {{.opts.Model.VarCaseSingle}} := &models.{{.opts.Model.Proper}}{} if err := tx.Find({{.opts.Model.VarCaseSingle}}, c.Param("{{.opts.Name.ParamID}}")); err != nil { - return c.Error(404, err) + return c.Error(http.StatusNotFound, err) } // Bind {{.opts.Model.Proper}} to the html form elements @@ -189,7 +190,7 @@ func (v {{.opts.Name.Resource}}Resource) Update(c buffalo.Context) error { // Render again the edit.html template that the user can // correct the input. - return c.Render(422, r.Auto(c, {{.opts.Model.VarCaseSingle}})) + return c.Render(http.StatusUnprocessableEntity, r.Auto(c, {{.opts.Model.VarCaseSingle}})) } {{ if .opts.App.AsWeb -}} @@ -198,7 +199,7 @@ func (v {{.opts.Name.Resource}}Resource) Update(c buffalo.Context) error { {{ end -}} // and redirect to the {{.opts.Name.URL}} index page - return c.Render(200, r.Auto(c, {{.opts.Model.VarCaseSingle}})) + return c.Render(http.StatusOK, r.Auto(c, {{.opts.Model.VarCaseSingle}})) } // Destroy deletes a {{.opts.Model.Proper}} from the DB. This function is mapped @@ -215,7 +216,7 @@ func (v {{.opts.Name.Resource}}Resource) Destroy(c buffalo.Context) error { // To find the {{.opts.Model.Proper}} the parameter {{.opts.Name.ParamID}} is used. if err := tx.Find({{.opts.Model.VarCaseSingle}}, c.Param("{{.opts.Name.ParamID}}")); err != nil { - return c.Error(404, err) + return c.Error(http.StatusNotFound, err) } if err := tx.Destroy({{.opts.Model.VarCaseSingle}}); err != nil { @@ -228,5 +229,5 @@ func (v {{.opts.Name.Resource}}Resource) Destroy(c buffalo.Context) error { {{ end -}} // Redirect to the {{.opts.Name.URL}} index page - return c.Render(200, r.Auto(c, {{.opts.Model.VarCaseSingle}})) + return c.Render(http.StatusOK, r.Auto(c, {{.opts.Model.VarCaseSingle}})) } diff --git a/go.mod b/go.mod index fad086e2a..880cf74aa 100644 --- a/go.mod +++ b/go.mod @@ -42,7 +42,7 @@ require ( github.com/spf13/viper v1.4.0 github.com/stretchr/testify v1.4.0 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e - golang.org/x/tools v0.0.0-20191016194801-f0068bd333b2 + golang.org/x/tools v0.0.0-20191017101817-846f856e7d71 gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc gopkg.in/yaml.v2 v2.2.4 ) diff --git a/go.sum b/go.sum index 2ec64ef88..99df24b9f 100644 --- a/go.sum +++ b/go.sum @@ -338,12 +338,16 @@ github.com/gobuffalo/mw-basicauth v1.0.7/go.mod h1:xJ9/OSiOWl+kZkjaSun62srODr3Cx github.com/gobuffalo/mw-contenttype v0.0.0-20180802152300-74f5a47f4d56/go.mod h1:7EvcmzBbeCvFtQm5GqF9ys6QnCxz2UM1x0moiWLq1No= github.com/gobuffalo/mw-contenttype v0.0.0-20190129203934-2554e742333b/go.mod h1:7x87+mDrr9Peh7AqhOtESyJLanMd2zQNz2Hts+vtBoE= github.com/gobuffalo/mw-csrf v0.0.0-20180802151833-446ff26e108b/go.mod h1:sbGtb8DmDZuDUQoxjr8hG1ZbLtZboD9xsn6p77ppcHo= +github.com/gobuffalo/mw-csrf v0.0.0-20190129204204-25460a055517 h1:pOOXwl1xPLLP8oZw3e3t2wwrc/KSzmlRBcaQwGpG9oo= github.com/gobuffalo/mw-csrf v0.0.0-20190129204204-25460a055517/go.mod h1:o5u+nnN0Oa7LBeDYH9QP36qeMPnXV9qbVnbZ4D+Kb0Q= +github.com/gobuffalo/mw-forcessl v0.0.0-20180802152810-73921ae7a130 h1:v94+IGhlBro0Lz1gOR3lrdAVSZ0mJF2NxsdppKd7FnI= github.com/gobuffalo/mw-forcessl v0.0.0-20180802152810-73921ae7a130/go.mod h1:JvNHRj7bYNAMUr/5XMkZaDcw3jZhUZpsmzhd//FFWmQ= github.com/gobuffalo/mw-i18n v0.0.0-20180802152014-e3060b7e13d6/go.mod h1:91AQfukc52A6hdfIfkxzyr+kpVYDodgAeT5cjX1UIj4= github.com/gobuffalo/mw-i18n v0.0.0-20181027200759-09e0c99be4d3/go.mod h1:1PpGPgqP8VsfUppgBA9FrTOXjI6X9gjqhh/8dmg48lg= +github.com/gobuffalo/mw-i18n v0.0.0-20190129204410-552713a3ebb4 h1:c1fFPCxA7SozZPqMhpfZoOVa3wUpCl11gyCEZ4nYqUE= github.com/gobuffalo/mw-i18n v0.0.0-20190129204410-552713a3ebb4/go.mod h1:rBg2eHxsyxVjtYra6fGy4GSF5C8NysOvz+Znnzk42EM= github.com/gobuffalo/mw-paramlogger v0.0.0-20181005191442-d6ee392ec72e/go.mod h1:6OJr6VwSzgJMqWMj7TYmRUqzNe2LXu/W1rRW4MAz/ME= +github.com/gobuffalo/mw-paramlogger v0.0.0-20190129202837-395da1998525 h1:2QoD5giw2UrYJu65UKDEo9HFcz9yun387twL2zzn+/Q= github.com/gobuffalo/mw-paramlogger v0.0.0-20190129202837-395da1998525/go.mod h1:gEo/ABCsKqvpp/KCxN2AIzDEe0OJUXbJ9293FYrXw+w= github.com/gobuffalo/mw-tokenauth v0.0.0-20181001105134-8545f626c189/go.mod h1:UqBF00IfKvd39ni5+yI5MLMjAf4gX7cDKN/26zDOD6c= github.com/gobuffalo/mw-tokenauth v0.0.0-20190129201951-95847f29c5c8/go.mod h1:n2oa93LHGD94hGI+PoJO+6cf60DNrXrAIv9L/Ke3GXc= @@ -483,6 +487,8 @@ github.com/gobuffalo/shoulders v1.0.4/go.mod h1:LqMcHhKRuBPMAYElqOe3POHiZ1x7Ry0B github.com/gobuffalo/shoulders v1.1.0/go.mod h1:kcIJs3p7VqoBJ36Mzs+x767NyzTx0pxBvzZdWTWZYF8= github.com/gobuffalo/shoulders v1.2.0 h1:XcPmWbzN7944VXS/I//R7o2eupUHEp3mLFWbUlk1Sco= github.com/gobuffalo/shoulders v1.2.0/go.mod h1:Ia3oFybQWg4711cb2S5JkFSt9V4rMiLGusWZ6mRAdNM= +github.com/gobuffalo/suite v2.8.2+incompatible h1:O4ojh6PYnov8OVNBL2fxkhr4lv5d+aYtZNSPNGbi/CM= +github.com/gobuffalo/suite v2.8.2+incompatible/go.mod h1:VCaZ8EgrnJKbt0QGkrEKIMsJlWFxMXWYSHXqjH2UJJE= github.com/gobuffalo/syncx v0.0.0-20181120191700-98333ab04150/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= github.com/gobuffalo/syncx v0.0.0-20181120194010-558ac7de985f/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= @@ -702,6 +708,7 @@ github.com/monoculum/formam v0.0.0-20190830100315-7ff9597b1407/go.mod h1:JKa2av1 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= +github.com/nicksnyder/go-i18n v1.10.0 h1:5AzlPKvXBH4qBzmZ09Ua9Gipyruv6uApMcrNZdo96+Q= github.com/nicksnyder/go-i18n v1.10.0/go.mod h1:HrK7VCrbOvQoUAQ7Vpy7i87N7JZZZ7R2xBGjv0j365Q= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -831,6 +838,7 @@ github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljT github.com/unrolled/secure v0.0.0-20180918153822-f340ee86eb8b/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= github.com/unrolled/secure v0.0.0-20181005190816-ff9db2ff917f/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= github.com/unrolled/secure v0.0.0-20181022170031-4b6b7cf51606/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= +github.com/unrolled/secure v0.0.0-20190103195806-76e6d4e9b90c h1:ZY4dowVsuIAQtXXwKJ9ezfonDQ2YT7pcXRpPF2iAy3Y= github.com/unrolled/secure v0.0.0-20190103195806-76e6d4e9b90c/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= diff --git a/handler.go b/handler.go index cb6fb13f6..aff79dafd 100644 --- a/handler.go +++ b/handler.go @@ -8,15 +8,15 @@ package buffalo // mean returning an error. /* func (c Context) error { - return c.Render(200, render.String("Hello World!")) + return c.Render(http.StatusOK, render.String("Hello World!")) } func (c Context) error { - return c.Redirect(301, "http://github.com/gobuffalo/buffalo") + return c.Redirect(http.StatusMovedPermanently, "http://github.com/gobuffalo/buffalo") } func (c Context) error { - return c.Error(422, fmt.Errorf("oops!!")) + return c.Error(http.StatusUnprocessableEntity, fmt.Errorf("oops!!")) } */ type Handler func(Context) error diff --git a/mail/README.md b/mail/README.md index 0810d5ebd..e60ffbd83 100644 --- a/mail/README.md +++ b/mail/README.md @@ -16,6 +16,7 @@ package x import ( "log" + "net/http" "github.com/gobuffalo/buffalo/render" "github.com/gobuffalo/envy" @@ -93,7 +94,7 @@ func ContactFormHandler(c buffalo.Context) error { //Calling to send the message SendContactMessage(contact) - return c.Redirect(302, "contact/thanks") + return c.Redirect(http.StatusFound, "contact/thanks") } ... ``` diff --git a/mail/mail_test.go b/mail/mail_test.go index fffd22cf0..bab782312 100644 --- a/mail/mail_test.go +++ b/mail/mail_test.go @@ -2,6 +2,7 @@ package mail import ( "html/template" + "net/http" "testing" "github.com/gobuffalo/buffalo" @@ -26,7 +27,7 @@ func Test_New(t *testing.T) { app.GET("/", func(c buffalo.Context) error { c.Set("foo", "bar") m = New(c) - return c.Render(200, render.String("")) + return c.Render(http.StatusOK, render.String("")) }) w := httptest.New(app) w.HTML("/").Get() diff --git a/method_override_test.go b/method_override_test.go index 36d7be01e..95a21577a 100644 --- a/method_override_test.go +++ b/method_override_test.go @@ -1,6 +1,7 @@ package buffalo import ( + "net/http" "net/url" "testing" @@ -14,11 +15,11 @@ func Test_MethodOverride(t *testing.T) { a := New(Options{}) a.PUT("/", func(c Context) error { - return c.Render(200, render.String("you put me!")) + return c.Render(http.StatusOK, render.String("you put me!")) }) w := httptest.New(a) res := w.HTML("/").Post(url.Values{"_method": []string{"PUT"}}) - r.Equal(200, res.Code) + r.Equal(http.StatusOK, res.Code) r.Equal("you put me!", res.Body.String()) } diff --git a/middleware_test.go b/middleware_test.go index 5decc706b..9bd7aacf7 100644 --- a/middleware_test.go +++ b/middleware_test.go @@ -1,6 +1,7 @@ package buffalo import ( + "net/http" "testing" "github.com/gobuffalo/buffalo/render" @@ -126,11 +127,11 @@ type carsResource struct { } func (ur *carsResource) Show(c Context) error { - return c.Render(200, render.String("show")) + return c.Render(http.StatusOK, render.String("show")) } func (ur *carsResource) List(c Context) error { - return c.Render(200, render.String("list")) + return c.Render(http.StatusOK, render.String("list")) } // Test_Middleware_Skip tests that middleware gets skipped diff --git a/not_found_test.go b/not_found_test.go index 28d985464..8caa8b6f3 100644 --- a/not_found_test.go +++ b/not_found_test.go @@ -2,6 +2,7 @@ package buffalo import ( "encoding/json" + "net/http" "testing" "github.com/gobuffalo/httptest" @@ -21,7 +22,7 @@ func Test_App_Dev_NotFound(t *testing.T) { body := res.Body.String() r.Contains(body, "404 - ERROR!") r.Contains(body, "/foo") - r.Equal(404, res.Code) + r.Equal(http.StatusNotFound, res.Code) } func Test_App_Dev_NotFound_JSON(t *testing.T) { @@ -33,20 +34,20 @@ func Test_App_Dev_NotFound_JSON(t *testing.T) { w := httptest.New(a) res := w.JSON("/bad").Get() - r.Equal(404, res.Code) + r.Equal(http.StatusNotFound, res.Code) jb := map[string]interface{}{} err := json.NewDecoder(res.Body).Decode(&jb) r.NoError(err) - r.Equal(float64(404), jb["code"]) + r.Equal(float64(http.StatusNotFound), jb["code"]) } func Test_App_Override_NotFound(t *testing.T) { r := require.New(t) a := New(Options{}) - a.ErrorHandlers[404] = func(status int, err error, c Context) error { - c.Response().WriteHeader(404) + a.ErrorHandlers[http.StatusNotFound] = func(status int, err error, c Context) error { + c.Response().WriteHeader(http.StatusNotFound) c.Response().Write([]byte("oops!!!")) return nil } @@ -54,7 +55,7 @@ func Test_App_Override_NotFound(t *testing.T) { w := httptest.New(a) res := w.HTML("/bad").Get() - r.Equal(404, res.Code) + r.Equal(http.StatusNotFound, res.Code) body := res.Body.String() r.Equal(body, "oops!!!") diff --git a/packrd/packed-packr.go b/packrd/packed-packr.go index 8d1eefd75..9ff4655bc 100644 --- a/packrd/packed-packr.go +++ b/packrd/packed-packr.go @@ -18,15 +18,15 @@ var _ = func() error { "05100d4d041557fb02475d22742548e4": "1f8b08000000000000ffa4935b4cd3671887ff26de6d59d8922d9b2eb33aa6558aadd406e3d45a40c64108300373ba1a8452a0500e838156401ca70844c7383928c7164a2dd0ca414e15778893a51048c620dbc230195bb22cc8b8a63c0b2064f77b9237bf2f5fbee77baf7e82b04bd82578786ca44848dc2d086f0882201604c143100491b075bfc96e4178eda5add98617acadb937f3f9f3659a4d7da87515f845e57136328f8bdadb7cf9958da53ffedc79bbbebebeade2766f9dedfde3f886e4f2e6891cde3e654074c680e8d475f61ccfe6755926126526f75a1cb0beb6e96fccb65b5963c1439c88e7f9124ec616732cbe0ec9d53abce38d48a38bf009c9c033a89457c449a4196a5ffcb1b5bfbbcfc9ab122d074f5fc753994de0d57c62efd850dfed475d35486c652767626f7128bc0cb1d2c0cbe238caab4c9beef2df7fa1d21bf1d2b4228b337230b21275452fe9ed8f894a2f223aa7820cf3d7846519d92bcfe4685809b24bb5482e55323bf70b2d3d4ec4da0e14993dc8756df8e5b4139e5e8ad7c9300e78fb73c05b85541941f8a795f86aeea248ef24a0681c454e3f85f71cc4df6cc24b67c3476f45a16be1d4875af61c3cc33b9200ce4705e11f1acc5b87fcd92f0d40f5710e87833fc7d3ff069ee70af8405d4a68463d47d3ecc8d36c48350dec93a808bb10c4a0ed0263c3597cebd4d1d61081af4ac561df18fc937bf152d72055d713a83111906e449a6a439e66c53bae91d331494c4d14b3f49b93d68e62ec0faa595eeaa3c79ec989c81b84660fe095d080546f2144dfcdfb294dc852adc8f55d48932d4414753038d2c4946b9edfe7ef303f6361c6354daba39ae8422731d726507e3688a2e009970d03f8c455732cb50b9f940e8e6adbf0cbed22bfc5ccf0680521091a92f232187df405ba9a2e0c75e32494b8f8e4d614970b2729ab1b22bfda8a58d3caf1e4667c7466e4574a286fba4f424115fb4e46f3eed98b14d69ac82a6f446d3061ec71d1f77896fc2a3b13ae196e37f6225237234bb17248634671a58ce8f85444de4a8e28cef19e4cc511df603e4acce2669505ebc8240ee7534cf7fb8175565756d116d713985c4a446e2389e5163a1f0c11a54e65efe1b3ec97faa1bf5648f7c8180ee7389d030fa96e32b3b2f2cf4e7fa6e77e64e1d90293ae27d807da714d7fc7af8b0b34771ae91f3633fbf337fc30fd90c1d12e0686fa585d5dddf4fedba1ed362e3e5be4d1b883a1e1562626cc3cfddec4d8580b63ce1ee6e67ec2ed76efb81b08ff937f030000ffff6ddbe2317e040000", "05e19295c88c44d295648bdae4acecc9": "1f8b08000000000000ff9491cd6aeb301085f77a8a41b959daba50e822d8eea281d24d13fab3f758562451d923a471fafa05a76d429b14ba12127ce77c9aa92260f076aca536239b249bca0f1672d2b574cc31af94b29eddd4959a0665a99b763b0ca4bece409d1a30b3492a90a532efad8437dfb3abe5d5f57fd9542a3642fc2c1215824b667752443de9929255d5b2068a9ccb6d98ac1fb7af1696cd59b7df919bccc8533e4861e05aded19ab404d5540acf2a241329b1c6d4cf3f3e5cff22f42da0c3de9a0bfca7123cce0cdc62ea8f6ef3dc16701615e279b3deac606db24e3eb2a75188c502eec7cc18021e1edab6ed303bf10f2c81350cc504c5fe4262dbb673c44b466b4ed98f551fb12747891f7030b06ca0289c0971a6df030000ffff6adc5c3b4d020000", "06011b1be9e2c4c5af5b87c37b111fb5": "1f8b08000000000000ffb4525fabd330147fcfa738373048e092828fd3de27ef54d0090e049f246dd31a97e68424ad1ba3df5d925654e6540ab72ffd93dff9fd3b75b23eca4e812444f70e7d044600a8c18ea67b885edb2ee4e74ec72f43256aec8b0eaba16da5c1a235aa8eb78f1dbabf1ccafae88bf15942bcd894a05b60e862108f76d41e6daf6c84bb1268a34665d0a577cae1029b879b9cca8ee7990fa684e384b483ad415b1d1987cb2a29dd82f21eb625247af16e08f1a022a3afde7f7edc7fa4f74013e715dfe681f2e779f2ae04ab4d564f97c14eec64948629ef3901987e714c001a8feea58cb292417dea0de3e96385a7e4209726f6ea1ba34be6addca674c98628289ffd567812af656054dbbc228d3688af012de58b8d70ff2354c2eeb46d0e79d97f1ac9034b0bffca32a701c8d4cbff93fc7e50b2519e851993984ac83ae22dcae6cd4f4de657e84d645a367d555e1e5dd95eb31089736ffea3b9dfe14fd59a43973bdb79ec5797f53d0000ffff2c57ff41f9030000", - "0694c6ea5c1d85f554afb9a0057580a1": "1f8b08000000000000ff8c8dc14ac5301045d7e62b86d2450b921697822b415c2888f803633ad14032916902e230ff2e58d1b77cbbcbe170ae2a08f21bc188a1a5ca707d03fe983b98b96501d5d13316f24fb807cce98bcc547ffd53081b45ecb9412a1f990a71c31fc5c5cee1fccc14e0b5c788b9fadbca8d3edb0c245205d45d08b52e0cc13f136f24d3d5ba5e82f8fb97c78769f8bbb84b99cc96fffc01fc7b2b799867674e95783373df010000ffff7763c1ba00010000", - "0b4e548d0d999245c21d128e3591ddec": "1f8b08000000000000ff4cccb14ac5401085e1da798a43aa046473f1156c526823bec0dccd2459ccee2c93590988ef2e428a5b1d38fc7c95e317af028e9eb41c4429573547b726dfda3d44cde3aaf7b62cbceb786d47348e9834cbc465dec5900e306659b8ed8eed3a5d71887d0b5afdef199b6641e555022dadc447a18fb8f0f0aac5e5f40162a6861f7a32f16605317c4899c5fa97dbed1916a6cff7b7be4b6596336c9ef76e18e897fe020000ffff49cb1402d2000000", + "0694c6ea5c1d85f554afb9a0057580a1": "1f8b08000000000000ff8c8d414a04410c45d7d629c2308b6e90f45e702588a0a2a81788d569a7a12a35a4532086dc5d70445dbafb3c1effb98392bc31ec29dbda042e2e014f738388344de0be47a1caf8485ba6b27e7084fbb7ff17c2cc0bf562b0d663e1ca62f4a5a4a54bfeffcd90e1b52f0b9586574d8cdf6d04566d0a9ece94adab40c62796997538981df1d9c8faf6707b0e8a372ff777c3ee2776bd168e987e43278007ab65378e29923bcb1c913e030000ffff1fc509720a010000", + "0b4e548d0d999245c21d128e3591ddec": "1f8b08000000000000ff4c8e414ac6301085d7ce2986ac5a90e4106e0a2a827a81f9d369136c326132911fc4bb4ba10b578ff7787c7c8de217ed8c142d4bed00b93451c309105d650bc9ac3938db9e2d8d9b8f52c22eb7b16d7448b8d2c10c10022e5278a1ba1eac983b12aebcd1380cd3359a6067fd661cedfc1326298c8d76f6b08d1aff13a68817de3f4935bedb8cac2a8a3ff0a06c432b46ffce75659d4e4fff6164a3bf3d3fa2fae5f3f56572b9ae7cf7c9cae1e6197ee12f0000ffff1754f1f8f0000000", "108d5933b56a75738dec1d893c62c321": "1f8b08000000000000ff2a4a2d2ccd2c4ad5504aad28c82f4ed5cdc94f4c492db2575144e5670596a616552a66158228254d6b2eb8bea4fcfc92e292a2c402fd94cce212fdac627db8885e52695e4a4eaa5e56314807978a8686a682ad9d42351757ada63517200000ffff259b08ba7a000000", "147321c9c890ee6fa6166e16c0197a99": "1f8b08000000000000ff7c92418bdb301085effa158359d8f660895c5d7ad8c56d0994ed9226e9d1c8f25811912d45239b1657ffbd384eda26949e06349a4f6fde9395bd1ea4c602b4634cbb8201e490adf86ac5bf678c613f2e479fbe541f5ef6ef2352646c9ac0b48027e0ce47e2e5f3f68747c8bca3a8035206794a8c308c46212df3d7dec9b269ca01fb065262acc6d605ac4805e363716efd9f9cd282a393855cc1a30a28234223a3ac25214cd332f9e43d7f911df28fc6624ad52cfcdd23e4bbdf4afed63123bb636302e41e1eb69ba7fdfa6bf5bc5b7f2eab72bd117ea8ad51421261a4d9a6ca74de855879190fc5cd9baf521da5c6d7a39ed7333d4569ed628176a0318236f130d45cb94e68570f6d2bad1377f56ac41fee37130f25faabd87fb1e62c45835ea8ae99ebf962831eb0a721e0b2af25bc633cbcd10eaca1085c70cee127e8801ef211c4887de382787b13d9252bb84885f397f8150000ffff5ca6846048020000", "1aab4f3df928dd93d41d28e4f6a15660": "1f8b08000000000000ff2a484cce4e4c4f55484c2ec9cccf2be602040000ffffe129fcc910000000", "1d008b8139b4fb2ec09d8c313f8e8f95": "1f8b08000000000000ff9456dd6ee3bc11bdf7534c75651b3685f6aa709105b2d96453c09b049177b74051248c34b289501c96a4acb881dfbd185272ec00d9fdbe8b2032393c73e687676865f92cd708b20c8a8c1f8d5463c905188f00b2b50a9bf64994d4e46b7a6aeb5a6acad16c77d987bbfd7f36a8c995e8bdfec0b2e9e683055b5be964a369bd46f7f18123a3f7145ae3486bac728f65eb301b8d005e5f41d520c8062fcead153f55d8dc9185fd9e0fbfbebeed7ca30ab5bf7b5eeff7bf8d6d6ec9e6fd5fd365c90f9a0ae6fb3d7b2dbdab3f0e8177f98cfaebdfcdc756bcfb31112e9acbb77fcb4693d128cfe1f2e607280fadc70a02c106b505dfa9506ec06308caac3d3c49de2503dd061d42d8209f94d66a554aae3d233ca1326b70ad11f0056bd9eac0ab59855bd4641b342113a3ad74d1e319702b88af18c6d9d7db87cb9b1fd9ecd476126da5b530eda973b2e3e20aa61ca3583969bc96815c8ce4dc5af698384aadc1511bd083341534aaaa3476d221b716f4887cca6fa8d5153c2154582b839580d54679460a1b04836e8b50a209e8806ad851ebde052f4679ce4bf7d472ba6647ce66b076d45a3f030ca51002984085a5960e2b58dddec1fc137cb9fd79c318c96f83d2786ebd1db520ab0ae431f940f028ad7d84a9ac03ba690fc699970c11ddcd206c6448dfd029ade1e676051bb9c5b461b03bc2e47811bc6c6251396cd72287ead053ebca81708cd583f4d0a1d643d0ff0c20b5a79e76841fd2ee10ca0d96cf5881323199e42a74fcb53b49440cfeb1e04c5f298dfe915948b8385f5d5ccfcf97cb8438034fa0c25030a93bb9e3aee3c356cb122bd0d287c1573c73427dc6dc554819b10eb76806b28c71284bcc2c1b0602835b74dc1ca5648110a3ba352577da7872d297f0cad7b28efd7a760646e9b8026961e8377183dd78f8beb591553203b834db055f8d59ffbb40ef15991bd9e002b28763c1e135c199daef1f7c32cbd2b1fd6414fff36d680335322826be0387957258c6988a62395013df3d8ea39216c5723c793bbda43538fc6f8b3e2475c580cec3b8563a7e70fbef26e204e74860c5dd7066197fbf01df390acc43aea5323ec045717f053204593e7b019b10ac5fe479d775823ae9ad20b7ce95a9f045d88dcd2f1c793f2f54c087fbc4eee18adc1addee61cc4893c1cd3d36b48dd7a5525e3e69ee7ce54ff9b29a72457a72bf14fc08fad349eb0165b939e4461990105887d21014832d94e287d42d8eb3f0924dc4786ac98a0b3206a3dd9f221a674552bbe465dcc49123be7c9e4c06ee3c44d20c89b80586d646e96b3d26863a5d83c509f6f1cea10178f3ebe56a9ce5d90caea9c16b692a7d28236fbfddd66425bdc7e03fd3cb84bdfba89a356f43eda88937d2b64f5a95901a91dc6e0410f93a0cad338c3ada47213fe6946eab265981a652ea1e75c6c3095a1b81c3610ec063ff1611abc7599469532584c1c93b318dc9a184cf5025b9784d065fe462bd19aa2f79142b5e6fc8212853936b22d5c5a17b0fc356287ef2e415953e8f88ea7fd134a9c869ea0f1af1ed40f08aad581f78e8a18b7fe492d0ac6671e52cbe05a2aec4c11ebf3269ed2245e079ac0a910fbf2633c8d0ccbf17d9e41f11e02fefc44a1481ec189d9bc4f21caab33ae2359ef4851a94e31729e681d0eff60a240d285352135f0b29a771f0d42cb9ca83a100d7abd55d2120e38c2ef21c5f646335f24b2683b34f69ddbfdb381aa16ffe2b420fd3a9a1309d029a78c18a6229620579969f0c725811541449335887e0b0a4a6c1788de29005ebe865f79b5a479b3fd0271fbe40f3d4216fcafcabeee8f33e3c888f0b95d04e474d512ceffb5a2cd2e4e1f7d81964d651d5c6ebd34f93a258de7124d7282b747e018db4fff6815f1bff49ff5eb37fcdafc875d25558cd59db295bf4e5c9f68cb2e75ef97f000000fffffc509619290c0000", "1d2a7dc90d5509ab525ab3147a1a4bf9": "1f8b08000000000000ff348e314fc330148477ff8ac3ca9030383b12030b124b8580bd7ab8afa9456c07bfe7012cff77948a6e77a7d3ddb791ffa285415e434e624c885b2e8ad100565934a4c59add2c412ff5d3f91c67d1c2ea2f65be16ce3f73e1ef1a0a5b3399d650282d8c81f0f008f73f8cdecdb9268f9104f74fd7f0bd06e5091f2c7a6c6d70795371078aecde58722d9e7bbfa9636b18c8bd92785ac32fa3f771423300897ba6b08ef690152f715b3972523eddd9c9f41d87d3697fff0b0000ffffd638316cea000000", - "20f0fffdc5b71982ce85ee87b75fb3db": "1f8b08000000000000ff1cc9b16ac3301000d0d9fa8a4393548c6a3a163ad4a6d4433bd9d0b11cf2d988c8ba44270d21e4df43bcbe77467fc28d007d099c44a9b5260f06055e3e0f9a6a2864612629ff23ef34625a226563e1a69a4c02ef1f80e2c6f9f7c7e8576ddd371563956a50dcd7a562346f5dd7422671032f648f1838150c49cc937b5eae6e2a39a4cdd816f41f45cf3b4161e8ebba62646dd55d3d020000ffffeff2ca6daa000000", - "249b50674fa80d5d2389e61231cdbc08": "1f8b08000000000000ff2a484cce4e4c4f55484c2ec9cccf2be6e2cacc2dc82f2a51504acf2cc9284dd24bcecfd54fcf4f2a4d4b4bccc9d787d24a5c80000000ffffdd06e7bf37000000", + "20f0fffdc5b71982ce85ee87b75fb3db": "1f8b08000000000000ff1cccc14a03311080e173e729869c1229e95df0608bb8a0e2610b1e65c8ced66036b366260711dfbd74af3f1fff4ae99b2e8c942c4b5580bcacd20c5d653b7c99ad0e60ee35a127c5bbc74d8d3d1b073cb3dae7200b0f54a7c2cd07fc835d63c5fb07248dc3f9edd5bb830bf199cd07801d697cfae954fc6d1c4723ebfafeb2c7c61a4f3271d8c849aa51aeea6ff928d36f1cade57af1618fee834b9285d1048f7d9ea9880bf00fd7000000ffffecd480c3c7000000", + "249b50674fa80d5d2389e61231cdbc08": "1f8b08000000000000ff2cc74d0a84300c06d0f5e41421ab7163cf9496fea16d827ebdbf20ae1ecf351d5a336b42b77913f5e17681ffc4cc2c332334c0e52dfda476b415f76423548bab143d2d7c0a6df4040000ffff73c1922350000000", "2b101e95a5f58f9db6a47dae28e04166": "1f8b08000000000000ff7c52cd8a1b3d10bcfb29fa1318fc416686dc72900cf9bb267b302c3985b6a667d56b8d24a4f62c8ef1bb87b16cafc3929c24d155d5adaad6ff7df9fe79f3e3e12b3819fd7aa1eb01a01d613f5f00f44882107024a326a69714b328b031080531ea857b71a6a7892d35e7c73be0c0c2e89b62d19379afee85acc35c488cdacbd07cb89684c5d3fad37e18d04768e07884362629edc794da6f3852bb9911fc8be074d25d852f008ec706788010e50effc8e21e699bd0eee074aa0d96068a1c3c1547241b7c5aa96d6dd6da52d4ffb0bcaa51e8ff41c2943c5b148ee19ef8a74bb6e4a1499871bcf309f7e228085b96c34f893b0a0ababf702fe51b771ee42d1f96eb5709cf610799bc516c6350e0320d176229240f286ea578c4272add80d30c6ad9c6f307ce21e8ee1ab9dec6feb05e54dd9e27b01e4b316a1e073950be84560d4a98e7ac576af0585c3b2fd0ab2b157260f2fdcda8aee7e9aabe34f08c13169b39bd35f8f9e6afeeea4cbaab0bfa3b0000ffff85cad3beb8020000", "380ebe4d9806da77bde6826811c711a7": "1f8b08000000000000ff84524d6bdc3010bdeb573c9425b40549ec2d98f410dab23d357b28ed31c8f25816ebb584242f856dfe7b91ec7c7443e9e99937efc333a8a5de477a4826ba901b06088c1344826a67377609ca7a95a2519b7764060f7e3e4b1f72927721c8bd36076d697fb08f8f1cbf61e60cd1812b0ed16fdfd734d33d47fccb5a75c743e722444098dbd119a553a29ceac87a58ca1033accbc3dc4ae38fcafa76ee7b3d7a7581ec7c16703d5eba7eba3c7ca680b5698dfb2b6bd493551d05658e5dc12aec2880a63447aa993426bac81019e204a9a4948b64ea9e14f42bf898b1bffbfef523df146836bbfb82aa7513672c656d292d27cf943263b28038e9981a5c3f7f33e0a4a3d3edb8a881ddfdc3976f3f1af0a2e18c5d615717c08962727e8219bc338481c64091c93991585614eea82d35b87e458dbab603eb6ca19b95fe9f7b2b6ede58b7f286b1e22ebf7b854f839e2c217bf0dbdb061fde74f3329b13210f8485c2ce3f6dc3804bdb525ad9d767aa176db0aef3f2a4cb85d7c7b10cff040000ffff5b69610df5020000", "3dc49c126d9ae937cfa7f3b28cd6695d": "1f8b08000000000000ff548fcb6dc3301044ef530a01ef36910e5c80409313890ec555b8348d741f08f900bebdc300efcd64cbd6152168906aeb0ff8672d8390921915b7d214633f14cd3297ddf2a3d215e2d1fd9262daa8089723a68f2eabe178dc6a491add39ced9f464990a597b791fec0a619ba749deaecb755827821c2523d9648f2bff41721c11e2b3419235b7ca652b3eac7fbde803e4be3dff5aeedb530282f819b23320171f8a958d3d0ee6b3e9f737be030000ffffcfa015bc01010000", @@ -36,7 +36,7 @@ var _ = func() error { "50f60207eb74d1b7f2b9b07fa815c278": "1f8b08000000000000ffecd1416b32311006e0fbfe8a21dfd945053f616fb215040b915d4be9496232c5c5b8b364a26d59f2df4b2c6a0f655bbc095e873c7933797bbd5e62f080969a1dd63e4b004ca52c6a9f8126bd75a4f4260e95576bc59841dba6d4784e170e5fabf71056df7802b021f6f190685b1102607d900e442ef3792127f96c3593e55280180cc7693feda70301104202d090eb740b594437fc3f1c8d4f66cfe8bacc53392d040847e4cf318af98d9ce98c9a94e5b32c1e0488cbebc866304a00a8f115d51c3f0a80d9eec86006a662b5b6781cfe63b6315263f74665f9b82aa45ce6d3e366a7a8af0bfe827f845bfcf8cdcda72f679678e4ab5a8fee5ef7cdd5dd38327b1d77baa6f48bbe577f6bd57f060000ffff849b5ab1ea050000", "5326a1f49e88f03a1e5f2c3a40e54348": "1f8b08000000000000ffac94516b1b490cc7dffd29747b70249038073e8e63215cdd26d0408883ed50fae41defcaf6d0d9d146a3716a8cbf7bd1aebdb6d3bad0d0079b5ded48fa4b3f692e2f2f3b052ed15155a297b4035058e33097149272159e5da22623666a02a690acd75daa24741f1967f6eb663339f0d6a30b0aeaea28374e9fd55611abadd7fbfb5f7d8d01398584899aaf268417e2a2357504c329257fea0f3e5384dc788d040682f57387f034bc87206cfd1c66c4200b84604a849cfcccce231bb1e4d35d8cc86e1737bdbad2c4a9febd3b6b95a7aaf7fceabb8255ddff95e180635be2b570c4bfcae8c48ec4086a1f42636434851ea128d7bdb057ff4082200b236067b0a25897914576d905902c908f2507308c10ac432f6e0576ee89b1e8d6a1ee3cc8c206c84dc08bba64ed421983680c31d683710e189fa3652cd4e831d7a8501936250a72e86e95fd8cb216fdbbf0564c45cc8f68b4448d0b54f703fdd232796da771b0346ccdd4610021a02532db0261695cc40076d784ba6bdd23c2eb75b25e279b0dfae58021b9e98ffbeffba3dbc9d3f03e791bfebdfab70cc166b36bf6af6dd93eeb9ec2a9da3e0e46e3e490519db4a174cae77130549f9a617dbca178b27da3db61b205da446f299fccd01f8d3e0d8637476e0dfcbe2fea3d6807a025fcc37985e90a028ae8a65b81e80b64a0aade9596fef6bd9e3095b725958252698caf781d7e3aa096422f34c69c9c6b2e1148a2ccfe2ba7ff4ce6e8918d9be476bfdf1ffa4fe3bbc1c31f8d17646df20c8c2fb2d779b3665fa7a845e97c67aa23d3a717e22f503155c86ed5ddc6bb6b2e0dbd143c0984c8780105d52ff9c2f839c219b1063bd71b21ecf6a4dbf9160000fffff8e8761fed050000", "53cc1d15028e0b1431c355d61ba109d4": "1f8b08000000000000ff648ec14ec2401086ef7d8a3ff4a209e9039870a8b2310605d2ad282732b453d8b8ec34bbdb62dfde948428718ef3ff33df97a23c9a808c5d8fc658c699020eecd853e41afb01fbae69c8ca1454d738b267c42363ecf7e40ded2d070cd2c131d748d26b1f5160856a1817e572a2961b8803b5ad351545230e21928f5d8b20e30b7f939dc57f0554e23d57d10e5992a2948bc42fb70b8c85dace36f9ebbb4223fe44717ab1a9c8c152640fcfd11bee476d1360dc3fd2e83ca00bc61d20217be6c8aebf9b2cd476729f256992427dd3a9b5fc90a498e765fe986bb55be75a7fac8af9ecf33a490aadb47e592d775a3d15aabc8ddecaf54eab62a38a3ffb9f000000ffffb53849697f010000", - "58087a293b8355d4c89fcbff6f66a041": "1f8b08000000000000ffec595b53e33a127ecfafe8f1c396bd9555186a9ed8e2210c304bd5ec2c0519f6714ad86d47852c792419c249f9bf9f6a4926092717a8b99cb9f01412b7babfbe7ddd320dcf6f7885c07327b4b28381a81b6d1ca483014052d62ea1cf4ab8697bcd725d8f2a7ddd9625977a143f370b34baf10fe773a61b67d9b869d87f7581d29edf545d970cb2c1603482c9545828854410162a5468b8c302aeefe128286270e64097251a0b1caeb915395867dadcb506a1d486b4f0a210aa1a0216c209550157051428317c818657c8e0ac847bdd1aa8090599abb5413a9debba9138036d48001462e19f819b72056e8ad1ac20b11a95e314ae85acd3a4856c83ebdd61debb532da5be23108ad7f42175458aec4217162054efec011df2513a804ba1aa567203691f42ff809d1bdda0e9ba8c648f8f60c2af251ec0b96c0d978f85fd43f10746f10bb4ba35f91af10fbc46d63f8ed2e7dc4d1792a315d18f17efa3d495c03b9860dd48ee903c2ed02c9d72f1895d3d7f4a310a421ede2894c30638fd5f1439ca87e9bf97daf81fd68728a47ae0ee1bdca939d4d47c00102bf84168d07968ef857550a1b3c0a57c64f09dd16dd3752c9673ab7c43f91ae34de34bc4c36cb89b92ae7727135813cf019d84f47617d8cc8349f307a86fb572387319a031da00794156d079abc747906ba530802a8daefdcf7938340070b321e81b3838849c5d71d9629ab85992b1f49f8d6e48793c9b0d004409aff48d370160d0b54641593b764296cb34511a9ce1caf2684db7aa48e86047a4b21ab62b6ede728ba10cba8e00fcc3a7ccb2b5f19d7b1dbe322ba1a8dc0cda563acbe09c1b5e5b48a8d513dfff4983e653f84a9e1a2d8907e898d08a053dc758f2563ab825a72d708341c3e1eb473a0ef7f7123af39930ba19eb019c1a5d07d369cee21f5916515ea033026f7173c12c92717c14628bc69089cf6c2c65ba355ad9bfbdf0ab435042aee6038de9033e1ac1b82862f179ccd4317ab900c06a100e72aee01aa1b5819148a0ef5df23c6797e8d26411c264089ffb38689385ec920b0a611d05b14b678802578bbefff55f5d17d04e8572beadc7add360501568d043b6c84d3e85c637f70336903af7781618fb479f1a83a59825c3c5145af49aafc9f91c5015d1780c5ece2ebcd1747f6f6f0886118e341f6e2fdd2c8b2c7139d577812528800577dc3ba3d5268edac619a4b0a78d4d9c319acf9379d2752b4f7c259e1d77cfa11442fe33520a55b8f44580c01560ddb8fb0db1de4440346a256e23a05ec303034d34944215db864fc89ce1353a34b03e3f946eea38b6d2fd6ec64e852ad6f77f0f76089171d264bdee24db421179886efa66efcd90849618fa77ebe13ea0a18783ff8b9d756cff8fd75efb68041ff02eba13fabbd4a6f68ee606795c3615de6d6af5c5c2bb7543d8d8ea0aef9edecf1f70473bffd299ded5c63ed94b0a29356f2989489709ba6a6cea6a1d0970d7b2471a7d36cfff77f985db5e00b6939cff061a3c220edcae2c066cea6a19fa05c3c5c7ae505ece8e7632de93379e1f734a5d71290a4acf6233e8113d046700708bc6d8e1d228e8cf8d55110b617b941671dd1129510663ec3fdc8ed57d9a4549ba83f29b80d31798057ecb85246a00a1ac287081ba6f5f7f32b67438940c837abf1ac685985a1578c5e382a9f08ead68a12b77c85d6bd1d04eda9fcdb5319887674235ad63abe32cd2c09bfdfde710fecad05b47fadef65949660dfa0b82d27d502c3ae060db3c476ba1466b79859ed84e25b7d33463e3a2489328900c61c2265421d237f312cfad45c7fc4cc182f5e7b3471c18b0d135c560214270f4ca42b2e01a10aac0997f11b2963b5f7fcd29795208f73026797831f230293711eb5fe994543d63386edf834784e2e98c4b2ebc2cc34f9a022f6beb0fb0b63eda643e367ed0e453ae2adcb2cc441adebeccacdc42cf3f7edb5b6840fed27a3f51ebad5f031f2fccdf6dffdbb63fc5eafa65f6271a6a2f0bd4a605aaf5d9fe3e0bd4735f33f897cfd6197d1ffe51b58da5975e126fe4694fd24b5bd2f1c9fb93c9c937a5ea88ff85ab7ffb77862b28fab2f80a54fe25ac5212837c7d4e2982773b59e5e27b33ca9f010000ffffea202445cc1f0000", + "58087a293b8355d4c89fcbff6f66a041": "1f8b08000000000000ffec595b53e3b8127ecfafe8f1c329fb548e72ce79648b8730c02cb5b30c05817d9c12763b51214b1e4986b029fff7ad9664923089033bf71d9e42e2be7ceacbd72d53f3fc864f1178ee845676301055ad8d8374300048caca25f4a9d08d66ced5fecb54b85973cd725d8da6faba294b2ef5287e6e17a875d05e2c98ae9d65e3ba66bfeb02a53dbb99b66d32c80683d108263361a11412415898a242c31d16707d0f07c110831307ba2cd158e070cdadc8c13ad3e4ae3108a5366485178550d32160219c5053e0aa800225862f50f329323829e15e37062a4241ee2a6d90b4735dd512e7a00d0980422cfc337033aec0cd30ba152456a1729c62b794759aac906f70dd71983fddb19652df1108c52bfa907a4a86ecd21616205477d83d52f251da830ba1a68de406d22e84fe013b33ba46d3b619c91e1ec0845f4bdc8333d9182e1f0bfb87e24f8ce2e7687563f20de2a7bc42d63d8ed267dccd9692a335d1cbf3b751ea4ae01d4cb0aa257748272ed0ac68b9f8c4aeeb1f538c829087370ae5b0054ef717458ef261baefa536fe87cd210aa91eb8fb1a775a0e35b51800c40a7e101ab41eda5b611d4cd159e0523e72f8c6e8a66e5b16cbb951bebb7c8df1baf625e261d6dccdc8d69ba3096c88e7803421bddd0536f360d2fc01ea6bad1cce5d06688c3640a7202fe8bcd7c303c8b5521840954657fee73c280d00dc7c08fa06f6f62167575c3698266e9e642cfd77ad6b321e75b3018028e195bef12e000cbac628282bc78ec87399264a83335c591ebde946150929b6c430eb61bbe2e635b718caa06d09c0bf7cca2cdb18df85b7e12b732a14959b41db4867199c71c32b0b09b57ae2fb3fa9d1bc0f5fe9a4464be20152135ab160e7104bde4807b774680bdc60b0b0ffbf4736f6ffffdf84743e104637671d8063a3abe03acd59fc23cb22ca737446e02d6e2f9865320e0f426cd11872f1818da54c7ba395fde2855fed8312723d1f684c17f0d108c645118bcf63a68ed1ab0500568370907305d7088d0d8c44025defd2c97376812e4d96214c86f0a18b833659c82e1d41216ca22076e10c51e07ad177bffea76d03da9950ceb7f5b8711a0caa020d7ac816b9c96750fbe67ec00652e71ecf1263f7e87d6db014f364b89c42cb5ef335b95800aa223a8fc1cbd9b9779ad20064178ebbc6befb6d088611a2341ff617719645beb898e9bbc01714ca823bee8fa5d536b6ea630f32d811c836f6182d16c92269dbb527be264f0edbe7900b21ff11c9856a5dfa7240e00ab0aaddfd96586fa3221aba12fba8a8b3f0c045130da55045df180a9933bc42870636e787d24dbdc7d678c0cdd9b150c56626e8c00e21724f9a6cb69d643d649187e8ae96fba976c714da2129ad70f7cfdbdd5da8437787482cf7dab1fd03afbd9fd1084ef12e1e2c747ea94de58f9c1be471215578b78d04964b71ef16b1950414de3dbdd34f7147a3ff2439dfd5ea3eed2ba62949af299d48570fba986ceb7c1d4972d76a48167d5ecfde5d7ce26e1880ed24f06f409507c493fdc662c066ae92a173305c93ec1a2de6ec60272b3e793ffa3e27d91597a2a0f42cb7870ed143700600b7688c1dae8c8b4e6fac8a5808fd515ac67547a444199cb15fb91dabfb348b927463e53701a72f300bfc960b492401425951e01275d7c85e333677504a86c1bc5f24e3fa4c4d0b7ccae33aaaf08ead59a10b7ac85d63d1d006dbe9e6da18ccc333a1eac6b1f591f731215caadae81cad25dc47ca0977ff9ca9b03623374d060feba4244406fd4d43e92e5e161d70b04d4efea1221053f4ec772cb99da5191b17459a448164081336a1e291becf57c870233ae6070f16acd3cf1e1165c046f71d83850871d36bfbcc928640a802e7fe8d4a3fc186e22b3ee7643d2a847b18ad3cbc707998aedb28f863e22553cf18a8fd5bf588503c9d9be9082fabf593e6c5cb12fc5d2fc18fb6a1cbda0fab7cc6d5147b16a248e5fd0bd1da6df7ecf2cbde7603f297a6fc819b72f36af97809ff6a3b65df4e16abed1fb393d1f87b59cafec652d6f842f8ca4bd9b3df74f877e4d6197d1ffe9fd647ed2befb2b792bb67f695a5ebf0e8edd1e4e88bf27bc4ff42f02f2f341f8d8d35545d997c06feff14be29895b3e3fdb14e1743bf9e6fcdb71cd5f010000ffff27116c459a200000", "593cbb702bb3c5a0fcbfa227df3a58f1": "1f8b08000000000000ff7452cb6edc300cbceb2b089dd6856b033d1ac821011a1468da5ef203b24ddb42255195a83c50ecbf17921f9b069bbdac389a1992637935fc5633821a58938b4268eb29309c04809c352fa96f06b2ed4c7d9a2665a8cd8ad03e7d911f32f6ff806ec4204525c4930a10e0d38a345fddac1d1650c5881cefe8056ea038373ff1f92495f7dd7a256b904dd3fad41b3dc84a8829b901b4d37caae0af000870039b6f966ec75fbeec9309f9d7b6f0edf1c70318f54a8981097a8414718489022863d6eb807f12468edd26cbe0439174a5ce73193da8ecdd7893e2d22c6c8dacc5a54fde6520c74a3bede6e24d13f082c068bd518c87fde30edcd14bf77efd83bd2570a9ab7ad3dfeee195e98e28df4e733b8e475f58d0780c11160c78acb862dd9ee156efc115939c9123f7b927e2c841f98cd8c32eb981ac45c7654ba31dc6b7ea1e0d3d8372236c6febfaabd9dcda6c1de5bbf63636f714ec777c5d3fc405aaaf33ef29ace4ffa09d7cce877325cee25f000000ffff1baf99a500030000", "5a8408312923fc8c5fdddc2e213566cc": "1f8b08000000000000ff010000ffff0000000000000000", "5dd1df1b2c53e1a3425bfe5dc07ff730": "1f8b08000000000000ff8c525d8f123d14beefaf3859decb773a10634cd660823bb81a6521ec977b653aed613832735adb4e7443f8ef663a08a8bb89e102e8739e8f9e3e03b85953000aa0a069eb485988aa4228acdea05f518da0d880c76f2d790cf066bc8760f44a0e5f8a01ac6374e13ccf8dd5419a84496d9b1cb922c6bc0de8ab960c76071935aac23c19259fac6ca936b978b79ccfa0b265bb5aa9dae6fbeff3ed565a1783bc431fc8f26e072a40a2a01762797b05cdc69087ccc17f97f3c5e4e67d1ebcce7fd126cec985d21b55e16253ed76e27ebefc587c58fedbb0d86e690547f09ee2fa1e4ba7f406b2dd4e0c2076abfb4e750d5ae935425c23b06b80384455d71022baffa1e51a4300d76bcbafc132e8b5e20a839814c5ef807ccaf541794e96ddf8a3f22c6bab3720d306baff07c72c639b396f2b8f2188ed16eb8089d94d9e46fb6b904d9a3bfe4a66f2e94005ba83aa4107c8a1f578eaf70469664d5b6348f0f4ea0e2ee7a3d168362f6e3f4dafc7964fac3bd9ca428511642ea5fc03dab7a32f02645d632369c82ce42571ae9c137da154ed88317194db8032a6bf77ff5aa50aebe730ad328d3ed28ab48a18c4a139c941888bf9e201b26ce56d33def7f1600e528801dcb2b64d831c215af02da77294c4ca3f02319c396f4dab23593e83c61a3c1703e8b7f2657a75373ec29dd85b6293043af9686128d30782058aa0154389101019ba4460db18c8f47dd496a322469f763e298ae578cf1662fa7931bf9ec28be170f86ce4862aafba1c014a5c598f1dc2c4d5c985baec17b3e2b8819e84af8f0fd2c1f803f5f1e467000000ffffb0f46bad7a040000", @@ -52,14 +52,14 @@ var _ = func() error { "793124cfbcf9ae17892b017c666be8f1": "1f8b08000000000000ff3cccb14e042110c6f19a798a0985010bb637b1b43d2d2eb617c4d95da20b38ccc618c2bb9bdd906be73fdfaff8f0e517c2d6d025bf917b1b87de01e256320b1a505aa84a4c8b06507a89b2ee1f2ee46daac22461e5e9ecf3dfc4f4b347260d1660de53c02b55b9bd168939d5dbbbff8e9f5ec8083e0ed15d2d36508c4fcf38c6ee42bf462c80ca45ea111e06d03a28e2f3f748eeee5950ec2ef98539b321660b1dfe030000ffff4d5ec109db000000", "7a4cf344aedb69074260e6cef71f14b8": "1f8b08000000000000ff2a484cce4e4c4f55b051b555c82f2829d60bcec82f2af14bcc4d5550b5e3e24acecf2b2e51084b2d2acecccf53b055502a33d033d03350e202040000ffff53ac591538000000", "7aee976b536bb9edb3b5ec620565cfba": "1f8b08000000000000ff74523d8fe32010edf32b90eb65623b5e65956a8b6baeb8eeea48188f1db21838c0f9d069f3db4fe038c6bbb90ecd7bf3de9b61feae08c914eb31db91ac1eda96499dbd84e209ad135a857a0139e463b5672296846af002473756a5e0a85cd4f8f5f3f75873dc0ae35db623c18390acc153209cb1368c7f104acfccf3432493e02d64b3c00da1d458dd59742e5b11f219652d1aed84d7f61ac89df087a106aefb75a7eff1d78b311a34a81a545c6092a5d6da3b6f990922156ca09872186d0cda30d98e64fb028a0aaa097b6fb5f5ec8c4ef7b86eb59adeb4b51887dfbfc2db2c75fc33e018f3b681ea6b9d0ea3c7ad8012ca79c0064f3f9e667eaf598d72cda58856dbc7a72498b6f85fd05874e829aad3774a6450a9598336a26f90c36bf6b21a61ee5c02de8ab4152f463b4ce11cb6b137c2ad900bb04c7b3b6d0e688fa9f83e877c5e95634be72d1473b7f357f9c5b8dcccf060e5327411754750999e0ae53c9392de2f8e1a3974e37557f7e9479d4e8af67a744f78b70212c35e2841c3aaf0e22de33e21ee73a8a09c88931097c814d5b5d3123d527e18d4877bd01fba5c9beb33f30a5ea3e642f481e4dfdde2e16cd2154e981427b418b6f530c8cafbc216c49e29d1a24b675b7ea9d20dd2f06df7204509793ceed5e7ea5f000000ffff64e3e7006d040000", - "7bfa8af3a48357849c69805d49e22d8d": "1f8b08000000000000ff1cc9b16ac3301000d0d9fa8a4393548c6a3a163ad4a6d4746807173286433e1b115997e8a42184fc7b88d7f7cee84fb812a02f819328b5d4e4c1a0c0cbe74e530d852cfc9394e3c81b8d98e648d958b8a92693c0fb07a0b89fe9efd7e8576ddd371563956a50dcd7a562346f5dd742267103cf64f71838150c49cc937b9eaf6e2a39a4d5d816f481a2e78da030f4755930b2b6eaae1e010000ffffeabb8082aa000000", + "7bfa8af3a48357849c69805d49e22d8d": "1f8b08000000000000ff1cccc14a03311080e173e729869c1229e95df0608b5814ec21824719b2b33598cdac99c941c4772fedf5e7e35f297fd39991b215690a509655baa16b6cbb2fb3d501cca365f4a478f778536914e380efacf67994858fd4a6cadd07fc834d67c5fb07248d2fe9f4e6ddce85f8cce603c086343efd0caafe3a8ec9c8869e5eb7d859e341260e37729066549afa6bdecbf41b93f5d2ce3e6cd17d70cdb2309ae07ecc33557101fee1120000ffff2fa22d1ac7000000", "7e882a42175bb172ad7014ae8bf629cb": "1f8b08000000000000ffcacb4f498dcfcd4f29cd492dd6e7d2d2cbc94fe74acaccd3e702040000ffffe55507d519000000", "8086dcc0dc8cd747b27caae0808d1553": "1f8b08000000000000ffb2c930b4abaed6cb4bcc4dd50b482c4e4eccc9ac4aadad55aeaed64b4c2ec9cccf4316b5d1cf30b4e302040000ffff9ca0bf3a33000000", "80e003a140ebedf9c08cd0406024feda": "1f8b08000000000000ff94544d8fa3300c3dc3afb0345a69f740c54799a9d2cbfe95405288066294ba2ab3abf9efab244009add4ae7273ece717bf17ef6ad4c4959606fec651af747255825a06459e0ee331fe8ee35672e1af2b5e7f36062f5a2435766818bcbde7bc94f21847031742e98641960e23f8e2a8c23139ab3f2e5ea111d224157ad45d870d82ea1b0b3cf53ccc2d77a4a8936768337b7b424d164632283cae8b5ca56a5ab2b1f4184713a16babc8d2e9b969944e2a24c29e4156b8ba294a383028b7bdf2a55788bc6a9f1d1c8c50e7a1e35f0c94ee949649d561fdb9c0334803606e7137f4488e940859a3e1a45033b868218d050b4a9513c593369e93a37d5faf7153ba13585f7aa9c925ac703a792206f9617efef952b992072c57ef59e95b0ca38b3c7043ce8b725fdc8f7ff1d2ad5b5b6ca4cdf37b69f74e8070acc42b4f76adcb7ec277973b9f42158a2f2003249c79bdff9cf6e9d6b09edc09916caa9b2eef54a319b8b1dffcf55697f63cf4e002b156fced50d9f382e6b5d4248d145b063eee727ef752280ebceb806b013f7b3ecefff5e3231dc65fb636fc3cc188bd79968166a59512ca49d0ef272ddef72fb4289eb488c2ff16a8e8e9ad72ee4d1cbad84bf7947859bc403c0d89af19bb5565f317cfa4ab8b6987cd4b2c4bd31ffff588a0f16a3745b73d332f18fbd07f010000ffffa680b9a8b2050000", "80fc98a1e2bcaf004a0ae6186e3c7387": "1f8b08000000000000ffa4935b4cd3671887ff26de6d59d8922d9b2eb33aa6558aadd406e3d45a40c64108300373ba1a8452a0500e838156401ca70844c7383928c7164a2dd0ca414e15778893a51048c620dbc230195bb22cc8b8a63c0b2064f77b9237bf2f5fbee77baf7e82b04bd82578786ca44848dc2d086f0882201604c143100491b075bfc96e4178eda5add98617acadb937f3f9f3659a4d7da87515f845e57136328f8bdadb7cf9958da53ffedc79bbbebebeade2766f9dedfde3f886e4f2e6891cde3e654074c680e8d475f61ccfe6755926126526f75a1cb0beb6e96fccb65b5963c1439c88e7f9124ec616732cbe0ec9d53abce38d48a38bf009c9c033a89457c449a4196a5ffcb1b5bfbbcfc9ab122d074f5fc753994de0d57c62efd850dfed475d35486c652767626f7128bc0cb1d2c0cbe238caab4c9beef2df7fa1d21bf1d2b4228b337230b21275452fe9ed8f894a2f223aa7820cf3d7846519d92bcfe4685809b24bb5482e55323bf70b2d3d4ec4da0e14993dc8756df8e5b4139e5e8ad7c9300e78fb73c05b85541941f8a795f86aeea248ef24a0681c454e3f85f71cc4df6cc24b67c3476f45a16be1d4875af61c3cc33b9200ce4705e11f1acc5b87fcd92f0d40f5710e87833fc7d3ff069ee70af8405d4a68463d47d3ecc8d36c48350dec93a808bb10c4a0ed0263c3597cebd4d1d61081af4ac561df18fc937bf152d72055d713a83111906e449a6a439e66c53bae91d331494c4d14b3f49b93d68e62ec0faa595eeaa3c79ec989c81b84660fe095d080546f2144dfcdfb294dc852adc8f55d48932d4414753038d2c4946b9edfe7ef303f6361c6354daba39ae8422731d726507e3688a2e009970d03f8c455732cb50b9f940e8e6adbf0cbed22bfc5ccf0680521091a92f232187df405ba9a2e0c75e32494b8f8e4d614970b2729ab1b22bfda8a58d3caf1e4667c7466e4574a286fba4f424115fb4e46f3eed98b14d69ac82a6f446d3061ec71d1f77896fc2a3b13ae196e37f6225237234bb17248634671a58ce8f85444de4a8e28cef19e4cc511df603e4acce2669505ebc8240ee7534cf7fb8175565756d116d713985c4a446e2389e5163a1f0c11a54e65efe1b3ec97faa1bf5648f7c8180ee7389d030fa96e32b3b2f2cf4e7fa6e77e64e1d90293ae27d807da714d7fc7af8b0b34771ae91f3633fbf337fc30fd90c1d12e0686fa585d5dddf4fedba1ed362e3e5be4d1b883a1e1562626cc3cfddec4d8580b63ce1ee6e67ec2ed76efb81b08ff937f030000ffff6ddbe2317e040000", - "81f7b0862d1e52602eed2b3f9d226446": "1f8b08000000000000ff4ccd314bf44010c6f17e3fc5f36e95c04b72585a6a73582868612116739bc92698dd5966674538eebbcb7129acfe300cbfa750f8a2c8a060abe4eadc9a8aa8c1c7d596761a82a431caa9cd336d32eef5ce8d238e92f84879da58b15610269ea96d86653f9aa0b27e335ab9fe1316498c42910737b71cfe0a5dc08e0f8f928d7fac07ab8ae2ec00656b9a118657ce136b777738fc870e4f6f2fcf5da2f2514dd71c3f6f39fbc4b552647f0fffce5bb8ae9ae0e1e6fff397be7717f71b0000ffff845bf41afa000000", - "8234cc9b0fb8bae99a360082dfdb5135": "1f8b08000000000000ff1cc9b16ac3301000d0d9fa8a4393548c6a3a163ad4a6d4433bd9d0b11cf2d988c8ba44270d21e4df43bcbe77467fc28d007d099c44a9b5260f06055e3e0f9a6a2864612629ff23ef34625a226563e1a69a4c02ef1f80e2c6f9f7c7e8576ddd371563956a50dcd7a562346f5dd7422671032f648f1838150c49cc937b5eae6e2a39a4cdd816f41f45cf3b4161e8ebba62646dd55d3d020000ffffeff2ca6daa000000", - "8430e21160781cc43830f0576fd9350a": "1f8b08000000000000ff7c8f414bf4400c86eff915a1df1e5af8982e1e054f9e15597fc1ec34adc5ce644833a20cf9ef52ac85bd784a0ecf9bf749f6e1dd4f843ee8cc6905986366516ca659dfcad5058efdc4d7328e7ee17e9f0d807e65c25a1d675dddb38fe42eb472914066bf1bae2a256805c43d78406000b5a2f834119e3cde3fa0db15d00cfa1e6b3d79f7aa32a7c90c071a7d5914e798178a94d46fac83b1a480edc746ffa9d2ddde6bc361f4c849e9533b241116dc6485b448c2e02e940692f6ee7cfe8fb287dbe6e87ae28116f7229c49ccfedd34345df7f323a5c10cbe030000ffff07809a5767010000", + "81f7b0862d1e52602eed2b3f9d226446": "1f8b08000000000000ff4c8e3f4bc4401047fbfd143fb74a4036bda5368782075e612116739bc92698fdc3ecac08c77d770997e2aac70cc37b53c8ff506090d725a76acc124b164567009b588759b558b34d61d1b99d9dcf7108f9dca689d63cecb4a637661870c8910f94c695054b0561e489daaa98f7a56654965f462bdb3d61ce915128b033534bfeded079ec7af79293f29ff660912cb81840589b2478f7c16964e9b647dd49495b3dbe3d42dcebe9f8de452a5f556549e1fb868b8d5c2b05b64fb09fbcfaadaf19cfb7d283bdf6bdb99aff000000ffff5167c69218010000", + "8234cc9b0fb8bae99a360082dfdb5135": "1f8b08000000000000ff1cccc14a03311080e173e729869c1229e95df0608bb8a0e2610b1e65c8ced66036b366260711dfbd74af3f1fff4ae99b2e8c942c4b5580bcacd20c5d653b7c99ad0e60ee35a127c5bbc74d8d3d1b073cb3dae7200b0f54a7c2cd07fc835d63c5fb07248dc3f9edd5bb830bf199cd07801d697cfae954fc6d1c4723ebfafeb2c7c61a4f3271d8c849aa51aeea6ff928d36f1cade57af1618fee834b9285d1048f7d9ea9880bf00fd7000000ffffecd480c3c7000000", + "8430e21160781cc43830f0576fd9350a": "1f8b08000000000000ff7c904d6ac4300c85f73a854867914071f685aeba2cfd61e6041e47c984269651e4d26274f7629a0ecca62b49f0f4de27251f3efc44e883ce1c3780794d2c8a2d203691b4bfa8a606ea34cd7ac9671778ed273ee771f40bf77b6da003d0ef44588ae3a49b7bf52bb9236d9c2590d95f879b4a0e5a00715fbd8ac0004a41f171223c787c7844b763a119f43d9672f0eea432c7c90c071a7d5e14e7352db452545fb50ec61c03b69f55fd2f4a77ebd7862bd11347a52fed904458b0c20a699688c11d290e246d7d8b3ba9d7bcbd3ddfa3ec366d734d7de18116f72e9c48ccee6eb29aaefbbd96e260063f010000ffffc834eef185010000", "87a430673d7bde399a1126daf0d7c0e6": "1f8b08000000000000ff348e314fc330148477ff8ac3ca9030383b12030b124b8580bd7ab8afa9456c07bfe7012cff77948a6e77a7d3ddb791ffa285415e434e624c885b2e8ad100565934a4c59add2c412ff5d3f91c67d1c2ea2f65be16ce3f73e1ef1a0a5b3399d650282d8c81f0f008f73f8cdecdb9268f9104f74fd7f0bd06e5091f2c7a6c6d70795371078aecde58722d9e7bbfa9636b18c8bd92785ac32fa3f771423300897ba6b08ef690152f715b3972523eddd9c9f41d87d3697fff0b0000ffffd638316cea000000", "8ce13eeed27bfd94470fb7430910bf43": "1f8b08000000000000ff2c8d4b6a03310c86f73a8536597a085d9ab647e8054a311a5be31864c9f8119adb974cbaf9d0e3e7fba9b5d0cda6c70d4a56eb9cc26192b80f0f0eefacc93a3814cb2f0e704863f07c0e6ded522238ccbd1ce765d6060ef7a2e0502d71a89696f0f3b50d1ac3458a3786a25156e214f877b28e627ad66dd99e64bdc3be8aa4d068defc297ded89851e1edfae571db017a5fe084a953dbe5f3e905adbbea8325e3edd998768b592a67008e5e1f1fb075869170ed1c4faf038fb6210cbff967d1d0789c15f000000ffff20a0099817010000", "8fca3f2f698f93dd31db24828b9ab0f7": "1f8b08000000000000ff2ccdb10dc3201046e13a37c52f2a68f00caed266058c023939e690392ac4ee511257affaf46a887bc84fe4939336223eaa9c0a4b80c9acafbef928c79265eb2985b72c570dddcc18f052b5f9b556bf466529edb167cc69c811a55e22b8b05a8741c025fdfdb7b2e10fbed83a47933e010000fffff34f28648b000000", @@ -98,7 +98,7 @@ var _ = func() error { "f565bf21889ed8876e21065a9a977d2b": "1f8b08000000000000ff34cdc16ec2301004d0fb7ec5c8a7a4aa927ba59eda5ecb851fd898b531246bcbb14108e5df5120ec6547a3274d627b662f605b42d499284c29e6828600e34339d6a1b371ea7d1caa733cc6fefdb3e841b2a196e8c219191fafa6fb531f54885c558ba0a1342dee04647c6323ff726db6b84bcfe115acf72b8eeb587ea216d1b2bf25f982e194c6607985fd698e6a3e09585a5ae8110000ffff7d25ad33bf000000", "fb34aa975abbcb40d48be167668d4187": "1f8b08000000000000ffd2d5d5e54a492d4bcdc92fc84dcd2bb1e2525048c94ccc494d2eb152502a2eccc92c4935560209269624262516a75a295457ebe5179414eb05e5e797d4d6c6c3b80145a9699915b5b5f148a6e9410ce0e22a492da686d12063e0661614e5a794269764e6e751c164846130f301010000ffff301e0ded19010000", "fd59f9c3d2c7ce0c05d1ff0f2c3cd0a5": "1f8b08000000000000ff6c8dd16a032110459f77be6210165c28e6079a40e86b1b02fd02575d235147744c1f4affbd74699616f27461cebd738a3657ed1d9a6401422a5419250cc207bef459194a3b4f735f161d6977cf12bb0fb9ad69926d0206f13cee910a37755ee1f9ea713c0898006ebae2f1a643d47374b8c7fb4a9ddcc7769713c0d2b3c19003cb093f61d8983a5a2b452562f1849be7fd42954f3a391c0f2fc94e7f07afa1b1cbf261f717feebbf51cf2c7f0ceba72ff80e0000ffff4170c27a17010000", - "fd8cf2902df93c6d983a9dd3cf7c039e": "1f8b08000000000000ff4ccec14ac6301004e0b3798aa1a71624fdf111f4d2b33ec1fee9260d26d9b2dd8820bebb0839fca78161f89893c227250605cbd22ee7723d450d53ca76f4bb0f52d724f71e231559474ecead2b36a9bc51db0b2bf205c2ce917a311ca334c1c5fac5e8e7ff9e7048659c94d8bbd85b7814e68081fb3769c6dfb6805545f1e39e94ad6b43f0efdc76d6f9e5767b86fa0fd3dcd23c6d5c8a20aa54bc8e83cbe27edd5f000000ffff9034dbfedc000000", + "fd8cf2902df93c6d983a9dd3cf7c039e": "1f8b08000000000000ff4c8e414ac5401044d7f6298aac1290c91d74f3c185e03f41ff4927199c991e3a3d228877974016ae8a2a8ac76b1c3f791370f4a4f5204aa5a9394602862a3eefee6da0b36dc9f7fe0851cbbce9a3af2b679daf1c68229a67dcb4c88deb92c5900e301659b967c77e8dae38c4be04bd9d7fc6ae45d07893406baff13f618cb8f0e155abcbb74f103335fcd0938977ab88e143ea22369e9ee1eeecfd787f7b8685bb5baadb38dc2467c56a5af072c94e13fdd25f000000ffff16411447fa000000", }) if err != nil { panic(err) diff --git a/render/auto.go b/render/auto.go index be0f448d5..7f0b095d7 100644 --- a/render/auto.go +++ b/render/auto.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "io" + "net/http" "path" "reflect" "strings" @@ -108,7 +109,7 @@ func (ir htmlAutoRenderer) Render(w io.Writer, data Data) error { switch data["method"] { case "PUT", "POST", "DELETE": if err := ir.redirect(pname, w, data); err != nil { - if er, ok := err.(ErrRedirect); ok && er.Status >= 300 && er.Status < 400 { + if er, ok := err.(ErrRedirect); ok && er.Status >= http.StatusMultipleChoices && er.Status < http.StatusBadRequest { return err } if data["method"] == "PUT" { @@ -167,9 +168,9 @@ func (ir htmlAutoRenderer) redirect(name name.Ident, w io.Writer, data Data) err } } - code := 302 + code := http.StatusFound if i, ok := data["status"].(int); ok { - if i >= 300 { + if i >= http.StatusMultipleChoices { code = i } } diff --git a/render/auto_test.go b/render/auto_test.go index 8ccdc6de3..d1c2b6d50 100644 --- a/render/auto_test.go +++ b/render/auto_test.go @@ -1,6 +1,7 @@ package render_test import ( + "net/http" "strings" "testing" @@ -27,7 +28,7 @@ func Test_Auto_DefaultContentType(t *testing.T) { app := buffalo.New(buffalo.Options{}) app.GET("/cars", func(c buffalo.Context) error { - return c.Render(200, re.Auto(c, []string{"Honda", "Toyota", "Ford", "Chevy"})) + return c.Render(http.StatusOK, re.Auto(c, []string{"Honda", "Toyota", "Ford", "Chevy"})) }) res := httptest.NewRecorder() @@ -43,7 +44,7 @@ func Test_Auto_JSON(t *testing.T) { re := render.New(render.Options{}) app := buffalo.New(buffalo.Options{}) app.GET("/cars", func(c buffalo.Context) error { - return c.Render(200, re.Auto(c, []string{"Honda", "Toyota", "Ford", "Chevy"})) + return c.Render(http.StatusOK, re.Auto(c, []string{"Honda", "Toyota", "Ford", "Chevy"})) }) w := httptest.New(app) @@ -58,7 +59,7 @@ func Test_Auto_XML(t *testing.T) { re := render.New(render.Options{}) app := buffalo.New(buffalo.Options{}) app.GET("/cars", func(c buffalo.Context) error { - return c.Render(200, re.Auto(c, []string{"Honda", "Toyota", "Ford", "Chevy"})) + return c.Render(http.StatusOK, re.Auto(c, []string{"Honda", "Toyota", "Ford", "Chevy"})) }) w := httptest.New(app) @@ -80,7 +81,7 @@ func Test_Auto_HTML_List(t *testing.T) { app := buffalo.New(buffalo.Options{}) app.GET("/cars", func(c buffalo.Context) error { - return c.Render(200, re.Auto(c, Cars{ + return c.Render(http.StatusOK, re.Auto(c, Cars{ {Name: "Ford"}, {Name: "Chevy"}, })) @@ -111,7 +112,7 @@ func Test_Auto_HTML_List_Plural(t *testing.T) { app := buffalo.New(buffalo.Options{}) app.GET("/people", func(c buffalo.Context) error { - return c.Render(200, re.Auto(c, People{ + return c.Render(http.StatusOK, re.Auto(c, People{ Person{Name: "Ford"}, Person{Name: "Chevy"}, })) @@ -136,7 +137,7 @@ func Test_Auto_HTML_Show(t *testing.T) { app := buffalo.New(buffalo.Options{}) app.GET("/cars/{id}", func(c buffalo.Context) error { - return c.Render(200, re.Auto(c, Car{Name: "Honda"})) + return c.Render(http.StatusOK, re.Auto(c, Car{Name: "Honda"})) }) w := httptest.New(app) @@ -158,7 +159,7 @@ func Test_Auto_HTML_New(t *testing.T) { app := buffalo.New(buffalo.Options{}) app.GET("/cars/new", func(c buffalo.Context) error { - return c.Render(200, re.Auto(c, Car{Name: "Honda"})) + return c.Render(http.StatusOK, re.Auto(c, Car{Name: "Honda"})) }) w := httptest.New(app) @@ -179,7 +180,7 @@ func Test_Auto_HTML_Create(t *testing.T) { app := buffalo.New(buffalo.Options{}) app.POST("/cars", func(c buffalo.Context) error { - return c.Render(201, re.Auto(c, Car{Name: "Honda"})) + return c.Render(http.StatusCreated, re.Auto(c, Car{Name: "Honda"})) }) w := httptest.New(app) @@ -192,7 +193,7 @@ func Test_Auto_HTML_Create_Redirect(t *testing.T) { app := buffalo.New(buffalo.Options{}) app.POST("/cars", func(c buffalo.Context) error { - return c.Render(201, render.Auto(c, Car{ + return c.Render(http.StatusCreated, render.Auto(c, Car{ ID: 1, Name: "Honda", })) @@ -201,7 +202,7 @@ func Test_Auto_HTML_Create_Redirect(t *testing.T) { w := httptest.New(app) res := w.HTML("/cars").Post(nil) r.Equal("/cars/1", res.Location()) - r.Equal(302, res.Code) + r.Equal(http.StatusFound, res.Code) } func Test_Auto_HTML_Create_Redirect_Error(t *testing.T) { @@ -220,12 +221,12 @@ func Test_Auto_HTML_Create_Redirect_Error(t *testing.T) { b := Car{ Name: "Honda", } - return c.Render(422, re.Auto(c, b)) + return c.Render(http.StatusUnprocessableEntity, re.Auto(c, b)) }) w := httptest.New(app) res := w.HTML("/cars").Post(nil) - r.Equal(422, res.Code) + r.Equal(http.StatusUnprocessableEntity, res.Code) r.Contains(res.Body.String(), "Create: Honda") } @@ -235,7 +236,7 @@ func Test_Auto_HTML_Create_Nested_Redirect(t *testing.T) { app := buffalo.New(buffalo.Options{}) admin := app.Group("/admin") admin.POST("/cars", func(c buffalo.Context) error { - return c.Render(201, render.Auto(c, Car{ + return c.Render(http.StatusCreated, render.Auto(c, Car{ ID: 1, Name: "Honda", })) @@ -244,7 +245,7 @@ func Test_Auto_HTML_Create_Nested_Redirect(t *testing.T) { w := httptest.New(app) res := w.HTML("/admin/cars").Post(nil) r.Equal("/admin/cars/1", res.Location()) - r.Equal(302, res.Code) + r.Equal(http.StatusFound, res.Code) } func Test_Auto_HTML_Destroy_Nested_Redirect(t *testing.T) { @@ -253,7 +254,7 @@ func Test_Auto_HTML_Destroy_Nested_Redirect(t *testing.T) { app := buffalo.New(buffalo.Options{}) admin := app.Group("/admin") admin.DELETE("/cars", func(c buffalo.Context) error { - return c.Render(200, render.Auto(c, Car{ + return c.Render(http.StatusOK, render.Auto(c, Car{ ID: 1, Name: "Honda", })) @@ -262,7 +263,7 @@ func Test_Auto_HTML_Destroy_Nested_Redirect(t *testing.T) { w := httptest.New(app) res := w.HTML("/admin/cars").Delete() r.Equal("/admin/cars", res.Location()) - r.Equal(302, res.Code) + r.Equal(http.StatusFound, res.Code) } func Test_Auto_HTML_Edit(t *testing.T) { @@ -278,7 +279,7 @@ func Test_Auto_HTML_Edit(t *testing.T) { app := buffalo.New(buffalo.Options{}) app.GET("/cars/{id}/edit", func(c buffalo.Context) error { - return c.Render(200, re.Auto(c, Car{Name: "Honda"})) + return c.Render(http.StatusOK, re.Auto(c, Car{Name: "Honda"})) }) w := httptest.New(app) @@ -299,7 +300,7 @@ func Test_Auto_HTML_Update(t *testing.T) { app := buffalo.New(buffalo.Options{}) app.PUT("/cars/{id}", func(c buffalo.Context) error { - return c.Render(200, re.Auto(c, Car{Name: "Honda"})) + return c.Render(http.StatusOK, re.Auto(c, Car{Name: "Honda"})) }) w := httptest.New(app) @@ -317,13 +318,13 @@ func Test_Auto_HTML_Update_Redirect(t *testing.T) { ID: 1, Name: "Honda", } - return c.Render(200, render.Auto(c, b)) + return c.Render(http.StatusOK, render.Auto(c, b)) }) w := httptest.New(app) res := w.HTML("/cars/1").Put(nil) r.Equal("/cars/1", res.Location()) - r.Equal(302, res.Code) + r.Equal(http.StatusFound, res.Code) } func Test_Auto_HTML_Update_Redirect_Error(t *testing.T) { @@ -343,12 +344,12 @@ func Test_Auto_HTML_Update_Redirect_Error(t *testing.T) { ID: 1, Name: "Honda", } - return c.Render(422, re.Auto(c, b)) + return c.Render(http.StatusUnprocessableEntity, re.Auto(c, b)) }) w := httptest.New(app) res := w.HTML("/cars/1").Put(nil) - r.Equal(422, res.Code) + r.Equal(http.StatusUnprocessableEntity, res.Code) r.Contains(res.Body.String(), "Update: Honda") } @@ -361,13 +362,13 @@ func Test_Auto_HTML_Destroy_Redirect(t *testing.T) { ID: 1, Name: "Honda", } - return c.Render(200, render.Auto(c, b)) + return c.Render(http.StatusOK, render.Auto(c, b)) }) w := httptest.New(app) res := w.HTML("/cars/1").Delete() r.Equal("/cars/", res.Location()) - r.Equal(302, res.Code) + r.Equal(http.StatusFound, res.Code) } func Test_Auto_HTML_List_Plural_MultiWord(t *testing.T) { @@ -389,7 +390,7 @@ func Test_Auto_HTML_List_Plural_MultiWord(t *testing.T) { app := buffalo.New(buffalo.Options{}) app.GET("/room_providers", func(c buffalo.Context) error { - return c.Render(200, re.Auto(c, RoomProviders{ + return c.Render(http.StatusOK, re.Auto(c, RoomProviders{ RoomProvider{Name: "Ford"}, RoomProvider{Name: "Chevy"}, })) @@ -420,7 +421,7 @@ func Test_Auto_HTML_List_Plural_MultiWord_Dashed(t *testing.T) { app := buffalo.New(buffalo.Options{}) app.GET("/room-providers", func(c buffalo.Context) error { - return c.Render(200, re.Auto(c, RoomProviders{ + return c.Render(http.StatusOK, re.Auto(c, RoomProviders{ RoomProvider{Name: "Ford"}, RoomProvider{Name: "Chevy"}, })) @@ -450,7 +451,7 @@ func Test_Auto_HTML_Show_MultiWord_Dashed(t *testing.T) { app := buffalo.New(buffalo.Options{}) app.GET("/room-providers/{id}", func(c buffalo.Context) error { - return c.Render(200, re.Auto(c, RoomProvider{ID: 1, Name: "Ford"})) + return c.Render(http.StatusOK, re.Auto(c, RoomProvider{ID: 1, Name: "Ford"})) }) w := httptest.New(app) diff --git a/request_logger.go b/request_logger.go index c64ce14fc..0ceaf786e 100644 --- a/request_logger.go +++ b/request_logger.go @@ -3,6 +3,7 @@ package buffalo import ( "crypto/rand" "encoding/hex" + "net/http" "time" humanize "github.com/dustin/go-humanize" @@ -53,7 +54,7 @@ func RequestLoggerFunc(h Handler) Handler { ws, ok := c.Response().(*Response) if !ok { ws = &Response{ResponseWriter: c.Response()} - ws.Status = 200 + ws.Status = http.StatusOK } req := c.Request() ct := httpx.ContentType(req) diff --git a/resource.go b/resource.go index 915ae2f4e..be598c1c6 100644 --- a/resource.go +++ b/resource.go @@ -1,6 +1,9 @@ package buffalo -import "fmt" +import ( + "fmt" + "net/http" +) // Resource interface allows for the easy mapping // of common RESTful actions to a set of paths. See @@ -44,7 +47,7 @@ type Middler interface { } func (ur *UsersResource) List(c Context) error { - return c.Render(200, render.String("hello") + return c.Render(http.StatusOK, render.String("hello") } // This will fulfill the Resource interface, despite only having @@ -55,25 +58,25 @@ type BaseResource struct{} // List default implementation. Returns a 404 func (v BaseResource) List(c Context) error { - return c.Error(404, fmt.Errorf("resource not implemented")) + return c.Error(http.StatusNotFound, fmt.Errorf("resource not implemented")) } // Show default implementation. Returns a 404 func (v BaseResource) Show(c Context) error { - return c.Error(404, fmt.Errorf("resource not implemented")) + return c.Error(http.StatusNotFound, fmt.Errorf("resource not implemented")) } // Create default implementation. Returns a 404 func (v BaseResource) Create(c Context) error { - return c.Error(404, fmt.Errorf("resource not implemented")) + return c.Error(http.StatusNotFound, fmt.Errorf("resource not implemented")) } // Update default implementation. Returns a 404 func (v BaseResource) Update(c Context) error { - return c.Error(404, fmt.Errorf("resource not implemented")) + return c.Error(http.StatusNotFound, fmt.Errorf("resource not implemented")) } // Destroy default implementation. Returns a 404 func (v BaseResource) Destroy(c Context) error { - return c.Error(404, fmt.Errorf("resource not implemented")) + return c.Error(http.StatusNotFound, fmt.Errorf("resource not implemented")) } diff --git a/route_info.go b/route_info.go index cdd5b1c72..00840a9a4 100644 --- a/route_info.go +++ b/route_info.go @@ -106,7 +106,7 @@ func (ri RouteInfo) ServeHTTP(res http.ResponseWriter, req *http.Request) { err := a.Middleware.handler(ri)(c) if err != nil { - status := 500 + status := http.StatusInternalServerError if he, ok := err.(HTTPError); ok { status = he.Status } diff --git a/route_info_test.go b/route_info_test.go index 1ea695a25..4475c3840 100644 --- a/route_info_test.go +++ b/route_info_test.go @@ -2,6 +2,7 @@ package buffalo import ( "database/sql" + "net/http" "testing" "github.com/gobuffalo/buffalo/render" @@ -14,7 +15,7 @@ func Test_RouteInfo_ServeHTTP_SQL_Error(t *testing.T) { app := New(Options{}) app.GET("/good", func(c Context) error { - return c.Render(200, render.String("hi")) + return c.Render(http.StatusOK, render.String("hi")) }) app.GET("/bad", func(c Context) error { @@ -24,8 +25,8 @@ func Test_RouteInfo_ServeHTTP_SQL_Error(t *testing.T) { w := httptest.New(app) res := w.HTML("/good").Get() - r.Equal(200, res.Code) + r.Equal(http.StatusOK, res.Code) res = w.HTML("/bad").Get() - r.Equal(404, res.Code) + r.Equal(http.StatusNotFound, res.Code) } diff --git a/route_mappings.go b/route_mappings.go index df36c9853..0e6860204 100644 --- a/route_mappings.go +++ b/route_mappings.go @@ -102,8 +102,8 @@ func (a *App) fileServer(fs http.FileSystem) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { f, err := fs.Open(path.Clean(r.URL.Path)) if os.IsNotExist(err) { - eh := a.ErrorHandlers.Get(404) - eh(404, fmt.Errorf("could not find %s", r.URL.Path), a.newContext(RouteInfo{}, w, r)) + eh := a.ErrorHandlers.Get(http.StatusNotFound) + eh(http.StatusNotFound, fmt.Errorf("could not find %s", r.URL.Path), a.newContext(RouteInfo{}, w, r)) return } @@ -331,8 +331,8 @@ func stripAsset(path string, h http.Handler, a *App) http.Handler { u, err := url.Parse(up) if err != nil { - eh := a.ErrorHandlers.Get(400) - eh(400, err, a.newContext(RouteInfo{}, w, r)) + eh := a.ErrorHandlers.Get(http.StatusBadRequest) + eh(http.StatusBadRequest, err, a.newContext(RouteInfo{}, w, r)) return } diff --git a/router_test.go b/router_test.go index 09f4c44f7..0607f1f95 100644 --- a/router_test.go +++ b/router_test.go @@ -19,9 +19,9 @@ import ( func testApp() *App { a := New(Options{}) - a.Redirect(301, "/foo", "/bar") + a.Redirect(http.StatusMovedPermanently, "/foo", "/bar") a.GET("/bar", func(c Context) error { - return c.Render(200, render.String("bar")) + return c.Render(http.StatusOK, render.String("bar")) }) rt := a.Group("/router/tests") @@ -29,7 +29,7 @@ func testApp() *App { h := func(c Context) error { x := c.Request().Method + "|" x += strings.TrimSuffix(c.Value("current_path").(string), "/") - return c.Render(200, render.String(x)) + return c.Render(http.StatusOK, render.String(x)) } rt.GET("/", h) @@ -39,7 +39,7 @@ func testApp() *App { rt.OPTIONS("/", h) rt.PATCH("/", h) - a.ErrorHandlers[405] = func(status int, err error, c Context) error { + a.ErrorHandlers[http.StatusMethodNotAllowed] = func(status int, err error, c Context) error { res := c.Response() res.WriteHeader(status) res.Write([]byte("my custom 405")) @@ -52,7 +52,7 @@ func otherTestApp() *App { a := New(Options{}) f := func(c Context) error { req := c.Request() - return c.Render(200, render.String(req.Method+" - "+req.URL.String())) + return c.Render(http.StatusOK, render.String(req.Method+" - "+req.URL.String())) } a.GET("/foo", f) a.POST("/bar", f) @@ -65,9 +65,9 @@ func Test_MethodNotFoundError(t *testing.T) { a := New(Options{}) a.GET("/bar", func(c Context) error { - return c.Render(200, render.String("bar")) + return c.Render(http.StatusOK, render.String("bar")) }) - a.ErrorHandlers[405] = func(status int, err error, c Context) error { + a.ErrorHandlers[http.StatusMethodNotAllowed] = func(status int, err error, c Context) error { res := c.Response() res.WriteHeader(status) res.Write([]byte("my custom 405")) @@ -75,7 +75,7 @@ func Test_MethodNotFoundError(t *testing.T) { } w := httptest.New(a) res := w.HTML("/bar").Post(nil) - r.Equal(405, res.Code) + r.Equal(http.StatusMethodNotAllowed, res.Code) r.Contains(res.Body.String(), "my custom 405") } @@ -168,13 +168,13 @@ func Test_PreHandlers(t *testing.T) { a := testApp() bh := func(c Context) error { req := c.Request() - return c.Render(200, render.String(req.Method+"-"+req.URL.String())) + return c.Render(http.StatusOK, render.String(req.Method+"-"+req.URL.String())) } a.GET("/ph", bh) a.POST("/ph", bh) mh := func(res http.ResponseWriter, req *http.Request) { if req.Method == "GET" { - res.WriteHeader(418) + res.WriteHeader(http.StatusTeapot) res.Write([]byte("boo")) } } @@ -188,8 +188,8 @@ func Test_PreHandlers(t *testing.T) { Method string Result string }{ - {Code: 418, Method: "GET", Result: "boo"}, - {Code: 200, Method: "POST", Result: "POST-/ph/"}, + {Code: http.StatusTeapot, Method: "GET", Result: "boo"}, + {Code: http.StatusOK, Method: "POST", Result: "POST-/ph/"}, } for _, v := range table { @@ -209,7 +209,7 @@ func Test_PreWares(t *testing.T) { a := testApp() bh := func(c Context) error { req := c.Request() - return c.Render(200, render.String(req.Method+"-"+req.URL.String())) + return c.Render(http.StatusOK, render.String(req.Method+"-"+req.URL.String())) } a.GET("/ph", bh) a.POST("/ph", bh) @@ -217,7 +217,7 @@ func Test_PreWares(t *testing.T) { mh := func(h http.Handler) http.Handler { return http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { if req.Method == "GET" { - res.WriteHeader(418) + res.WriteHeader(http.StatusTeapot) res.Write([]byte("boo")) } }) @@ -233,8 +233,8 @@ func Test_PreWares(t *testing.T) { Method string Result string }{ - {Code: 418, Method: "GET", Result: "boo"}, - {Code: 200, Method: "POST", Result: "POST-/ph/"}, + {Code: http.StatusTeapot, Method: "GET", Result: "boo"}, + {Code: http.StatusOK, Method: "POST", Result: "POST-/ph/"}, } for _, v := range table { @@ -280,12 +280,12 @@ func Test_Router_Group(t *testing.T) { a := testApp() g := a.Group("/api/v1") g.GET("/users", func(c Context) error { - return c.Render(201, nil) + return c.Render(http.StatusCreated, nil) }) w := httptest.New(a) res := w.HTML("/api/v1/users").Get() - r.Equal(201, res.Code) + r.Equal(http.StatusCreated, res.Code) } func Test_Router_Group_on_Group(t *testing.T) { @@ -294,16 +294,16 @@ func Test_Router_Group_on_Group(t *testing.T) { a := testApp() g := a.Group("/api/v1") g.GET("/users", func(c Context) error { - return c.Render(201, nil) + return c.Render(http.StatusCreated, nil) }) f := g.Group("/foo") f.GET("/bar", func(c Context) error { - return c.Render(420, nil) + return c.Render(http.StatusTeapot, nil) }) w := httptest.New(a) res := w.HTML("/api/v1/foo/bar").Get() - r.Equal(420, res.Code) + r.Equal(http.StatusTeapot, res.Code) } func Test_Router_Group_Middleware(t *testing.T) { @@ -326,7 +326,7 @@ func Test_Router_Redirect(t *testing.T) { r := require.New(t) w := httptest.New(testApp()) res := w.HTML("/foo").Get() - r.Equal(301, res.Code) + r.Equal(http.StatusMovedPermanently, res.Code) r.Equal("/bar", res.Location()) } @@ -341,7 +341,7 @@ func Test_Router_ServeFiles(t *testing.T) { w := httptest.New(a) res := w.HTML("/assets/foo.png").Get() - r.Equal(200, res.Code) + r.Equal(http.StatusOK, res.Code) r.Equal("foo", res.Body.String()) r.NotEqual(res.Header().Get("ETag"), "") @@ -351,7 +351,7 @@ func Test_Router_ServeFiles(t *testing.T) { w = httptest.New(a) res = w.HTML("/assets/foo.png").Get() - r.Equal(200, res.Code) + r.Equal(http.StatusOK, res.Code) r.Equal("foo", res.Body.String()) r.NotEqual(res.Header().Get("ETag"), "") @@ -382,12 +382,12 @@ type WebResource struct { // Edit default implementation. Returns a 404 func (v WebResource) Edit(c Context) error { - return c.Error(404, fmt.Errorf("resource not implemented")) + return c.Error(http.StatusNotFound, fmt.Errorf("resource not implemented")) } // New default implementation. Returns a 404 func (v WebResource) New(c Context) error { - return c.Error(404, fmt.Errorf("resource not implemented")) + return c.Error(http.StatusNotFound, fmt.Errorf("resource not implemented")) } func Test_App_NamedRoutes(t *testing.T) { @@ -415,7 +415,7 @@ func Test_App_NamedRoutes(t *testing.T) { sampleHandler := func(c Context) error { c.Set("opts", map[string]interface{}{}) - return c.Render(200, rr.String(` + return c.Render(http.StatusOK, rr.String(` 1. <%= rootPath() %> 2. <%= userPath({user_id: 1}) %> 3. <%= myPeepsPath() %> @@ -441,7 +441,7 @@ func Test_App_NamedRoutes(t *testing.T) { w := httptest.New(a) res := w.HTML("/").Get() - r.Equal(200, res.Code) + r.Equal(http.StatusOK, res.Code) r.Contains(res.Body.String(), "1. /") r.Contains(res.Body.String(), "2. /users/1") r.Contains(res.Body.String(), "3. /peeps") @@ -468,7 +468,7 @@ func Test_App_NamedRoutes_MissingParameter(t *testing.T) { sampleHandler := func(c Context) error { c.Set("opts", map[string]interface{}{}) - return c.Render(200, rr.String(` + return c.Render(http.StatusOK, rr.String(` <%= userPath(opts) %> `)) } @@ -477,7 +477,7 @@ func Test_App_NamedRoutes_MissingParameter(t *testing.T) { w := httptest.New(a) res := w.HTML("/users/1").Get() - r.Equal(500, res.Code) + r.Equal(http.StatusInternalServerError, res.Code) r.Contains(res.Body.String(), "missing parameters for /users/{user_id}") } @@ -592,7 +592,7 @@ func (mwResource) Use() []MiddlewareFunc { } func (m mwResource) List(c Context) error { - return c.Render(200, render.String("southern harmony and the musical companion")) + return c.Render(http.StatusOK, render.String("southern harmony and the musical companion")) } func Test_Resource_MW(t *testing.T) { @@ -603,11 +603,11 @@ func Test_Resource_MW(t *testing.T) { w := httptest.New(a) res := w.HTML("/foo?good=true").Get() - r.Equal(200, res.Code) + r.Equal(http.StatusOK, res.Code) r.Contains(res.Body.String(), "southern harmony") res = w.HTML("/foo").Get() - r.Equal(500, res.Code) + r.Equal(http.StatusInternalServerError, res.Code) r.NotContains(res.Body.String(), "southern harmony") } @@ -615,31 +615,31 @@ func Test_Resource_MW(t *testing.T) { type userResource struct{} func (u *userResource) List(c Context) error { - return c.Render(200, render.String("list")) + return c.Render(http.StatusOK, render.String("list")) } func (u *userResource) Show(c Context) error { - return c.Render(200, render.String(`show <%=params["user_id"] %>`)) + return c.Render(http.StatusOK, render.String(`show <%=params["user_id"] %>`)) } func (u *userResource) New(c Context) error { - return c.Render(200, render.String("new")) + return c.Render(http.StatusOK, render.String("new")) } func (u *userResource) Create(c Context) error { - return c.Render(200, render.String("create")) + return c.Render(http.StatusOK, render.String("create")) } func (u *userResource) Edit(c Context) error { - return c.Render(200, render.String(`edit <%=params["user_id"] %>`)) + return c.Render(http.StatusOK, render.String(`edit <%=params["user_id"] %>`)) } func (u *userResource) Update(c Context) error { - return c.Render(200, render.String(`update <%=params["user_id"] %>`)) + return c.Render(http.StatusOK, render.String(`update <%=params["user_id"] %>`)) } func (u *userResource) Destroy(c Context) error { - return c.Render(200, render.String(`destroy <%=params["user_id"] %>`)) + return c.Render(http.StatusOK, render.String(`destroy <%=params["user_id"] %>`)) } func Test_ResourceOnResource(t *testing.T) { @@ -750,7 +750,7 @@ func Test_CatchAll_Route(t *testing.T) { a := New(Options{}) a.GET("/{name:.+}", func(c Context) error { name := c.Param("name") - return c.Render(200, rr.String(name)) + return c.Render(http.StatusOK, rr.String(name)) }) w := httptest.New(a) @@ -792,13 +792,13 @@ func Test_Router_Matches_Trailing_Slash(t *testing.T) { }, }) app.GET(tt.mapped, func(c Context) error { - return c.Render(200, render.String(c.Request().URL.Path)) + return c.Render(http.StatusOK, render.String(c.Request().URL.Path)) }) w := httptest.New(app) res := w.HTML(tt.browser).Get() - r.Equal(200, res.Code) + r.Equal(http.StatusOK, res.Code) r.Equal(tt.expected, res.Body.String()) }) }