package server import ( "time" "github.com/gin-gonic/gin" ) // SetCookie sets a cookie value with a duration provided. This function handles setting the security // configuration as well as the domain. These values are based on the EnvironmentConfig, therefore // the value should be set. Nothing is returned by this function, but the cookie will be set. // // This function can also be used to clear cookies, if a blank value ("") and invalid duration (-1) // is provided. // // If 0 is provided as the duration, then a session cookie is created, which will be cleared when // the browser is closed. func (s *Server) SetCookie(ctx *gin.Context, name, value string, duration time.Duration) { var ( path string = "/" httpOnly bool = true maxAge int secure bool domain string ) if duration < 0 { // Delete the cookie maxAge = -1 } else if duration == 0 { // Session cookie, clears when browser is closed maxAge = 0 } else { // Normal calculation maxAge = int(time.Now().Add(duration).Sub(time.Now()).Seconds()) } if s.deps.EnvironmentConfig.Environment == "prod" { secure = true domain = s.deps.EnvironmentConfig.Domain } else if s.deps.EnvironmentConfig.Environment == "dev" { secure = false domain = s.deps.EnvironmentConfig.Domain } else { // Defaults secure = false domain = "" } ctx.SetCookie(name, value, maxAge, path, domain, secure, httpOnly) }