pegasus/backend/util.go

68 lines
1.1 KiB
Go
Raw Permalink Normal View History

2026-04-11 00:02:59 -03:00
// backend/util.go
package main
import (
"encoding/json"
"log"
"net/http"
"os"
"strings"
)
func writeJSON(w http.ResponseWriter, v any) {
w.Header().Set("Content-Type", "application/json")
if err := json.NewEncoder(w).Encode(v); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
func env(k, def string) string {
if v := os.Getenv(k); v != "" {
return v
}
return def
}
func must(err error, msg string) {
if err != nil {
log.Fatalf("%s: %v", msg, err)
}
}
func contains(ss []string, v string) bool {
for _, s := range ss {
if s == v {
return true
}
}
return false
}
func sanitizeSegment(s string) string {
s = strings.TrimSpace(s)
s = strings.ReplaceAll(s, " ", "_")
s = strings.Trim(s, "/")
if i := strings.IndexByte(s, '/'); i >= 0 {
s = s[:i]
}
out := make([]rune, 0, len(s))
for _, r := range s {
switch {
case r >= 'a' && r <= 'z',
r >= 'A' && r <= 'Z',
r >= '0' && r <= '9',
r == '_',
r == '-',
r == '.':
out = append(out, r)
default:
out = append(out, '_')
}
}
if len(out) > 64 {
out = out[:64]
}
return string(out)
}