123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- package config
- import (
- "fmt"
- "net"
- "net/url"
- )
- var lookupHostFn = net.LookupHost
- func isLoopbackHost(host string) (bool, error) {
- ip := net.ParseIP(host)
- if ip != nil {
- return ip.IsLoopback(), nil
- }
- // Host is not an ip, perform lookup
- addrs, err := lookupHostFn(host)
- if err != nil {
- return false, err
- }
- if len(addrs) == 0 {
- return false, fmt.Errorf("no addrs found for host, %s", host)
- }
- for _, addr := range addrs {
- if !net.ParseIP(addr).IsLoopback() {
- return false, nil
- }
- }
- return true, nil
- }
- func validateLocalURL(v string) error {
- u, err := url.Parse(v)
- if err != nil {
- return err
- }
- host := u.Hostname()
- if len(host) == 0 {
- return fmt.Errorf("unable to parse host from local HTTP cred provider URL")
- } else if isLoopback, err := isLoopbackHost(host); err != nil {
- return fmt.Errorf("failed to resolve host %q, %v", host, err)
- } else if !isLoopback {
- return fmt.Errorf("invalid endpoint host, %q, only host resolving to loopback addresses are allowed", host)
- }
- return nil
- }
|