photoprism/pkg/header/ip.go
Michael Mayer 294fa5a90f Backend: Refactor "pkg/header" package
Signed-off-by: Michael Mayer <michael@photoprism.app>
2024-11-05 09:28:37 +01:00

34 lines
757 B
Go

package header
import (
"net"
"regexp"
)
// IpRegExp matches characters allowed in IPv4 or IPv6 network addresses.
var IpRegExp = regexp.MustCompile(`[^a-zA-Z0-9:.]`)
// IP returns the sanitized and normalized network address if it is valid, or the default otherwise.
func IP(s, defaultIp string) string {
// Return default if invalid.
if s == "" || len(s) > 128 || s == defaultIp {
return defaultIp
}
// Remove invalid characters, including whitespace.
if s = IpRegExp.ReplaceAllString(s, ""); s == "" {
return defaultIp
}
// Limit string length to 39 characters.
if len(s) > 39 {
s = s[:39]
}
// Parse IP address and return it as string.
if ip := net.ParseIP(s); ip == nil {
return defaultIp
} else {
return ip.String()
}
}