mattermost/server/channels/api4/metrics.go
Harrison Healey 8f9d1b802c
MM-58263 Remove CSRF check from /api/v4/client_perf (#27011)
We use navigator.sendBeacon to send the new metrics since it's recommended for that, but it doesn't let us set custom headers which means that we can't set the CSRF token header that we'd need to pass that check
2024-05-15 14:53:05 -04:00

38 lines
1 KiB
Go

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
package api4
import (
"encoding/json"
"net/http"
"github.com/mattermost/mattermost/server/public/model"
)
func (api *API) InitClientPerformanceMetrics() {
api.BaseRoutes.APIRoot.Handle("/client_perf", api.APISessionRequiredTrustRequester(submitPerformanceReport)).Methods("POST")
}
func submitPerformanceReport(c *Context, w http.ResponseWriter, r *http.Request) {
// we return early if server does not have any metrics infra available
if c.App.Metrics() == nil || !*c.App.Config().MetricsSettings.EnableClientMetrics {
return
}
var report model.PerformanceReport
if jsonErr := json.NewDecoder(r.Body).Decode(&report); jsonErr != nil {
c.SetInvalidParamWithErr("submitPerformanceReport", jsonErr)
return
}
if err := report.IsValid(); err != nil {
c.SetInvalidParamWithErr("submitPerformanceReport", err)
return
}
if appErr := c.App.RegisterPerformanceReport(c.AppContext, &report); appErr != nil {
c.Err = appErr
return
}
}