Give it the ability to make it's own shortcuts

This commit is contained in:
idk
2022-01-30 16:45:50 -05:00
parent 6de17ef74a
commit fc842f8a63
5 changed files with 147 additions and 1 deletions

2
go.mod
View File

@ -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
View File

@ -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
View 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
View 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
View File

@ -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
}