Files
cv-site/internal/httputil/request.go
T
juanatsap 30ed21ff7a refactor: use 'c' alias for constants package
- Update all imports from 'constants' to 'c' for brevity
- Replace all 'constants.' references with 'c.'
- Fix remaining hardcoded content-type headers in httputil
- Fix remaining hardcoded User-Agent and Accept headers
- Rename CSRF receiver from 'c' to 'csrf' to avoid conflict
- Add ContentTypePlainSimple constant for Accept header matching
- Fix JSONCached to use proper integer formatting
2025-12-06 16:31:42 +00:00

56 lines
1.3 KiB
Go

// Package httputil provides simple HTTP request/response utilities.
package httputil
import (
"net/http"
c "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 == "" || !c.SupportedLanguages[lang] {
return c.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 c.LangDefault, true
}
if !c.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
}