From de195f883ef2f79b08d9ece222f91cce8ed30726 Mon Sep 17 00:00:00 2001
From: Gabe Kangas
test
` + result := models.RenderAndSanitize(messageContent) + + if result != expected { + t.Errorf("message rendering/sanitation does not match expected. Got\n%s, \n\n want:\n%s", result, expected) + } +} + +// Test to make sure emoji images are allowed in chat messages. +func TestAllowEmojiImages(t *testing.T) { + messageContent := ` test ![](/img/emoji/beerparrot.gif)` + expected := `test
` + result := models.RenderAndSanitize(messageContent) + + if result != expected { + t.Errorf("message rendering/sanitation does not match expected. Got\n%s, \n\n want:\n%s", result, expected) + } } diff --git a/models/chatMessage.go b/models/chatMessage.go index 4102fd775..2b17cd20e 100644 --- a/models/chatMessage.go +++ b/models/chatMessage.go @@ -2,6 +2,7 @@ package models import ( "bytes" + "regexp" "strings" "time" @@ -96,6 +97,7 @@ func sanitize(raw string) string { // Require URLs to be parseable by net/url.Parse p.AllowStandardURLs() + p.RequireParseableURLs(true) // Allow links p.AllowAttrs("href").OnElements("a") @@ -106,19 +108,11 @@ func sanitize(raw string) string { // Links will get target="_blank" added to them. p.AddTargetBlankToFullyQualifiedLinks(true) - // Allow paragraphs - p.AllowElements("br") - p.AllowElements("p") + // Allow breaks + p.AllowElements("br", "p") - // Allow img tags - p.AllowElements("img") - p.AllowAttrs("src").OnElements("img") - p.AllowAttrs("alt").OnElements("img") - p.AllowAttrs("title").OnElements("img") - - // Custom emoji have a class already specified. - // We should only allow classes on emoji, not *all* imgs. - // But TODO. + // Allow img tags from the the local emoji directory only + p.AllowAttrs("src", "alt", "class", "title").Matching(regexp.MustCompile(`(?i)/img/emoji`)).OnElements("img") p.AllowAttrs("class").OnElements("img") // Allow bold