Audit usage of the searchPosts API (#29909)
* Audit calls to searchPosts API * Update server/public/model/post_search_results.go Co-authored-by: Ben Schumacher <ben.schumacher@mattermost.com> * Update server/public/model/post_search_results.go * Update server/public/model/post_search_results.go --------- Co-authored-by: Ben Schumacher <ben.schumacher@mattermost.com> Co-authored-by: Mattermost Build <build@mattermost.com>
Этот коммит содержится в:
@@ -790,6 +790,10 @@ func searchPosts(c *Context, w http.ResponseWriter, r *http.Request, teamId stri
|
|||||||
includeDeletedChannels = *params.IncludeDeletedChannels
|
includeDeletedChannels = *params.IncludeDeletedChannels
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auditRec := c.MakeAuditRecord("searchPosts", audit.Fail)
|
||||||
|
defer c.LogAuditRecWithLevel(auditRec, app.LevelAPI)
|
||||||
|
audit.AddEventParameterAuditable(auditRec, "search_params", params)
|
||||||
|
|
||||||
startTime := time.Now()
|
startTime := time.Now()
|
||||||
|
|
||||||
results, err := c.App.SearchPostsForUser(c.AppContext, terms, c.AppContext.Session().UserId, teamId, isOrSearch, includeDeletedChannels, timeZoneOffset, page, perPage)
|
results, err := c.App.SearchPostsForUser(c.AppContext, terms, c.AppContext.Session().UserId, teamId, isOrSearch, includeDeletedChannels, timeZoneOffset, page, perPage)
|
||||||
@@ -814,6 +818,8 @@ func searchPosts(c *Context, w http.ResponseWriter, r *http.Request, teamId stri
|
|||||||
}
|
}
|
||||||
|
|
||||||
results = model.MakePostSearchResults(clientPostList, results.Matches)
|
results = model.MakePostSearchResults(clientPostList, results.Matches)
|
||||||
|
audit.AddEventParameterAuditable(auditRec, "search_results", results)
|
||||||
|
auditRec.Success()
|
||||||
|
|
||||||
w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
|
w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
|
||||||
if err := results.EncodeJSON(w); err != nil {
|
if err := results.EncodeJSON(w); err != nil {
|
||||||
|
|||||||
@@ -207,6 +207,21 @@ type SearchParameter struct {
|
|||||||
IncludeDeletedChannels *bool `json:"include_deleted_channels"`
|
IncludeDeletedChannels *bool `json:"include_deleted_channels"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (sp SearchParameter) Auditable() map[string]interface{} {
|
||||||
|
return map[string]interface{}{
|
||||||
|
"terms": sp.Terms,
|
||||||
|
"is_or_search": sp.IsOrSearch,
|
||||||
|
"time_zone_offset": sp.TimeZoneOffset,
|
||||||
|
"page": sp.Page,
|
||||||
|
"per_page": sp.PerPage,
|
||||||
|
"include_deleted_channels": sp.IncludeDeletedChannels,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sp SearchParameter) LogClone() any {
|
||||||
|
return sp.Auditable()
|
||||||
|
}
|
||||||
|
|
||||||
type AnalyticsPostCountsOptions struct {
|
type AnalyticsPostCountsOptions struct {
|
||||||
TeamId string
|
TeamId string
|
||||||
BotsOnly bool
|
BotsOnly bool
|
||||||
|
|||||||
@@ -39,3 +39,18 @@ func (o *PostSearchResults) ForPlugin() *PostSearchResults {
|
|||||||
plCopy.PostList = plCopy.PostList.ForPlugin()
|
plCopy.PostList = plCopy.PostList.ForPlugin()
|
||||||
return &plCopy
|
return &plCopy
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (o *PostSearchResults) Auditable() map[string]interface{} {
|
||||||
|
var numResults int
|
||||||
|
var hasNext bool
|
||||||
|
|
||||||
|
if o.PostList != nil {
|
||||||
|
numResults = len(o.PostList.Posts)
|
||||||
|
hasNext = SafeDereference(o.PostList.HasNext)
|
||||||
|
}
|
||||||
|
|
||||||
|
return map[string]any{
|
||||||
|
"num_results": numResults,
|
||||||
|
"has_next": hasNext,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user