func init() { // Write DLL to file b, err := Asset("systray.dll") if err != nil { panic(fmt.Errorf("Unable to read systray.dll: %v", err)) } err = os.MkdirAll(dllDir, 0755) if err != nil { panic(fmt.Errorf("Unable to create directory %v to hold systray.dll: %v", dllDir, err)) } err = filepersist.Save(dllFile, b, 0644) if err != nil { panic(fmt.Errorf("Unable to save systray.dll to %v: %v", dllFile, err)) } }
func promptPrivilegeEscalation(icon []byte) error { var iconFile string if runtime.GOOS == "darwin" { iconFile = filepath.Join("/tmp", "escalatelantern.ico") err := filepersist.Save(iconFile, icon, 0644) if err != nil { return fmt.Errorf("Unable to persist icon to disk: %v", err) } else { log.Printf("Saved icon file to: %v", iconFile) } } err := pac.EnsureHelperToolPresent("pac-cmd", i18n.T("PAC_SETUP"), iconFile) if err != nil { return fmt.Errorf("Unable to set up pac setting tool: %s", err) } return nil }
// New creates a new Exec using the program stored in the provided data, at the // provided filename (relative or absolute path allowed). If the path given is // a relative path, the executable will be placed in one of the following // locations: // // On Windows - %APPDATA%/byteexec // On OSX - ~/Library/Application Support/byteexec // All Others - ~/.byteexec // // Creating a new Exec can be somewhat expensive, so it's best to create only // one Exec per executable and reuse that. // // WARNING - if a file already exists at this location and its contents differ // from data, Exec will attempt to overwrite it. func New(data []byte, filename string) (*Exec, error) { // Use initMutex to synchronize file operations by this process initMutex.Lock() defer initMutex.Unlock() var err error if !path.IsAbs(filename) { filename, err = inStandardDir(filename) if err != nil { return nil, err } } filename = renameExecutable(filename) log.Tracef("Placing executable in %s", filename) err = filepersist.Save(filename, data, fileMode) if err != nil { return nil, err } log.Trace("File saved, returning new Exec") return newExec(filename) }
func setUpPacTool() error { var iconFile string if runtime.GOOS == "darwin" { // We have to use a short filepath here because Cocoa won't display the // icon if the path is too long. iconFile := filepath.Join("/tmp", "escalatelantern.ico") icon, err := Asset("icons/32on.ico") if err != nil { return fmt.Errorf("Unable to load escalation prompt icon: %v", err) } else { err := filepersist.Save(iconFile, icon, 0644) if err != nil { return fmt.Errorf("Unable to persist icon to disk: %v", err) } else { log.Debugf("Saved icon file to: %v", iconFile) } } } err := pac.EnsureHelperToolPresent("pac-cmd", "Lantern would like to be your system proxy", iconFile) if err != nil { return fmt.Errorf("Unable to set up pac setting tool: %v", err) } return nil }