mirror of
https://github.com/grafana/grafana.git
synced 2025-01-23 23:13:52 -06:00
dd2d206d99
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
package cookies
|
|
|
|
import (
|
|
"net/http"
|
|
"net/url"
|
|
"time"
|
|
|
|
"github.com/grafana/grafana/pkg/models"
|
|
"github.com/grafana/grafana/pkg/setting"
|
|
)
|
|
|
|
type CookieOptions struct {
|
|
Path string
|
|
Secure bool
|
|
SameSiteDisabled bool
|
|
SameSiteMode http.SameSite
|
|
}
|
|
|
|
func newCookieOptions() CookieOptions {
|
|
path := "/"
|
|
if len(setting.AppSubUrl) > 0 {
|
|
path = setting.AppSubUrl
|
|
}
|
|
return CookieOptions{
|
|
Path: path,
|
|
Secure: setting.CookieSecure,
|
|
SameSiteDisabled: setting.CookieSameSiteDisabled,
|
|
SameSiteMode: setting.CookieSameSiteMode,
|
|
}
|
|
}
|
|
|
|
type getCookieOptionsFunc func() CookieOptions
|
|
|
|
func DeleteCookie(w http.ResponseWriter, name string, getCookieOptions getCookieOptionsFunc) {
|
|
WriteCookie(w, name, "", -1, getCookieOptions)
|
|
}
|
|
|
|
func WriteCookie(w http.ResponseWriter, name string, value string, maxAge int, getCookieOptions getCookieOptionsFunc) {
|
|
if getCookieOptions == nil {
|
|
getCookieOptions = newCookieOptions
|
|
}
|
|
|
|
options := getCookieOptions()
|
|
cookie := http.Cookie{
|
|
Name: name,
|
|
MaxAge: maxAge,
|
|
Value: value,
|
|
HttpOnly: true,
|
|
Path: options.Path,
|
|
Secure: options.Secure,
|
|
}
|
|
if !options.SameSiteDisabled {
|
|
cookie.SameSite = options.SameSiteMode
|
|
}
|
|
http.SetCookie(w, &cookie)
|
|
}
|
|
|
|
func WriteSessionCookie(ctx *models.ReqContext, cfg *setting.Cfg, value string, maxLifetime time.Duration) {
|
|
if cfg.Env == setting.Dev {
|
|
ctx.Logger.Info("New token", "unhashed token", value)
|
|
}
|
|
|
|
var maxAge int
|
|
if maxLifetime <= 0 {
|
|
maxAge = -1
|
|
} else {
|
|
maxAge = int(maxLifetime.Seconds())
|
|
}
|
|
|
|
WriteCookie(ctx.Resp, cfg.LoginCookieName, url.QueryEscape(value), maxAge, nil)
|
|
}
|