Files
abra/pkg/dns/dns.go
decentral1se 8a51acae5f
All checks were successful
continuous-integration/drone/push Build is passing
feat: translation support
See #483
2025-08-19 12:47:20 +02:00

61 lines
1.3 KiB
Go

package dns
import (
"errors"
"net"
"github.com/leonelquinteros/gotext"
)
// EnsureIPv4 ensures that an ipv4 address is set for a domain name
func EnsureIPv4(domainName string) (string, error) {
ipv4, err := net.ResolveIPAddr("ip4", domainName)
if err != nil {
return "", errors.New(gotext.Get("%s: unable to resolve IPv4 address: %s", domainName, err))
}
if ipv4 == nil {
return "", errors.New(gotext.Get("%s: no IPv4 available", domainName))
}
return ipv4.String(), nil
}
// EnsureDomainsResolveSameIPv4 ensures that domains resolve to the same ipv4 address
func EnsureDomainsResolveSameIPv4(domainName, server string) (string, error) {
if server == "default" || server == "local" {
return "", nil
}
var ipv4 string
domainIPv4, err := EnsureIPv4(domainName)
if err != nil {
return ipv4, err
}
if domainIPv4 == "" {
return ipv4, errors.New(gotext.Get("cannot resolve ipv4 for %s?", domainName))
}
serverIPv4, err := EnsureIPv4(server)
if err != nil {
return ipv4, err
}
if serverIPv4 == "" {
return ipv4, errors.New(gotext.Get("cannot resolve ipv4 for %s?", server))
}
if domainIPv4 != serverIPv4 {
return ipv4, errors.New(
gotext.Get(
"app domain %s (%s) does not appear to resolve to app server %s (%s)?",
domainName, domainIPv4, server, serverIPv4,
),
)
}
return ipv4, nil
}