diff --git a/server/plugin/index.go b/server/plugin/index.go index 27a5fe80..78e0e3d7 100644 --- a/server/plugin/index.go +++ b/server/plugin/index.go @@ -2,7 +2,6 @@ package plugin import ( _ "github.com/mickael-kerjean/filestash/server/plugin/plg_starter_http" - _ "github.com/mickael-kerjean/filestash/server/plugin/plg_starter_tor" _ "github.com/mickael-kerjean/filestash/server/plugin/plg_image_light" _ "github.com/mickael-kerjean/filestash/server/plugin/plg_backend_backblaze" _ "github.com/mickael-kerjean/filestash/server/plugin/plg_backend_dav" diff --git a/server/plugin/plg_starter_tor/index.go b/server/plugin/plg_starter_tor/index.go new file mode 100644 index 00000000..50074b24 --- /dev/null +++ b/server/plugin/plg_starter_tor/index.go @@ -0,0 +1,36 @@ +package plg_start_tor + +import ( + "context" + "github.com/cretz/bine/tor" + "github.com/gorilla/mux" + . "github.com/mickael-kerjean/filestash/server/common" + "net/http" + "time" +) + +func init() { + Hooks.Register.Starter(func (r *mux.Router) { + Log.Info("[tor] starting ...") + t, err := tor.Start(nil, nil) + if err != nil { + Log.Error("[tor] Unable to start Tor: %v", err) + return + } + defer t.Close() + listenCtx, listenCancel := context.WithTimeout(context.Background(), 3*time.Minute) + defer listenCancel() + onion, err := t.Listen(listenCtx, &tor.ListenConf{Version3: true, RemotePorts: []int{80}}) + if err != nil { + Log.Error("[tor] Unable to create onion service: %v", err) + return + } + defer onion.Close() + + srv := &http.Server{ + Handler: r, + } + Log.Info("[tor] started on http://%v.onion\n", onion.ID) + srv.Serve(onion) + }) +}