Files
FireflyGo_Proxy/run_admin_darwin.go
T

45 lines
1.0 KiB
Go

//go:build darwin
// +build darwin
package main
import (
"fmt"
"os/exec"
"strings"
)
func runWithAdmin(exePath string, env []string) error {
command := shellQuote(exePath)
if len(env) > 0 {
command = strings.Join(shellEnvAssignments(env), " ") + " " + command
}
command += " >/dev/null 2>&1 &"
script := fmt.Sprintf("do shell script %s with administrator privileges", appleScriptString(command))
cmd := exec.Command("osascript", "-e", script)
return cmd.Run()
}
func shellEnvAssignments(env []string) []string {
assignments := make([]string, 0, len(env))
for _, value := range env {
key, val, ok := strings.Cut(value, "=")
if !ok || key == "" {
continue
}
assignments = append(assignments, key+"="+shellQuote(val))
}
return assignments
}
func shellQuote(value string) string {
return "'" + strings.ReplaceAll(value, "'", "'\\''") + "'"
}
func appleScriptString(value string) string {
value = strings.ReplaceAll(value, `\`, `\\`)
value = strings.ReplaceAll(value, `"`, `\"`)
return `"` + value + `"`
}