Files
I2pbrowser/main.go
2020-08-04 00:31:08 -04:00

112 lines
2.5 KiB
Go

//go:generate go run -tags generate gen.go extensions.go
package main
import (
"context"
"flag"
"fmt"
"log"
"net"
"net/http"
"os"
"path/filepath"
"runtime"
"time"
. "github.com/eyedeekay/GingerShrew/import"
. "github.com/eyedeekay/go-fpw"
. "github.com/eyedeekay/i2pfirefox/lib"
"github.com/eyedeekay/zerobundle"
)
type handler struct {
}
func (h *handler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
fmt.Fprintf(w, "hello\n")
/*In the future, we may use this as a sort of loopback for privately testing the browser
fingerprint. At first this will be 100% user-initiated, but it may be useful to query such
a service periodically, in order to inform the user when a fingerprint change has occurred
and prompt them to potentially re-set their browser to it's original state.
for name, headers := range req.Header {
for _, h := range headers {
fmt.Fprintf(w, "%v: %v\n", name, h)
}
}*/
}
func hello() error {
server := &http.Server{Addr: "localhost:", Handler: &handler{}}
go func() {
if err := server.ListenAndServe(); err != nil {
log.Println(err)
}
}()
// Setting up signal capturing
// stop := make(chan os.Signal, 1)
// signal.Notify(stop, os.Interrupt)
// Waiting for SIGINT (pkill -2)
// <-stop
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := server.Shutdown(ctx); err != nil {
log.Println(err)
}
return nil
}
func proxyCheck() bool {
conn, err := net.Dial("tcp4", "localhost:4444")
log.Println("Doing dial check")
if err != nil {
return false
}
log.Println("Dial check true, proxy is up")
defer conn.Close()
return true
}
func main() {
if err := hello(); err != nil {
log.Fatal(err)
}
chromium := flag.Bool("chromium", false, "use a chromium-based browser instead of a firefox-based browser.")
flag.Parse()
ARGS = append(ARGS, flag.Args()...)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
if runtime.GOOS == "linux" {
if !*chromium {
if err := UnpackTBZ(GingerDir); err != nil {
log.Fatal("Error unpacking embedded browser")
} else {
os.Setenv("FIREFOX_BIN", filepath.Join(GingerDir, "gingershrew", "gingershrew"))
}
}
} else {
if LocateFirefox() == "" {
*chromium = true
}
}
if err := WriteI2CPConf(); err != nil {
log.Println(err)
}
if err := zerobundle.ZeroMain(); err != nil {
log.Println(err)
}
time.Sleep(time.Second * 2)
if !proxyCheck() {
go proxyMain(ctx)
}
if !*chromium {
firefoxMain()
} else {
chromiumMain()
}
}