flash.go 950 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package httpd
  2. import (
  3. "encoding/base64"
  4. "net/http"
  5. "time"
  6. )
  7. const (
  8. flashCookieName = "message"
  9. )
  10. func setFlashMessage(w http.ResponseWriter, r *http.Request, value string) {
  11. http.SetCookie(w, &http.Cookie{
  12. Name: flashCookieName,
  13. Value: base64.URLEncoding.EncodeToString([]byte(value)),
  14. Path: "/",
  15. Expires: time.Now().Add(60 * time.Second),
  16. MaxAge: 60,
  17. HttpOnly: true,
  18. Secure: isTLS(r),
  19. SameSite: http.SameSiteLaxMode,
  20. })
  21. }
  22. func getFlashMessage(w http.ResponseWriter, r *http.Request) string {
  23. cookie, err := r.Cookie(flashCookieName)
  24. if err != nil {
  25. return ""
  26. }
  27. http.SetCookie(w, &http.Cookie{
  28. Name: flashCookieName,
  29. Value: "",
  30. Path: "/",
  31. Expires: time.Unix(0, 0),
  32. MaxAge: -1,
  33. HttpOnly: true,
  34. Secure: isTLS(r),
  35. SameSite: http.SameSiteLaxMode,
  36. })
  37. message, err := base64.URLEncoding.DecodeString(cookie.Value)
  38. if err != nil {
  39. return ""
  40. }
  41. return string(message)
  42. }