diff --git a/cmd/csat.go b/cmd/csat.go index 5efe3fab..9655ad2a 100644 --- a/cmd/csat.go +++ b/cmd/csat.go @@ -152,10 +152,7 @@ func handleSubmitCSATResponse(r *fastglue.Request) error { return r.SendErrorEnvelope(fasthttp.StatusBadRequest, "Invalid UUID", nil, envelope.InputError) } - // Trim feedback if it exceeds max length. - if len(req.Feedback) > maxCsatFeedbackLength { - req.Feedback = req.Feedback[:maxCsatFeedbackLength] - } + req.Feedback = truncateFeedback(req.Feedback) // Update CSAT response if err := app.csat.UpdateResponse(uuid, req.Rating, req.Feedback, nil); err != nil { @@ -187,9 +184,7 @@ func validateCSATForm(r *fastglue.Request) (int, string, json.RawMessage, string return 0, "", nil, "csat.pleaseFillRequired" } - if len(feedback) > maxCsatFeedbackLength { - feedback = feedback[:maxCsatFeedbackLength] - } + feedback = truncateFeedback(feedback) // Collect extra form fields into meta, skipping the known fields. meta := make(map[string]string) @@ -220,3 +215,14 @@ func validateCSATForm(r *fastglue.Request) (int, string, json.RawMessage, string return rating, feedback, metaJSON, "" } + +func truncateFeedback(s string) string { + if len(s) <= maxCsatFeedbackLength { + return s + } + r := []rune(s) + if len(r) <= maxCsatFeedbackLength { + return s + } + return string(r[:maxCsatFeedbackLength]) +}