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