summaryrefslogtreecommitdiffstats
path: root/app/post.go
diff options
context:
space:
mode:
Diffstat (limited to 'app/post.go')
-rw-r--r--app/post.go46
1 files changed, 30 insertions, 16 deletions
diff --git a/app/post.go b/app/post.go
index 4ce009369..bc31aee44 100644
--- a/app/post.go
+++ b/app/post.go
@@ -9,16 +9,18 @@ import (
"encoding/hex"
"encoding/json"
"fmt"
+ "io"
"net/http"
"net/url"
"regexp"
"strings"
- l4g "github.com/alecthomas/log4go"
"github.com/dyatlov/go-opengraph/opengraph"
+ "github.com/mattermost/mattermost-server/mlog"
"github.com/mattermost/mattermost-server/model"
"github.com/mattermost/mattermost-server/store"
"github.com/mattermost/mattermost-server/utils"
+ "golang.org/x/net/html/charset"
)
var linkWithTextRegex = regexp.MustCompile(`<([^<\|]+)\|([^>]+)>`)
@@ -78,7 +80,7 @@ func (a *App) CreatePostAsUser(post *model.Post) (*model.Post, *model.AppError)
// Update the LastViewAt only if the post does not have from_webhook prop set (eg. Zapier app)
if _, ok := post.Props["from_webhook"]; !ok {
if result := <-a.Srv.Store.Channel().UpdateLastViewedAt([]string{post.ChannelId}, post.UserId); result.Err != nil {
- l4g.Error(utils.T("api.post.create_post.last_viewed.error"), post.ChannelId, post.UserId, result.Err)
+ mlog.Error(fmt.Sprintf("Encountered error updating last viewed, channel_id=%s, user_id=%s, err=%v", post.ChannelId, post.UserId, result.Err))
}
if *a.Config().ServiceSettings.EnableChannelViewedMessages {
@@ -182,7 +184,7 @@ func (a *App) CreatePost(post *model.Post, channel *model.Channel, triggerWebhoo
for _, fileId := range post.FileIds {
if result := <-a.Srv.Store.FileInfo().AttachToPost(fileId, post.Id); result.Err != nil {
- l4g.Error(utils.T("api.post.create_post.attach_files.error"), post.Id, post.FileIds, post.UserId, result.Err)
+ mlog.Error(fmt.Sprintf("Encountered error attaching files to post, post_id=%s, user_id=%s, file_ids=%v, err=%v", post.Id, post.FileIds, post.UserId, result.Err), mlog.String("post_id", post.Id))
}
}
@@ -266,7 +268,7 @@ func (a *App) handlePostEvents(post *model.Post, user *model.User, channel *mode
if triggerWebhooks {
a.Go(func() {
if err := a.handleWebhookEvents(post, team, channel, user); err != nil {
- l4g.Error(err.Error())
+ mlog.Error(err.Error())
}
})
}
@@ -378,7 +380,7 @@ func (a *App) UpdatePost(post *model.Post, safeUpdate bool) (*model.Post, *model
if esInterface != nil && *a.Config().ElasticsearchSettings.EnableIndexing {
a.Go(func() {
if rchannel := <-a.Srv.Store.Channel().GetForPost(rpost.Id); rchannel.Err != nil {
- l4g.Error("Couldn't get channel %v for post %v for Elasticsearch indexing.", rpost.ChannelId, rpost.Id)
+ mlog.Error(fmt.Sprintf("Couldn't get channel %v for post %v for Elasticsearch indexing.", rpost.ChannelId, rpost.Id))
} else {
esInterface.IndexPost(rpost, rchannel.Data.(*model.Channel).TeamId)
}
@@ -576,7 +578,7 @@ func (a *App) DeletePost(postId string) (*model.Post, *model.AppError) {
func (a *App) DeleteFlaggedPosts(postId string) {
if result := <-a.Srv.Store.Preference().DeleteCategoryAndName(model.PREFERENCE_CATEGORY_FLAGGED_POST, postId); result.Err != nil {
- l4g.Warn(utils.T("api.post.delete_flagged_post.app_error.warn"), result.Err)
+ mlog.Warn(fmt.Sprintf("Unable to delete flagged post preference when deleting post, err=%v", result.Err))
return
}
}
@@ -587,7 +589,7 @@ func (a *App) DeletePostFiles(post *model.Post) {
}
if result := <-a.Srv.Store.FileInfo().DeleteForPost(post.Id); result.Err != nil {
- l4g.Warn(utils.T("api.post.delete_post_files.app_error.warn"), post.Id, result.Err)
+ mlog.Warn(fmt.Sprintf("Encountered error when deleting files for post, post_id=%v, err=%v", post.Id, result.Err), mlog.String("post_id", post.Id))
}
}
@@ -605,7 +607,7 @@ func (a *App) SearchPostsInTeam(terms string, userId string, teamId string, isOr
// Convert channel names to channel IDs
for idx, channelName := range params.InChannels {
if channel, err := a.GetChannelByName(channelName, teamId); err != nil {
- l4g.Error(err)
+ mlog.Error(fmt.Sprint(err))
} else {
params.InChannels[idx] = channel.Id
}
@@ -614,7 +616,7 @@ func (a *App) SearchPostsInTeam(terms string, userId string, teamId string, isOr
// Convert usernames to user IDs
for idx, username := range params.FromUsers {
if user, err := a.GetUserByUsername(username); err != nil {
- l4g.Error(err)
+ mlog.Error(fmt.Sprint(err))
} else {
params.FromUsers[idx] = user.Id
}
@@ -632,7 +634,7 @@ func (a *App) SearchPostsInTeam(terms string, userId string, teamId string, isOr
// We only allow the user to search in channels they are a member of.
userChannels, err := a.GetChannelsForUser(teamId, userId)
if err != nil {
- l4g.Error(err)
+ mlog.Error(fmt.Sprint(err))
return nil, err
}
@@ -721,13 +723,16 @@ func (a *App) GetOpenGraphMetadata(requestURL string) *opengraph.OpenGraph {
res, err := a.HTTPClient(false).Get(requestURL)
if err != nil {
- l4g.Error("GetOpenGraphMetadata request failed for url=%v with err=%v", requestURL, err.Error())
+ mlog.Error(fmt.Sprintf("GetOpenGraphMetadata request failed for url=%v with err=%v", requestURL, err.Error()))
return og
}
defer consumeAndClose(res)
- if err := og.ProcessHTML(res.Body); err != nil {
- l4g.Error("GetOpenGraphMetadata processing failed for url=%v with err=%v", requestURL, err.Error())
+ contentType := res.Header.Get("Content-Type")
+ body := forceHTMLEncodingToUTF8(res.Body, contentType)
+
+ if err := og.ProcessHTML(body); err != nil {
+ mlog.Error(fmt.Sprintf("GetOpenGraphMetadata processing failed for url=%v with err=%v", requestURL, err.Error()))
}
makeOpenGraphURLsAbsolute(og, requestURL)
@@ -735,10 +740,19 @@ func (a *App) GetOpenGraphMetadata(requestURL string) *opengraph.OpenGraph {
return og
}
+func forceHTMLEncodingToUTF8(body io.Reader, contentType string) io.Reader {
+ r, err := charset.NewReader(body, contentType)
+ if err != nil {
+ mlog.Error(fmt.Sprintf("forceHTMLEncodingToUTF8 failed to convert for contentType=%v with err=%v", contentType, err.Error()))
+ return body
+ }
+ return r
+}
+
func makeOpenGraphURLsAbsolute(og *opengraph.OpenGraph, requestURL string) {
parsedRequestURL, err := url.Parse(requestURL)
if err != nil {
- l4g.Warn("makeOpenGraphURLsAbsolute failed to parse url=%v", requestURL)
+ mlog.Warn(fmt.Sprintf("makeOpenGraphURLsAbsolute failed to parse url=%v", requestURL))
return
}
@@ -749,7 +763,7 @@ func makeOpenGraphURLsAbsolute(og *opengraph.OpenGraph, requestURL string) {
parsedResultURL, err := url.Parse(resultURL)
if err != nil {
- l4g.Warn("makeOpenGraphURLsAbsolute failed to parse result url=%v", resultURL)
+ mlog.Warn(fmt.Sprintf("makeOpenGraphURLsAbsolute failed to parse result url=%v", resultURL))
return resultURL
}
@@ -962,7 +976,7 @@ func (a *App) ImageProxyRemover() (f func(string) string) {
func (a *App) MaxPostSize() int {
maxPostSize := model.POST_MESSAGE_MAX_RUNES_V1
if result := <-a.Srv.Store.Post().GetMaxPostSize(); result.Err != nil {
- l4g.Error(result.Err)
+ mlog.Error(fmt.Sprint(result.Err))
} else {
maxPostSize = result.Data.(int)
}