package cookie import ( "net/url" log "github.com/sirupsen/logrus" "github.com/authorizerdev/authorizer/server/constants" "github.com/authorizerdev/authorizer/server/memorystore" "github.com/authorizerdev/authorizer/server/parsers" "github.com/gin-gonic/gin" ) // SetAdminCookie sets the admin cookie in the response func SetAdminCookie(gc *gin.Context, token string) { adminCookieSecure, err := memorystore.Provider.GetBoolStoreEnvVariable(constants.EnvKeyAdminCookieSecure) if err != nil { log.Debug("Error while getting admin cookie secure from env variable: %v", err) adminCookieSecure = true } secure := adminCookieSecure httpOnly := adminCookieSecure hostname := parsers.GetHost(gc) host, _ := parsers.GetHostParts(hostname) gc.SetCookie(constants.AdminCookieName, token, 3600, "/", host, secure, httpOnly) } // GetAdminCookie gets the admin cookie from the request func GetAdminCookie(gc *gin.Context) (string, error) { cookie, err := gc.Request.Cookie(constants.AdminCookieName) if err != nil { return "", err } // cookie escapes special characters like $ // hence we need to unescape before comparing decodedValue, err := url.QueryUnescape(cookie.Value) if err != nil { return "", err } return decodedValue, nil } // DeleteAdminCookie sets the response cookie to empty func DeleteAdminCookie(gc *gin.Context) { adminCookieSecure, err := memorystore.Provider.GetBoolStoreEnvVariable(constants.EnvKeyAdminCookieSecure) if err != nil { log.Debug("Error while getting admin cookie secure from env variable: %v", err) adminCookieSecure = true } secure := adminCookieSecure httpOnly := adminCookieSecure hostname := parsers.GetHost(gc) host, _ := parsers.GetHostParts(hostname) gc.SetCookie(constants.AdminCookieName, "", -1, "/", host, secure, httpOnly) }