package ganserv import ( "bufio" "fmt" "log" "os" "os/user" "runtime" "strings" ) func TryLoadorAskUserForAuthkey() string { //Check for zt auth token value, exists := os.LookupEnv("ZT_AUTH") if !exists { log.Println("Environment variable ZT_AUTH not defined. Trying to load authtoken from file.") } else { return value } authKey := "" if runtime.GOOS == "windows" { b, err := os.ReadFile("C:\\ProgramData\\ZeroTier\\One\\authtoken.secret") if err == nil { log.Println("Zerotier authkey loaded") authKey = string(b) } else { log.Println("Unable to read authkey at C:\\ProgramData\\ZeroTier\\One\\authtoken.secret: ", err.Error()) } } else if runtime.GOOS == "linux" { //Try read from source b, err := os.ReadFile("/var/lib/zerotier-one/authtoken.secret") if err == nil { log.Println("Zerotier authkey loaded") authKey = string(b) } else { log.Println("Unable to read authkey at /var/lib/zerotier-one/authtoken.secret: ", err.Error()) } } else if runtime.GOOS == "darwin" { b, err := os.ReadFile("/Library/Application Support/ZeroTier/One/authtoken.secret") if err == nil { log.Println("Zerotier authkey loaded") authKey = string(b) } else { log.Println("Unable to read authkey at /Library/Application Support/ZeroTier/One/authtoken.secret ", err.Error()) } } if authKey == "" { //Ask user for input reader := bufio.NewReader(os.Stdin) fmt.Println("Please enter the Zerotier authtoken manually: ") input, _ := reader.ReadString('\n') return strings.TrimSpace(input) } return "" } func isRoot() bool { currentUser, err := user.Current() if err != nil { return false } return currentUser.Username == "root" }