helpers.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. // Package handlers содержит HTTP-обработчики API-сервера Photoplaces.
  2. // Реализованы хендлеры: Auth, User, Place, Booking, Review, Service, Tag,
  3. // Upload (S3 presigned URLs) и WebSocket (посетители на карте).
  4. // Используется валидация через validator и middleware для авторизации/ролей.
  5. package handlers
  6. import (
  7. "net/http"
  8. "time"
  9. )
  10. const refreshTokenCookieName = "refresh_token"
  11. func isSecure(r *http.Request) bool {
  12. if r.TLS != nil {
  13. return true
  14. }
  15. if r.Header.Get("X-Forwarded-Proto") == "https" {
  16. return true
  17. }
  18. return false
  19. }
  20. func setRefreshTokenCookie(w http.ResponseWriter, token string, r *http.Request) {
  21. http.SetCookie(w, &http.Cookie{
  22. Name: refreshTokenCookieName,
  23. Value: token,
  24. Path: "/",
  25. HttpOnly: true,
  26. Secure: isSecure(r),
  27. SameSite: http.SameSiteLaxMode,
  28. MaxAge: int((30 * 24 * time.Hour).Seconds()),
  29. })
  30. }
  31. func getRefreshTokenFromCookie(r *http.Request) string {
  32. cookie, err := r.Cookie(refreshTokenCookieName)
  33. if err != nil {
  34. return ""
  35. }
  36. return cookie.Value
  37. }