58 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package debug
 | |
| 
 | |
| import (
 | |
| 	"encoding/json"
 | |
| 	"fmt"
 | |
| 	"net/http"
 | |
| 	"net/http/pprof"
 | |
| 
 | |
| 	"github.com/gorilla/mux"
 | |
| 	log "github.com/sirupsen/logrus"
 | |
| 	"goauthentik.io/internal/config"
 | |
| 	"goauthentik.io/internal/utils/web"
 | |
| )
 | |
| 
 | |
| func EnableDebugServer() {
 | |
| 	l := log.WithField("logger", "authentik.go_debugger")
 | |
| 	if !config.Get().Debug {
 | |
| 		l.Info("not enabling debug server, set `AUTHENTIK_DEBUG` to `true` to enable it.")
 | |
| 		return
 | |
| 	}
 | |
| 	h := mux.NewRouter()
 | |
| 	h.HandleFunc("/debug/pprof/", pprof.Index)
 | |
| 	h.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
 | |
| 	h.HandleFunc("/debug/pprof/profile", pprof.Profile)
 | |
| 	h.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
 | |
| 	h.HandleFunc("/debug/pprof/trace", pprof.Trace)
 | |
| 	h.HandleFunc("/debug/dump_config", func(w http.ResponseWriter, r *http.Request) {
 | |
| 		enc := json.NewEncoder(w)
 | |
| 		enc.SetEscapeHTML(true)
 | |
| 		enc.SetIndent("", "\t")
 | |
| 		_ = enc.Encode(config.Get())
 | |
| 	})
 | |
| 	h.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
 | |
| 		_ = h.Walk(func(route *mux.Route, router *mux.Router, ancestors []*mux.Route) error {
 | |
| 			tpl, err := route.GetPathTemplate()
 | |
| 			if err != nil {
 | |
| 				return nil
 | |
| 			}
 | |
| 			_, err = w.Write([]byte(fmt.Sprintf("<a href='%[1]s'>%[1]s</a><br>", tpl)))
 | |
| 			if err != nil {
 | |
| 				l.WithError(err).Warning("failed to write index")
 | |
| 				return nil
 | |
| 			}
 | |
| 			return nil
 | |
| 		})
 | |
| 	})
 | |
| 	go func() {
 | |
| 		l.WithField("listen", config.Get().Listen.Debug).Info("Starting Debug server")
 | |
| 		err := http.ListenAndServe(
 | |
| 			config.Get().Listen.Debug,
 | |
| 			web.NewLoggingHandler(l, nil)(h),
 | |
| 		)
 | |
| 		if l != nil {
 | |
| 			l.WithError(err).Warn("failed to start debug server")
 | |
| 		}
 | |
| 	}()
 | |
| }
 | 
