working on list administration

This commit is contained in:
2022-04-18 12:55:24 +02:00
parent bbc7e769a4
commit 1ef430b783
11 changed files with 105 additions and 81 deletions

View File

@@ -5,16 +5,10 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.stringtemplate.v4.ST;
import javax.xml.crypto.Data;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.*;
import static de.srsoftware.widerhall.Constants.*;
import static de.srsoftware.widerhall.Constants.STATE;
public class ListMember {
private static final Logger LOG = LoggerFactory.getLogger(ListMember.class);
@@ -25,7 +19,6 @@ public class ListMember {
private static final String LIST_EMAIL = "list_email";
private static final String USER_EMAIL = "user_email";
private static final String STATE = "state";
private static final String TOKEN = "token";
private final String listEmail,token,userEmail;
private final int state;
@@ -36,6 +29,27 @@ public class ListMember {
this.token = token;
}
public static User confirm(String token) throws SQLException {
var rs = Database.open().select(TABLE_NAME).where(TOKEN,token).exec();
while (rs.next()){
var lm = new ListMember(rs.getString(LIST_EMAIL),rs.getString(USER_EMAIL),rs.getInt(STATE),rs.getString(TOKEN));
User user = User.loadAll(List.of(lm.userEmail)).stream().findAny().orElse(null);
if (user != null){
int newState = lm.state ^ STATE_AWAITING_CONFIRMATION | STATE_SUBSCRIBER;
Database.open()
.update(TABLE_NAME)
.set(TOKEN,"NULL")
.set(STATE, newState) //drop confirmation state, set subscriber state
.where(LIST_EMAIL,lm.listEmail)
.where(USER_EMAIL,lm.userEmail)
.run();
}
return user;
}
return null;
}
public static ListMember create(MailingList list, User user, int state) throws SQLException {
String token = null;
if ((state & STATE_AWAITING_CONFIRMATION) > 0){
@@ -56,8 +70,8 @@ public class ListMember {
Database.open().query(sql).run();
}
public static List<String> listsOwnedBy(User user) {
var list = new ArrayList<String>();
public static Set<String> listsOwnedBy(User user) {
var list = new HashSet<String>();
try {
var rs = Database.open().select(TABLE_NAME,LIST_EMAIL)
.where(USER_EMAIL,user.email())
@@ -113,7 +127,7 @@ public class ListMember {
.where(USER_EMAIL,user.email())
.exec();
while (rs.next()){
int state = rs.getInt(STATE) ^ STATE_SUBSCRIBER;
int state = Util.unset(rs.getInt(STATE),STATE_SUBSCRIBER,STATE_AWAITING_CONFIRMATION);
if (state < 1) { // drop entry
db.deleteFrom(TABLE_NAME)
.where(LIST_EMAIL,list.email())