Skip to content

Commit b63489c

Browse files
committed
Fixed the description article/entity mention issue (#27541)
1 parent cd845eb commit b63489c

2 files changed

Lines changed: 38 additions & 0 deletions

File tree

openmetadata-service/src/main/java/org/openmetadata/service/util/DescriptionSanitizer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ public final class DescriptionSanitizer {
9696
// Common safe attributes
9797
.allowAttributes("class", "id", "data-id", "data-highlighted", "data-testid")
9898
.globally()
99+
// Entity mention attributes on anchor tags (hashtag/mention nodes in BlockEditor)
100+
.allowAttributes("data-type", "data-label", "data-fqn", "data-entitytype")
101+
.onElements("a")
99102
.allowAttributes("align")
100103
.onElements("td", "th", "tr", "table")
101104
.allowAttributes("colspan", "rowspan")

openmetadata-service/src/test/java/org/openmetadata/service/util/DescriptionSanitizerTest.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,4 +210,39 @@ void entityLinkWithScriptInjectionIsStillSafe() {
210210
assertTrue(result.contains("<#E::table::clean.fqn>"));
211211
assertFalse(result.contains("<script"));
212212
}
213+
214+
@Test
215+
void entityMentionAttributesOnAnchorArePreserved() {
216+
String input =
217+
"<p><a data-type=\"hashtag\" data-id=\"abc123\" data-label=\"Article\""
218+
+ " href=\"https://open-metadata.example.org/tags/KnowledgeCenter\""
219+
+ " data-entitytype=\"tag\" data-fqn=\"KnowledgeCenter.Article\">"
220+
+ "<#E::tag::KnowledgeCenter.Article|[#Article](https://open-metadata.example.org/tags/KnowledgeCenter)>"
221+
+ "</a></p>";
222+
String result = DescriptionSanitizer.sanitize(input);
223+
224+
assertTrue(result.contains("data-type=\"hashtag\""));
225+
assertTrue(result.contains("data-label=\"Article\""));
226+
assertTrue(result.contains("data-fqn=\"KnowledgeCenter.Article\""));
227+
assertTrue(result.contains("data-entitytype=\"tag\""));
228+
assertTrue(
229+
result.contains(
230+
"<#E::tag::KnowledgeCenter.Article|[#Article](https://open-metadata.example.org/tags/KnowledgeCenter)>"));
231+
}
232+
233+
@Test
234+
void entityMentionAttributesOnAnchorArePreservedForMention() {
235+
String input =
236+
"<a data-type=\"mention\" data-id=\"u1\" data-label=\"admin\""
237+
+ " href=\"https://open-metadata.example.org/users/admin\""
238+
+ " data-entitytype=\"user\" data-fqn=\"admin\">"
239+
+ "<#E::user::admin|[@admin](https://open-metadata.example.org/users/admin)>"
240+
+ "</a>";
241+
String result = DescriptionSanitizer.sanitize(input);
242+
243+
assertTrue(result.contains("data-type=\"mention\""));
244+
assertTrue(result.contains("data-label=\"admin\""));
245+
assertTrue(result.contains("data-fqn=\"admin\""));
246+
assertTrue(result.contains("data-entitytype=\"user\""));
247+
}
213248
}

0 commit comments

Comments
 (0)