29 lines
829 B
Go
29 lines
829 B
Go
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"
|
|
}
|