diff options
-rw-r--r-- | api/post.go | 2 | ||||
-rw-r--r-- | app/post.go | 36 |
2 files changed, 32 insertions, 6 deletions
diff --git a/api/post.go b/api/post.go index 4944ad28f..afe60144d 100644 --- a/api/post.go +++ b/api/post.go @@ -530,11 +530,11 @@ func getOpenGraphMetadata(c *Context, w http.ResponseWriter, r *http.Request) { og := app.GetOpenGraphMetadata(url) ogJSON, err := og.ToJSON() + openGraphDataCache.AddWithExpiresInSecs(props["url"], ogJSON, 3600) // Cache would expire after 1 hour if err != nil { w.Write([]byte(`{"url": ""}`)) return } - openGraphDataCache.AddWithExpiresInSecs(props["url"], ogJSON, 3600) // Cache would expire after 1 houre w.Write(ogJSON) } diff --git a/app/post.go b/app/post.go index c4d128399..f969b6c6b 100644 --- a/app/post.go +++ b/app/post.go @@ -4,7 +4,10 @@ package app import ( + "net" "net/http" + "net/url" + "os" "regexp" "time" @@ -17,13 +20,35 @@ import ( ) var ( - c = &http.Client{ - Timeout: 5 * time.Second, - } + httpClient *http.Client + httpTimeout = time.Duration(5 * time.Second) linkWithTextRegex = regexp.MustCompile(`<([^<\|]+)\|([^>]+)>`) ) +func dialTimeout(network, addr string) (net.Conn, error) { + return net.DialTimeout(network, addr, httpTimeout) +} + +func init() { + p, ok := os.LookupEnv("HTTP_PROXY") + if ok { + if u, err := url.Parse(p); err == nil { + httpClient = &http.Client{ + Transport: &http.Transport{ + Proxy: http.ProxyURL(u), + Dial: dialTimeout, + }, + } + return + } + } + + httpClient = &http.Client{ + Timeout: httpTimeout, + } +} + func CreatePostAsUser(post *model.Post, siteURL string) (*model.Post, *model.AppError) { // Check that channel has not been deleted var channel *model.Channel @@ -484,14 +509,15 @@ func GetFileInfosForPost(postId string, readFromMaster bool) ([]*model.FileInfo, func GetOpenGraphMetadata(url string) *opengraph.OpenGraph { og := opengraph.NewOpenGraph() - res, err := c.Get(url) + res, err := httpClient.Get(url) if err != nil { + l4g.Error(err.Error()) return og } defer CloseBody(res) if err := og.ProcessHTML(res.Body); err != nil { - return og + l4g.Error(err.Error()) } return og |