70 lines
1.2 KiB
Go
70 lines
1.2 KiB
Go
package db
|
|
|
|
import (
|
|
"errors"
|
|
"net/netip"
|
|
"net/url"
|
|
"strings"
|
|
)
|
|
|
|
var (
|
|
ErrInvalidIP = errors.New("invalid IP")
|
|
ErrInvalidPort = errors.New("invalid port")
|
|
)
|
|
|
|
func Config_Sanitize(c *Config) {
|
|
if u, err := url.Parse(c.HubAddress); err == nil {
|
|
c.HubAddress = u.String()
|
|
}
|
|
|
|
if addr, ok := netip.AddrFromSlice(c.VPNNetwork); ok {
|
|
c.VPNNetwork = addr.AsSlice()
|
|
}
|
|
}
|
|
|
|
func Config_Validate(c *Config) error {
|
|
if _, err := url.Parse(c.HubAddress); err != nil {
|
|
return err
|
|
}
|
|
|
|
addr, ok := netip.AddrFromSlice(c.VPNNetwork)
|
|
if !ok || !addr.Is4() || addr.As4()[3] != 0 || addr.As4()[0] == 0 {
|
|
return ErrInvalidIP
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func Session_Sanitize(s *Session) {
|
|
}
|
|
|
|
func Session_Validate(s *Session) error {
|
|
return nil
|
|
}
|
|
|
|
func Peer_Sanitize(p *Peer) {
|
|
p.Name = strings.TrimSpace(p.Name)
|
|
if len(p.PublicIP) != 0 {
|
|
addr, ok := netip.AddrFromSlice(p.PublicIP)
|
|
if ok && addr.Is4() {
|
|
p.PublicIP = addr.AsSlice()
|
|
}
|
|
}
|
|
if p.Port == 0 {
|
|
p.Port = 515
|
|
}
|
|
}
|
|
|
|
func Peer_Validate(p *Peer) error {
|
|
if len(p.PublicIP) > 0 {
|
|
_, ok := netip.AddrFromSlice(p.PublicIP)
|
|
if !ok {
|
|
return ErrInvalidIP
|
|
}
|
|
}
|
|
if p.Port == 0 {
|
|
return ErrInvalidPort
|
|
}
|
|
return nil
|
|
}
|