Verified Commit e0669011 authored by meskio's avatar meskio 🏔️
Browse files

Add a shim-token header to the passed requests

parent 61891990
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ import (

type MoatHandler struct {
	ProxyPass string
	Token     string
}

// ServeHTTP will pass incoming HTTP requests to the ProxyPass address
@@ -35,6 +36,7 @@ func (h *MoatHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	}

	r.Header.Set("X-Forwarded-For", r.RemoteAddr)
	r.Header.Set("shim-token", h.Token)
	resp, err := transport.RoundTrip(r)
	if err != nil {
		log.Println("Error: %s", err.Error())
@@ -68,6 +70,7 @@ func main() {
	var certFile string
	var keyFile string
	var authCookieFile string
	var httpTokenFile string

	flag.StringVar(&extOrAddr, "addr", "127.0.0.1:5000",
		"port to listen for incoming OR connections")
@@ -77,6 +80,8 @@ func main() {
	flag.StringVar(&keyFile, "key", "", "TLS private key file")
	flag.StringVar(&authCookieFile, "auth", "",
		"TOR_PT_AUTH_COOKIE_FILE for ExtOR connections")
	flag.StringVar(&httpTokenFile, "token", "",
		"file containing the token to be added as a shim-token http header")
	flag.Parse()

	addr, err := net.ResolveTCPAddr("tcp", extOrAddr)
@@ -113,8 +118,14 @@ func main() {
		log.Fatalf("Error listening on ExtOrAddr: %s", err.Error())
	}

	httpToken, err := readHttpToken(httpTokenFile)
	if err != nil {
		log.Fatalf("Error reading http token from %s: %s", httpTokenFile, err.Error())
	}

	handler := &MoatHandler{
		ProxyPass: proxyPass,
		Token:     httpToken,
	}

	if certFile == "" || keyFile == "" {
@@ -133,3 +144,12 @@ func main() {
	log.Println("Exiting.")

}

func readHttpToken(filename string) (string, error) {
	if filename == "" {
		return "", nil
	}

	token, err := ioutil.ReadFile(filename)
	return string(token), err
}