Give it the ability to make it's own shortcuts
This commit is contained in:
2
go.mod
2
go.mod
@ -9,6 +9,8 @@ require (
|
||||
golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce
|
||||
)
|
||||
|
||||
require github.com/go-ole/go-ole v1.2.6 // indirect
|
||||
|
||||
require (
|
||||
github.com/eyedeekay/sam3 v0.32.32
|
||||
github.com/justinas/nosurf v1.1.1
|
||||
|
3
go.sum
3
go.sum
@ -9,6 +9,8 @@ github.com/eyedeekay/sam3 v0.32.32/go.mod h1:qRA9KIIVxbrHlkj+ZB+OoxFGFgdKeGp1vSg
|
||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
|
||||
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
|
||||
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
|
||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
|
||||
@ -82,6 +84,7 @@ golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5h
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
|
58
link_linux.go
Normal file
58
link_linux.go
Normal file
@ -0,0 +1,58 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os/user"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
func DesktopDirectory() (string, error) {
|
||||
myself, err := user.Current()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
homedir := myself.HomeDir
|
||||
desktop := filepath.Join(homedir, ".local", "share", "applications")
|
||||
return desktop, nil
|
||||
}
|
||||
|
||||
func CreateShortcuts() error {
|
||||
desktopDir, err := DesktopDirectory()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
torBrowserPath, err := pathToMe()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
tordesktop := filepath.Join(desktopDir, "torbrowser.desktop")
|
||||
torbrowserShortcut := torBrowserPath + " -torbrowser"
|
||||
if err := makeLink(torbrowserShortcut, tordesktop); err != nil {
|
||||
return err
|
||||
}
|
||||
i2pbrowserPath := torBrowserPath + " -i2pbrowser"
|
||||
i2pdesktop := filepath.Join(desktopDir, "i2ptorbrowser.desktop")
|
||||
if err := makeLink(i2pbrowserPath, i2pdesktop); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func desktopTemplate(command string) string {
|
||||
return `[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Version=1.0
|
||||
Type=Application
|
||||
Terminal=false
|
||||
Exec=/bin/sh -c "` + command + `"
|
||||
Name=Tor Browser
|
||||
Categories=Network;WebBrowser;
|
||||
Icon=/var/lib/i2pbrowser/icons/onion.png
|
||||
`
|
||||
}
|
||||
|
||||
func makeLink(src, dst string) error {
|
||||
log.Println("Creating desktop shortcut:", dst)
|
||||
return ioutil.WriteFile(dst, []byte(desktopTemplate(src)), 0644)
|
||||
}
|
62
link_windows.go
Normal file
62
link_windows.go
Normal file
@ -0,0 +1,62 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/go-ole/go-ole"
|
||||
"github.com/go-ole/go-ole/oleutil"
|
||||
"os/user"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
func DesktopDirectory() (string, error) {
|
||||
myself, error := user.Current()
|
||||
if error != nil {
|
||||
return "", error
|
||||
}
|
||||
homedir := myself.HomeDir
|
||||
desktop := filepath.Join(homedir, "Desktop")
|
||||
return desktop, nil
|
||||
}
|
||||
|
||||
func CreateShortcuts() error {
|
||||
desktopDir, err := DesktopDirectory()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
desktop := filepath.Join(desktopDir, "torbrowser.lnk")
|
||||
torBrowserPath, err := pathToMe()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
torbrowserShortcut := torBrowserPath + " -torbrowser"
|
||||
if err := makeLink(torbrowserShortcut, desktop); err != nil {
|
||||
return err
|
||||
}
|
||||
i2pBrowserPath := torBrowserPath + " -i2pbrowser"
|
||||
if err := makeLink(i2pBrowserPath, desktop); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func makeLink(src, dst string) error {
|
||||
log.Println("Creating desktop shortcut:", dst)
|
||||
ole.CoInitializeEx(0, ole.COINIT_APARTMENTTHREADED|ole.COINIT_SPEED_OVER_MEMORY)
|
||||
oleShellObject, err := oleutil.CreateObject("WScript.Shell")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer oleShellObject.Release()
|
||||
wshell, err := oleShellObject.QueryInterface(ole.IID_IDispatch)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer wshell.Release()
|
||||
cs, err := oleutil.CallMethod(wshell, "CreateShortcut", dst)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
idispatch := cs.ToIDispatch()
|
||||
oleutil.PutProperty(idispatch, "TargetPath", src)
|
||||
oleutil.CallMethod(idispatch, "Save")
|
||||
return nil
|
||||
}
|
23
main.go
23
main.go
@ -17,6 +17,8 @@ import (
|
||||
//go:embed tor-browser/TPO-signing-key.pub
|
||||
//go:embed garliconion.png
|
||||
//go:embed onion.png
|
||||
//go:embed torbrowser.desktop
|
||||
//go:embed i2ptorbrowser.desktop
|
||||
var content embed.FS
|
||||
|
||||
func OS() string {
|
||||
@ -53,8 +55,9 @@ var (
|
||||
directory = flag.String("directory", "", "Directory operate in")
|
||||
host = flag.String("host", "127.0.0.1", "Host to serve on")
|
||||
port = flag.Int("port", 7695, "Port to serve on")
|
||||
bemirror = flag.Bool("bemirror", false, "Act as an in-I2P mirror when you're done downloading")
|
||||
shortcuts = flag.Bool("shortcuts", false, "Create desktop shortcuts")
|
||||
/*mirror = flag.String("mirror", "", "Mirror to use")*/
|
||||
bemirror = flag.Bool("bemirror", false, "Act as an in-I2P mirror when you're done downloading")
|
||||
)
|
||||
|
||||
func main() {
|
||||
@ -83,6 +86,12 @@ func main() {
|
||||
if err != nil {
|
||||
log.Fatal("Couldn't create client", err)
|
||||
}
|
||||
if *shortcuts {
|
||||
err := CreateShortcuts()
|
||||
if err != nil {
|
||||
log.Fatal("Couldn't create desktop shortcuts", err)
|
||||
}
|
||||
}
|
||||
client.Host = *host
|
||||
client.Port = *port
|
||||
client.TBS.Profile = &content
|
||||
@ -99,3 +108,15 @@ func main() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func pathToMe() (string, error) {
|
||||
ex, err := os.Executable()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
exPath, err := filepath.Abs(ex)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return exPath, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user