package console import ( "net/http" "strings" "unicode" "unicode/utf8" ) const ( activityMessageMaxRunes = 240 activityMessageHeader = "X-Carlos-Message" ) type activityCopy struct { Description, Action, Target, Scope, InvalidMessage string } var activityText = activityCopy{ Description: "Description", Action: "Action", Target: "Target", Scope: "This history includes console actions and CLI actions sent through the console.", InvalidMessage: "Message must be one line and 240 characters or fewer.", } func validActivityMessage(message string) bool { if !utf8.ValidString(message) || utf8.RuneCountInString(message) > activityMessageMaxRunes { return false } for _, r := range message { if unicode.IsControl(r) { return false } } return true } func checkedActivityMessage(w http.ResponseWriter, message string) (string, bool) { if !validActivityMessage(message) { jsonError(w, http.StatusBadRequest, activityText.InvalidMessage) return "", false } return strings.TrimSpace(message), true }