|
|
|
@ -13,6 +13,7 @@ import javax.servlet.ServletException;
@@ -13,6 +13,7 @@ import javax.servlet.ServletException;
|
|
|
|
|
import javax.servlet.http.HttpServlet; |
|
|
|
|
import javax.servlet.http.HttpServletRequest; |
|
|
|
|
import javax.servlet.http.HttpServletResponse; |
|
|
|
|
import javax.ws.rs.NotAllowedException; |
|
|
|
|
import java.io.IOException; |
|
|
|
|
import java.sql.SQLException; |
|
|
|
|
import java.util.HashMap; |
|
|
|
@ -62,31 +63,29 @@ public class Rest extends HttpServlet {
@@ -62,31 +63,29 @@ public class Rest extends HttpServlet {
|
|
|
|
|
return Map.of(SUCCESS,"Updated user permissions"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private Map<String,Object> archive(HttpServletRequest req, User user){ |
|
|
|
|
private Map<String,Object> archive(HttpServletRequest req, User user) throws SQLException { |
|
|
|
|
var list = Util.getMailingList(req); |
|
|
|
|
if (list != null){ |
|
|
|
|
try { |
|
|
|
|
var allEmails = user != null || list.hasState(STATE_OPEN_FOR_SUBSCRIBERS) || list.hasState(STATE_OPEN_FOR_GUESTS); |
|
|
|
|
var limitedSenders = allEmails ? null : list.moderators().map(ListMember::user).map(User::email).toList(); |
|
|
|
|
|
|
|
|
|
String month = req.getParameter(MONTH); |
|
|
|
|
boolean userIsMod = list.mayBeAlteredBy(user); |
|
|
|
|
if (month == null || month.isBlank()) { |
|
|
|
|
return Map.of(LIST,list.email(),MODERATOR,userIsMod,"summary",Post.summarize(list,limitedSenders)); |
|
|
|
|
} else { |
|
|
|
|
return Map.of(LIST,list.email(),MODERATOR,userIsMod,"posts",Post.find(list,month,limitedSenders).stream().map(Post::safeMap).toList()); |
|
|
|
|
} |
|
|
|
|
} catch (SQLException e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
LOG.debug("list: {}",list.email()); |
|
|
|
|
return Map.of(); |
|
|
|
|
if (list == null) throw new IllegalArgumentException(t("You are trying to access a non-existing list!")); |
|
|
|
|
var allowed = list.hasPublicArchive() || list.mayBeAlteredBy(user); |
|
|
|
|
if (!allowed) throw new NotAllowedException(t("You are not allowed to access the archive of this list!")); |
|
|
|
|
|
|
|
|
|
var allEmails = user != null || list.hasState(STATE_OPEN_FOR_SUBSCRIBERS) || list.hasState(STATE_OPEN_FOR_GUESTS); |
|
|
|
|
var limitedSenders = allEmails ? null : list.moderators().map(ListMember::user).map(User::email).toList(); |
|
|
|
|
|
|
|
|
|
boolean userIsMod = list.mayBeAlteredBy(user); |
|
|
|
|
String month = req.getParameter(MONTH); |
|
|
|
|
if (month == null || month.isBlank()) return Map.of(LIST,list.email(),MODERATOR,userIsMod,"summary",Post.summarize(list,limitedSenders)); |
|
|
|
|
return Map.of(LIST,list.email(),MODERATOR,userIsMod,"posts",Post.find(list,month,limitedSenders).stream().map(Post::safeMap).toList()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { |
|
|
|
|
String error = handleGet(req, resp); |
|
|
|
|
String error; |
|
|
|
|
try { |
|
|
|
|
error = handleGet(req, resp); |
|
|
|
|
} catch (SQLException e) { |
|
|
|
|
error = e.getMessage(); |
|
|
|
|
} |
|
|
|
|
if (error != null) resp.sendError(400,error); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -166,7 +165,7 @@ public class Rest extends HttpServlet {
@@ -166,7 +165,7 @@ public class Rest extends HttpServlet {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public String handleGet(HttpServletRequest req, HttpServletResponse resp){ |
|
|
|
|
public String handleGet(HttpServletRequest req, HttpServletResponse resp) throws SQLException { |
|
|
|
|
var user = Util.getUser(req); |
|
|
|
|
var path = Util.getPath(req); |
|
|
|
|
|
|
|
|
@ -176,9 +175,6 @@ public class Rest extends HttpServlet {
@@ -176,9 +175,6 @@ public class Rest extends HttpServlet {
|
|
|
|
|
json.put(USER,user.safeMap()); |
|
|
|
|
switch (path) { |
|
|
|
|
case LIST_ARCHIVE: |
|
|
|
|
var list = Util.getMailingList(req); |
|
|
|
|
var allowed = list.hasState(STATE_PUBLIC_ARCHIVE) || list.mayBeAlteredBy(user); |
|
|
|
|
if (!allowed) return t("Sie sind nicht berechtigt, das Archiv dieser Liste einzusehen!"); |
|
|
|
|
json.put("archive",archive(req,user)); |
|
|
|
|
break; |
|
|
|
|
case USER_LIST: |
|
|
|
@ -202,10 +198,7 @@ public class Rest extends HttpServlet {
@@ -202,10 +198,7 @@ public class Rest extends HttpServlet {
|
|
|
|
|
} else { |
|
|
|
|
switch (path) { |
|
|
|
|
case LIST_ARCHIVE: |
|
|
|
|
var list = Util.getMailingList(req); |
|
|
|
|
var allowed = list.hasState(STATE_PUBLIC_ARCHIVE); |
|
|
|
|
if (!allowed) return t("This mailing list has no public archive!"); |
|
|
|
|
json.put("archive",archive(req,user)); |
|
|
|
|
json.put("archive",archive(req,null)); |
|
|
|
|
break; |
|
|
|
|
case LIST_SUBSCRIBABLE: |
|
|
|
|
json.put("lists", MailingList.subscribable().stream().map(MailingList::minimalMap).toList()); |
|
|
|
@ -337,7 +330,7 @@ public class Rest extends HttpServlet {
@@ -337,7 +330,7 @@ public class Rest extends HttpServlet {
|
|
|
|
|
if (list.hasState(MailingList.STATE_REPLY_TO_LIST)) map.put(KEY_REPLY_TO_LIST,true); |
|
|
|
|
if (list.isOpenForGuests()) map.put(KEY_OPEN_FOR_GUESTS,true); |
|
|
|
|
if (list.isOpenForSubscribers()) map.put(KEY_OPEN_FOR_SUBSCRIBERS,true); |
|
|
|
|
if (list.hasState(MailingList.STATE_PUBLIC_ARCHIVE)) map.put(KEY_ARCHIVE,true); |
|
|
|
|
if (list.hasPublicArchive()) map.put(KEY_ARCHIVE,true); |
|
|
|
|
if (list.hasState(STATE_MODS_CAN_EDIT_MODS)) map.put(KEY_MODS_CAN_EDIT_MODS,true); |
|
|
|
|
if (list.holdTime() != null) map.put(KEY_DELETE_MESSAGES,list.holdTime()); |
|
|
|
|
return map; |
|
|
|
|