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:
parent
7d39bd18bc
commit
9518519208
@ -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)
|
||||||
|
@ -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">
|
||||||
|
@ -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
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user