helpers.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. secure := isSecure(r)
  22. maxAge := int((30 * 24 * time.Hour).Seconds())
  23. http.SetCookie(w, &http.Cookie{
  24. Name: refreshTokenCookieName,
  25. Value: token,
  26. Path: "/",
  27. HttpOnly: true,
  28. Secure: secure,
  29. SameSite: http.SameSiteLaxMode,
  30. MaxAge: maxAge,
  31. })
  32. http.SetCookie(w, &http.Cookie{
  33. Name: "session",
  34. Value: "1",
  35. Path: "/",
  36. HttpOnly: false,
  37. Secure: secure,
  38. SameSite: http.SameSiteLaxMode,
  39. MaxAge: maxAge,
  40. })
  41. }
  42. func getRefreshTokenFromCookie(r *http.Request) string {
  43. cookie, err := r.Cookie(refreshTokenCookieName)
  44. if err != nil {
  45. return ""
  46. }
  47. return cookie.Value
  48. }