From 9122c0a9b8bdc7a28db47e787a7c54a8181ebf8b Mon Sep 17 00:00:00 2001 From: decentral1se Date: Sun, 14 Nov 2021 22:45:49 +0100 Subject: [PATCH] fix: ensure domain/server resolve to same ipv4 See https://git.coopcloud.tech/coop-cloud/organising/issues/227#issuecomment-10336. --- cli/internal/deploy.go | 4 ++++ pkg/dns/common.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/cli/internal/deploy.go b/cli/internal/deploy.go index eac2eed61..771fe3e50 100644 --- a/cli/internal/deploy.go +++ b/cli/internal/deploy.go @@ -114,6 +114,10 @@ func DeployAction(c *cli.Context) error { logrus.Fatalf("could not find an IP address assigned to %s?", domainName) } + if _, err = dns.EnsureDomainsResolveSameIPv4(domainName, app.Server); err != nil { + logrus.Fatal(err) + } + if err := stack.RunDeploy(cl, deployOpts, compose); err != nil { logrus.Fatal(err) } diff --git a/pkg/dns/common.go b/pkg/dns/common.go index 85b6c00fd..eea13aeda 100644 --- a/pkg/dns/common.go +++ b/pkg/dns/common.go @@ -64,3 +64,33 @@ func EnsureIPv4(domainName string) (string, error) { return ipv4, nil } + +// EnsureDomainsResolveSameIPv4 ensures that domains resolve to the same ipv4 address +func EnsureDomainsResolveSameIPv4(domainName, server string) (string, error) { + var ipv4 string + + domainIPv4, err := EnsureIPv4(domainName) + if err != nil { + return ipv4, err + } + + if domainIPv4 == "" { + return ipv4, fmt.Errorf("cannot resolve ipv4 for %s?", domainName) + } + + serverIPv4, err := EnsureIPv4(server) + if err != nil { + return ipv4, err + } + + if serverIPv4 == "" { + return ipv4, fmt.Errorf("cannot resolve ipv4 for %s?", server) + } + + if domainIPv4 != serverIPv4 { + err := "app domain %s (%s) does not appear to resolve to app server %s (%s)?" + return ipv4, fmt.Errorf(err, domainName, domainIPv4, server, serverIPv4) + } + + return ipv4, nil +}