restructuring, working on password reset email

next steps:
- create reset url and add it to the translation fill map
- implement message translation
- implement otp validation and login
This commit is contained in:
2025-07-08 15:39:48 +02:00
parent 3e91565fb6
commit 7a5bb50ee2
24 changed files with 245 additions and 178 deletions
@@ -5,7 +5,7 @@ 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.user.model.UmbrellaUser;
import de.srsoftware.umbrella.core.model.UmbrellaUser;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
@@ -44,7 +44,7 @@ public class CombinedMessage {
body.append("# ").append(message.subject()).append(":\n\n");
body.append(message.body());
}
attachments.addAll(message.attachments());
if (message.attachments() != null) attachments.addAll(message.attachments());
mergedMessages.add(message);
}
@@ -7,7 +7,8 @@ import static de.srsoftware.umbrella.message.Constants.*;
import static java.text.MessageFormat.format;
import de.srsoftware.umbrella.core.UmbrellaException;
import de.srsoftware.umbrella.user.model.User;
import de.srsoftware.umbrella.core.model.EmailAddress;
import de.srsoftware.umbrella.core.model.UmbrellaUser;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -17,28 +18,38 @@ import org.json.JSONObject;
public class Envelope {
private Message message;
private Set<User> receivers;
private Set<UmbrellaUser> receivers;
public Envelope(Message message, HashSet<User> receivers) {
public Envelope(Message message, UmbrellaUser receiver){
this(message,new HashSet<>(Set.of(receiver)));
}
public Envelope(Message message, HashSet<UmbrellaUser> receivers) {
this.message = message;
this.receivers = receivers;
}
/**
* TODO: this is legacy, move to legacy module!
* @param json
* @return
* @throws UmbrellaException
*/
public static Envelope from(JSONObject json) throws UmbrellaException {
if (!json.has(RECEIVERS)) throw new UmbrellaException(400,ERROR_MISSING_FIELD,RECEIVERS);
var message = Message.from(json);
var obj = json.get(RECEIVERS);
if (obj instanceof JSONObject) obj = new JSONArray(List.of(obj));
if (!(obj instanceof JSONArray receiverList)) throw new UmbrellaException(400,ERROR_INVALID_FIELD,RECEIVERS,JSONARRAY);
var receivers = new HashSet<User>();
var receivers = new HashSet<UmbrellaUser>();
for (var o : receiverList){
if (!(o instanceof JSONObject receiverData)) throw new UmbrellaException(400,ERROR_INVALID_FIELD,"entries of "+RECEIVERS,JSONOBJECT);
receivers.add(User.of(receiverData));
receivers.add(UmbrellaUser.of(receiverData));
}
return new Envelope(message,receivers);
}
public boolean isFor(User receiver) {
public boolean isFor(UmbrellaUser receiver) {
return receivers.contains(receiver);
}
@@ -46,12 +57,12 @@ public class Envelope {
return message;
}
public Set<User> receivers(){
public Set<UmbrellaUser> receivers(){
return receivers;
}
@Override
public String toString() {
return format("{0} (to: {1}), subject: {2}",getClass().getSimpleName(),receivers.stream().map(User::email).collect(Collectors.joining(", ")),message.subject());
return format("{0} (to: {1}), subject: {2}",getClass().getSimpleName(),receivers.stream().map(UmbrellaUser::email).map(EmailAddress::toString).collect(Collectors.joining(", ")),message.subject());
}
}
@@ -7,16 +7,12 @@ import static de.srsoftware.umbrella.message.Constants.*;
import static java.text.MessageFormat.format;
import de.srsoftware.umbrella.core.UmbrellaException;
import de.srsoftware.umbrella.user.model.UmbrellaUser;
import de.srsoftware.umbrella.user.model.User;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import de.srsoftware.umbrella.core.model.UmbrellaUser;
import java.util.*;
import org.json.JSONArray;
import org.json.JSONObject;
public record Message(UmbrellaUser sender, String subject, String body, List<Attachment> attachments) {
public record Message(UmbrellaUser sender, String subject, String body, Map<String,String> fills, List<Attachment> attachments) {
public static Message from(JSONObject json) throws UmbrellaException {
for (var key : Set.of(SENDER, SUBJECT, BODY)) {
if (!json.has(key)) throw new UmbrellaException(400,ERROR_MISSING_FIELD,key);
@@ -25,7 +21,7 @@ public record Message(UmbrellaUser sender, String subject, String body, List<Att
if (!(json.get(SUBJECT) instanceof String subject && isSet(subject))) throw new UmbrellaException(400,ERROR_INVALID_FIELD, SUBJECT,STRING);
if (!(json.get(BODY) instanceof String body && isSet(body))) throw new UmbrellaException(400,ERROR_INVALID_FIELD, BODY,STRING);
var user = User.of(senderObject);
var user = UmbrellaUser.of(senderObject);
if (!(user instanceof UmbrellaUser sender)) throw new UmbrellaException(400,"Sender is not an umbrella user!");
var attachments = new ArrayList<Attachment>();
if (json.has(ATTACHMENTS)){
@@ -39,7 +35,7 @@ public record Message(UmbrellaUser sender, String subject, String body, List<Att
}
}
}
return new Message(sender,subject,body,attachments);
return new Message(sender,subject,body,null, attachments);
}
@Override