28 lines
749 B
Go
28 lines
749 B
Go
package httpx
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func requestUsesHTTPS(request *http.Request) bool {
|
|
if request.TLS != nil {
|
|
return true
|
|
}
|
|
forwarded := strings.SplitN(request.Header.Get("X-Forwarded-Proto"), ",", 2)[0]
|
|
return strings.EqualFold(strings.TrimSpace(forwarded), "https")
|
|
}
|
|
|
|
// SetTokenCookie also marks cookies Secure behind TLS or a TLS-terminating
|
|
// reverse proxy.
|
|
func SetTokenCookie(c *gin.Context, value string, maxAge int) {
|
|
cookie := &http.Cookie{Name: "x-token", Value: value, Path: "/", MaxAge: maxAge, Secure: requestUsesHTTPS(c.Request), HttpOnly: true, SameSite: http.SameSiteStrictMode}
|
|
if maxAge < 0 {
|
|
cookie.Expires = time.Unix(1, 0)
|
|
}
|
|
http.SetCookie(c.Writer, cookie)
|
|
}
|