mirror of
https://github.com/getlantern/elevate
synced 2025-09-26 20:21:21 +08:00
41 lines
826 B
Go
41 lines
826 B
Go
package elevate
|
|
|
|
import (
|
|
_ "embed"
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
|
|
"github.com/getlantern/byteexec"
|
|
)
|
|
|
|
//go:embed binaries/osx/cocoasudo
|
|
var cocoasudo []byte
|
|
|
|
func buildCommand(prompt string, icon string, name string, args ...string) (*exec.Cmd, error) {
|
|
argsLen := len(args)
|
|
if icon != "" {
|
|
argsLen += 1
|
|
}
|
|
if prompt != "" {
|
|
argsLen += 1
|
|
}
|
|
allArgs := make([]string, 0, argsLen)
|
|
if icon != "" {
|
|
allArgs = append(allArgs, "--icon="+icon)
|
|
}
|
|
if prompt != "" {
|
|
allArgs = append(allArgs, "--prompt="+prompt)
|
|
}
|
|
allArgs = append(allArgs, name)
|
|
allArgs = append(allArgs, args...)
|
|
_, program := filepath.Split(os.Args[0])
|
|
be, err := byteexec.New(cocoasudo, program)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("unable to build byteexec for cocoasudo: %v", err)
|
|
}
|
|
|
|
return be.Command(allArgs...), nil
|
|
}
|