From 634f31c390da1c3b055aa4a62c98239e27e12de5 Mon Sep 17 00:00:00 2001
From: james
Date: Mon, 6 Apr 2026 10:09:52 -0400
Subject: [PATCH 01/52] Whitespace
---
.../com/zipcode/stardust/repository/UserRepository.java | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/java/src/main/java/com/zipcode/stardust/repository/UserRepository.java b/java/src/main/java/com/zipcode/stardust/repository/UserRepository.java
index 9a98b06..48be50f 100644
--- a/java/src/main/java/com/zipcode/stardust/repository/UserRepository.java
+++ b/java/src/main/java/com/zipcode/stardust/repository/UserRepository.java
@@ -1,9 +1,11 @@
package com.zipcode.stardust.repository;
-import com.zipcode.stardust.model.User;
-import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import com.zipcode.stardust.model.User;
+
public interface UserRepository extends JpaRepository {
Optional findByUsername(String username);
Optional findByEmail(String email);
From fa0ebf1b7409f08c6e376958b97866649ce7edc6 Mon Sep 17 00:00:00 2001
From: james
Date: Mon, 6 Apr 2026 10:30:33 -0400
Subject: [PATCH 02/52] Renamed test files
---
.../StardustApplicationTests.java} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename java/src/test/java/com/zipcode/{circuscircus/CircusCircusApplicationTests.java => stardust/StardustApplicationTests.java} (100%)
diff --git a/java/src/test/java/com/zipcode/circuscircus/CircusCircusApplicationTests.java b/java/src/test/java/com/zipcode/stardust/StardustApplicationTests.java
similarity index 100%
rename from java/src/test/java/com/zipcode/circuscircus/CircusCircusApplicationTests.java
rename to java/src/test/java/com/zipcode/stardust/StardustApplicationTests.java
From 635d38bbe63d02b85bcb372c13f374fe25add741 Mon Sep 17 00:00:00 2001
From: mahala
Date: Mon, 6 Apr 2026 11:35:26 -0400
Subject: [PATCH 03/52] Changed Name
---
.../{circuscircus => stardust}/CircusCircusApplicationTests.java | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename java/src/test/java/com/zipcode/{circuscircus => stardust}/CircusCircusApplicationTests.java (100%)
diff --git a/java/src/test/java/com/zipcode/circuscircus/CircusCircusApplicationTests.java b/java/src/test/java/com/zipcode/stardust/CircusCircusApplicationTests.java
similarity index 100%
rename from java/src/test/java/com/zipcode/circuscircus/CircusCircusApplicationTests.java
rename to java/src/test/java/com/zipcode/stardust/CircusCircusApplicationTests.java
From 78290e8b0e0b6bf383389ec0559b76f702359384 Mon Sep 17 00:00:00 2001
From: james
Date: Mon, 6 Apr 2026 15:21:10 -0400
Subject: [PATCH 04/52] Branch and Port fixes
---
java/pom.xml | 2 --
java/src/main/resources/application.properties | 2 +-
java/src/test/resources/application.properties | 2 +-
3 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/java/pom.xml b/java/pom.xml
index d35d08a..941dfdf 100644
--- a/java/pom.xml
+++ b/java/pom.xml
@@ -45,12 +45,10 @@
org.xerial
sqlite-jdbc
- 3.45.3.0
org.hibernate.orm
hibernate-community-dialects
- 6.4.4.Final
org.springframework.boot
diff --git a/java/src/main/resources/application.properties b/java/src/main/resources/application.properties
index 3a5f22b..ebd39f7 100644
--- a/java/src/main/resources/application.properties
+++ b/java/src/main/resources/application.properties
@@ -3,7 +3,7 @@ spring.datasource.driver-class-name=org.sqlite.JDBC
spring.jpa.database-platform=org.hibernate.community.dialect.SQLiteDialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=false
-server.port=5000
+server.port=8080
spring.application.name=Schooner
site.name=Schooner
site.description=a schooner forum
diff --git a/java/src/test/resources/application.properties b/java/src/test/resources/application.properties
index a1e18e6..601f780 100644
--- a/java/src/test/resources/application.properties
+++ b/java/src/test/resources/application.properties
@@ -3,7 +3,7 @@ spring.datasource.driver-class-name=org.sqlite.JDBC
spring.jpa.database-platform=org.hibernate.community.dialect.SQLiteDialect
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=false
-server.port=5000
+server.port=8080
spring.application.name=Schooner
site.name=Schooner
site.description=a schooner forum
From 9cd019e4c6aa37879e05721c8451b1a022865d34 Mon Sep 17 00:00:00 2001
From: mahala
Date: Mon, 6 Apr 2026 16:53:30 -0400
Subject: [PATCH 05/52] Changed Server port
---
java/src/main/resources/application.properties | 2 +-
java/src/test/resources/application.properties | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/java/src/main/resources/application.properties b/java/src/main/resources/application.properties
index 3a5f22b..ebd39f7 100644
--- a/java/src/main/resources/application.properties
+++ b/java/src/main/resources/application.properties
@@ -3,7 +3,7 @@ spring.datasource.driver-class-name=org.sqlite.JDBC
spring.jpa.database-platform=org.hibernate.community.dialect.SQLiteDialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=false
-server.port=5000
+server.port=8080
spring.application.name=Schooner
site.name=Schooner
site.description=a schooner forum
diff --git a/java/src/test/resources/application.properties b/java/src/test/resources/application.properties
index a1e18e6..601f780 100644
--- a/java/src/test/resources/application.properties
+++ b/java/src/test/resources/application.properties
@@ -3,7 +3,7 @@ spring.datasource.driver-class-name=org.sqlite.JDBC
spring.jpa.database-platform=org.hibernate.community.dialect.SQLiteDialect
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=false
-server.port=5000
+server.port=8080
spring.application.name=Schooner
site.name=Schooner
site.description=a schooner forum
From a7ab228190b570fec1d4f32f3310d8c33d9faace Mon Sep 17 00:00:00 2001
From: james
Date: Tue, 7 Apr 2026 21:13:34 -0400
Subject: [PATCH 06/52] Markdown Support
---
java/pom.xml | 10 ++++++++
.../stardust/controller/ForumController.java | 8 ++++++
.../stardust/service/ForumService.java | 25 +++++++++++++++++++
.../main/resources/templates/createpost.html | 4 +++
.../main/resources/templates/viewpost.html | 4 +--
5 files changed, 49 insertions(+), 2 deletions(-)
diff --git a/java/pom.xml b/java/pom.xml
index 941dfdf..4cc7490 100644
--- a/java/pom.xml
+++ b/java/pom.xml
@@ -60,6 +60,16 @@
spring-security-test
test
+
+ org.commonmark
+ commonmark
+ 0.22.0
+
+
+ com.googlecode.owasp-java-html-sanitizer
+ owasp-java-html-sanitizer
+ 20240325.1
+
diff --git a/java/src/main/java/com/zipcode/stardust/controller/ForumController.java b/java/src/main/java/com/zipcode/stardust/controller/ForumController.java
index 73f2019..61a0d85 100644
--- a/java/src/main/java/com/zipcode/stardust/controller/ForumController.java
+++ b/java/src/main/java/com/zipcode/stardust/controller/ForumController.java
@@ -12,7 +12,9 @@
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
+import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map;
import java.util.Optional;
@Controller
@@ -170,8 +172,14 @@ public String viewPost(@RequestParam Long post, Model model, Authentication auth
Post p = opt.get();
List comments = commentRepository.findByPostOrderByPostdateAsc(p);
String breadcrumb = forumService.generateLinkPath(p.getSubforum().getId());
+ Map commentContents = new LinkedHashMap<>();
+ for (Comment c : comments) {
+ commentContents.put(c.getId(), forumService.renderMarkdown(c.getContent()));
+ }
model.addAttribute("post", p);
+ model.addAttribute("postContent", forumService.renderMarkdown(p.getContent()));
model.addAttribute("comments", comments);
+ model.addAttribute("commentContents", commentContents);
model.addAttribute("breadcrumb", breadcrumb);
model.addAttribute("errors", new ArrayList<>());
return "viewpost";
diff --git a/java/src/main/java/com/zipcode/stardust/service/ForumService.java b/java/src/main/java/com/zipcode/stardust/service/ForumService.java
index 1ebbc72..0b117cb 100644
--- a/java/src/main/java/com/zipcode/stardust/service/ForumService.java
+++ b/java/src/main/java/com/zipcode/stardust/service/ForumService.java
@@ -3,6 +3,11 @@
import com.zipcode.stardust.model.Subforum;
import com.zipcode.stardust.repository.SubforumRepository;
import com.zipcode.stardust.repository.UserRepository;
+import org.commonmark.node.Node;
+import org.commonmark.parser.Parser;
+import org.commonmark.renderer.html.HtmlRenderer;
+import org.owasp.html.HtmlPolicyBuilder;
+import org.owasp.html.PolicyFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.util.HtmlUtils;
@@ -18,6 +23,26 @@ public class ForumService {
@Autowired
private UserRepository userRepository;
+ // Markdown rendering pipeline — thread-safe singletons
+ private final Parser mdParser = Parser.builder().build();
+ private final HtmlRenderer mdRenderer = HtmlRenderer.builder().build();
+ private final PolicyFactory sanitizer = new HtmlPolicyBuilder()
+ .allowElements("p", "br", "hr", "b", "strong", "em", "i", "u", "s",
+ "code", "pre", "blockquote", "ul", "ol", "li",
+ "h1", "h2", "h3", "h4")
+ .allowUrlProtocols("http", "https")
+ .allowElements("a")
+ .allowAttributes("href").onElements("a")
+ .requireRelNofollowOnLinks()
+ .toFactory();
+
+ public String renderMarkdown(String raw) {
+ if (raw == null) return "";
+ Node document = mdParser.parse(raw);
+ String html = mdRenderer.render(document);
+ return sanitizer.sanitize(html);
+ }
+
public String generateLinkPath(Long subforumId) {
StringBuilder sb = new StringBuilder();
sb.append(" / Forum Index");
diff --git a/java/src/main/resources/templates/createpost.html b/java/src/main/resources/templates/createpost.html
index ee04f65..8854db8 100644
--- a/java/src/main/resources/templates/createpost.html
+++ b/java/src/main/resources/templates/createpost.html
@@ -21,6 +21,10 @@ Create Post in Forum
+
+ Markdown supported: **bold**, _italic_,
+ `code`, # Heading, - list item
+
Cancel
diff --git a/java/src/main/resources/templates/viewpost.html b/java/src/main/resources/templates/viewpost.html
index 6762abc..fbce6f9 100644
--- a/java/src/main/resources/templates/viewpost.html
+++ b/java/src/main/resources/templates/viewpost.html
@@ -16,11 +16,11 @@ Post Title
— time
-
Content here
+
Content here
Comments (0)
Comment content
+Comment content
by author — time From cf48dfddace5027d79678e0ae77293e3ea8b3d95 Mon Sep 17 00:00:00 2001 From: jamesCompose Message
+ ++- Error
+
+Inbox
+ Compose +Sent Messages
+ Compose +Subject
+ + From sender + to recipient + — time + +Message content
+