Skip to content

Commit

Permalink
feat: [ZIF-982] remove message size check on save draft (#471)
Browse files Browse the repository at this point in the history
* feat: ignore mta size limit when saving a draft

* test: ParseMimeMessage.parseDraftMimeMsgSoap

* fix: remove System.out.println

* test: ParseMimeMessageTest test empty attachment case

- an empty attachment does not affect message size

* refactor: move methods alongside, comment method usages, remove unused methods

* refactor: move ParseMimeMessage in its own package

- extract inner classes of ParseMimeMessage

* refactor: inline parseMimeMsgSoap and remove MimeBodyParts when always null

* refactor: introduce ParseMessageContext.create

* test: inline document inside draft

* refactor(ParseMimeMessage): inline variable always Part.INLINE + rename method to handleInlineAttachments

- add tests on handling upload of inline attachments

* test(parsemimemessage): remove notnull jetbrains annotation

* test(calendarutils): add test for parsing raw invite

---------

Co-authored-by: Giovanni De Facci <giovanni.defacci@zextras.com>
  • Loading branch information
frisonisland and zextrasGiovanniDefacci authored Apr 3, 2024
1 parent 21288a6 commit d9114e5
Show file tree
Hide file tree
Showing 31 changed files with 839 additions and 378 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ public static Upload saveUpload(
is, filename, contentType, accountId, getFileUploadMaxSize(limitByFileUploadMaxSize));
}

public static Upload saveUpload(
private static Upload saveUpload(
InputStream is, String filename, String contentType, String accountId, long limit)
throws ServiceException, IOException {
FileItem fi = null;
Expand Down Expand Up @@ -478,7 +478,7 @@ private static long getFileUploadMaxSize(boolean limitByFileUploadMaxSize) {
return maxSize;
}

public static ServletFileUpload getUploader2(boolean limitByFileUploadMaxSize) {
private static ServletFileUpload getUploader2(boolean limitByFileUploadMaxSize) {
return getUploader(getFileUploadMaxSize(limitByFileUploadMaxSize));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,18 @@
import com.zimbra.cs.mailbox.calendar.Invite;
import com.zimbra.cs.mailbox.calendar.RecurId;
import com.zimbra.cs.mailbox.calendar.ZOrganizer;
import com.zimbra.cs.service.mail.message.parser.InviteParser;
import com.zimbra.cs.service.mail.message.parser.InviteParserResult;
import com.zimbra.cs.util.AccountUtil;
import com.zimbra.soap.ZimbraSoapContext;
import java.util.Map;
import javax.mail.MessagingException;

public class AddCalendarItemInvite extends CalendarRequest {

protected class AddInviteParser extends ParseMimeMessage.InviteParser {
protected class AddInviteParser extends InviteParser {
@Override
public ParseMimeMessage.InviteParserResult parseInviteElement(
public InviteParserResult parseInviteElement(
ZimbraSoapContext lc, OperationContext octxt, Account account, Element inviteElem)
throws ServiceException {
return CalendarUtils.parseInviteForAddInvite(account, getItemType(), inviteElem, null);
Expand Down
4 changes: 3 additions & 1 deletion store/src/main/java/com/zimbra/cs/service/mail/AddMsg.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

package com.zimbra.cs.service.mail;

import com.zimbra.cs.service.mail.message.parser.MimeMessageData;
import com.zimbra.cs.service.mail.message.parser.ParseMimeMessage;
import java.io.IOException;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -98,7 +100,7 @@ public Element handle(Element request, Map<String, Object> context) throws Servi
// check to see whether the entire message has been uploaded under separate cover
String attachment = msgElem.getAttribute(MailConstants.A_ATTACHMENT_ID, null);

ParseMimeMessage.MimeMessageData mimeData = new ParseMimeMessage.MimeMessageData();
MimeMessageData mimeData = new MimeMessageData();
Message msg;
try {
MimeMessage mm;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
import com.zimbra.cs.service.FileUploadServlet;
import com.zimbra.cs.service.FileUploadServlet.Upload;
import com.zimbra.cs.service.UserServlet;
import com.zimbra.cs.service.mail.ParseMimeMessage.MessageAddresses;
import com.zimbra.cs.service.mail.message.parser.MessageAddresses;
import com.zimbra.cs.service.mail.ToXML.EmailType;
import com.zimbra.cs.service.util.ItemId;
import com.zimbra.cs.util.JMSession;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@
import com.zimbra.cs.mime.Mime;
import com.zimbra.cs.mime.Mime.FixedMimeMessage;
import com.zimbra.cs.mime.ParsedMessage;
import com.zimbra.cs.service.mail.message.parser.InviteParser;
import com.zimbra.cs.service.mail.message.parser.MimeMessageData;
import com.zimbra.cs.service.mail.message.parser.ParseMimeMessage;
import com.zimbra.cs.service.util.ItemId;
import com.zimbra.cs.service.util.ItemIdFormatter;
import com.zimbra.cs.util.AccountUtil;
Expand Down Expand Up @@ -89,7 +92,7 @@ protected static CalSendData handleMsgElement(
Element msgElem,
Account acct,
Mailbox mbox,
ParseMimeMessage.InviteParser inviteParser)
InviteParser inviteParser)
throws ServiceException {
CalSendData csd = new CalSendData();

Expand Down Expand Up @@ -854,7 +857,7 @@ protected MailItem.Type getItemType() {
return type;
}

protected static class CalSendData extends ParseMimeMessage.MimeMessageData {
protected static class CalSendData extends MimeMessageData {
ItemId mOrigId; // orig id if this is a reply
String mReplyType;
String mIdentityId;
Expand Down
33 changes: 17 additions & 16 deletions store/src/main/java/com/zimbra/cs/service/mail/CalendarUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
import com.zimbra.cs.mailbox.calendar.ZOrganizer;
import com.zimbra.cs.mailbox.calendar.ZRecur;
import com.zimbra.cs.mailbox.util.TypedIdList;
import com.zimbra.cs.service.mail.message.parser.InviteParserResult;
import com.zimbra.cs.util.AccountUtil.AccountAddressMatcher;
import com.zimbra.soap.base.CalTZInfoInterface;
import com.zimbra.soap.type.TzOnsetInfo;
Expand Down Expand Up @@ -86,9 +87,9 @@ public class CalendarUtils {
* @return
* @throws ServiceException
*/
static ParseMimeMessage.InviteParserResult parseInviteRaw(Account account, Element inviteElem)
static InviteParserResult parseInviteRaw(Account account, Element inviteElem)
throws ServiceException {
ParseMimeMessage.InviteParserResult toRet = new ParseMimeMessage.InviteParserResult();
InviteParserResult toRet = new InviteParserResult();

Element content = inviteElem.getElement(MailConstants.E_CONTENT /* content */);
toRet.mUid = content.getAttribute(MailConstants.A_UID /* uid */);
Expand Down Expand Up @@ -117,7 +118,7 @@ static ParseMimeMessage.InviteParserResult parseInviteRaw(Account account, Eleme
* @return
* @throws ServiceException
*/
static ParseMimeMessage.InviteParserResult parseInviteForCreate(
static InviteParserResult parseInviteForCreate(
Account account,
MailItem.Type type,
Element inviteElem,
Expand Down Expand Up @@ -152,7 +153,7 @@ static ParseMimeMessage.InviteParserResult parseInviteForCreate(

String summaryStr = create.getName() != null ? create.getName() : "";

ParseMimeMessage.InviteParserResult toRet = new ParseMimeMessage.InviteParserResult();
InviteParserResult toRet = new InviteParserResult();
toRet.mCal = iCal;
toRet.mUid = create.getUid();
toRet.mSummary = summaryStr;
Expand All @@ -169,7 +170,7 @@ private static String parseInviteChanges(Element inviteElem) {
else return null;
}

static ParseMimeMessage.InviteParserResult parseInviteForCreateException(
static InviteParserResult parseInviteForCreateException(
Account account,
MailItem.Type type,
Element inviteElem,
Expand Down Expand Up @@ -214,7 +215,7 @@ static ParseMimeMessage.InviteParserResult parseInviteForCreateException(

String summaryStr = create.getName() != null ? create.getName() : "";

ParseMimeMessage.InviteParserResult toRet = new ParseMimeMessage.InviteParserResult();
InviteParserResult toRet = new InviteParserResult();
toRet.mCal = iCal;
toRet.mUid = create.getUid();
toRet.mSummary = summaryStr;
Expand All @@ -231,7 +232,7 @@ static ParseMimeMessage.InviteParserResult parseInviteForCreateException(
* @return
* @throws ServiceException
*/
static ParseMimeMessage.InviteParserResult parseInviteForModify(
static InviteParserResult parseInviteForModify(
Account account,
MailItem.Type type,
Element inviteElem,
Expand Down Expand Up @@ -305,7 +306,7 @@ static ParseMimeMessage.InviteParserResult parseInviteForModify(
summaryStr = mod.getName();
}

ParseMimeMessage.InviteParserResult toRet = new ParseMimeMessage.InviteParserResult();
InviteParserResult toRet = new InviteParserResult();
toRet.mCal = iCal;
toRet.mUid = mod.getUid();
toRet.mSummary = summaryStr;
Expand All @@ -314,7 +315,7 @@ static ParseMimeMessage.InviteParserResult parseInviteForModify(
return toRet;
}

static ParseMimeMessage.InviteParserResult parseInviteForCancel(
static InviteParserResult parseInviteForCancel(
Account account,
Folder folder,
MailItem.Type type,
Expand Down Expand Up @@ -356,7 +357,7 @@ static ParseMimeMessage.InviteParserResult parseInviteForCancel(

String summaryStr = sanitized.getName() != null ? sanitized.getName() : "";

ParseMimeMessage.InviteParserResult toRet = new ParseMimeMessage.InviteParserResult();
InviteParserResult toRet = new InviteParserResult();
toRet.mCal = iCal;
toRet.mUid = sanitized.getUid();
toRet.mSummary = summaryStr;
Expand All @@ -365,7 +366,7 @@ static ParseMimeMessage.InviteParserResult parseInviteForCancel(
return toRet;
}

static ParseMimeMessage.InviteParserResult parseInviteForAddInvite(
static InviteParserResult parseInviteForAddInvite(
Account account, MailItem.Type type, Element inviteElem, TimeZoneMap tzMap)
throws ServiceException {
if (tzMap == null) tzMap = new TimeZoneMap(Util.getAccountTimeZone(account));
Expand All @@ -386,7 +387,7 @@ static ParseMimeMessage.InviteParserResult parseInviteForAddInvite(

String summaryStr = inv.getName() != null ? inv.getName() : "";

ParseMimeMessage.InviteParserResult toRet = new ParseMimeMessage.InviteParserResult();
InviteParserResult toRet = new InviteParserResult();
toRet.mCal = iCal;
toRet.mUid = inv.getUid();
toRet.mSummary = summaryStr;
Expand All @@ -395,7 +396,7 @@ static ParseMimeMessage.InviteParserResult parseInviteForAddInvite(
return toRet;
}

static ParseMimeMessage.InviteParserResult parseInviteForCounter(
static InviteParserResult parseInviteForCounter(
Account account, Invite oldInvite, MailItem.Type type, Element inviteElem)
throws ServiceException {
TimeZoneMap tzMap = new TimeZoneMap(Util.getAccountTimeZone(account));
Expand Down Expand Up @@ -465,7 +466,7 @@ static ParseMimeMessage.InviteParserResult parseInviteForCounter(

String summaryStr = inv.getName() != null ? inv.getName() : "";

ParseMimeMessage.InviteParserResult toRet = new ParseMimeMessage.InviteParserResult();
InviteParserResult toRet = new InviteParserResult();
toRet.mCal = iCal;
toRet.mUid = inv.getUid();
toRet.mSummary = summaryStr;
Expand All @@ -474,7 +475,7 @@ static ParseMimeMessage.InviteParserResult parseInviteForCounter(
return toRet;
}

static ParseMimeMessage.InviteParserResult parseInviteForDeclineCounter(
static InviteParserResult parseInviteForDeclineCounter(
Account account, MailItem.Type type, Element inviteElem) throws ServiceException {
TimeZoneMap tzMap = new TimeZoneMap(Util.getAccountTimeZone(account));
Invite inv = new Invite(ICalTok.DECLINECOUNTER.toString(), tzMap, false);
Expand All @@ -500,7 +501,7 @@ static ParseMimeMessage.InviteParserResult parseInviteForDeclineCounter(

String summaryStr = inv.getName() != null ? inv.getName() : "";

ParseMimeMessage.InviteParserResult toRet = new ParseMimeMessage.InviteParserResult();
InviteParserResult toRet = new InviteParserResult();
toRet.mCal = iCal;
toRet.mUid = inv.getUid();
toRet.mSummary = summaryStr;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

package com.zimbra.cs.service.mail;

import com.zimbra.cs.service.mail.message.parser.ParseMimeMessage;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

package com.zimbra.cs.service.mail;

import com.zimbra.cs.service.mail.message.parser.InviteParserResult;
import java.util.Map;

import com.zimbra.common.service.ServiceException;
Expand All @@ -22,14 +23,14 @@

public class CounterCalendarItem extends CalendarRequest {

private class InviteParser extends ParseMimeMessage.InviteParser {
private class InviteParser extends com.zimbra.cs.service.mail.message.parser.InviteParser {
private Invite mInv;

InviteParser(Invite inv) {
mInv = inv;
}

public ParseMimeMessage.InviteParserResult parseInviteElement(
public InviteParserResult parseInviteElement(
ZimbraSoapContext lc, OperationContext octxt, Account account, Element inviteElem)
throws ServiceException {
return CalendarUtils.parseInviteForCounter(account, mInv, getItemType(), inviteElem);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
import com.zimbra.cs.mailbox.MailServiceException;
import com.zimbra.cs.mailbox.Mailbox;
import com.zimbra.cs.mailbox.OperationContext;
import com.zimbra.cs.service.mail.message.parser.InviteParser;
import com.zimbra.cs.service.mail.message.parser.InviteParserResult;
import com.zimbra.cs.service.util.ItemId;
import com.zimbra.cs.service.util.ItemIdFormatter;
import com.zimbra.soap.ZimbraSoapContext;
Expand Down Expand Up @@ -46,8 +48,8 @@ protected String[] getResponseItemPath() {
}

// very simple: generate a new UID and send a REQUEST
protected class CreateCalendarItemInviteParser extends ParseMimeMessage.InviteParser {
public ParseMimeMessage.InviteParserResult parseInviteElement(
protected class CreateCalendarItemInviteParser extends InviteParser {
public InviteParserResult parseInviteElement(
ZimbraSoapContext lc, OperationContext octxt, Account account, Element inviteElem)
throws ServiceException {
return CalendarUtils.parseInviteForCreate(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

package com.zimbra.cs.service.mail;

import com.zimbra.cs.service.mail.message.parser.InviteParser;
import com.zimbra.cs.service.mail.message.parser.InviteParserResult;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
Expand All @@ -31,7 +33,7 @@

public class CreateCalendarItemException extends CalendarRequest {

protected class CreateCalendarItemExceptionInviteParser extends ParseMimeMessage.InviteParser {
protected class CreateCalendarItemExceptionInviteParser extends InviteParser {
private String mUid;
private Invite mDefaultInvite;
private MailSendQueue sendQueue;
Expand All @@ -43,9 +45,9 @@ protected class CreateCalendarItemExceptionInviteParser extends ParseMimeMessage
}

@Override
public ParseMimeMessage.InviteParserResult parseInviteElement(ZimbraSoapContext zsc, OperationContext octxt,
public InviteParserResult parseInviteElement(ZimbraSoapContext zsc, OperationContext octxt,
Account account, Element inviteElem) throws ServiceException {
ParseMimeMessage.InviteParserResult toRet = CalendarUtils.parseInviteForCreateException(
InviteParserResult toRet = CalendarUtils.parseInviteForCreateException(
account, getItemType(), inviteElem, (mDefaultInvite.getTimeZoneMap() != null ) ?
mDefaultInvite.getTimeZoneMap().clone() : null, mUid, mDefaultInvite);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

package com.zimbra.cs.service.mail;

import com.zimbra.cs.service.mail.message.parser.InviteParserResult;
import java.util.Map;

import com.zimbra.common.service.ServiceException;
Expand All @@ -18,8 +19,8 @@

public class DeclineCounterCalendarItem extends CalendarRequest {

private class InviteParser extends ParseMimeMessage.InviteParser {
public ParseMimeMessage.InviteParserResult parseInviteElement(
private class InviteParser extends com.zimbra.cs.service.mail.message.parser.InviteParser {
public InviteParserResult parseInviteElement(
ZimbraSoapContext lc, OperationContext octxt, Account account, Element inviteElem)
throws ServiceException {
return CalendarUtils.parseInviteForDeclineCounter(account, getItemType(), inviteElem);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
import com.zimbra.cs.mailbox.OperationContext;
import com.zimbra.cs.mailbox.calendar.Invite;
import com.zimbra.cs.mime.MimeVisitor;
import com.zimbra.cs.service.mail.message.parser.MimeMessageData;
import com.zimbra.cs.service.mail.message.parser.ParseMimeMessage;
import com.zimbra.cs.service.util.ItemId;
import com.zimbra.soap.ZimbraSoapContext;
import java.io.IOException;
Expand Down Expand Up @@ -55,7 +57,7 @@ public Element handle(Element request, Map<String, Object> context) throws Servi
}

Element msgElem = request.getElement(MailConstants.E_MSG);
ParseMimeMessage.MimeMessageData parsedMessageData = new ParseMimeMessage.MimeMessageData();
MimeMessageData parsedMessageData = new MimeMessageData();
MimeMessage mmFwdWrapper =
ParseMimeMessage.parseMimeMsgSoap(
zsc,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@
import com.zimbra.cs.mailbox.calendar.RecurId;
import com.zimbra.cs.mailbox.calendar.ZOrganizer;
import com.zimbra.cs.mime.MimeVisitor;
import com.zimbra.cs.service.mail.message.parser.MimeMessageData;
import com.zimbra.cs.service.mail.message.parser.ParseMimeMessage;
import com.zimbra.cs.service.util.ItemId;
import com.zimbra.cs.util.AccountUtil;
import com.zimbra.soap.ZimbraSoapContext;
Expand Down Expand Up @@ -74,7 +76,7 @@ public Element handle(Element request, Map<String, Object> context) throws Servi
}

Element msgElem = request.getElement(MailConstants.E_MSG);
ParseMimeMessage.MimeMessageData parsedMessageData = new ParseMimeMessage.MimeMessageData();
MimeMessageData parsedMessageData = new MimeMessageData();
MimeMessage mm =
ParseMimeMessage.parseMimeMsgSoap(
zsc,
Expand Down
Loading

0 comments on commit d9114e5

Please sign in to comment.