tsweb: add /debug/ access via &debugkey + TS_DEBUG_KEY_PATH
parent
d580157921
commit
57de94c7aa
|
@ -6,9 +6,11 @@
|
||||||
package tsweb
|
package tsweb
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"expvar"
|
"expvar"
|
||||||
_ "expvar"
|
_ "expvar"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
_ "net/http/pprof"
|
_ "net/http/pprof"
|
||||||
|
@ -65,7 +67,20 @@ func AllowDebugAccess(r *http.Request) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
ip := net.ParseIP(ipStr)
|
ip := net.ParseIP(ipStr)
|
||||||
return interfaces.IsTailscaleIP(ip) || ip.IsLoopback() || ipStr == os.Getenv("ALLOW_DEBUG_IP")
|
if interfaces.IsTailscaleIP(ip) || ip.IsLoopback() || ipStr == os.Getenv("TS_ALLOW_DEBUG_IP") {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if r.Method == "GET" {
|
||||||
|
urlKey := r.FormValue("debugkey")
|
||||||
|
keyPath := os.Getenv("TS_DEBUG_KEY_PATH")
|
||||||
|
if urlKey != "" && keyPath != "" {
|
||||||
|
slurp, err := ioutil.ReadFile(keyPath)
|
||||||
|
if err == nil && string(bytes.TrimSpace(slurp)) == urlKey {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// Protected wraps a provided debug handler, h, returning a Handler
|
// Protected wraps a provided debug handler, h, returning a Handler
|
||||||
|
@ -77,7 +92,7 @@ func Protected(h http.Handler) http.Handler {
|
||||||
msg := "debug access denied"
|
msg := "debug access denied"
|
||||||
if DevMode {
|
if DevMode {
|
||||||
ipStr, _, _ := net.SplitHostPort(r.RemoteAddr)
|
ipStr, _, _ := net.SplitHostPort(r.RemoteAddr)
|
||||||
msg += fmt.Sprintf("; to permit access, set ALLOW_DEBUG_IP=%v", ipStr)
|
msg += fmt.Sprintf("; to permit access, set TS_ALLOW_DEBUG_IP=%v", ipStr)
|
||||||
}
|
}
|
||||||
http.Error(w, msg, http.StatusForbidden)
|
http.Error(w, msg, http.StatusForbidden)
|
||||||
return
|
return
|
||||||
|
|
Loading…
Reference in New Issue