Skip to content

Commit 1be0f5f

Browse files
committed
Escape HTML in Olog logs
1 parent a05258a commit 1be0f5f

File tree

2 files changed

+36
-10
lines changed

2 files changed

+36
-10
lines changed

app/logbook/olog/ui/src/main/java/org/phoebus/logbook/olog/ui/HtmlAwareController.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,30 +29,38 @@
2929

3030
public class HtmlAwareController {
3131

32-
private Parser parser;
33-
private HtmlRenderer htmlRenderer;
32+
private final Parser parser;
33+
private final HtmlRenderer htmlRenderer;
3434

35+
/**
36+
* Constructor to generate html code for HTML preview feature in LogEntryEditor or detailed log entry view.
37+
* @param serviceUrl Olog service url
38+
*/
3539
public HtmlAwareController(String serviceUrl){
36-
List<Extension> extensions =
37-
Arrays.asList(TablesExtension.create(), ImageAttributesExtension.create());
38-
this.parser = Parser.builder().extensions(extensions).build();
39-
htmlRenderer = HtmlRenderer.builder()
40-
.attributeProviderFactory(context -> new OlogAttributeProvider(serviceUrl))
41-
.extensions(extensions).build();
40+
this(new OlogAttributeProvider(serviceUrl));
4241
}
4342

4443
/**
45-
* To create HtmlAwareController object to generate html code for HTML preview feature in LogEntryEditor.
44+
* Constructor to generate html code for HTML preview feature in LogEntryEditor or detailed log entry view.
4645
* @param serviceUrl Olog service url.
4746
* @param preview Set true when preview button is clicked.
4847
* @param attachments The current attachments list from AttachmentsEditorController.
4948
*/
5049
public HtmlAwareController(String serviceUrl, boolean preview, List<Attachment> attachments){
50+
this(new OlogAttributeProvider(serviceUrl, preview, attachments));
51+
}
52+
53+
/**
54+
* Private constructor to avoid code duplication.
55+
* @param ologAttributeProvider The {@link OlogAttributeProvider} particular to the use case.
56+
*/
57+
private HtmlAwareController(OlogAttributeProvider ologAttributeProvider){
5158
List<Extension> extensions =
5259
Arrays.asList(TablesExtension.create(), ImageAttributesExtension.create());
5360
this.parser = Parser.builder().extensions(extensions).build();
5461
htmlRenderer = HtmlRenderer.builder()
55-
.attributeProviderFactory(context -> new OlogAttributeProvider(serviceUrl, preview, attachments))
62+
.escapeHtml(true)
63+
.attributeProviderFactory(context -> ologAttributeProvider)
5664
.extensions(extensions).build();
5765
}
5866

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/*
2+
* Copyright (C) 2025 European Spallation Source ERIC.
3+
*/
4+
5+
package org.phoebus.logbook.olog.ui;
6+
7+
import org.junit.jupiter.api.Test;
8+
import static org.junit.jupiter.api.Assertions.assertEquals;
9+
10+
public class HtmlAwareControllerTest {
11+
12+
@Test
13+
public void testEscapeHtml(){
14+
HtmlAwareController htmlAwareController = new HtmlAwareController("");
15+
String escapedHtml = htmlAwareController.toHtml("<br><p>Paragraph</p>");
16+
assertEquals("<p>&lt;br&gt;&lt;p&gt;Paragraph&lt;/p&gt;</p>\n", escapedHtml);
17+
}
18+
}

0 commit comments

Comments
 (0)