package web import ( "path" "strings" ) // safeName reduces a user supplied file name to a safe base name: directory // components are dropped and unusual characters replaced by '_'. fallback is // returned if nothing usable is left. func safeName(name, fallback string) string { name = path.Base(strings.ReplaceAll(strings.TrimSpace(name), `\`, "/")) name = strings.Map(func(r rune) rune { if r >= 'a' && r <= 'z' || r >= 'A' && r <= 'Z' || r >= '0' && r <= '9' || r == '-' || r == '_' || r == '.' { return r } return '_' }, name) if strings.Trim(name, "._") == "" { return fallback } return name } // pcapFilename sanitizes a user supplied download name and gives it a .pcap extension. func pcapFilename(name string) string { return strings.TrimSuffix(safeName(name, "packet.pcap"), ".pcap") + ".pcap" }