|
@@ -5,6 +5,7 @@ import (
|
|
|
"fmt"
|
|
|
"log"
|
|
|
"os"
|
|
|
+ "os/exec"
|
|
|
"os/user"
|
|
|
"runtime"
|
|
|
"strings"
|
|
@@ -29,14 +30,24 @@ func TryLoadorAskUserForAuthkey() string {
|
|
|
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")
|
|
|
- fmt.Println(authKey)
|
|
|
- authKey = string(b)
|
|
|
+ if isRoot() {
|
|
|
+ //Try to read from source using sudo
|
|
|
+ ak, err := readAuthToken()
|
|
|
+ if err == nil {
|
|
|
+ log.Println("Zerotier authkey loaded")
|
|
|
+ authKey = strings.TrimSpace(ak)
|
|
|
+ } else {
|
|
|
+ log.Println("Unable to read authkey at /var/lib/zerotier-one/authtoken.secret: ", err.Error())
|
|
|
+ }
|
|
|
} else {
|
|
|
- log.Println("Unable to read authkey at /var/lib/zerotier-one/authtoken.secret: ", err.Error())
|
|
|
+ //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" {
|
|
@@ -62,6 +73,15 @@ func TryLoadorAskUserForAuthkey() string {
|
|
|
return ""
|
|
|
}
|
|
|
|
|
|
+func readAuthToken() (string, error) {
|
|
|
+ cmd := exec.Command("sudo", "cat", "/var/lib/zerotier-one/authtoken.secret")
|
|
|
+ output, err := cmd.Output()
|
|
|
+ if err != nil {
|
|
|
+ return "", err
|
|
|
+ }
|
|
|
+ return string(output), nil
|
|
|
+}
|
|
|
+
|
|
|
func isRoot() bool {
|
|
|
currentUser, err := user.Current()
|
|
|
if err != nil {
|