From 3995135a2c0070b7f9858554f84d6497d121c34e Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Fri, 9 Jul 2021 11:17:00 +0200
Subject: [PATCH] OZG-723 fix Forwarding Mail encoding

---
 pluto-server/pom.xml                          | 30 ++++++++++---------
 pluto-server/run_local.sh                     |  2 +-
 .../java/de/itvsh/ozg/pluto/BeansConfig.java  | 17 +++++++++++
 .../vorgang/redirect/ForwardingService.java   | 18 ++++++-----
 4 files changed, 44 insertions(+), 23 deletions(-)
 create mode 100644 pluto-server/src/main/java/de/itvsh/ozg/pluto/BeansConfig.java

diff --git a/pluto-server/pom.xml b/pluto-server/pom.xml
index b53b6870d..7d057e5fd 100644
--- a/pluto-server/pom.xml
+++ b/pluto-server/pom.xml
@@ -28,11 +28,13 @@
 		<spring-admin.version>2.3.1</spring-admin.version>
 
 		<commons-io.version>2.8.0</commons-io.version>
-		
+
 		<spring-boot.build-image.imageName>docker.ozg-sh.de/pluto:build-latest</spring-boot.build-image.imageName>
 
 		<zip.version>2.7.0</zip.version>
 		<jsoup.version>1.13.1</jsoup.version>
+
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 	</properties>
 
 	<dependencies>
@@ -121,9 +123,9 @@
 			<version>${zip.version}</version>
 		</dependency>
 		<dependency>
-		    <groupId>org.jsoup</groupId>
-		    <artifactId>jsoup</artifactId>
-		    <version>${jsoup.version}</version>
+			<groupId>org.jsoup</groupId>
+			<artifactId>jsoup</artifactId>
+			<version>${jsoup.version}</version>
 		</dependency>
 
 		<!-- Dev -->
@@ -263,16 +265,16 @@
 						<compilerArg>
 							-Amapstruct.unmappedTargetPolicy=IGNORE
 						</compilerArg>
-					 	<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
-			            <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
-			            <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
-			            <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
-			            <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
-			            <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
-			            <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
-			            <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
-			            <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
-			            <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED</arg>
+						<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
+						<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
+						<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
+						<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
+						<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
+						<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
+						<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
+						<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
+						<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
+						<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED</arg>
 					</compilerArgs>
 				</configuration>
 			</plugin>
diff --git a/pluto-server/run_local.sh b/pluto-server/run_local.sh
index 63a0f5abc..5b9fae190 100755
--- a/pluto-server/run_local.sh
+++ b/pluto-server/run_local.sh
@@ -1 +1 @@
-mvn spring-boot:run -Dspring-boot.run.profiles=local
+./mvnw spring-boot:run -Dspring-boot.run.profiles=local
diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/BeansConfig.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/BeansConfig.java
new file mode 100644
index 000000000..ca2edf0a0
--- /dev/null
+++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/BeansConfig.java
@@ -0,0 +1,17 @@
+package de.itvsh.ozg.pluto;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
+
+@Configuration
+public class BeansConfig {
+
+	@Bean
+	public FreeMarkerConfigurer freeMarkerConfigurer() {
+		FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer();
+		freeMarkerConfigurer.setTemplateLoaderPath("classpath:/templates");
+		freeMarkerConfigurer.setDefaultEncoding("UTF-8");
+		return freeMarkerConfigurer;
+	}
+}
diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/redirect/ForwardingService.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/redirect/ForwardingService.java
index 78258fc27..c294467e1 100644
--- a/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/redirect/ForwardingService.java
+++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/redirect/ForwardingService.java
@@ -1,8 +1,7 @@
 package de.itvsh.ozg.pluto.vorgang.redirect;
 
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.io.OutputStreamWriter;
+import java.io.StringWriter;
 import java.time.ZoneOffset;
 import java.time.ZonedDateTime;
 import java.util.HashMap;
@@ -18,6 +17,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.stereotype.Service;
 import org.springframework.util.MimeTypeUtils;
+import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
 
 import de.itvsh.ozg.mail.email.MailSendRequest;
 import de.itvsh.ozg.mail.email.MailSendRequest.MailAttachment;
@@ -28,7 +28,6 @@ import de.itvsh.ozg.pluto.common.util.ForwardingLandesnetzInfoService;
 import de.itvsh.ozg.pluto.vorgang.Vorgang;
 import de.itvsh.ozg.pluto.vorgang.VorgangService;
 import de.itvsh.ozg.pluto.vorgang.redirect.Forwarding.Status;
-import freemarker.template.Configuration;
 import freemarker.template.Template;
 import freemarker.template.TemplateException;
 
@@ -62,7 +61,7 @@ public class ForwardingService {
 	private ForwardingRepository repository;
 
 	@Autowired
-	private Configuration freemarkerCfg;
+	private FreeMarkerConfigurer freemarkerCfg;
 
 	@Autowired
 	private MailService emailService;
@@ -225,9 +224,12 @@ public class ForwardingService {
 	}
 
 	private String fillTemplate(String templateName, Object dataModel) {
-		try (var outStream = new ByteArrayOutputStream(); var writer = new OutputStreamWriter(outStream)) {
-			getTemplate(templateName).process(dataModel, writer);
-			return new String(outStream.toByteArray());
+		try {
+			Template template = getTemplate(templateName);
+			StringWriter stringWriter = new StringWriter();
+			template.process(dataModel, stringWriter);
+			return stringWriter.toString();
+
 		} catch (IOException | TemplateException e) {
 			throw new TechnicalException("Error filling mail template", e);
 		}
@@ -235,7 +237,7 @@ public class ForwardingService {
 
 	Template getTemplate(String templateName) {
 		try {
-			return freemarkerCfg.getTemplate(templateName);
+			return freemarkerCfg.getConfiguration().getTemplate(templateName);
 		} catch (IOException e) {
 			throw new TechnicalException("Error loading mail template", e);
 		}
-- 
GitLab