Files
cv-site/internal/httputil/request.go
T
juanatsap 2c7f8de242 refactor: centralize constants and reorganize documentation
- Create internal/constants package with all hardcoded values
  (environment, cookies, themes, headers, routes, cache)
- Create internal/httputil package for HTTP helper functions
- Update all handlers and middleware to use centralized constants
- Reorganize documentation with numbered prefixes (00-26)
- Remove duplicate docs from validation folder and docs/
- Delete handlers/constants.go (moved to internal/constants)
2025-12-06 16:27:12 +00:00

56 lines
1.4 KiB
Go

// Package httputil provides simple HTTP request/response utilities.
package httputil
import (
"net/http"
"github.com/juanatsap/cv-site/internal/constants"
)
// Lang extracts and validates the language from query params.
// Returns the language or default if invalid/missing.
func Lang(r *http.Request) string {
lang := r.URL.Query().Get("lang")
if lang == "" || !constants.SupportedLanguages[lang] {
return constants.LangDefault
}
return lang
}
// LangOrError extracts and validates language, returns error if invalid.
// Returns (lang, true) if valid, ("", false) if invalid.
func LangOrError(r *http.Request) (string, bool) {
lang := r.URL.Query().Get("lang")
if lang == "" {
return constants.LangDefault, true
}
if !constants.SupportedLanguages[lang] {
return "", false
}
return lang, true
}
// Query extracts a query parameter with optional default.
func Query(r *http.Request, key, defaultVal string) string {
val := r.URL.Query().Get(key)
if val == "" {
return defaultVal
}
return val
}
// QueryOneOf extracts a query parameter, validates against allowed values.
// Returns the value if valid, or defaultVal if empty/invalid.
func QueryOneOf(r *http.Request, key string, allowed []string, defaultVal string) string {
val := r.URL.Query().Get(key)
if val == "" {
return defaultVal
}
for _, a := range allowed {
if val == a {
return val
}
}
return defaultVal
}