(ctx context.Context, drv *ui.Driver, domain string)
| 171 | } |
| 172 | |
| 173 | func checkLoopbackDomain(ctx context.Context, drv *ui.Driver, domain string) error { |
| 174 | drv.Activate(ctx, &models.DomainResolver{ |
| 175 | Domain: domain, |
| 176 | }) |
| 177 | |
| 178 | addrs, err := new(net.Resolver).LookupHost(ctx, domain) |
| 179 | if err != nil { |
| 180 | drv.Send(models.DomainStatusMsg(false)) |
| 181 | |
| 182 | var dnserr *net.DNSError |
| 183 | if errors.As(err, &dnserr) { |
| 184 | return cli.UserError{Err: errors.New("no such host")} |
| 185 | } |
| 186 | |
| 187 | return err |
| 188 | } |
| 189 | |
| 190 | for _, addr := range addrs { |
| 191 | if !slices.Contains(loopbackAddrs, addr) { |
| 192 | drv.Send(models.DomainStatusMsg(false)) |
| 193 | |
| 194 | return fmt.Errorf("%s domain resolved to non-loopback interface address: %s", domain, addr) |
| 195 | } |
| 196 | } |
| 197 | drv.Send(models.DomainStatusMsg(true)) |
| 198 | |
| 199 | return nil |
| 200 | } |
no test coverage detected