ICU-669 Handle relative links better
Этот коммит содержится в:
13
app/post.go
13
app/post.go
@@ -749,16 +749,16 @@ func (a *App) GetOpenGraphMetadata(requestURL string) *opengraph.OpenGraph {
|
||||
l4g.Error("GetOpenGraphMetadata processing failed for url=%v with err=%v", requestURL, err.Error())
|
||||
}
|
||||
|
||||
og = makeOpenGraphURLsAbsolute(og, requestURL)
|
||||
makeOpenGraphURLsAbsolute(og, requestURL)
|
||||
|
||||
return og
|
||||
}
|
||||
|
||||
func makeOpenGraphURLsAbsolute(og *opengraph.OpenGraph, requestURL string) *opengraph.OpenGraph {
|
||||
func makeOpenGraphURLsAbsolute(og *opengraph.OpenGraph, requestURL string) {
|
||||
parsedRequestURL, err := url.Parse(requestURL)
|
||||
if err != nil {
|
||||
l4g.Warn("makeOpenGraphURLsAbsolute failed to parse url=%v", requestURL)
|
||||
return og
|
||||
return
|
||||
}
|
||||
|
||||
makeURLAbsolute := func(resultURL string) string {
|
||||
@@ -776,10 +776,7 @@ func makeOpenGraphURLsAbsolute(og *opengraph.OpenGraph, requestURL string) *open
|
||||
return resultURL
|
||||
}
|
||||
|
||||
parsedResultURL.Scheme = parsedRequestURL.Scheme
|
||||
parsedResultURL.Host = parsedRequestURL.Host
|
||||
|
||||
return parsedResultURL.String()
|
||||
return parsedRequestURL.ResolveReference(parsedResultURL).String()
|
||||
}
|
||||
|
||||
og.URL = makeURLAbsolute(og.URL)
|
||||
@@ -798,8 +795,6 @@ func makeOpenGraphURLsAbsolute(og *opengraph.OpenGraph, requestURL string) *open
|
||||
video.URL = makeURLAbsolute(video.URL)
|
||||
video.SecureURL = makeURLAbsolute(video.SecureURL)
|
||||
}
|
||||
|
||||
return og
|
||||
}
|
||||
|
||||
func (a *App) DoPostAction(postId string, actionId string, userId string) *model.AppError {
|
||||
|
||||
@@ -271,7 +271,7 @@ func TestMakeOpenGraphURLsAbsolute(t *testing.T) {
|
||||
URL: "https://example.com/apps/mattermost",
|
||||
ImageURL: "https://images.example.com/image.png",
|
||||
},
|
||||
"relative URLs": {
|
||||
"URLs starting with /": {
|
||||
HTML: `
|
||||
<html>
|
||||
<head>
|
||||
@@ -283,7 +283,7 @@ func TestMakeOpenGraphURLsAbsolute(t *testing.T) {
|
||||
URL: "http://example.com/apps/mattermost",
|
||||
ImageURL: "http://example.com/image.png",
|
||||
},
|
||||
"relative URLs with HTTPS": {
|
||||
"HTTPS URLs starting with /": {
|
||||
HTML: `
|
||||
<html>
|
||||
<head>
|
||||
@@ -306,6 +306,18 @@ func TestMakeOpenGraphURLsAbsolute(t *testing.T) {
|
||||
URL: "http://example.com/apps/mattermost",
|
||||
ImageURL: "",
|
||||
},
|
||||
"relative URLs": {
|
||||
HTML: `
|
||||
<html>
|
||||
<head>
|
||||
<meta property="og:url" content="index.html">
|
||||
<meta property="og:image" content="../resources/image.png">
|
||||
</head>
|
||||
</html>`,
|
||||
RequestURL: "http://example.com/content/index.html",
|
||||
URL: "http://example.com/content/index.html",
|
||||
ImageURL: "http://example.com/resources/image.png",
|
||||
},
|
||||
} {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
og := opengraph.NewOpenGraph()
|
||||
@@ -313,7 +325,7 @@ func TestMakeOpenGraphURLsAbsolute(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
og = makeOpenGraphURLsAbsolute(og, tc.RequestURL)
|
||||
makeOpenGraphURLsAbsolute(og, tc.RequestURL)
|
||||
|
||||
if og.URL != tc.URL {
|
||||
t.Fatalf("incorrect url, expected %v, got %v", tc.URL, og.URL)
|
||||
|
||||
Ссылка в новой задаче
Block a user