Add http_proxy support for http client (#5571)
- if 'http_proxy' environment variable is set, respect it when creating http client - otherwise initialize a http client with timeout settings Add ogjson to cache even when it fails in this way we can prevent from requesting unparsable urls repeatedly Extend expire time of cached link preview data to a week There's no need to invalidate cache and send request again frequently Revert timeout Revert cache_expire_time
Этот коммит содержится в:
@@ -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)
|
||||
}
|
||||
|
||||
36
app/post.go
36
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
|
||||
|
||||
Ссылка в новой задаче
Block a user