summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorHarrison Healey <harrisonmhealey@gmail.com>2018-02-09 10:05:23 -0500
committerHarrison Healey <harrisonmhealey@gmail.com>2018-02-09 10:05:23 -0500
commite2b5f9217f55074e4a64c90f4121803cd68f0b97 (patch)
treec592d1212d24086bfaa9f9b5cd78fd6a6d53ef02 /app
parentd3a0e561c265e32a305cd5c6ed5e80f461d9f4eb (diff)
downloadchat-e2b5f9217f55074e4a64c90f4121803cd68f0b97.tar.gz
chat-e2b5f9217f55074e4a64c90f4121803cd68f0b97.tar.bz2
chat-e2b5f9217f55074e4a64c90f4121803cd68f0b97.zip
ICU-669 Handle relative links better
Diffstat (limited to 'app')
-rw-r--r--app/post.go13
-rw-r--r--app/post_test.go18
2 files changed, 19 insertions, 12 deletions
diff --git a/app/post.go b/app/post.go
index 1e170d363..f8a371fc0 100644
--- a/app/post.go
+++ b/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 {
diff --git a/app/post_test.go b/app/post_test.go
index 987879a72..62098c865 100644
--- a/app/post_test.go
+++ b/app/post_test.go
@@ -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)