Browse Source

got rid of stringtemplates in favor of lightweight solution

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
sqlite
Stephan Richter 6 months ago
parent
commit
18ca57d2ec
  1. 5
      de.srsoftware.oidc.light/build.gradle
  2. 6
      de.srsoftware.oidc.light/src/main/java/de/srsoftware/LightOICD.java
  3. 40
      de.srsoftware.oidc.light/src/main/java/de/srsoftware/Templates.java
  4. 5
      de.srsoftware.oidc.light/src/main/resources/templates/index.html
  5. 5
      de.srsoftware.oidc.light/src/main/resources/templates/index.st

5
de.srsoftware.oidc.light/build.gradle

@ -13,12 +13,11 @@ repositories {
dependencies { dependencies {
compileOnly 'javax.servlet:javax.servlet-api:4.0.1' compileOnly 'javax.servlet:javax.servlet-api:4.0.1'
implementation 'ch.qos.logback:logback-core:1.5.6' implementation 'ch.qos.logback:logback-core:1.5.6'
implementation 'ch.qos.logback:logback-classic:1.5.6'
implementation 'org.slf4j:slf4j-api:2.0.13' implementation 'org.slf4j:slf4j-api:2.0.13'
implementation project(':de.srsoftware.oidc.api')
testImplementation platform('org.junit:junit-bom:5.10.0') testImplementation platform('org.junit:junit-bom:5.10.0')
testImplementation 'org.junit.jupiter:junit-jupiter' testImplementation 'org.junit.jupiter:junit-jupiter'
implementation 'ch.qos.logback:logback-classic:1.5.6'
implementation project(':de.srsoftware.oidc.api')
implementation('org.antlr:ST4:4.3.3')
} }
test { test {

6
de.srsoftware.oidc.light/src/main/java/de/srsoftware/LightOICD.java

@ -6,6 +6,7 @@ import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet; import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServlet;
@ -13,7 +14,6 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.stringtemplate.v4.ST;
@WebServlet(urlPatterns = "/") @WebServlet(urlPatterns = "/")
public class LightOICD extends HttpServlet { public class LightOICD extends HttpServlet {
@ -57,8 +57,8 @@ public class LightOICD extends HttpServlet {
private void landingPage(HttpServletRequest req, HttpServletResponse resp, User user) throws IOException { private void landingPage(HttpServletRequest req, HttpServletResponse resp, User user) throws IOException {
LOG.debug("landingPage(…)"); LOG.debug("landingPage(…)");
ST st = templates.getInstanceOf("index"); var index = templates.get("index.html", Map.of("user","Darling"));
resp.setContentType("text/html"); resp.setContentType("text/html");
resp.getWriter().println(st.render()); resp.getWriter().println(index.get());
} }
} }

40
de.srsoftware.oidc.light/src/main/java/de/srsoftware/Templates.java

@ -2,28 +2,33 @@
package de.srsoftware; package de.srsoftware;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
import org.stringtemplate.v4.*; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Templates extends STRawGroupDir { public class Templates {
private static Templates singleton = null; private static Templates singleton = null;
private static Logger LOG = LoggerFactory.getLogger(Templates.class);
private Path dir = searchTemplates();
Templates() { public Templates() throws FileNotFoundException {}
super(templateDir(), '«', '»');
}
private static String templateDir() { private static Path searchTemplates() throws FileNotFoundException {
return templateDir(new File(System.getProperty("user.dir"))).get().getAbsolutePath(); return searchTemplates(new File(System.getProperty("user.dir"))).map(File::toPath).orElseThrow(() -> new FileNotFoundException("Missing template directory"));
} }
private static Optional<File> templateDir(File dir) { private static Optional<File> searchTemplates(File dir) {
if (dir.isDirectory()) { if (dir.isDirectory()) {
var children = dir.listFiles(); var children = dir.listFiles();
for (File child : children) { for (File child : children) {
if (child.isDirectory()) { if (child.isDirectory()) {
if (child.getName().equals("templates")) return Optional.of(child); if (child.getName().equals("templates")) return Optional.of(child);
var inner = templateDir(child); var inner = searchTemplates(child);
if (inner.isPresent()) return inner; if (inner.isPresent()) return inner;
} }
} }
@ -35,4 +40,21 @@ public class Templates extends STRawGroupDir {
if (singleton == null) singleton = new Templates(); if (singleton == null) singleton = new Templates();
return singleton; return singleton;
} }
public Optional<String> get(String path, Map<String, String> replacements) {
var file = dir.resolve(path);
try {
return Optional.of(Files.readString(file)).map(s -> replaceKeys(s,replacements));
// TODO: replacements
} catch (IOException e) {
LOG.warn("Failed to read {}", path, e);
return Optional.empty();
}
}
private String replaceKeys(String text, Map<String, String> replacements) {
for (Map.Entry<String, String> replacement : replacements.entrySet()) text = text.replace("{"+replacement.getKey()+"}",replacement.getValue());
return text;
}
} }

5
de.srsoftware.oidc.light/src/main/resources/templates/index.html

@ -0,0 +1,5 @@
<html>
<body>
Hallo {user}, dies ist die Index-Seite!
</body>
</html>

5
de.srsoftware.oidc.light/src/main/resources/templates/index.st

@ -1,5 +0,0 @@
<html>
<body>
Dies ist die Index-Seite
</body>
</html>
Loading…
Cancel
Save