fixed webmention discovery

This commit is contained in:
Niko Abeler 2022-09-06 21:05:51 +02:00
parent edca158985
commit de017b86f9
2 changed files with 22 additions and 4 deletions

View File

@ -177,10 +177,15 @@ func (OwlHtmlParser) GetWebmentionEndpoint(resp *http.Response) (string, error)
findEndpoint = func(n *html.Node) (string, error) {
if n.Type == html.ElementNode && (n.Data == "link" || n.Data == "a") {
for _, attr := range n.Attr {
if attr.Key == "rel" && strings.Contains(attr.Val, "webmention") {
for _, attr := range n.Attr {
if attr.Key == "href" {
return attr.Val, nil
if attr.Key == "rel" {
vals := strings.Split(attr.Val, " ")
for _, val := range vals {
if val == "webmention" {
for _, attr := range n.Attr {
if attr.Key == "href" {
return attr.Val, nil
}
}
}
}
}

View File

@ -75,6 +75,19 @@ func TestGetWebmentionEndpointLinkA(t *testing.T) {
}
}
func TestGetWebmentionEndpointLinkAFakeWebmention(t *testing.T) {
html := []byte("<a rel=\"not-webmention\" href=\"http://example.com/foo\" /><a rel=\"webmention\" href=\"http://example.com/webmention\" />")
parser := &owl.OwlHtmlParser{}
endpoint, err := parser.GetWebmentionEndpoint(constructResponse(html))
if err != nil {
t.Errorf("Unable to parse feed: %v", err)
}
if endpoint != "http://example.com/webmention" {
t.Errorf("Wrong endpoint. Expected %v, got %v", "http://example.com/webmention", endpoint)
}
}
func TestGetWebmentionEndpointLinkHeader(t *testing.T) {
html := []byte("")
parser := &owl.OwlHtmlParser{}