Compare commits

..

4 Commits

Author SHA1 Message Date
a321c813de working on timezone problems
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
2026-01-27 15:34:33 +01:00
fda40d72f8 re-ordered docker commands
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
2026-01-27 00:46:45 +01:00
2375746d91 further optimization of dockerfile
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
2026-01-27 00:29:43 +01:00
3e71ecc6cb optimized dockerfile
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
2026-01-23 23:09:25 +01:00
4 changed files with 30 additions and 29 deletions

View File

@@ -1,7 +1,7 @@
FROM alpine:3.22 AS svelte_build
RUN apk add npm
RUN adduser -Dh /home/svelte svelte
ADD . /home/svelte/Umbrella
ADD frontend /home/svelte/Umbrella/frontend
RUN chown -R svelte /home/svelte/Umbrella
USER svelte
WORKDIR /home/svelte/Umbrella/frontend
@@ -17,14 +17,18 @@ RUN gradle --no-daemon build
FROM alpine
RUN apk add bash fontconfig font-opensans graphviz openjdk21-jre weasyprint
RUN adduser -D umbrella
COPY --from=java_build /Umbrella/backend/build/libs/backend.jar /home/umbrella/jar/
RUN chown -R umbrella /home/umbrella
ADD https://github.com/plantuml/plantuml/releases/download/v1.2025.10/plantuml-1.2025.10.jar /home/umbrella/plantuml.jar
RUN apk --no-cache add bash fontconfig font-opensans graphviz openjdk21-jre weasyprint \
&& adduser -D umbrella
WORKDIR /home/umbrella
RUN chmod a+rx plantuml.jar
USER umbrella
RUN mkdir .config && ln -s /host/config.json .config/Umbrella.json
EXPOSE 80
CMD java -jar jar/backend.jar
ADD https://github.com/plantuml/plantuml/releases/download/v1.2025.10/plantuml-1.2025.10.jar /home/umbrella/plantuml.jar
COPY --from=java_build /Umbrella/backend/build/libs/backend.jar /home/umbrella/jar/
RUN mkdir .config \
&& ln -s /host/config.json .config/Umbrella.json \
&& chmod a+rx plantuml.jar \
&& chown -R umbrella . \
&& ln -s /usr/share/zoneinfo/Europe/Berlin /etc/localtime
USER umbrella

View File

@@ -5,7 +5,6 @@ public class Constants {
public static final String AUTH = "mail.smtp.auth";
public static final String CONFIG_DB = "umbrella.modules.message.database";
public static final String CONFIG_SMTP_FROM = "umbrella.modules.message.smtp.from";
public static final String CONFIG_SMTP_HOST = "umbrella.modules.message.smtp.host";
public static final String CONFIG_SMTP_PASS = "umbrella.modules.message.smtp.pass";
public static final String CONFIG_SMTP_PORT = "umbrella.modules.message.smtp.port";

View File

@@ -3,7 +3,6 @@ package de.srsoftware.umbrella.message;
import static de.srsoftware.tools.PathHandler.CONTENT_TYPE;
import static de.srsoftware.umbrella.core.ConnectionProvider.connect;
import static de.srsoftware.umbrella.core.ModuleRegistry.translator;
import static de.srsoftware.umbrella.core.constants.Constants.UTF8;
import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.missingConfig;
import static de.srsoftware.umbrella.message.Constants.*;
@@ -13,7 +12,6 @@ import de.srsoftware.configuration.Configuration;
import de.srsoftware.umbrella.core.ModuleRegistry;
import de.srsoftware.umbrella.core.api.PostBox;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
import de.srsoftware.umbrella.core.model.EmailAddress;
import de.srsoftware.umbrella.core.model.Envelope;
import de.srsoftware.umbrella.core.model.UmbrellaUser;
import de.srsoftware.umbrella.core.model.User;
@@ -78,10 +76,10 @@ public class MessageSystem implements PostBox {
db = new SqliteMessageDb(connect(dbFile));
debugAddress = config.get(DEBUG_ADDREESS).map(Object::toString).orElse(null);
port = config.get(CONFIG_SMTP_PORT,587);
host = config.get(CONFIG_SMTP_HOST).map(Object::toString).orElseThrow(() -> missingConfig(CONFIG_SMTP_HOST));
user = config.get(CONFIG_SMTP_USER).map(Object::toString).orElseThrow(() -> missingConfig(CONFIG_SMTP_USER));
pass = config.get(CONFIG_SMTP_PASS).map(Object::toString).orElseThrow(() -> missingConfig(CONFIG_SMTP_PASS));
from = config.get(CONFIG_SMTP_FROM).map(Object::toString).orElseThrow(() -> missingConfig(CONFIG_SMTP_FROM));
host = config.get(CONFIG_SMTP_HOST).map(Object::toString).orElseThrow(() -> new RuntimeException("umbrella.modules.message.smtp.host not configured!"));
user = config.get(CONFIG_SMTP_USER).map(Object::toString).orElseThrow(() -> new RuntimeException("umbrella.modules.message.smtp.user not configured!"));
pass = config.get(CONFIG_SMTP_PASS).map(Object::toString).orElseThrow(() -> new RuntimeException("umbrella.modules.message.smtp.pass not configured!"));
from = user;
ModuleRegistry.add(this);
new SubmissionTask(8).schedule();
new SubmissionTask(10).schedule();
@@ -118,9 +116,9 @@ public class MessageSystem implements PostBox {
var date = new Date();
for (var receiver : dueRecipients){
BiFunction<String,Map<String,String>,String> translateFunction = (text,fills) -> translator().translate(receiver.language(),text,fills);
var fallbackSender = new User("Umbrella",new EmailAddress(from),null);
var combined = new CombinedMessage("Collected messages",translateFunction,fallbackSender);
BiFunction<String,Map<String,String>,String> translateFunction = (text,fills) -> ModuleRegistry.translator().translate(receiver.language(),text,fills);
var combined = new CombinedMessage("Collected messages",translateFunction);
var envelopes = queue.stream().filter(env -> env.isFor(receiver)).toList();
for (var envelope : envelopes) combined.merge(envelope.message());

View File

@@ -5,7 +5,9 @@ import static java.lang.System.Logger.Level.DEBUG;
import static java.lang.System.Logger.Level.TRACE;
import static java.text.MessageFormat.format;
import de.srsoftware.umbrella.core.model.*;
import de.srsoftware.umbrella.core.model.Attachment;
import de.srsoftware.umbrella.core.model.Message;
import de.srsoftware.umbrella.core.model.UmbrellaUser;
import java.util.*;
import java.util.function.BiFunction;
@@ -14,17 +16,15 @@ public class CombinedMessage {
private final Set<Attachment> attachments = new HashSet<>();
private final StringBuilder combinedBody = new StringBuilder();
private final User fallbackSender;
private String combinedSubject = null;
private final List<Message> mergedMessages = new ArrayList<>();
private final String subjectForCombinedMessage;
private final BiFunction<String,Map<String,String>,String> translate;
private User sender = null;
private UmbrellaUser sender = null;
public CombinedMessage(String subjectForCombinedMessage, BiFunction<String, Map<String,String>,String> translateFunction, User fallbackSender){
public CombinedMessage(String subjectForCombinedMessage, BiFunction<String, Map<String,String>,String> translateFunction){
LOG.log(DEBUG,"Creating combined message…");
this.subjectForCombinedMessage = translateFunction.apply(subjectForCombinedMessage,null);
this.fallbackSender = fallbackSender;
this.subjectForCombinedMessage = subjectForCombinedMessage;
translate = translateFunction;
}
@@ -39,12 +39,12 @@ public class CombinedMessage {
combinedSubject = subject;
break;
case 1:
if (!sender.equals(message.sender())) sender = fallbackSender;
combinedBody.insert(0,format("# {0} / {1}:\n\n",sender,subject)); // insert sender and subject of first message right before the body of the first message
combinedBody.insert(0,format("# {0}:\n# {1}:\n\n",sender,subject)); // insert sender and subject of first message right before the body of the first message
combinedSubject = subjectForCombinedMessage;
// no break here, we need to append the subject and content
default:
combinedBody.append("\n-----\n# ").append(message.sender()).append(" / ").append(subject).append(":\n\n");
combinedBody.append("\n\n# ").append(message.sender()).append(":\n");
combinedBody.append("# ").append(subject).append(":\n\n");
combinedBody.append(body);
}
if (message.attachments() != null) attachments.addAll(message.attachments());
@@ -59,7 +59,7 @@ public class CombinedMessage {
return combinedBody.toString();
}
public User sender() {
public UmbrellaUser sender() {
return sender;
}