[tor-commits] [snowflake/master] Merge branch 'geoip_squashed'

cohosh at torproject.org cohosh at torproject.org
Wed May 15 15:08:14 UTC 2019


commit 6b002c5f22e0e794c086d6655afe72dc3cd7bc43
Merge: 1133e01 ba4fe1a
Author: Cecylia Bocovich <cohosh at torproject.org>
Date:   Wed May 15 11:07:33 2019 -0400

    Merge branch 'geoip_squashed'

 broker/broker.go                |   73 ++-
 broker/geoip.go                 |  240 ++++++++
 broker/metrics.go               |   95 ++-
 broker/snowflake-broker_test.go |  103 ++++
 broker/test_geoip               | 1236 +++++++++++++++++++++++++++++++++++++++
 broker/test_geoip6              |  693 ++++++++++++++++++++++
 6 files changed, 2434 insertions(+), 6 deletions(-)

diff --cc broker/broker.go
index a18ca1b,361040a..ae27a47
--- a/broker/broker.go
+++ b/broker/broker.go
@@@ -13,12 -13,14 +13,15 @@@ import 
  	"io"
  	"io/ioutil"
  	"log"
+ 	"net"
  	"net/http"
  	"os"
+ 	"os/signal"
  	"strings"
+ 	"syscall"
  	"time"
  
 +	"git.torproject.org/pluggable-transports/snowflake.git/common/safelog"
  	"golang.org/x/crypto/acme/autocert"
  )
  
@@@ -206,7 -218,17 +219,17 @@@ func proxyAnswers(ctx *BrokerContext, 
  		w.WriteHeader(http.StatusBadRequest)
  		return
  	}
+ 
+ 	// Get proxy country stats
+ 	remoteIP, _, err := net.SplitHostPort(r.RemoteAddr)
+ 	if err != nil {
+ 		log.Println("Error processing proxy IP: ", err.Error())
+ 	} else {
+ 
+ 		ctx.metrics.UpdateCountryStats(remoteIP)
+ 	}
+ 
 -	log.Println("Received answer: ", body)
 +	log.Println("Received answer.")
  	snowflake.answerChannel <- body
  }
  
@@@ -228,20 -250,24 +251,30 @@@ func main() 
  	var acmeEmail string
  	var acmeHostnamesCommas string
  	var addr string
+ 	var geoipDatabase string
+ 	var geoip6Database string
  	var disableTLS bool
 +	var certFilename, keyFilename string
+ 	var disableGeoip bool
+ 	var metricsFilename string
  
  	flag.StringVar(&acmeEmail, "acme-email", "", "optional contact email for Let's Encrypt notifications")
  	flag.StringVar(&acmeHostnamesCommas, "acme-hostnames", "", "comma-separated hostnames for TLS certificate")
 +	flag.StringVar(&certFilename, "cert", "", "TLS certificate file")
 +	flag.StringVar(&keyFilename, "key", "", "TLS private key file")
  	flag.StringVar(&addr, "addr", ":443", "address to listen on")
+ 	flag.StringVar(&geoipDatabase, "geoipdb", "/usr/share/tor/geoip", "path to correctly formatted geoip database mapping IPv4 address ranges to country codes")
+ 	flag.StringVar(&geoip6Database, "geoip6db", "/usr/share/tor/geoip6", "path to correctly formatted geoip database mapping IPv6 address ranges to country codes")
  	flag.BoolVar(&disableTLS, "disable-tls", false, "don't use HTTPS")
+ 	flag.BoolVar(&disableGeoip, "disable-geoip", false, "don't use geoip for stats collection")
+ 	flag.StringVar(&metricsFilename, "metrics-log", "", "path to metrics logging output")
  	flag.Parse()
  
 -	var metricsFile io.Writer = os.Stdout
+ 	var err error
++	var metricsFile io.Writer = os.Stdout
 +	var logOutput io.Writer = os.Stderr
 +	//We want to send the log output through our scrubber first
 +	log.SetOutput(&safelog.LogScrubber{Output: logOutput})
  
  	log.SetFlags(log.LstdFlags | log.LUTC)
  
@@@ -261,13 -305,20 +312,27 @@@
  		Addr: addr,
  	}
  
+ 	sigChan := make(chan os.Signal, 1)
+ 	signal.Notify(sigChan, syscall.SIGHUP)
+ 
+ 	// go routine to handle a SIGHUP signal to allow the broker operator to send
+ 	// a SIGHUP signal when the geoip database files are updated, without requiring
+ 	// a restart of the broker
+ 	go func() {
+ 		for {
+ 			signal := <-sigChan
+ 			log.Println("Received signal:", signal, ". Reloading geoip databases.")
+ 			ctx.metrics.LoadGeoipDatabases(geoipDatabase, geoip6Database)
+ 		}
+ 	}()
+ 
 +	// Handle the various ways of setting up TLS. The legal configurations
 +	// are:
 +	//   --acme-hostnames (with optional --acme-email)
 +	//   --cert and --key together
 +	//   --disable-tls
 +	// The outputs of this block of code are the disableTLS,
 +	// needHTTP01Listener, certManager, and getCertificate variables.
  	if acmeHostnamesCommas != "" {
  		acmeHostnames := strings.Split(acmeHostnamesCommas, ",")
  		log.Printf("ACME hostnames: %q", acmeHostnames)



More information about the tor-commits mailing list