2c7f8de242
- 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)
56 lines
1.4 KiB
Go
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
|
|
}
|