WIP redirect_uri verification
This commit is contained in:
parent
f3f72d8111
commit
3975f08441
|
@ -3,7 +3,7 @@ package web_test
|
||||||
import (
|
import (
|
||||||
"h4kor/owl-blogs"
|
"h4kor/owl-blogs"
|
||||||
main "h4kor/owl-blogs/cmd/owl/web"
|
main "h4kor/owl-blogs/cmd/owl/web"
|
||||||
"h4kor/owl-blogs/priv/assertions"
|
"h4kor/owl-blogs/test/assertions"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"os"
|
"os"
|
||||||
|
|
|
@ -3,7 +3,7 @@ package web_test
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
main "h4kor/owl-blogs/cmd/owl/web"
|
main "h4kor/owl-blogs/cmd/owl/web"
|
||||||
"h4kor/owl-blogs/priv/assertions"
|
"h4kor/owl-blogs/test/assertions"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
|
@ -3,7 +3,7 @@ package web_test
|
||||||
import (
|
import (
|
||||||
"h4kor/owl-blogs"
|
"h4kor/owl-blogs"
|
||||||
main "h4kor/owl-blogs/cmd/owl/web"
|
main "h4kor/owl-blogs/cmd/owl/web"
|
||||||
"h4kor/owl-blogs/priv/assertions"
|
"h4kor/owl-blogs/test/assertions"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
|
|
|
@ -3,7 +3,7 @@ package web_test
|
||||||
import (
|
import (
|
||||||
"h4kor/owl-blogs"
|
"h4kor/owl-blogs"
|
||||||
main "h4kor/owl-blogs/cmd/owl/web"
|
main "h4kor/owl-blogs/cmd/owl/web"
|
||||||
"h4kor/owl-blogs/priv/assertions"
|
"h4kor/owl-blogs/test/assertions"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"os"
|
"os"
|
||||||
|
|
|
@ -3,7 +3,7 @@ package web_test
|
||||||
import (
|
import (
|
||||||
"h4kor/owl-blogs"
|
"h4kor/owl-blogs"
|
||||||
main "h4kor/owl-blogs/cmd/owl/web"
|
main "h4kor/owl-blogs/cmd/owl/web"
|
||||||
"h4kor/owl-blogs/priv/assertions"
|
"h4kor/owl-blogs/test/assertions"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
|
@ -3,7 +3,7 @@ package web_test
|
||||||
import (
|
import (
|
||||||
owl "h4kor/owl-blogs"
|
owl "h4kor/owl-blogs"
|
||||||
main "h4kor/owl-blogs/cmd/owl/web"
|
main "h4kor/owl-blogs/cmd/owl/web"
|
||||||
"h4kor/owl-blogs/priv/assertions"
|
"h4kor/owl-blogs/test/assertions"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"os"
|
"os"
|
||||||
|
|
|
@ -3,7 +3,7 @@ package web_test
|
||||||
import (
|
import (
|
||||||
"h4kor/owl-blogs"
|
"h4kor/owl-blogs"
|
||||||
main "h4kor/owl-blogs/cmd/owl/web"
|
main "h4kor/owl-blogs/cmd/owl/web"
|
||||||
"h4kor/owl-blogs/priv/assertions"
|
"h4kor/owl-blogs/test/assertions"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
57
owl_test.go
57
owl_test.go
|
@ -2,67 +2,10 @@ package owl_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"h4kor/owl-blogs"
|
"h4kor/owl-blogs"
|
||||||
"io"
|
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"net/http"
|
|
||||||
"net/url"
|
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
type MockHtmlParser struct{}
|
|
||||||
|
|
||||||
func (*MockHtmlParser) ParseHEntry(resp *http.Response) (owl.ParsedHEntry, error) {
|
|
||||||
return owl.ParsedHEntry{Title: "Mock Title"}, nil
|
|
||||||
|
|
||||||
}
|
|
||||||
func (*MockHtmlParser) ParseLinks(resp *http.Response) ([]string, error) {
|
|
||||||
return []string{"http://example.com"}, nil
|
|
||||||
|
|
||||||
}
|
|
||||||
func (*MockHtmlParser) ParseLinksFromString(string) ([]string, error) {
|
|
||||||
return []string{"http://example.com"}, nil
|
|
||||||
|
|
||||||
}
|
|
||||||
func (*MockHtmlParser) GetWebmentionEndpoint(resp *http.Response) (string, error) {
|
|
||||||
return "http://example.com/webmention", nil
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
type MockParseLinksHtmlParser struct {
|
|
||||||
Links []string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*MockParseLinksHtmlParser) ParseHEntry(resp *http.Response) (owl.ParsedHEntry, error) {
|
|
||||||
return owl.ParsedHEntry{Title: "Mock Title"}, nil
|
|
||||||
|
|
||||||
}
|
|
||||||
func (parser *MockParseLinksHtmlParser) ParseLinks(resp *http.Response) ([]string, error) {
|
|
||||||
return parser.Links, nil
|
|
||||||
|
|
||||||
}
|
|
||||||
func (parser *MockParseLinksHtmlParser) ParseLinksFromString(string) ([]string, error) {
|
|
||||||
return parser.Links, nil
|
|
||||||
|
|
||||||
}
|
|
||||||
func (*MockParseLinksHtmlParser) GetWebmentionEndpoint(resp *http.Response) (string, error) {
|
|
||||||
return "http://example.com/webmention", nil
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
type MockHttpClient struct{}
|
|
||||||
|
|
||||||
func (*MockHttpClient) Get(url string) (resp *http.Response, err error) {
|
|
||||||
return &http.Response{}, nil
|
|
||||||
}
|
|
||||||
func (*MockHttpClient) Post(url, contentType string, body io.Reader) (resp *http.Response, err error) {
|
|
||||||
|
|
||||||
return &http.Response{}, nil
|
|
||||||
}
|
|
||||||
func (*MockHttpClient) PostForm(url string, data url.Values) (resp *http.Response, err error) {
|
|
||||||
|
|
||||||
return &http.Response{}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func randomName() string {
|
func randomName() string {
|
||||||
rand.Seed(time.Now().UnixNano())
|
rand.Seed(time.Now().UnixNano())
|
||||||
var letters = []rune("abcdefghijklmnopqrstuvwxyz")
|
var letters = []rune("abcdefghijklmnopqrstuvwxyz")
|
||||||
|
|
41
post_test.go
41
post_test.go
|
@ -2,7 +2,8 @@ package owl_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"h4kor/owl-blogs"
|
"h4kor/owl-blogs"
|
||||||
"h4kor/owl-blogs/priv/assertions"
|
"h4kor/owl-blogs/test/assertions"
|
||||||
|
"h4kor/owl-blogs/test/mocks"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
@ -146,8 +147,8 @@ func TestPersistIncomingWebmention(t *testing.T) {
|
||||||
|
|
||||||
func TestAddIncomingWebmentionCreatesFile(t *testing.T) {
|
func TestAddIncomingWebmentionCreatesFile(t *testing.T) {
|
||||||
repo := getTestRepo(owl.RepoConfig{})
|
repo := getTestRepo(owl.RepoConfig{})
|
||||||
repo.HttpClient = &MockHttpClient{}
|
repo.HttpClient = &mocks.MockHttpClient{}
|
||||||
repo.Parser = &MockHtmlParser{}
|
repo.Parser = &mocks.MockHtmlParser{}
|
||||||
user, _ := repo.CreateUser("testuser")
|
user, _ := repo.CreateUser("testuser")
|
||||||
post, _ := user.CreateNewPost("testpost", false)
|
post, _ := user.CreateNewPost("testpost", false)
|
||||||
|
|
||||||
|
@ -160,8 +161,8 @@ func TestAddIncomingWebmentionCreatesFile(t *testing.T) {
|
||||||
|
|
||||||
func TestAddIncomingWebmentionNotOverwritingWebmention(t *testing.T) {
|
func TestAddIncomingWebmentionNotOverwritingWebmention(t *testing.T) {
|
||||||
repo := getTestRepo(owl.RepoConfig{})
|
repo := getTestRepo(owl.RepoConfig{})
|
||||||
repo.HttpClient = &MockHttpClient{}
|
repo.HttpClient = &mocks.MockHttpClient{}
|
||||||
repo.Parser = &MockHtmlParser{}
|
repo.Parser = &mocks.MockHtmlParser{}
|
||||||
user, _ := repo.CreateUser("testuser")
|
user, _ := repo.CreateUser("testuser")
|
||||||
post, _ := user.CreateNewPost("testpost", false)
|
post, _ := user.CreateNewPost("testpost", false)
|
||||||
|
|
||||||
|
@ -180,8 +181,8 @@ func TestAddIncomingWebmentionNotOverwritingWebmention(t *testing.T) {
|
||||||
|
|
||||||
func TestEnrichAddsTitle(t *testing.T) {
|
func TestEnrichAddsTitle(t *testing.T) {
|
||||||
repo := getTestRepo(owl.RepoConfig{})
|
repo := getTestRepo(owl.RepoConfig{})
|
||||||
repo.HttpClient = &MockHttpClient{}
|
repo.HttpClient = &mocks.MockHttpClient{}
|
||||||
repo.Parser = &MockHtmlParser{}
|
repo.Parser = &mocks.MockHtmlParser{}
|
||||||
user, _ := repo.CreateUser("testuser")
|
user, _ := repo.CreateUser("testuser")
|
||||||
post, _ := user.CreateNewPost("testpost", false)
|
post, _ := user.CreateNewPost("testpost", false)
|
||||||
|
|
||||||
|
@ -294,8 +295,8 @@ func TestScanningForLinksDoesAddReplyUrl(t *testing.T) {
|
||||||
|
|
||||||
func TestCanSendWebmention(t *testing.T) {
|
func TestCanSendWebmention(t *testing.T) {
|
||||||
repo := getTestRepo(owl.RepoConfig{})
|
repo := getTestRepo(owl.RepoConfig{})
|
||||||
repo.HttpClient = &MockHttpClient{}
|
repo.HttpClient = &mocks.MockHttpClient{}
|
||||||
repo.Parser = &MockHtmlParser{}
|
repo.Parser = &mocks.MockHtmlParser{}
|
||||||
user, _ := repo.CreateUser("testuser")
|
user, _ := repo.CreateUser("testuser")
|
||||||
post, _ := user.CreateNewPost("testpost", false)
|
post, _ := user.CreateNewPost("testpost", false)
|
||||||
|
|
||||||
|
@ -315,8 +316,8 @@ func TestCanSendWebmention(t *testing.T) {
|
||||||
|
|
||||||
func TestSendWebmentionOnlyScansOncePerWeek(t *testing.T) {
|
func TestSendWebmentionOnlyScansOncePerWeek(t *testing.T) {
|
||||||
repo := getTestRepo(owl.RepoConfig{})
|
repo := getTestRepo(owl.RepoConfig{})
|
||||||
repo.HttpClient = &MockHttpClient{}
|
repo.HttpClient = &mocks.MockHttpClient{}
|
||||||
repo.Parser = &MockHtmlParser{}
|
repo.Parser = &mocks.MockHtmlParser{}
|
||||||
user, _ := repo.CreateUser("testuser")
|
user, _ := repo.CreateUser("testuser")
|
||||||
post, _ := user.CreateNewPost("testpost", false)
|
post, _ := user.CreateNewPost("testpost", false)
|
||||||
|
|
||||||
|
@ -340,8 +341,8 @@ func TestSendWebmentionOnlyScansOncePerWeek(t *testing.T) {
|
||||||
|
|
||||||
func TestSendingMultipleWebmentions(t *testing.T) {
|
func TestSendingMultipleWebmentions(t *testing.T) {
|
||||||
repo := getTestRepo(owl.RepoConfig{})
|
repo := getTestRepo(owl.RepoConfig{})
|
||||||
repo.HttpClient = &MockHttpClient{}
|
repo.HttpClient = &mocks.MockHttpClient{}
|
||||||
repo.Parser = &MockHtmlParser{}
|
repo.Parser = &mocks.MockHtmlParser{}
|
||||||
user, _ := repo.CreateUser("testuser")
|
user, _ := repo.CreateUser("testuser")
|
||||||
post, _ := user.CreateNewPost("testpost", false)
|
post, _ := user.CreateNewPost("testpost", false)
|
||||||
|
|
||||||
|
@ -367,8 +368,8 @@ func TestSendingMultipleWebmentions(t *testing.T) {
|
||||||
|
|
||||||
func TestReceivingMultipleWebmentions(t *testing.T) {
|
func TestReceivingMultipleWebmentions(t *testing.T) {
|
||||||
repo := getTestRepo(owl.RepoConfig{})
|
repo := getTestRepo(owl.RepoConfig{})
|
||||||
repo.HttpClient = &MockHttpClient{}
|
repo.HttpClient = &mocks.MockHttpClient{}
|
||||||
repo.Parser = &MockHtmlParser{}
|
repo.Parser = &mocks.MockHtmlParser{}
|
||||||
user, _ := repo.CreateUser("testuser")
|
user, _ := repo.CreateUser("testuser")
|
||||||
post, _ := user.CreateNewPost("testpost", false)
|
post, _ := user.CreateNewPost("testpost", false)
|
||||||
|
|
||||||
|
@ -392,8 +393,8 @@ func TestReceivingMultipleWebmentions(t *testing.T) {
|
||||||
|
|
||||||
func TestSendingAndReceivingMultipleWebmentions(t *testing.T) {
|
func TestSendingAndReceivingMultipleWebmentions(t *testing.T) {
|
||||||
repo := getTestRepo(owl.RepoConfig{})
|
repo := getTestRepo(owl.RepoConfig{})
|
||||||
repo.HttpClient = &MockHttpClient{}
|
repo.HttpClient = &mocks.MockHttpClient{}
|
||||||
repo.Parser = &MockHtmlParser{}
|
repo.Parser = &mocks.MockHtmlParser{}
|
||||||
user, _ := repo.CreateUser("testuser")
|
user, _ := repo.CreateUser("testuser")
|
||||||
post, _ := user.CreateNewPost("testpost", false)
|
post, _ := user.CreateNewPost("testpost", false)
|
||||||
|
|
||||||
|
@ -425,8 +426,8 @@ func TestSendingAndReceivingMultipleWebmentions(t *testing.T) {
|
||||||
|
|
||||||
func TestComplexParallelWebmentions(t *testing.T) {
|
func TestComplexParallelWebmentions(t *testing.T) {
|
||||||
repo := getTestRepo(owl.RepoConfig{})
|
repo := getTestRepo(owl.RepoConfig{})
|
||||||
repo.HttpClient = &MockHttpClient{}
|
repo.HttpClient = &mocks.MockHttpClient{}
|
||||||
repo.Parser = &MockParseLinksHtmlParser{
|
repo.Parser = &mocks.MockParseLinksHtmlParser{
|
||||||
Links: []string{
|
Links: []string{
|
||||||
"http://example.com/1",
|
"http://example.com/1",
|
||||||
"http://example.com/2",
|
"http://example.com/2",
|
||||||
|
@ -469,7 +470,7 @@ func TestComplexParallelWebmentions(t *testing.T) {
|
||||||
// func TestComplexParallelSimulatedProcessesWebmentions(t *testing.T) {
|
// func TestComplexParallelSimulatedProcessesWebmentions(t *testing.T) {
|
||||||
// repoName := testRepoName()
|
// repoName := testRepoName()
|
||||||
// repo, _ := owl.CreateRepository(repoName, owl.RepoConfig{})
|
// repo, _ := owl.CreateRepository(repoName, owl.RepoConfig{})
|
||||||
// repo.HttpClient = &MockHttpClient{}
|
// repo.HttpClient = &mocks.MockHttpClient{}
|
||||||
// repo.Parser = &MockParseLinksHtmlParser{
|
// repo.Parser = &MockParseLinksHtmlParser{
|
||||||
// Links: []string{
|
// Links: []string{
|
||||||
// "http://example.com/1",
|
// "http://example.com/1",
|
||||||
|
|
|
@ -2,7 +2,7 @@ package owl_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"h4kor/owl-blogs"
|
"h4kor/owl-blogs"
|
||||||
"h4kor/owl-blogs/priv/assertions"
|
"h4kor/owl-blogs/test/assertions"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
|
@ -2,7 +2,7 @@ package owl_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"h4kor/owl-blogs"
|
"h4kor/owl-blogs"
|
||||||
"h4kor/owl-blogs/priv/assertions"
|
"h4kor/owl-blogs/test/assertions"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
|
@ -2,7 +2,7 @@ package owl_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"h4kor/owl-blogs"
|
"h4kor/owl-blogs"
|
||||||
"h4kor/owl-blogs/priv/assertions"
|
"h4kor/owl-blogs/test/assertions"
|
||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
package mocks
|
||||||
|
|
||||||
|
import (
|
||||||
|
"h4kor/owl-blogs"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MockHtmlParser struct{}
|
||||||
|
|
||||||
|
func (*MockHtmlParser) ParseHEntry(resp *http.Response) (owl.ParsedHEntry, error) {
|
||||||
|
return owl.ParsedHEntry{Title: "Mock Title"}, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
func (*MockHtmlParser) ParseLinks(resp *http.Response) ([]string, error) {
|
||||||
|
return []string{"http://example.com"}, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
func (*MockHtmlParser) ParseLinksFromString(string) ([]string, error) {
|
||||||
|
return []string{"http://example.com"}, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
func (*MockHtmlParser) GetWebmentionEndpoint(resp *http.Response) (string, error) {
|
||||||
|
return "http://example.com/webmention", nil
|
||||||
|
|
||||||
|
}
|
||||||
|
func (*MockHtmlParser) GetRedirctUris(resp *http.Response) ([]string, error) {
|
||||||
|
return []string{"http://example.com/redirect"}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type MockParseLinksHtmlParser struct {
|
||||||
|
Links []string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*MockParseLinksHtmlParser) ParseHEntry(resp *http.Response) (owl.ParsedHEntry, error) {
|
||||||
|
return owl.ParsedHEntry{Title: "Mock Title"}, nil
|
||||||
|
}
|
||||||
|
func (parser *MockParseLinksHtmlParser) ParseLinks(resp *http.Response) ([]string, error) {
|
||||||
|
return parser.Links, nil
|
||||||
|
}
|
||||||
|
func (parser *MockParseLinksHtmlParser) ParseLinksFromString(string) ([]string, error) {
|
||||||
|
return parser.Links, nil
|
||||||
|
}
|
||||||
|
func (*MockParseLinksHtmlParser) GetWebmentionEndpoint(resp *http.Response) (string, error) {
|
||||||
|
return "http://example.com/webmention", nil
|
||||||
|
}
|
||||||
|
func (parser *MockParseLinksHtmlParser) GetRedirctUris(resp *http.Response) ([]string, error) {
|
||||||
|
return parser.Links, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type MockHttpClient struct{}
|
||||||
|
|
||||||
|
func (*MockHttpClient) Get(url string) (resp *http.Response, err error) {
|
||||||
|
return &http.Response{}, nil
|
||||||
|
}
|
||||||
|
func (*MockHttpClient) Post(url, contentType string, body io.Reader) (resp *http.Response, err error) {
|
||||||
|
|
||||||
|
return &http.Response{}, nil
|
||||||
|
}
|
||||||
|
func (*MockHttpClient) PostForm(url string, data url.Values) (resp *http.Response, err error) {
|
||||||
|
|
||||||
|
return &http.Response{}, nil
|
||||||
|
}
|
|
@ -3,7 +3,7 @@ package owl_test
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"h4kor/owl-blogs"
|
"h4kor/owl-blogs"
|
||||||
"h4kor/owl-blogs/priv/assertions"
|
"h4kor/owl-blogs/test/assertions"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
|
@ -61,6 +61,7 @@ type HtmlParser interface {
|
||||||
ParseLinks(resp *http.Response) ([]string, error)
|
ParseLinks(resp *http.Response) ([]string, error)
|
||||||
ParseLinksFromString(string) ([]string, error)
|
ParseLinksFromString(string) ([]string, error)
|
||||||
GetWebmentionEndpoint(resp *http.Response) (string, error)
|
GetWebmentionEndpoint(resp *http.Response) (string, error)
|
||||||
|
GetRedirctUris(resp *http.Response) ([]string, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type OwlHttpClient = http.Client
|
type OwlHttpClient = http.Client
|
||||||
|
@ -243,3 +244,48 @@ func (OwlHtmlParser) GetWebmentionEndpoint(resp *http.Response) (string, error)
|
||||||
}
|
}
|
||||||
return requestUrl.ResolveReference(linkUrl).String(), nil
|
return requestUrl.ResolveReference(linkUrl).String(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (OwlHtmlParser) GetRedirctUris(resp *http.Response) ([]string, error) {
|
||||||
|
//request url
|
||||||
|
requestUrl := resp.Request.URL
|
||||||
|
|
||||||
|
htmlStr, err := readResponseBody(resp)
|
||||||
|
if err != nil {
|
||||||
|
return make([]string, 0), err
|
||||||
|
}
|
||||||
|
doc, err := html.Parse(strings.NewReader(htmlStr))
|
||||||
|
if err != nil {
|
||||||
|
return make([]string, 0), err
|
||||||
|
}
|
||||||
|
|
||||||
|
var findLinks func(*html.Node) ([]string, error)
|
||||||
|
findLinks = func(n *html.Node) ([]string, error) {
|
||||||
|
links := make([]string, 0)
|
||||||
|
if n.Type == html.ElementNode && n.Data == "link" {
|
||||||
|
// check for rel="redirect_uri"
|
||||||
|
rel := ""
|
||||||
|
href := ""
|
||||||
|
|
||||||
|
for _, attr := range n.Attr {
|
||||||
|
if attr.Key == "href" {
|
||||||
|
href = attr.Val
|
||||||
|
}
|
||||||
|
if attr.Key == "rel" {
|
||||||
|
rel = attr.Val
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if rel == "redirect_uri" {
|
||||||
|
linkUrl, err := url.Parse(href)
|
||||||
|
if err == nil {
|
||||||
|
links = append(links, requestUrl.ResolveReference(linkUrl).String())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for c := n.FirstChild; c != nil; c = c.NextSibling {
|
||||||
|
childLinks, _ := findLinks(c)
|
||||||
|
links = append(links, childLinks...)
|
||||||
|
}
|
||||||
|
return links, nil
|
||||||
|
}
|
||||||
|
return findLinks(doc)
|
||||||
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@ package owl_test
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"h4kor/owl-blogs"
|
"h4kor/owl-blogs"
|
||||||
"h4kor/owl-blogs/priv/assertions"
|
"h4kor/owl-blogs/test/assertions"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
Loading…
Reference in New Issue