Skip to content

Commit

Permalink
fix: empty calendar.json and upload of cal in zip format (#321)
Browse files Browse the repository at this point in the history
* fix: UserServletTest return calendars

- Reintroduce query of user calendars in case of appointments

* fix: UserServletTest allow upload of zip file

- Reintroduce upload of calendar in archive format (zip)
- Check after upload calendar is not empty

* chore: add missing .zip resource

- add .zip resource for test

---------

Co-authored-by: Davide Frison <davide.frison@zextras.com>

ref:  [CO-833]
  • Loading branch information
keshavbhatt authored Sep 8, 2023
1 parent 2485376 commit e6dc2b6
Show file tree
Hide file tree
Showing 7 changed files with 472 additions and 79 deletions.
1 change: 1 addition & 0 deletions store/ant-store.xml
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@
<copy todir="${basedir}/build/zimbra/conf/" file="${basedir}/../store-conf/conf/log4j.properties"/>
<copy todir="${basedir}/build/zimbra/conf/" file="${basedir}/../store-conf/conf/antisamy.xml"/>
<copy todir="${basedir}/build/zimbra/conf/" file="${basedir}/../store-conf/conf/owasp_policy.xml"/>
<copy todir="${basedir}/build/zimbra/conf/" file="${basedir}/../store-conf/conf/contacts/contact-fields.xml"/>
</target>

<target name="generate-getters" description="generate methods for attributes in attrs.xml">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
import com.google.common.cache.CacheBuilder;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.zimbra.common.calendar.ZCalendar.ZCalendarBuilder;
import com.zimbra.common.calendar.ZCalendar.ZICalendarParseHandler;
import com.zimbra.common.calendar.ZCalendar.ZVCalendar;
import com.zimbra.common.localconfig.LC;
import com.zimbra.common.mailbox.ContactConstants;
import com.zimbra.common.service.ServiceException;
Expand Down Expand Up @@ -39,6 +42,7 @@
import com.zimbra.cs.mailbox.MailServiceException.ExportPeriodNotSpecifiedException;
import com.zimbra.cs.mailbox.MailServiceException.ExportPeriodTooLongException;
import com.zimbra.cs.mailbox.Mailbox;
import com.zimbra.cs.mailbox.Mailbox.SetCalendarItemData;
import com.zimbra.cs.mailbox.MailboxMaintenance;
import com.zimbra.cs.mailbox.MailboxManager;
import com.zimbra.cs.mailbox.Message;
Expand All @@ -47,6 +51,9 @@
import com.zimbra.cs.mailbox.OperationContext;
import com.zimbra.cs.mailbox.SearchFolder;
import com.zimbra.cs.mailbox.Tag;
import com.zimbra.cs.mailbox.calendar.IcsImportParseHandler;
import com.zimbra.cs.mailbox.calendar.IcsImportParseHandler.ImportInviteVisitor;
import com.zimbra.cs.mailbox.calendar.Invite;
import com.zimbra.cs.mime.Mime;
import com.zimbra.cs.mime.ParsedContact;
import com.zimbra.cs.mime.ParsedMessage;
Expand Down Expand Up @@ -1311,7 +1318,64 @@ private void addItem(

switch (mi.getType()) {
case APPOINTMENT:
CalendarItem ci = (CalendarItem) mi;

fldr = createPath(context, fmap, path, MailItem.Type.APPOINTMENT);
if (!root || r != Resolve.Reset) {
CalendarItem oldCI = null;

try {
oldCI = mbox.getCalendarItemByUid(octxt, ci.getUid());
} catch (Exception e) {
}
if (oldCI != null && r == Resolve.Replace) {
mbox.delete(octxt, oldCI.getId(), oldCI.getType());
} else {
oldItem = oldCI;
}
}
if (oldItem == null || r != Resolve.Skip) {
CalendarItem.AlarmData ad = ci.getAlarmData();
byte[] data = readArchiveEntry(ais, aie);
Map<Integer, MimeMessage> blobMimeMsgMap =
data == null ? null : CalendarItem.decomposeBlob(data);
SetCalendarItemData defScid = new SetCalendarItemData();
SetCalendarItemData exceptionScids[] = null;
Invite invs[] = ci.getInvites();
MimeMessage mm;

if (invs != null && invs.length > 0) {
defScid.invite = invs[0];
if (blobMimeMsgMap != null
&& (mm = blobMimeMsgMap.get(defScid.invite.getMailItemId())) != null) {
defScid.message = new ParsedMessage(mm, mbox.attachmentsIndexingEnabled());
}
if (invs.length > 1) {
exceptionScids = new SetCalendarItemData[invs.length - 1];
for (int i = 1; i < invs.length; i++) {
SetCalendarItemData scid = new SetCalendarItemData();

scid.invite = invs[i];
if (blobMimeMsgMap != null
&& (mm = blobMimeMsgMap.get(defScid.invite.getMailItemId())) != null) {
scid.message = new ParsedMessage(mm, mbox.attachmentsIndexingEnabled());
}
exceptionScids[i - 1] = scid;
}
}
newItem =
mbox.setCalendarItem(
octxt,
oldItem != null && r == Resolve.Modify ? oldItem.getFolderId() : fldr.getId(),
ci.getFlagBitmask(),
ci.getTags(),
defScid,
exceptionScids,
ci.getAllReplies(),
ad == null ? CalendarItem.NEXT_ALARM_KEEP_CURRENT : ad.getNextAt());
}
}
break;
case CHAT:
Chat chat = (Chat) mi;
byte[] content = readArchiveEntry(ais, aie);
Expand Down Expand Up @@ -1725,6 +1789,28 @@ private void addData(
}
switch (type) {
case APPOINTMENT:
boolean continueOnError = context.ignoreAndContinueOnError();
boolean preserveExistingAlarms = context.preserveAlarms();
InputStream is = ais.getInputStream();

try {
if (aie.getSize() <= LC.calendar_ics_import_full_parse_max_size.intValue()) {
List<ZVCalendar> icals = ZCalendarBuilder.buildMulti(is, UTF8);
ImportInviteVisitor visitor =
new ImportInviteVisitor(oc, fldr, preserveExistingAlarms);

Invite.createFromCalendar(
context.targetAccount, null, icals, true, continueOnError, visitor);
} else {
ZICalendarParseHandler handler =
new IcsImportParseHandler(
oc, context.targetAccount, fldr, continueOnError, preserveExistingAlarms);
ZCalendarBuilder.parse(is, UTF8, handler);
}
} finally {
is.close();
}
break;
case CONTACT:
if (file.endsWith(".csv")) {
reader = new BufferedReader(new InputStreamReader(ais.getInputStream(), UTF8));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,8 @@ protected Collection<? extends MailItem> getMailItemsFromFolder(
throws ServiceException {
switch (folder.getDefaultView()) {
case APPOINTMENT:
return context.targetMailbox.getCalendarItemsForRange(
context.opContext, startTime, endTime, folder.getId(), null);
case CONTACT:
return context.targetMailbox.getContactList(
context.opContext, folder.getId(), SortBy.NAME_ASC);
Expand Down
Loading

0 comments on commit e6dc2b6

Please sign in to comment.