|
@@ -4,8 +4,6 @@ import (
|
|
|
"errors"
|
|
|
"log"
|
|
|
"os"
|
|
|
- "os/exec"
|
|
|
- "os/user"
|
|
|
"runtime"
|
|
|
"strings"
|
|
|
)
|
|
@@ -21,17 +19,30 @@ func TryLoadorAskUserForAuthkey() (string, error) {
|
|
|
|
|
|
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)
|
|
|
+ if isAdmin() {
|
|
|
+ //Read the secret file directly
|
|
|
+ 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 {
|
|
|
- log.Println("Unable to read authkey at C:\\ProgramData\\ZeroTier\\One\\authtoken.secret: ", err.Error())
|
|
|
+ //Elavate the permission to admin
|
|
|
+ ak, err := readAuthTokenAsAdmin()
|
|
|
+ if err == nil {
|
|
|
+ log.Println("Zerotier authkey loaded")
|
|
|
+ authKey = ak
|
|
|
+ } else {
|
|
|
+ log.Println("Unable to read authkey at C:\\ProgramData\\ZeroTier\\One\\authtoken.secret: ", err.Error())
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
} else if runtime.GOOS == "linux" {
|
|
|
- if isRoot() {
|
|
|
+ if isAdmin() {
|
|
|
//Try to read from source using sudo
|
|
|
- ak, err := readAuthTokenAsRoot()
|
|
|
+ ak, err := readAuthTokenAsAdmin()
|
|
|
if err == nil {
|
|
|
log.Println("Zerotier authkey loaded")
|
|
|
authKey = strings.TrimSpace(ak)
|
|
@@ -67,22 +78,3 @@ func TryLoadorAskUserForAuthkey() (string, error) {
|
|
|
|
|
|
return authKey, nil
|
|
|
}
|
|
|
-
|
|
|
-//Use sudo to read auth token on linux like systems
|
|
|
-func readAuthTokenAsRoot() (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
|
|
|
-}
|
|
|
-
|
|
|
-//Check if the user is root on linux
|
|
|
-func isRoot() bool {
|
|
|
- currentUser, err := user.Current()
|
|
|
- if err != nil {
|
|
|
- return false
|
|
|
- }
|
|
|
- return currentUser.Username == "root"
|
|
|
-}
|