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
|
||||
}
|
||||
|
||||
auditRec := c.MakeAuditRecord("searchPosts", audit.Fail)
|
||||
defer c.LogAuditRecWithLevel(auditRec, app.LevelAPI)
|
||||
audit.AddEventParameterAuditable(auditRec, "search_params", params)
|
||||
|
||||
startTime := time.Now()
|
||||
|
||||
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)
|
||||
audit.AddEventParameterAuditable(auditRec, "search_results", results)
|
||||
auditRec.Success()
|
||||
|
||||
w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
|
||||
if err := results.EncodeJSON(w); err != nil {
|
||||
|
||||
@@ -207,6 +207,21 @@ type SearchParameter struct {
|
||||
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 {
|
||||
TeamId string
|
||||
BotsOnly bool
|
||||
|
||||
@@ -39,3 +39,18 @@ func (o *PostSearchResults) ForPlugin() *PostSearchResults {
|
||||
plCopy.PostList = plCopy.PostList.ForPlugin()
|
||||
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