HTTP-over-Onionv3 Reseeder

This commit is contained in:
idk
2019-05-08 12:23:21 -04:00
parent e7d4585361
commit bc91c473c2
4 changed files with 42 additions and 7 deletions

View File

@@ -2,6 +2,7 @@ package reseed
import (
"bytes"
"context"
"crypto/tls"
"io"
"log"
@@ -9,7 +10,9 @@ import (
"net/http"
"os"
"strconv"
"time"
"github.com/cretz/bine/tor"
"github.com/gorilla/handlers"
"github.com/justinas/alice"
"gopkg.in/throttled/throttled.v2"
@@ -22,8 +25,9 @@ const (
type Server struct {
*http.Server
Reseeder Reseeder
Blacklist *Blacklist
Reseeder Reseeder
Blacklist *Blacklist
OnionListener *tor.OnionService
}
func NewServer(prefix string, trustProxy bool) *Server {
@@ -110,6 +114,24 @@ func (srv *Server) ListenAndServeTLS(certFile, keyFile string) error {
return srv.Serve(tlsListener)
}
func (srv *Server) ListenAndServeOnion(startConf *tor.StartConf, listenConf *tor.ListenConf) error {
log.Println("Starting and registering onion service, please wait a couple of minutes...")
tor, err := tor.Start(nil, startConf)
if err != nil {
return err
}
defer tor.Close()
listenCtx, listenCancel := context.WithTimeout(context.Background(), 3*time.Minute)
defer listenCancel()
srv.OnionListener, err = tor.Listen(listenCtx, listenConf)
if err != nil {
return err
}
log.Printf("Onionv3 server started on http://%v.onion\n", srv.OnionListener.ID)
return srv.Serve(srv.OnionListener)
}
func (srv *Server) reseedHandler(w http.ResponseWriter, r *http.Request) {
var peer Peer
if ip, _, err := net.SplitHostPort(r.RemoteAddr); err == nil {