From be12a18a11145ba3708f74eaa7bb64de2bd06be0 Mon Sep 17 00:00:00 2001 From: idk Date: Tue, 22 Feb 2022 21:45:32 -0500 Subject: [PATCH] start onion PR campaign project --- get/torrent.go | 7 +++++++ go.mod | 1 + go.sum | 4 ++++ main.go | 2 +- onion/onion.go | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 onion/onion.go diff --git a/get/torrent.go b/get/torrent.go index 874414e..5c31478 100644 --- a/get/torrent.go +++ b/get/torrent.go @@ -153,3 +153,10 @@ func FindSnarkDirectory() (string, error) { } return "", fmt.Errorf("FindSnarkDirectory: Unable to find snark directory") } + +func TorrentReady() bool { + if _, err := FindSnarkDirectory(); err != nil { + return false + } + return true +} diff --git a/go.mod b/go.mod index 3a3dc35..c5dbab8 100644 --- a/go.mod +++ b/go.mod @@ -39,6 +39,7 @@ require ( github.com/ProtonMail/go-crypto v0.0.0-20220113124808-70ae35bab23f // indirect github.com/ProtonMail/go-mime v0.0.0-20190923161245-9b5a4261663a // indirect github.com/boreq/friendlyhash v0.0.0-20190522010448-1ca64b3ca69e // indirect + github.com/cretz/bine v0.2.0 // indirect github.com/dsnet/compress v0.0.1 // indirect github.com/emirpasic/gods v1.12.0 // indirect github.com/eyedeekay/go-i2cp v0.0.0-20190716135428-6d41bed718b0 // indirect diff --git a/go.sum b/go.sum index 96ca222..5c7df89 100644 --- a/go.sum +++ b/go.sum @@ -27,6 +27,8 @@ github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 h1:tuij github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21/go.mod h1:po7NpZ/QiTKzBKyrsEAxwnTamCoh8uDk/egRpQ7siIc= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cretz/bine v0.2.0 h1:8GiDRGlTgz+o8H9DSnsl+5MeBK4HsExxgl6WgzOCuZo= +github.com/cretz/bine v0.2.0/go.mod h1:WU4o9QR9wWp8AVKtTM1XD5vUHkEqnf2vVSo6dBqbetI= github.com/d5/tengo v1.24.3/go.mod h1:VhLq8Q2QFhCIJO3NhvM934qOThykMqJi9y9Siqd1ocQ= github.com/danfragoso/thdwb v0.0.0-20191106005607-18cfeb88e782/go.mod h1:IXu355OpbfEz78+tgu81vte3YA/MEWQKBu/dXod4NM0= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -422,6 +424,7 @@ golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce h1:Roh6XWxHFKrPgC/EQhVubSAGQ6Ozk6IdxHSzt1mR0EI= golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20181106170214-d68db9428509/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -449,6 +452,7 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20170912212905-13449ad91cb2/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= diff --git a/main.go b/main.go index d7bf3f5..abf1253 100644 --- a/main.go +++ b/main.go @@ -85,7 +85,7 @@ var ( //mirror = flag.String("mirror", "http://dist.torproject.i2p/torbrowser/", "Mirror to use") mirror = flag.String("mirror", "http://dist.torproject.org/torbrowser/", "Mirror to use") /*onion = flag.Bool("onion", false, "Serve an onion site which shows some I2P propaganda, magnet links, your I2P mirror URL if configured")*/ - torrent = flag.Bool("torrent", false, "Create a torrent of the downloaded files and seed it over I2P using an Open Tracker") + torrent = flag.Bool("torrent", tbget.TorrentReady(), "Create a torrent of the downloaded files and seed it over I2P using an Open Tracker") /*ptop = flag.Bool("p2p", false, "Use bittorrent over I2P to download the initial copy of Tor Browser")*/ ) diff --git a/onion/onion.go b/onion/onion.go new file mode 100644 index 0000000..29702d2 --- /dev/null +++ b/onion/onion.go @@ -0,0 +1,50 @@ +package i2pdotonion + +import ( + "context" + "fmt" + "log" + "net" + "net/http" + "time" + + "github.com/cretz/bine/tor" +) + +type I2POnionService struct { + OnionService net.Listener +} + +func (ios *I2POnionService) ServeHTTP(w http.ResponseWriter, r *http.Request) { + fmt.Println("ServeHTTP") +} + +func (ios *I2POnionService) Listen(net, addr string) (net.Listener, error) { + if ios.OnionService != nil { + return ios.OnionService, nil + } + fmt.Println("Starting and registering onion service, please wait a couple of minutes...") + tb, err := tor.Start(nil, nil) + if err != nil { + log.Panicf("Unable to start Tor: %v", err) + } + defer tb.Close() + // Wait at most a few minutes to publish the service + listenCtx, listenCancel := context.WithTimeout(context.Background(), 3*time.Minute) + defer listenCancel() + // Create a v3 onion service to listen on any port but show as 80 + ios.OnionService, err = tb.Listen(listenCtx, &tor.ListenConf{Version3: true, RemotePorts: []int{80}}) + if err != nil { + log.Panicf("Unable to create onion service: %v", err) + } + return ios.OnionService, nil +} + +func (ios *I2POnionService) ListenAndServe() error { + var err error + ios.OnionService, err = ios.Listen("", "") + if err != nil { + return err + } + return http.Serve(ios.OnionService, ios) +}