mirror of https://github.com/coder/coder.git
41 lines
948 B
Go
41 lines
948 B
Go
package cliutil
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
"sync"
|
|
)
|
|
|
|
var (
|
|
hostname string
|
|
hostnameOnce sync.Once
|
|
)
|
|
|
|
// Hostname returns the hostname of the machine, lowercased,
|
|
// with any trailing domain suffix stripped.
|
|
// It is cached after the first call.
|
|
// If the hostname cannot be determined, for any reason,
|
|
// localhost will be returned instead.
|
|
func Hostname() string {
|
|
hostnameOnce.Do(func() { hostname = getHostname() })
|
|
return hostname
|
|
}
|
|
|
|
func getHostname() string {
|
|
h, err := os.Hostname()
|
|
if err != nil {
|
|
// Something must be very wrong if this fails.
|
|
// We'll just return localhost and hope for the best.
|
|
return "localhost"
|
|
}
|
|
|
|
// On some platforms, the hostname can be an FQDN. We only want the hostname.
|
|
if idx := strings.Index(h, "."); idx != -1 {
|
|
h = h[:idx]
|
|
}
|
|
|
|
// For the sake of consistency, we also want to lowercase the hostname.
|
|
// Per RFC 4343, DNS lookups must be case-insensitive.
|
|
return strings.ToLower(h)
|
|
}
|