30ed21ff7a
- 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
56 lines
1.3 KiB
Go
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
|
|
}
|