diff --git a/internal/server/handlers.go b/internal/server/handlers.go index 949844d..5894820 100644 --- a/internal/server/handlers.go +++ b/internal/server/handlers.go @@ -6,6 +6,7 @@ import ( "errors" "net" "net/http" + "net/url" "runtime" "strconv" "time" @@ -419,13 +420,21 @@ func (s *Server) handleASDetailJSON() http.HandlerFunc { // handlePrefixDetailJSON returns prefix details as JSON func (s *Server) handlePrefixDetailJSON() http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - prefix := chi.URLParam(r, "prefix") - if prefix == "" { + prefixParam := chi.URLParam(r, "prefix") + if prefixParam == "" { writeJSONError(w, http.StatusBadRequest, "Prefix parameter is required") return } + // URL decode the prefix parameter + prefix, err := url.QueryUnescape(prefixParam) + if err != nil { + writeJSONError(w, http.StatusBadRequest, "Invalid prefix parameter") + + return + } + routes, err := s.db.GetPrefixDetails(prefix) if err != nil { if errors.Is(err, database.ErrNoRoute) { @@ -520,13 +529,21 @@ func (s *Server) handleASDetail() http.HandlerFunc { // handlePrefixDetail returns a handler that serves the prefix detail HTML page func (s *Server) handlePrefixDetail() http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - prefix := chi.URLParam(r, "prefix") - if prefix == "" { + prefixParam := chi.URLParam(r, "prefix") + if prefixParam == "" { http.Error(w, "Prefix parameter is required", http.StatusBadRequest) return } + // URL decode the prefix parameter + prefix, err := url.QueryUnescape(prefixParam) + if err != nil { + http.Error(w, "Invalid prefix parameter", http.StatusBadRequest) + + return + } + routes, err := s.db.GetPrefixDetails(prefix) if err != nil { if errors.Is(err, database.ErrNoRoute) { @@ -642,7 +659,7 @@ func (s *Server) handleIPRedirect() http.HandlerFunc { return } - // Redirect to the prefix detail page - http.Redirect(w, r, "/prefix/"+asInfo.Prefix, http.StatusSeeOther) + // Redirect to the prefix detail page (URL encode the prefix) + http.Redirect(w, r, "/prefix/"+url.QueryEscape(asInfo.Prefix), http.StatusSeeOther) } } diff --git a/internal/templates/as_detail.html b/internal/templates/as_detail.html index 60ce777..aa09694 100644 --- a/internal/templates/as_detail.html +++ b/internal/templates/as_detail.html @@ -178,7 +178,7 @@
{{range .IPv4Prefixes}}