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>
Этот коммит содержится в:
Doug Lauder
2025-01-28 22:21:05 -05:00
коммит произвёл GitHub
родитель f37ed867c8
Коммит 565c8aa42d
3 изменённых файлов: 36 добавлений и 0 удалений

Просмотреть файл

@@ -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,
}
}