bugfix: detecting system users while dispatching emails was broken
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user