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
|
||
|
|
}
|