Merge branch 'feature/notifications' into dev
All checks were successful
Build Docker Image / Docker-Build (push) Successful in 2m5s
Build Docker Image / Clean-Registry (push) Successful in -2s

This commit is contained in:
2026-01-27 08:45:02 +01:00
5 changed files with 20 additions and 4 deletions

View File

@@ -3,6 +3,7 @@ package de.srsoftware.umbrella.core.api;
import com.sun.net.httpserver.HttpExchange;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
import de.srsoftware.umbrella.core.model.EmailAddress;
import de.srsoftware.umbrella.core.model.Session;
import de.srsoftware.umbrella.core.model.Token;
import de.srsoftware.umbrella.core.model.UmbrellaUser;
@@ -16,6 +17,7 @@ public interface UserService {
Map<Long, UmbrellaUser> list(Integer start, Integer limit, Collection<Long> ids) throws UmbrellaException;
Session load(Token token) throws UmbrellaException;
UmbrellaUser load(Session session) throws UmbrellaException;
Optional<UmbrellaUser> load(EmailAddress email) throws UmbrellaException;
UmbrellaUser loadUser(long userId) throws UmbrellaException;
Optional<UmbrellaUser> loadUser(Optional<Token> sessionToken) throws UmbrellaException;
Optional<UmbrellaUser> loadUser(HttpExchange ex) throws UmbrellaException;

View File

@@ -2,6 +2,7 @@
package de.srsoftware.umbrella.message;
import static de.srsoftware.umbrella.core.ConnectionProvider.connect;
import static de.srsoftware.umbrella.core.ModuleRegistry.userService;
import static de.srsoftware.umbrella.core.constants.Constants.TIME_FORMATTER;
import static de.srsoftware.umbrella.core.constants.Constants.UTF8;
import static de.srsoftware.umbrella.core.constants.Field.*;
@@ -112,7 +113,7 @@ public class MessageSystem extends BaseHandler implements PostBox, EventListener
addCors(ex);
try {
Optional<Token> token = SessionToken.from(ex).map(Token::of);
var user = ModuleRegistry.userService().loadUser(token);
var user = userService().loadUser(token);
if (user.isEmpty()) return unauthorized(ex);
var id = path.pop();
return switch (id){
@@ -139,7 +140,7 @@ public class MessageSystem extends BaseHandler implements PostBox, EventListener
addCors(ex);
try {
Optional<Token> token = SessionToken.from(ex).map(Token::of);
var user = ModuleRegistry.userService().loadUser(token);
var user = userService().loadUser(token);
if (user.isEmpty()) return unauthorized(ex);
var head = path.pop();
return switch (head){
@@ -210,7 +211,7 @@ public class MessageSystem extends BaseHandler implements PostBox, EventListener
private synchronized void processMessages(Integer scheduledHour) {
LOG.log(INFO,"Running {0}…",scheduledHour == null ? "instantly" : "scheduled at "+scheduledHour);
var dueRecipients = queue.getReceivers().filter(uu -> sendAt(uu,scheduledHour)).toList();
var dueRecipients = queue.getReceivers().map(this::toUmbrellaUser).filter(uu -> sendAt(uu,scheduledHour)).toList();
var date = new Date();
@@ -236,6 +237,12 @@ public class MessageSystem extends BaseHandler implements PostBox, EventListener
if (scheduledHour != null) new SubmissionTask(scheduledHour).schedule();
}
private User toUmbrellaUser(User user) {
var umbrellaUser = userService().load(user.email());
if (umbrellaUser.isPresent()) return umbrellaUser.get();
return user;
}
private boolean sendMessage(HttpExchange ex, UmbrellaUser user, Envelope<?> envelope) throws IOException {
var message = envelope.message();
if (message instanceof TranslatableMessage tm) message = tm.translate(user.language());

View File

@@ -147,6 +147,13 @@ public class UserModule extends BaseHandler implements UserService {
return users.load(session);
}
public Optional<UmbrellaUser> load(EmailAddress email){
try {
return Optional.of(users.load(email));
} catch (UmbrellaException ignored){
return empty();
}
}
@Override
public UmbrellaUser loadUser(long userId) throws UmbrellaException {

View File

@@ -10,6 +10,7 @@ import de.srsoftware.umbrella.user.model.DbUser;
import de.srsoftware.umbrella.user.model.Password;
import java.util.Collection;
import java.util.Map;
import java.util.Optional;
public interface UserDb {

View File

@@ -397,7 +397,6 @@ CREATE TABLE IF NOT EXISTS {0} (
}
if (user == null) throw unauthorized(FAILED_TO_LOAD_OBJECT_BY_ID, OBJECT,t(Text.USER), ID,key);
return user;
}
@Override