Add /ip/<ip> route that redirects to prefix detail page
- Implement handleIPRedirect handler that looks up the prefix containing an IP - Add /ip/{ip} route to routes.go - Reuse existing GetASInfoForIP database method which returns prefix info - Redirect to /prefix/<prefix> page with HTTP 303 See Other status - Handle invalid IPs (400) and IPs with no route (404)
This commit is contained in:
parent
aeeb5e7d7d
commit
af9ff258b1
@ -616,3 +616,33 @@ func (s *Server) handlePrefixDetail() http.HandlerFunc {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// handleIPRedirect looks up the prefix containing the IP and redirects to its detail page
|
||||||
|
func (s *Server) handleIPRedirect() http.HandlerFunc {
|
||||||
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
ip := chi.URLParam(r, "ip")
|
||||||
|
if ip == "" {
|
||||||
|
http.Error(w, "IP parameter is required", http.StatusBadRequest)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Look up AS information for the IP (which includes the prefix)
|
||||||
|
asInfo, err := s.db.GetASInfoForIP(ip)
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, database.ErrInvalidIP) {
|
||||||
|
http.Error(w, "Invalid IP address", http.StatusBadRequest)
|
||||||
|
} else if errors.Is(err, database.ErrNoRoute) {
|
||||||
|
http.Error(w, "No route found for this IP", http.StatusNotFound)
|
||||||
|
} else {
|
||||||
|
s.logger.Error("Failed to look up IP", "error", err)
|
||||||
|
http.Error(w, "Internal server error", http.StatusInternalServerError)
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Redirect to the prefix detail page
|
||||||
|
http.Redirect(w, r, "/prefix/"+asInfo.Prefix, http.StatusSeeOther)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -28,6 +28,7 @@ func (s *Server) setupRoutes() {
|
|||||||
// AS and prefix detail pages
|
// AS and prefix detail pages
|
||||||
r.Get("/as/{asn}", s.handleASDetail())
|
r.Get("/as/{asn}", s.handleASDetail())
|
||||||
r.Get("/prefix/{prefix}", s.handlePrefixDetail())
|
r.Get("/prefix/{prefix}", s.handlePrefixDetail())
|
||||||
|
r.Get("/ip/{ip}", s.handleIPRedirect())
|
||||||
|
|
||||||
// API routes
|
// API routes
|
||||||
r.Route("/api/v1", func(r chi.Router) {
|
r.Route("/api/v1", func(r chi.Router) {
|
||||||
|
Loading…
Reference in New Issue
Block a user