forked from AkkomaGang/akkoma
Merge branch 'bugfix/web-notification-special-char' into 'develop'
fix the web push notification with special char for status created See merge request pleroma/pleroma!1092
This commit is contained in:
commit
0bcdaf378e
2 changed files with 32 additions and 5 deletions
|
@ -28,12 +28,18 @@ def filter_tags(html, scrubber), do: Scrubber.scrub(html, scrubber)
|
||||||
def filter_tags(html), do: filter_tags(html, nil)
|
def filter_tags(html), do: filter_tags(html, nil)
|
||||||
def strip_tags(html), do: Scrubber.scrub(html, Scrubber.StripTags)
|
def strip_tags(html), do: Scrubber.scrub(html, Scrubber.StripTags)
|
||||||
|
|
||||||
def get_cached_scrubbed_html_for_activity(content, scrubbers, activity, key \\ "") do
|
def get_cached_scrubbed_html_for_activity(
|
||||||
|
content,
|
||||||
|
scrubbers,
|
||||||
|
activity,
|
||||||
|
key \\ "",
|
||||||
|
callback \\ fn x -> x end
|
||||||
|
) do
|
||||||
key = "#{key}#{generate_scrubber_signature(scrubbers)}|#{activity.id}"
|
key = "#{key}#{generate_scrubber_signature(scrubbers)}|#{activity.id}"
|
||||||
|
|
||||||
Cachex.fetch!(:scrubber_cache, key, fn _key ->
|
Cachex.fetch!(:scrubber_cache, key, fn _key ->
|
||||||
object = Pleroma.Object.normalize(activity)
|
object = Pleroma.Object.normalize(activity)
|
||||||
ensure_scrubbed_html(content, scrubbers, object.data["fake"] || false)
|
ensure_scrubbed_html(content, scrubbers, object.data["fake"] || false, callback)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -42,16 +48,27 @@ def get_cached_stripped_html_for_activity(content, activity, key) do
|
||||||
content,
|
content,
|
||||||
HtmlSanitizeEx.Scrubber.StripTags,
|
HtmlSanitizeEx.Scrubber.StripTags,
|
||||||
activity,
|
activity,
|
||||||
key
|
key,
|
||||||
|
&HtmlEntities.decode/1
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def ensure_scrubbed_html(
|
def ensure_scrubbed_html(
|
||||||
content,
|
content,
|
||||||
scrubbers,
|
scrubbers,
|
||||||
false = _fake
|
fake,
|
||||||
|
callback
|
||||||
) do
|
) do
|
||||||
{:commit, filter_tags(content, scrubbers)}
|
content =
|
||||||
|
content
|
||||||
|
|> filter_tags(scrubbers)
|
||||||
|
|> callback.()
|
||||||
|
|
||||||
|
if fake do
|
||||||
|
{:ignore, content}
|
||||||
|
else
|
||||||
|
{:commit, content}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def ensure_scrubbed_html(
|
def ensure_scrubbed_html(
|
||||||
|
|
|
@ -371,4 +371,14 @@ test "a peertube video" do
|
||||||
assert length(result["attachments"]) == 1
|
assert length(result["attachments"]) == 1
|
||||||
assert result["summary"] == "Friday Night"
|
assert result["summary"] == "Friday Night"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "special characters are not escaped in text field for status created" do
|
||||||
|
text = "<3 is on the way"
|
||||||
|
|
||||||
|
{:ok, activity} = CommonAPI.post(insert(:user), %{"status" => text})
|
||||||
|
|
||||||
|
result = ActivityView.render("activity.json", activity: activity)
|
||||||
|
|
||||||
|
assert result["text"] == text
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue