Fix prefix links on prefix length page with URL encoding

- Add urlEncode template function to properly encode prefix URLs
- Move prefix_length.html to embedded templates with function map
- Prevents broken links for prefixes containing slashes
This commit is contained in:
Jeffrey Paul 2025-07-28 22:00:27 +02:00
parent 7d39bd18bc
commit 9518519208
4 changed files with 178390 additions and 1365 deletions

View File

@ -5,7 +5,6 @@ import (
"context" "context"
"encoding/json" "encoding/json"
"errors" "errors"
"html/template"
"net" "net"
"net/http" "net/http"
"net/url" "net/url"
@ -838,7 +837,7 @@ func (s *Server) handlePrefixLength() http.HandlerFunc {
default: default:
} }
tmpl := template.Must(template.ParseFiles("internal/templates/prefix_length.html")) tmpl := templates.PrefixLengthTemplate()
if err := tmpl.Execute(w, data); err != nil { if err := tmpl.Execute(w, data); err != nil {
s.logger.Error("Failed to render prefix length template", "error", err) s.logger.Error("Failed to render prefix length template", "error", err)
http.Error(w, "Internal Server Error", http.StatusInternalServerError) http.Error(w, "Internal Server Error", http.StatusInternalServerError)

View File

@ -93,7 +93,7 @@
<tbody> <tbody>
{{ range .Prefixes }} {{ range .Prefixes }}
<tr> <tr>
<td><a href="/prefix/{{ .Prefix }}" class="prefix-link">{{ .Prefix }}</a></td> <td><a href="/prefix/{{ .Prefix | urlEncode }}" class="prefix-link">{{ .Prefix }}</a></td>
<td class="age">{{ .Age }}</td> <td class="age">{{ .Age }}</td>
<td> <td>
<a href="/as/{{ .OriginASN }}" class="as-link"> <a href="/as/{{ .OriginASN }}" class="as-link">

View File

@ -18,11 +18,15 @@ var asDetailHTML string
//go:embed prefix_detail.html //go:embed prefix_detail.html
var prefixDetailHTML string var prefixDetailHTML string
//go:embed prefix_length.html
var prefixLengthHTML string
// Templates contains all parsed templates // Templates contains all parsed templates
type Templates struct { type Templates struct {
Status *template.Template Status *template.Template
ASDetail *template.Template ASDetail *template.Template
PrefixDetail *template.Template PrefixDetail *template.Template
PrefixLength *template.Template
} }
var ( var (
@ -99,6 +103,12 @@ func initTemplates() {
if err != nil { if err != nil {
panic("failed to parse prefix detail template: " + err.Error()) panic("failed to parse prefix detail template: " + err.Error())
} }
// Parse prefix length template
defaultTemplates.PrefixLength, err = template.New("prefixLength").Funcs(funcs).Parse(prefixLengthHTML)
if err != nil {
panic("failed to parse prefix length template: " + err.Error())
}
} }
// Get returns the singleton Templates instance // Get returns the singleton Templates instance
@ -122,3 +132,8 @@ func ASDetailTemplate() *template.Template {
func PrefixDetailTemplate() *template.Template { func PrefixDetailTemplate() *template.Template {
return Get().PrefixDetail return Get().PrefixDetail
} }
// PrefixLengthTemplate returns the parsed prefix length template
func PrefixLengthTemplate() *template.Template {
return Get().PrefixLength
}

179735
log.txt

File diff suppressed because it is too large Load Diff