From b6d901fadf7804f447e507708a9137759b0ce827 Mon Sep 17 00:00:00 2001 From: maddalax Date: Sun, 20 Oct 2024 10:21:37 -0500 Subject: [PATCH] add some helper methods for redirect and setting cookie --- examples/simple-auth/internal/user/http.go | 3 +-- examples/simple-auth/internal/user/session.go | 2 +- framework/h/app.go | 15 +++++++++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/examples/simple-auth/internal/user/http.go b/examples/simple-auth/internal/user/http.go index d6865d1..8e1f462 100644 --- a/examples/simple-auth/internal/user/http.go +++ b/examples/simple-auth/internal/user/http.go @@ -9,8 +9,7 @@ func GetUserOrRedirect(ctx *h.RequestContext) (db.User, bool) { user, err := GetUserFromSession(ctx) if err != nil { - ctx.Response.Header().Set("Location", "/login") - ctx.Response.WriteHeader(302) + ctx.Redirect("/login", 302) return db.User{}, false } diff --git a/examples/simple-auth/internal/user/session.go b/examples/simple-auth/internal/user/session.go index f8d54f4..19cd5f8 100644 --- a/examples/simple-auth/internal/user/session.go +++ b/examples/simple-auth/internal/user/session.go @@ -68,7 +68,7 @@ func WriteSessionCookie(ctx *h.RequestContext, session CreatedSession) { Expires: session.Expiration, Path: "/", } - ctx.Response.Header().Add("Set-Cookie", cookie.String()) + ctx.SetCookie(&cookie) } func GenerateSessionID() (string, error) { diff --git a/framework/h/app.go b/framework/h/app.go index 39b480a..bbf0e32 100644 --- a/framework/h/app.go +++ b/framework/h/app.go @@ -33,6 +33,21 @@ func GetRequestContext(r *http.Request) *RequestContext { return r.Context().Value(RequestContextKey).(*RequestContext) } +func (c *RequestContext) SetCookie(cookie *http.Cookie) { + http.SetCookie(c.Response, cookie) +} + +func (c *RequestContext) Redirect(path string, code int) { + if code == 0 { + code = http.StatusTemporaryRedirect + } + if code < 300 || code > 399 { + code = http.StatusTemporaryRedirect + } + c.Response.Header().Set("Location", path) + c.Response.WriteHeader(code) +} + func (c *RequestContext) IsHttpPost() bool { return c.Request.Method == http.MethodPost }