1
0
Эх сурвалжийг харах

auto update script executed

Toby Chui 1 жил өмнө
parent
commit
7f58207993
2 өөрчлөгдсөн 42 нэмэгдсэн , 2 устгасан
  1. 1 0
      go.mod
  2. 41 2
      mod/ganserv/authkey.go

+ 1 - 0
go.mod

@@ -12,4 +12,5 @@ require (
 	github.com/oschwald/geoip2-golang v1.8.0
 	github.com/satori/go.uuid v1.2.0
 	golang.org/x/net v0.9.0 // indirect
+	golang.org/x/sys v0.7.0
 )

+ 41 - 2
mod/ganserv/authkey.go

@@ -9,6 +9,9 @@ import (
 	"os/user"
 	"runtime"
 	"strings"
+	"syscall"
+
+	"golang.org/x/sys/windows"
 )
 
 func TryLoadorAskUserForAuthkey() string {
@@ -32,7 +35,7 @@ func TryLoadorAskUserForAuthkey() string {
 	} else if runtime.GOOS == "linux" {
 		if isRoot() {
 			//Try to read from source using sudo
-			ak, err := readAuthToken()
+			ak, err := readAuthTokenAsRoot()
 			if err == nil {
 				log.Println("Zerotier authkey loaded")
 				authKey = strings.TrimSpace(ak)
@@ -73,15 +76,18 @@ func TryLoadorAskUserForAuthkey() string {
 	return ""
 }
 
-func readAuthToken() (string, error) {
+//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
 	}
+	fmt.Println("CMDOUTPUT", string(output))
 	return string(output), nil
 }
 
+//Check if the user is root on linux
 func isRoot() bool {
 	currentUser, err := user.Current()
 	if err != nil {
@@ -89,3 +95,36 @@ func isRoot() bool {
 	}
 	return currentUser.Username == "root"
 }
+
+//Use admin permission to read auth token on Windows
+func readAuthTokenAsAdmin() (string, error) {
+	verb := "runas"
+	exe, _ := os.Executable()
+	cwd, _ := os.Getwd()
+
+	authTokenPath := "C:\\ProgramData\\ZeroTier\\One\\authtoken.secret"
+	args := fmt.Sprintf("cmd /C type %s", authTokenPath)
+
+	verbPtr, _ := syscall.UTF16PtrFromString(verb)
+	exePtr, _ := syscall.UTF16PtrFromString(exe)
+	cwdPtr, _ := syscall.UTF16PtrFromString(cwd)
+	argPtr, _ := syscall.UTF16PtrFromString(args)
+
+	var showCmd int32 = 1 //SW_NORMAL
+
+	err := windows.ShellExecute(0, verbPtr, exePtr, argPtr, cwdPtr, showCmd)
+	if err != nil {
+		return "", err
+	}
+
+	return "", nil
+}
+
+//Check if admin on Windows
+func isAdmin() bool {
+	_, err := os.Open("\\\\.\\PHYSICALDRIVE0")
+	if err != nil {
+		return false
+	}
+	return true
+}