public void AddSharedCalendar() { using (SharingMessageItem requestItem = base.GetRequestItem <SharingMessageItem>(new PropertyDefinition[0])) { if (requestItem == null || !requestItem.SharingMessageType.IsInvitationOrAcceptOfRequest || requestItem.SharedFolderType != DefaultFolderType.Calendar) { throw new OwaInvalidRequestException("Not a calendar sharing message"); } this.ValidateSharingAction(SharingAction.AddCalendar, requestItem); SubscribeResults subscribeResults = null; try { subscribeResults = requestItem.SubscribeAndOpen(); } catch (NotSupportedWithMailboxVersionException) { throw new OwaInvalidRequestException("Your account isn't set up to allow calendars to be added from the Internet."); } catch (StoragePermanentException ex) { string message = string.Format("Unable to subscribe shared calendar folder. Exception {0}", ex.Message); ExTraceGlobals.CalendarCallTracer.TraceDebug(0L, message); this.RenderSubscriptionError(ex); return; } if (subscribeResults is SubscribeResultsInternal) { SubscribeResultsInternal subscribeResultsInternal = (SubscribeResultsInternal)subscribeResults; string text = StoreEntryId.TryParseMailboxLegacyDN(subscribeResultsInternal.RemoteMailboxId); ExchangePrincipal exchangePrincipal; if (base.UserContext.DelegateSessionManager.TryGetExchangePrincipal(text, out exchangePrincipal)) { try { if (requestItem.IsSharedFolderPrimary) { if (!string.Equals(text, base.UserContext.MailboxOwnerLegacyDN, StringComparison.OrdinalIgnoreCase)) { NavigationNodeCollection.AddGSCalendarToSharedFoldersGroup(base.UserContext, exchangePrincipal); } } else { using (OwaStoreObjectIdSessionHandle owaStoreObjectIdSessionHandle = new OwaStoreObjectIdSessionHandle(exchangePrincipal, base.UserContext)) { OwaStoreObjectId folderId = OwaStoreObjectId.CreateFromSessionFolderId(base.UserContext, owaStoreObjectIdSessionHandle.Session, subscribeResultsInternal.RemoteFolderId); using (Folder folder = Utilities.GetFolder <Folder>(base.UserContext, folderId, FolderList.FolderTreeQueryProperties)) { if (!Utilities.CanReadItemInFolder(folder)) { this.RenderNotFoundResponse(); return; } NavigationNodeCollection.AddNonMailFolderToSharedFoldersGroup(base.UserContext, folder, NavigationNodeGroupSection.Calendar); } } } goto IL_1A2; } catch (OwaSharedFromOlderVersionException) { this.RenderSharedFromE12Response(); return; } catch (ObjectNotFoundException) { this.RenderNotFoundResponse(); return; } } this.RenderNotFoundResponse(); return; } if (subscribeResults is SubscribeResultsExternal) { OwaStoreObjectId folderId = OwaStoreObjectId.CreateFromMailboxFolderId(((SubscribeResultsExternal)subscribeResults).LocalFolderId); } IL_1A2: this.RenderChangeKey(requestItem); ExDateTime now = ExDateTime.GetNow(base.UserContext.TimeZone); this.Writer.Write("<div id=\"subInfo\">"); this.Writer.Write(SanitizedHtmlString.Format(LocalizedStrings.GetHtmlEncoded(388258761), new object[] { now.ToString(base.UserContext.UserOptions.DateFormat), now.ToString(base.UserContext.UserOptions.TimeFormat) })); this.Writer.Write("</div>"); RenderingUtilities.RenderNavigationTreeDirtyFlag(this.Writer, base.UserContext, NavigationTreeDirtyFlag.Calendar, new NavigationModule[] { NavigationModule.Calendar }); } }
protected override SubscribeResults InternalPerformSubscribe(MailboxSession mailboxSession, SharingContext context) { NetID netID = new NetID(context.MailboxId); long num = checked ((long)netID.ToUInt64()); if (num == 0L) { throw new InvalidOperationException("Invitation does not contain the owner ID."); } Guid guid; if (!Guid.TryParse(context.FolderEwsId, out guid)) { throw new InvalidOperationException("Invitation does not contain the calendar ID."); } using (Folder folder = Folder.Bind(mailboxSession, DefaultFolderType.Root)) { StoreObjectId defaultFolderId = mailboxSession.GetDefaultFolderId(DefaultFolderType.DeletedItems); QueryFilter queryFilter = QueryFilter.AndTogether(new QueryFilter[] { new ComparisonFilter(ComparisonOperator.Equal, CalendarFolderSchema.ConsumerCalendarGuid, guid), new ComparisonFilter(ComparisonOperator.Equal, CalendarFolderSchema.ConsumerCalendarOwnerId, num) }); using (IQueryResult queryResult = folder.IFolderQuery(FolderQueryFlags.DeepTraversal, queryFilter, null, new PropertyDefinition[] { FolderSchema.Id, FolderSchema.DisplayName, StoreObjectSchema.ParentItemId })) { bool flag = true; while (flag) { object[][] rows = queryResult.GetRows(100, out flag); if (rows == null || rows.Length == 0) { break; } foreach (object[] array2 in rows) { StoreObjectId storeObjectId = StoreId.GetStoreObjectId((StoreId)array2[2]); if (!defaultFolderId.Equals(storeObjectId)) { return(new SubscribeResults(context.DataType, context.InitiatorSmtpAddress, context.InitiatorName, context.FolderName, StoreId.GetStoreObjectId((StoreId)rows[0][0]), false, (string)rows[0][1])); } } } } } SubscribeResults result; using (CalendarFolder calendarFolder = CalendarFolder.Create(mailboxSession, mailboxSession.GetDefaultFolderId(DefaultFolderType.Root), StoreObjectType.CalendarFolder)) { calendarFolder[FolderSchema.ExtendedFolderFlags] = (ExtendedFolderFlags.SharedIn | ExtendedFolderFlags.ExclusivelyBound | ExtendedFolderFlags.ExchangeConsumerShareFolder); calendarFolder.DisplayName = (context.FolderName ?? context.InitiatorSmtpAddress); calendarFolder.ConsumerCalendarGuid = guid; calendarFolder.ConsumerCalendarOwnerId = num; calendarFolder.SaveWithUniqueDisplayName(50); calendarFolder.Load(); result = new SubscribeResults(context.DataType, context.InitiatorSmtpAddress, context.InitiatorName, context.FolderName, StoreId.GetStoreObjectId(calendarFolder.Id), true, calendarFolder.DisplayName); } return(result); }