Files
eagle/internal/web/response.go
2021-12-18 23:33:00 +08:00

92 lines
2.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package web
import (
"net/http"
"github.com/gin-gonic/gin"
"github.com/gorilla/sessions"
"github.com/spf13/viper"
"github.com/go-eagle/eagle/pkg/errcode"
"github.com/go-eagle/eagle/pkg/flash"
"github.com/go-eagle/eagle/pkg/log"
)
// Resp web response struct
type Resp struct {
Code int `json:"code"`
Message string `json:"message"`
Data interface{} `json:"data"`
}
// Response json response
func Response(c *gin.Context, err error, data interface{}) {
code, message := errcode.DecodeErr(err)
// always return http.StatusOK
c.JSON(http.StatusOK, Resp{
Code: code,
Message: message,
Data: data,
})
}
// Redirect redirect to another path
func Redirect(c *gin.Context, redirectPath, errMsg string) {
flash.SetMessage(c.Writer, errMsg)
c.Redirect(http.StatusMovedPermanently, redirectPath)
c.Abort()
}
// Store It is recommended to use an authentication key with 32 or 64 bytes.
// The encryption key, if set, must be either 16, 24, or 32 bytes to select
// AES-128, AES-192, or AES-256 modes.
var Store = sessions.NewCookieStore([]byte(viper.GetString("cookie.secret")))
// SetLoginCookie set login cookie to session
func SetLoginCookie(ctx *gin.Context, userID uint64) {
Store.Options.HttpOnly = true
session := GetCookieSession(ctx)
session.Options = &sessions.Options{
Domain: "",
MaxAge: 86400,
Path: "/",
HttpOnly: true,
}
// 浏览器关闭cookie删除否则保存30天(github.com/gorilla/sessions 包的默认值)
val := ctx.DefaultPostForm("remember_me", "0")
log.Infof("[handler] remember_me val: %s", val)
if val == "1" {
session.Options.MaxAge = 86400 * 30
}
session.Values["user_id"] = userID
req := Request(ctx)
resp := ResponseWriter(ctx)
err := session.Save(req, resp)
if err != nil {
log.Warnf("[handler] set login cookie, %v", err)
}
}
// GetCookieSession get cookie
func GetCookieSession(ctx *gin.Context) *sessions.Session {
session, err := Store.Get(ctx.Request, "")
if err != nil {
log.Warnf("[handler] store get err, %v", err)
}
return session
}
// Request return a request
func Request(ctx *gin.Context) *http.Request {
return ctx.Request
}
// ResponseWriter return a response writer
func ResponseWriter(ctx *gin.Context) http.ResponseWriter {
return ctx.Writer
}