package handlers import ( "github.com/gin-gonic/gin" "git.netcell-it.de/projekte/edgeguard-native/internal/handlers/response" "git.netcell-it.de/projekte/edgeguard-native/internal/services/diagnostics" ) // DiagnosticsHandler exposes /api/v1/diagnostics/{ping,traceroute, // dig,curl,tcp}. Authentifiziert hinter requireAuth — wir wollen das // keine externen Scanner als Reflection-Service missbrauchen können. type DiagnosticsHandler struct{} func NewDiagnosticsHandler() *DiagnosticsHandler { return &DiagnosticsHandler{} } func (h *DiagnosticsHandler) Register(rg *gin.RouterGroup) { g := rg.Group("/diagnostics") g.POST("/ping", h.Ping) g.POST("/traceroute", h.Traceroute) g.POST("/dig", h.Dig) g.POST("/curl", h.Curl) g.POST("/tcp", h.TCP) } type targetReq struct { Target string `json:"target" binding:"required"` } type digReq struct { Target string `json:"target" binding:"required"` Type string `json:"type"` } type tcpReq struct { Target string `json:"target" binding:"required"` Port int `json:"port" binding:"required"` } func (h *DiagnosticsHandler) Ping(c *gin.Context) { var req targetReq if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, err) return } res, err := diagnostics.Ping(c.Request.Context(), req.Target) if err != nil { response.BadRequest(c, err) return } response.OK(c, res) } func (h *DiagnosticsHandler) Traceroute(c *gin.Context) { var req targetReq if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, err) return } res, err := diagnostics.Traceroute(c.Request.Context(), req.Target) if err != nil { response.BadRequest(c, err) return } response.OK(c, res) } func (h *DiagnosticsHandler) Dig(c *gin.Context) { var req digReq if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, err) return } res, err := diagnostics.Dig(c.Request.Context(), req.Target, req.Type) if err != nil { response.BadRequest(c, err) return } response.OK(c, res) } func (h *DiagnosticsHandler) Curl(c *gin.Context) { var req targetReq if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, err) return } res, err := diagnostics.Curl(c.Request.Context(), req.Target) if err != nil { response.BadRequest(c, err) return } response.OK(c, res) } func (h *DiagnosticsHandler) TCP(c *gin.Context) { var req tcpReq if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, err) return } res, err := diagnostics.TCPProbe(c.Request.Context(), req.Target, req.Port) if err != nil { response.BadRequest(c, err) return } response.OK(c, res) }