public static RightsManagedMessageItem ReBind(MessageItem item, OutboundConversionOptions options, bool acquireLicense) { Util.ThrowOnNullArgument(item, "item"); Util.ThrowOnNullArgument(options, "options"); StoreSession storeSession = item.Session ?? ((item.CoreItem.TopLevelItem != null) ? item.CoreItem.TopLevelItem.Session : null); if (storeSession == null) { throw new ArgumentException("Cannot use ReBind() for in-memory message.", "item"); } RightsManagedMessageItem.CheckSession(storeSession); if (!item.IsRestricted) { throw new ArgumentException("Only protected messages can be used for ReBind()"); } RightsManagedMessageItem result; using (DisposeGuard disposeGuard = default(DisposeGuard)) { RightsManagedMessageItem rightsManagedMessageItem = new RightsManagedMessageItem(new CoreItemWrapper(item.CoreItem)); disposeGuard.Add <RightsManagedMessageItem>(rightsManagedMessageItem); rightsManagedMessageItem.Decode(options, acquireLicense); disposeGuard.Success(); rightsManagedMessageItem.originalItem = item; result = rightsManagedMessageItem; } return(result); }
public bool Decode(OutboundConversionOptions options, bool acquireLicense) { this.CheckDisposed("Decode"); Util.ThrowOnNullArgument(options, "options"); this.decryptionStatus = RightsManagedMessageDecryptionStatus.Success; if (this.decodedItem != null) { return(true); } if (this.InternalSession == null) { this.decryptionStatus = RightsManagedMessageDecryptionStatus.NotSupported; throw new InvalidOperationException("Decoding of in-memory messages is not supported."); } RightsManagedMessageItem.CheckSession(this.InternalSession); this.SetConversionOptions(options); using (DisposeGuard disposeGuard = default(DisposeGuard)) { try { MessageItem messageItem = ItemConversion.OpenRestrictedContent(this, this.orgId, acquireLicense, out this.licenseAcquired, out this.useLicenseValue, out this.restrictionInfo); if (messageItem == null) { ExTraceGlobals.StorageTracer.TraceError(0L, "Failed to decode protected message - no user license is present."); throw new RightsManagementPermanentException(RightsManagementFailureCode.UnknownFailure, ServerStrings.GenericFailureRMDecryption); } disposeGuard.Add <MessageItem>(messageItem); this.UpdateEffectiveRights(); this.conversationOwner = new Participant(this.restrictionInfo.ConversationOwner, this.restrictionInfo.ConversationOwner, "SMTP"); this.CheckPermission(ContentRight.View); messageItem.CoreItem.TopLevelItem = (base.CoreItem.TopLevelItem ?? base.CoreItem); this.serverUseLicense = (messageItem.TryGetProperty(MessageItemSchema.DRMServerLicense) as string); this.publishLicense = (messageItem.TryGetProperty(MessageItemSchema.DrmPublishLicense) as string); this.rmsTemplate = RmsTemplate.CreateFromPublishLicense(this.publishLicense); MsgToRpMsgConverter.CallRM(delegate { this.publishedByExternalRMS = !RmsClientManager.IsPublishedByOrganizationRMS(this.orgId, this.publishLicense); }, ServerStrings.FailedToCheckPublishLicenseOwnership(this.orgId.ToString())); this.decodedItem = messageItem; disposeGuard.Success(); } catch (RightsManagementPermanentException exception) { this.decryptionStatus = RightsManagedMessageDecryptionStatus.CreateFromException(exception); throw; } catch (RightsManagementTransientException exception2) { this.decryptionStatus = RightsManagedMessageDecryptionStatus.CreateFromException(exception2); throw; } } return(true); }
public static RightsManagedMessageItem Bind(MailboxSession session, StoreId messageId, OutboundConversionOptions options, bool acquireLicense, ICollection <PropertyDefinition> propsToReturn) { Util.ThrowOnNullArgument(session, "session"); Util.ThrowOnNullArgument(messageId, "messageId"); Util.ThrowOnNullArgument(options, "options"); RightsManagedMessageItem.CheckSession(session); RightsManagedMessageItem rightsManagedMessageItem = null; using (DisposeGuard disposeGuard = default(DisposeGuard)) { rightsManagedMessageItem = ItemBuilder.ItemBind <RightsManagedMessageItem>(session, messageId, RightsManagedMessageItemSchema.Instance, propsToReturn); disposeGuard.Add <RightsManagedMessageItem>(rightsManagedMessageItem); rightsManagedMessageItem.Decode(options, acquireLicense); disposeGuard.Success(); } return(rightsManagedMessageItem); }
public static RightsManagedMessageItem CreateFromInMemory(MessageItem item, MailboxSession session, StoreId destFolderId, OutboundConversionOptions options) { Util.ThrowOnNullArgument(item, "item"); Util.ThrowOnNullArgument(session, "session"); Util.ThrowOnNullArgument(destFolderId, "destFolderId"); Util.ThrowOnNullArgument(options, "options"); RightsManagedMessageItem.CheckSession(session); if (item.Session != null) { throw new InvalidOperationException("Item should be in-memory, not backed by store."); } RightsManagedMessageItem result; using (DisposeGuard disposeGuard = default(DisposeGuard)) { RightsManagedMessageItem rightsManagedMessageItem = RightsManagedMessageItem.Create(session, destFolderId, options); disposeGuard.Add <RightsManagedMessageItem>(rightsManagedMessageItem); RightsManagedMessageItem.CopyProtectableData(item, rightsManagedMessageItem.decodedItem); foreach (NativeStorePropertyDefinition nativeStorePropertyDefinition in item.AllNativeProperties) { if (!Body.BodyPropSet.Contains(nativeStorePropertyDefinition) && nativeStorePropertyDefinition != StoreObjectSchema.ContentClass) { object obj = item.TryGetProperty(nativeStorePropertyDefinition); if (!(obj is PropertyError)) { rightsManagedMessageItem[nativeStorePropertyDefinition] = obj; } else if (PropertyError.IsPropertyValueTooBig(obj)) { using (Stream stream = item.OpenPropertyStream(nativeStorePropertyDefinition, PropertyOpenMode.ReadOnly)) { using (Stream stream2 = rightsManagedMessageItem.OpenPropertyStream(nativeStorePropertyDefinition, PropertyOpenMode.Create)) { Util.StreamHandler.CopyStreamData(stream, stream2); } } } } } rightsManagedMessageItem.Recipients.CopyRecipientsFrom(item.Recipients); rightsManagedMessageItem.SaveFlags |= (PropertyBagSaveFlags.IgnoreMapiComputedErrors | PropertyBagSaveFlags.IgnoreUnresolvedHeaders); disposeGuard.Success(); result = rightsManagedMessageItem; } return(result); }
public static RightsManagedMessageItem Create(MailboxSession session, StoreId destFolderId, OutboundConversionOptions options) { Util.ThrowOnNullArgument(session, "session"); Util.ThrowOnNullArgument(destFolderId, "destFolderId"); Util.ThrowOnNullArgument(options, "options"); RightsManagedMessageItem.CheckSession(session); RightsManagedMessageItem rightsManagedMessageItem = null; using (DisposeGuard disposeGuard = default(DisposeGuard)) { rightsManagedMessageItem = ItemBuilder.CreateNewItem <RightsManagedMessageItem>(session, destFolderId, ItemCreateInfo.RightsManagedMessageItemInfo, CreateMessageType.Normal); disposeGuard.Add <RightsManagedMessageItem>(rightsManagedMessageItem); rightsManagedMessageItem[InternalSchema.ItemClass] = "IPM.Note"; rightsManagedMessageItem.InitNewItem(options); rightsManagedMessageItem.SetDefaultEnvelopeBody(null); disposeGuard.Success(); } return(rightsManagedMessageItem); }
public static RightsManagedMessageItem Create(MessageItem item, OutboundConversionOptions options) { Util.ThrowOnNullArgument(item, "item"); Util.ThrowOnNullArgument(options, "options"); RightsManagedMessageItem.CheckSession(item.Session); RightsManagedMessageItem result; using (DisposeGuard disposeGuard = default(DisposeGuard)) { RightsManagedMessageItem rightsManagedMessageItem = new RightsManagedMessageItem(new CoreItemWrapper(item.CoreItem)); disposeGuard.Add <RightsManagedMessageItem>(rightsManagedMessageItem); rightsManagedMessageItem.InitNewItem(options); RightsManagedMessageItem.CopyProtectableData(item, rightsManagedMessageItem.decodedItem); rightsManagedMessageItem.SetDefaultEnvelopeBody(null); disposeGuard.Success(); rightsManagedMessageItem.originalItem = item; result = rightsManagedMessageItem; } return(result); }