Merge branch 'main' into lang_de
This commit is contained in:
@@ -28,8 +28,7 @@ public class Constants {
|
||||
public static final String SUBJECT = "subject";
|
||||
public static final String TEXT = "text";
|
||||
public static final String TOKEN = "token";
|
||||
public static final String URL = "url";
|
||||
public static final String USER = "user";
|
||||
public static final String VARCHAR = "VARCHAR(255)";
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
package de.srsoftware.widerhall.data;
|
||||
|
||||
import de.srsoftware.widerhall.Configuration;
|
||||
import de.srsoftware.widerhall.Util;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.stringtemplate.v4.ST;
|
||||
|
||||
import javax.ws.rs.HEAD;
|
||||
import javax.mail.MessagingException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.*;
|
||||
@@ -88,7 +91,7 @@ public class ListMember {
|
||||
* @return
|
||||
* @throws SQLException
|
||||
*/
|
||||
public static User confirm(String token) throws SQLException {
|
||||
public static ListMember confirm(String token) throws SQLException {
|
||||
var rs = Database.open().select(TABLE_NAME).where(TOKEN,token).compile().exec();
|
||||
if (rs.next()){
|
||||
var lm = ListMember.from(rs);
|
||||
@@ -104,12 +107,25 @@ public class ListMember {
|
||||
.compile()
|
||||
.run();
|
||||
}
|
||||
return lm.user;
|
||||
return lm;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public void sendConfirmationMail(ST template) throws SQLException, MessagingException {
|
||||
var subject = t("[{}] Abonnement abgeschlossen!",list.name());
|
||||
var data = new HashMap<String,Object>();
|
||||
data.put(USER,user.safeMap());
|
||||
data.put(LIST,list.minimalMap());
|
||||
data.put(URL,Configuration.instance().baseUrl()+"/web/index");
|
||||
if (list.isOpenForSubscribers()) data.put("open_list",true);
|
||||
var text = template.add("data",data).render();
|
||||
try {
|
||||
list.smtp().send(list.email(),list.name(),user.email(),subject,text);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
LOG.warn("Failed to send list subscription confirmation!",e);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Create a new list member entry in the database.
|
||||
* If the member has the state AWAITING_CONFIRMATION, a token is assigned with the member, too.
|
||||
|
||||
@@ -7,6 +7,7 @@ import de.srsoftware.widerhall.mail.ProblemListener;
|
||||
import de.srsoftware.widerhall.mail.SmtpClient;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.stringtemplate.v4.ST;
|
||||
|
||||
import javax.mail.*;
|
||||
import javax.mail.internet.AddressException;
|
||||
@@ -61,6 +62,7 @@ public class MailingList implements MessageHandler, ProblemListener {
|
||||
private static final int DEFAULT_STATE = STATE_PENDING|STATE_HIDE_RECEIVERS|STATE_PUBLIC_ARCHIVE;
|
||||
private static final String RETAINED_FOLDER = "retained";
|
||||
private static final String LAST_ERROR = "last_error";
|
||||
private static final String LIST_NAME = "list_name";
|
||||
private String email, name, lastError;
|
||||
private int state;
|
||||
private SmtpClient smtp;
|
||||
@@ -533,21 +535,6 @@ public class MailingList implements MessageHandler, ProblemListener {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* send an email to a potential subscriber asking for confirmation
|
||||
* @param user
|
||||
* @param token
|
||||
* @throws MessagingException
|
||||
* @throws UnsupportedEncodingException
|
||||
*/
|
||||
private void sendConfirmationRequest(User user, String token) throws MessagingException, UnsupportedEncodingException {
|
||||
var subject = t("Bitte bestätigen Sie ihr Listen-Abonnement");
|
||||
var config = Configuration.instance();
|
||||
var url = new StringBuilder(config.baseUrl()).append("/web/confirm?token=").append(token);
|
||||
var text = t("Botte gehen Sie zu {} um das Abonnieren der Liste abzuschließen!",url);
|
||||
smtp.send(email(),name(),user.email(),subject,text);
|
||||
}
|
||||
|
||||
private void sentRetentionNotification(String senderEmail) {
|
||||
try {
|
||||
var receivers = members()
|
||||
@@ -642,17 +629,24 @@ public class MailingList implements MessageHandler, ProblemListener {
|
||||
* @throws SQLException
|
||||
* @throws MessagingException
|
||||
*/
|
||||
public void requestSubscription(User user, boolean skipConfirmation) throws SQLException, MessagingException {
|
||||
public void requestSubscription(User user, boolean skipConfirmation, ST template) throws SQLException, MessagingException {
|
||||
var state = skipConfirmation ? ListMember.STATE_SUBSCRIBER : ListMember.STATE_AWAITING_CONFIRMATION;
|
||||
var member = ListMember.create(this,user,state);
|
||||
if (skipConfirmation) return;
|
||||
try {
|
||||
sendConfirmationRequest(user, member.token());
|
||||
var config = Configuration.instance();
|
||||
var url = new StringBuilder(config.baseUrl()).append("/web/confirm?token=").append(member.token()).toString();
|
||||
var subject = t("[{}] Please confirm your list subscription",name());
|
||||
var text = template.add(URL,url).add(LIST_NAME,name()).render();
|
||||
smtp.send(email(),name(),user.email(),subject,text);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
throw new MessagingException(t("Senden der Email an {} fehlgeschlagen",user.email()),e);
|
||||
}
|
||||
}
|
||||
|
||||
protected SmtpClient smtp(){
|
||||
return smtp;
|
||||
}
|
||||
|
||||
private String stamp() {
|
||||
return "["+name+"]";
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package de.srsoftware.widerhall.web;
|
||||
|
||||
import de.srsoftware.widerhall.Configuration;
|
||||
import org.stringtemplate.v4.ST;
|
||||
import org.stringtemplate.v4.STGroup;
|
||||
import org.stringtemplate.v4.STRawGroupDir;
|
||||
|
||||
@@ -8,7 +9,6 @@ import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -24,6 +24,10 @@ public abstract class TemplateServlet extends HttpServlet {
|
||||
loadTemplates();
|
||||
}
|
||||
|
||||
protected ST getTemplate(String name){
|
||||
return templates.getInstanceOf(name);
|
||||
}
|
||||
|
||||
protected String loadFile(String filename, HttpServletResponse resp) {
|
||||
var path = String.join(File.separator,baseDir,"static",filename);
|
||||
var file = new File(path);
|
||||
|
||||
@@ -11,6 +11,7 @@ import org.slf4j.LoggerFactory;
|
||||
import javax.mail.MessagingException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.ws.rs.HEAD;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.security.InvalidKeyException;
|
||||
@@ -142,8 +143,12 @@ public class Web extends TemplateServlet {
|
||||
try {
|
||||
var token = req.getParameter(TOKEN);
|
||||
if (token== null || token.isBlank()) return t("Ungültiger oder fehlender Token!");
|
||||
var user = ListMember.confirm(token);
|
||||
if (user != null) return loadTemplate(INDEX,Map.of(USER,user.safeMap(),NOTES,"Listen-Mitgliedschaft bestätigt!"),resp);
|
||||
var listMember = ListMember.confirm(token);
|
||||
if (listMember != null) {
|
||||
listMember.sendConfirmationMail(getTemplate("confirmation_mail"));
|
||||
|
||||
return loadTemplate(INDEX,Map.of(USER,listMember.user().safeMap(),NOTES,"Listen-Mitgliedschaft bestätigt!"),resp);
|
||||
}
|
||||
return t("Nutzer oder Token unbekannt");
|
||||
} catch (Exception e) {
|
||||
LOG.debug("Bestätigung des Listen-Abonnements fehlgeschlagen:",e);
|
||||
@@ -517,7 +522,7 @@ public class Web extends TemplateServlet {
|
||||
}
|
||||
|
||||
try {
|
||||
list.requestSubscription(user,skipConfirmation);
|
||||
list.requestSubscription(user,skipConfirmation,getTemplate("subscribe_mail"));
|
||||
if (skipConfirmation) {
|
||||
data.put(NOTES, t("'{}' hat die Mailingliste '{}' erfolgreich abonniert.", user.email(), list.email()));
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user